【发布时间】:2019-12-15 22:41:46
【问题描述】:
一段时间以来,我对此感到有些困惑。当FaceNet 在图像上运行时,它会在欧几里得空间/L2 中返回一个 128 元素数组(即使这是我没有完全得到的东西)。我曾想过,也许这种嵌入可用于预测具有三元组损失的人脸。
我的问题是:我可以使用这种嵌入来计算三重损失之类的东西吗?如果是这样,它是如何完成的?我是否减去一个与另一个相对应的元素,例如:
arr = [] #supposed new embedding after difference is calculated
for i in range(0,128):
j = b[i] - a[i]
arr.append[j]
这是怎么做的,我可以用它进行面部识别吗?
如果此处不合适,请移至正确的论坛。
【问题讨论】:
-
它会相当简单吧?您为嵌入之间的距离(通常是余弦距离)设置阈值范围,如果它在阈值范围内,则它相同,如果超出阈值,则它们相距甚远且不同。
-
是的,但它是否像所有嵌入的每个元素一样?在技术层面上如何计算距离?在使用这种架构训练系统期间,距离看起来几乎是任意的。一些嵌入,即使它们是正锚,也可能是正确的?所以权重被优化以使正数更接近?
-
我想让你尝试一下,获取一组具有相似和不同面孔的样本图像的所有嵌入(例如一个 numpy 数组),计算叉积,即一个与所有余弦距离的嵌入。看看结果吧,可能会让你更好的理解。到目前为止,在我的例子中,我计算了嵌入并取余弦距离,得到了相当准确的结果。
-
我会去的!我会在弄清楚这一点后立即报告并在答案中发布结果。我会问我是否对任何技术感到困惑
-
等等,我该怎么做呢?我是否将 FaceNet 嵌入初始化为一个变量,然后使用这些变量计算余弦损失?
标签: python machine-learning computer-vision euclidean-distance facial-identification