在训练模型后,我们如何扩大深度学习的课程数量?

数据挖掘 机器学习 神经网络 分类 深度学习
2021-09-27 04:06:23

我已经为人脸识别应用程序训练了一个深度学习模型。该模型已针对画廊中的现有主题(或称其为类)进行了训练。现在考虑现实世界的问题,画廊的大小是动态的,因为要注册新学科,深度学习如何解决这些类型的问题?我已经尝试过迁移学习,还有其他技术吗?

1个回答

从图像中进行人脸识别仍然是一个开放的研究领域。已经尝试了许多不同的技术。

一种方法不是直接将人的身份作为类来学习,而是学习人脸图像的多维嵌入(例如 128 维向量)并训练网络以使该嵌入值更接近于相同的两个不同图像人而不是不同人的两张图像*。

您可以使用网络为每个注册的人生成特征向量,并存储这些值。稍后当您想识别某人时,找到最接近的人(根据差异规范),如果距离小于某个截止值,您可以认为它是匹配的。

要在考虑到这个目标的情况下执行嵌入的训练,您可以使用称为三元组损失的损失函数,该函数一次训练 3 次前向传递。网络计算锚图像、正匹配(即同一人脸的另一张图像,因此每个人至少需要 2 个,并且它们应该取自不同的上下文)和负匹配的特征向量。然后它测量来自同一个人的特征之间的距离是否小于不同人之间的距离。要表达的损失函数如下所示:

max(0,|AP|2|AN|2+α)

. . . 在哪里A是锚图像的特征向量,P对于正匹配图像,以及N对于负匹配图像。参数α是一个超参数,它创建一个“余量”,您可以奖励模型在不同身份之间进行维护。这个想法是,如果不同人的图像在特征空间中明显比截止点更远,则该训练示例的损失为零。该模型不会因为非常大的差异而获得奖励,只是具有“足够一致的距离”。

三元组损失的棘手之处在于选择用于训练的样本。纯粹的随机样本会使网络的任务变得过于简单。您需要将注意力集中在更困难的案例上,以防止错误的身份。这样做的一种方法是从更近的人脸中优先选择,例如使用 k-means 聚类并在自己的聚类中选择负例。

该模型可以在大量面孔上进行训练,不一定是您以后想要分类的面孔。关键是要学习一个强调面部之间重要差异的特征向量(理想情况下忽略其他变化,如照明、背景、姿势)。可以从任何图像分类器开始并对其进行调整以适应此任务,包括您的原始人脸分类器(只需删除最终的分类器层并使用后来的全连接层之一作为您的输出)。

在训练模型后,我们如何扩大深度学习的课程数量?

这种方法可能不适用于您的问题标题涵盖的所有情况。我根据Coursera 的 CNN 课程推荐了它用于人脸识别,其中一些讲座和编码作业专门针对人脸识别。

在某些情况下,您最好使用新的训练集数据重新构建和重新训练模型,并通过新类的示例进行增强 - 您可以从仅微调最后几层开始。


* 事实上,在许多 CNN 分类器中都会出现这种情况,但如果您已明确训练网络以区分一般身份(而不是仅对特定身份进行分类),则更有可能可靠地与一个人的身份相关联。三元组损失方法是训练有用表示的一种方法,并使消除身份歧义的目标变得明确。