重新利用CNN进行一次性学习
2022年2月8日整理发布:许多计算机视觉问题的关键问题之一是您没有很多标记图像来训练您的神经网络。例如,一个经典的面部识别算法必须在同一个人的许多图像上进行训练才能识别她。
想象一下这对国际机场使用的面部识别系统意味着什么。您将需要可能通过该机场的每个人的几张图像,这可能达到数十亿张图像。除了几乎不可能收集到这样的数据集之外,集中存储人脸的想法将是一场隐私噩梦。
这就是一次性学习发挥作用的地方。一次性学习不是将任务视为分类问题,而是将其转变为差异评估问题。
当深度学习模型被调整为一次性学习时,它需要两张图像(例如,护照图像和正在看相机的人的图像)并返回一个值,该值显示了两张图像之间的相似性。如果图像包含相同的对象(或相同的脸),则神经网络返回一个小于特定阈值(例如零)的值,如果它们不是相同的对象,它将高于阈值。
Siamese 神经网络和三元组损失函数
一次性学习的关键是一种称为“连体神经网络”的架构。本质上,Siamese 神经网络与其他卷积神经网络没有太大区别。它将图像作为输入并将其特征编码为一组数字。不同之处在于输出处理。
在训练阶段,经典的 CNN 会调整它们的参数,以便它们可以将每个图像与其适当的类别相关联。另一方面,连体神经网络训练能够测量两个输入图像中特征之间的距离。
为了实现这个目标,我们使用了一个名为“triplet loss”的函数。基本上,triplet loss 通过给神经网络三个图像来训练它:锚图像、正图像和负图像。神经网络必须调整其参数,使锚点和正图像的特征编码值非常接近,而负图像的特征编码值非常不同。
希望通过足够的训练示例,神经网络将开发出一种配置,可以比较 APN trios 之间的高级特征。例如,在面部识别示例中,经过训练的连体神经网络应该能够比较两幅图像的面部特征,例如眼睛、鼻子和嘴巴之间的距离。
训练 Siamese 网络仍然需要相当大的 APN trios 集。但是创建训练数据比需要标记每个图像的经典数据集要容易得多。假设您有一个包含两个人的 20 张面部图像的数据集,这意味着您每人有 10 张图像。您可以从此数据集生成 1,800 个 APN 三重奏。(您使用每个人的 10 张图片创建 10×9 AP 对,并将其与剩余的 10 张图片组合创建总共 10x9x10x2 = 1800 个 APN trios)
使用 30 张图像,您可以创建 5,400 个三重奏,使用 100 张图像,您可以创建 81,000 个 APN。理想情况下,您的数据集应该具有多样性的人脸图像,以便更好地概括不同的特征。另一个好主意是使用先前训练的卷积神经网络并对其进行微调以进行一次性学习。这个过程称为迁移学习,是一种减少训练新网络的成本和时间的有效方法。
一旦 Siamese 网络经过训练,如果你向它提供两张新的人脸图像(例如,护照和相机输入),它应该能够告诉你它们是否足够相似以至于不是同一个人。
因此,您不再需要在世界上所有的面孔上训练您的面部识别深度学习模型。