[深度学习进阶 - 实操笔记]Arc-face人脸识别

ArcFace人脸识别实操

这里我使用这个链接下面的源码:github:Arc-Face-pytorch源码

1. 数据准备

(1)训练数据集:

① 使用和源代码相同的数据集:CASIA-WebFace
② 首先要对数据进行清洗。CASIA-WebFace 整个数据集有4.1GB,但是其中存在一些不清晰或者有问题的数据。可以通过网上整理的干净图片列表(cleaned_list.txt)自己进行整理。
CASIA-WebFace数据集:谷歌云
③ 标签:这里要自己生成标签txt。标签格式为:图片路径 类别。(有多少个人就有多少种类别)

(2)测试训练集:

① 使用 lfw-align-128 数据集 里面包括5000多个人的照片。
② 标签包 lfw_test_pair.txt,标签的格式为:人脸A 人脸B 标签。(A/B的图片路径,对应上面的数据集,以及是否为同一个人,1为同一个人,0为不是一个人)

2. 网络结构

主要有多个小模块拼接起来。这里代码里面有多个子块可以供选择 。源代码是用resnet的结构,插入子块来设计的网络结构。我也只是粗略看了下网络结构,没有详细了解。如果要自己架构网络结构训练,我看了大神的解读。这里有大神模型架构的详细步骤。里面也有训练集、清洗数据的文本、测试集等下载的途径。
IRBlock、SEBlock、Bottleneck……
输入结构为:N * 1 * 128 * 128
输出结构为:N * 512
其中N代表图片数量。512为一张人脸的特征图。

3. 损失设计

① 损失函数使用了FacalLoss函数。就是让模型更加关注困难样本。当然也可以更换成其他损失函数设计。
② 度量函数,Additional Margin Metric Loss。我的理解是,这里判别两张照片是否是同一个人的并不是简单通过概率得到的。而是给定判断的一个Margin,即有一个间隔将各类别划分开了。使得训练更加困难,模型就会训练得更好。

4. 训练模型

(1)模型得训练主要关注一些参数设置,数据集存放的位置,模型选择,优化器选择,学习率,训练批次,保存权重的间隔批次,每次训练的batch_size。
(2)模型提供了多种Resnet框架。
(3)1050Ti的渣渣GPU配置,每轮训练要用3个小时。一天下来也才训练了4轮。
(4)在学习率高的时候,loss会出现nan……降低学习率以及学习批次。
(5)用tensorboard,关注各层网络的权重,损失的变化。每轮结束时测试一下测试集的精度。

5. 测试

步骤:
(1)计算测试数据中每张图片的特征图。(这里得到的特征图是1024,使用一张图片左右翻转,通过网络得到两个512特征向量,然后合并成1024)
(2)将每张照片按照路径:特征,存入特征字典中。
(3)输入一张图片,同样的方式得到特征,与字典里的每一个特征做余弦相似计算。根据设置阈值的大小,判别图片是否为同一个人。

  • 3
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值