介绍
YOLO目标检测创新改进与实战案例专栏
专栏目录: YOLO有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例
专栏链接: YOLO基础解析+创新改进+实战案例
摘要
近年来,基于深度学习的人脸检测算法取得了很大进展。这些算法一般可以分为两类,即像 Faster R-CNN 这样的两阶段检测器和像 YOLO 这样的单阶段检测器。由于在准确性和速度之间更好的平衡,单阶段检测器已在许多应用中得到广泛使用。在本文中,我们提出了一种基于单阶段检测器 YOLOv5 的实时人脸检测器,名为 YOLO-FaceV2。我们设计了一个称为 RFE(感受野增强)模块来增强小人脸的感受野,并使用 NWD 损失来弥补 IoU 对微小物体位置偏差的敏感性。对于人脸遮挡问题,我们提出了一个名为 SEAM 的注意力模块,并引入排斥损失来解决。此外,我们使用一个权重函数 Slide 来解决简单和困难样本之间的不平衡,并利用有效感受野的信息设计了锚点。在 WiderFace 数据集上的实验结果表明,我们的人脸检测器在所有的简单、中等和困难子集上均优于 YOLO 及其变体。源码地址:https://github.com/Krasjet-Yu/YOLO-FaceV2
文章链接
论文地址:论文地址
代码地址:代码地址
基本原理
Slide Loss旨在解决易样本和难样本之间的不平衡问题。该损失函数根据预测框和真实框之间的IoU大小区分易样本和难样本,并通过一个称为Slide的加权函数来赋予难样本更高的权重。Slide函数的设计使得模型能够更好地优化那些处于边界的样本,并更充分地利用这些样本来训练网络,从而提高模型对难样本的关注度。
Slide Loss的公式如下所示:
$$ f(x) = \begin{cases} 1 & x \leq \mu - 0.1 \\ e^{\frac{1-\mu}{x}} & \mu < x < \mu - 0.1 \\ e^{\frac{1-x}{\mu}} & x \geq \mu \end{cases} $$
其中,$x$ 是IoU值,$\mu$ 是阈值参数,用于区分易样本和难样本。
核心代码
```py
import math
class SlideLoss(nn.Module):
def __init__(self, loss_fcn):
super(SlideLoss, self).__init__()
self.loss_fcn = loss_fcn
self.reduction = loss_fcn.reduction
self.loss_fcn.reduction = 'none' # required to apply SL to each element
def forward(self, pred, true, auto_iou=0.5):
loss = self.loss_fcn(pred, true)
if auto_iou < 0.2:
auto_iou = 0.2
b1 = true <= auto_iou - 0.1
a1 = 1.0
b2 = (true > (auto_iou - 0.1)) & (true < auto_iou)
a2 = math.exp(1.0 - auto_iou)
b3 = true >= auto_iou
a3 = torch.exp(-(true - 1.0))
modulating_weight = a1 * b1 + a2 * b2 + a3 * b3
loss *= modulating_weight
if self.reduction == 'mean':
return loss.mean()
elif self.reduction == 'sum':
return loss.sum()
else: # 'none'
return loss
task与yaml配置
详见:https://blog.csdn.net/shangyanaf/article/details/139483941