多人种人脸识别(二)

由于自己完全无法适应CSDN的富文本编辑模式ε=ε=ε=┏(゜ロ゜;)┛,实在是用不来,所以“多人种人脸识别“的第二部分转战Markdown编辑器

PyTorch的关键应用

BN层的使用

BN层的优点主要有以下几点:

  1. 加快训练速度,这样我们就可以使用较大的学习率来训练网络
  2. 提高网络的泛化能力,这样就可以减少dropout和正则化的使用
  3. BN层本质上是一个归一化网络层,可以替代局部响应归一化层(LRN层)。
  4. 可以打乱样本训练顺序(这样就不可能出现同一张照片被多次选择用来训练)论文中提到可以提高1%的精度。

BN层的位置:
BN层一般位于**层之前(目的是为了让**层的值更加稳定),在FC层或ConV层之后
多人种人脸识别(二)
BN层的具体实现:
BN层如果放在全连接层后面,则是对全连接层里面每个batch的属性进行计算;如果放在卷积层之后,则一般对channel进行,在tensorflow中可以指定,对哪一维(一般情况不出意外都是axis=channel),而在Pytroch是不用指定可以默认进行的。
多人种人脸识别(二)

PyTorch中的模型加载

如今,迁移学习的思想在各种领域都有很多应用,而在人脸识别领域也不例外,使用迁移学习,这里只说最基本的迁移学习方法,用别人与训练好的best_checkpoint加载进自己的模型,往往可以在短时间内使得自己的模型取得十分好的效果
Torch中加载当前模型的方法

指令 解释
torch.load 比较通用的一种方法,既可以加载整个模型,也可以只加载参数
net.load_state_dict 只加载参数,他的参数可以为torch.load也可以为model_zoo.load_url
torchvision.load 最简单易用的一种模型
model_zoo.load_url 根据model_zoo进行加载

另外,pytorch还提供了灵活的预加载方法,可以自己大调或微调模型,原来的预训练模型仍然可以使用。

人脸识别中的两种损失

在本项目中含有两类损失,因为是要衡量两种人脸的相似度,所以有一个用来衡量相似度的损失,这里直接调用的是ArcFaceloss,另一个loss则就是用来进行训练的loss,这里调用的是focalLoss。