NanoDetectionPlus readme
1.backbone
-
shufflenetv2,后面为什么使用concat,是因为一开始进行了split,后面为了保持通道数和原始一致,所以要使用concat。为了满足四条准则之一。
-
stride=1,stride=2(下采样单元,channel翻倍了),
2.neck
-
GhostPAN ghostblock+PAN ghostblock是基于 ghostbottleneck,PAN就是普通的PAN
-
把普通的PAN的 多尺度融合时的 卷积操作变为的 GhostBlockConv
3.Head
- 四个检测头,分别对多尺度特征图进行 分类和回归操作。得到预测结果
4.AGM+DSLA
-
实质是用AGM+DSLA 得到的结果教导head 进行标签分配的参考。
-
AGM:也是分类和回归
-
DSLA:
-
在DSLA中计算AGM中得到的分类概率和检测框 计算得到 matching cost,然后 动态 K 匹配算法 得到
-
-
首先 根据fm中每个prior 回归到原图中 看是否在gt的bb中,不在则筛除
-
根据AGM送来的分类概率和检测框 和 gt的bb 计算代价矩阵
-
Ccls: GFL损失
-
GFL: FL -> QFL+DFL
-
FL:用于解决 正负样本不平衡
-
基于 二分类交叉熵CE, y真实值 1,-1 p为0-1 预测的前景的概率
-
y=1,p=0.8 pt=0.8 -log(pt)=-log(0.8)=A
-
y=1,p=0.2 pt=0.2 -log(pt)=-log(0.2)=B B>A B损失大于A损失 正确
-
y=-1 背景,p=0.8 pt=0.2 -log(pt)=-log(0.2)=C
-
y=-1 背景,p=0.2 pt=0.8 -log(pt)=-log(0.8)=D C>D 符合优化方向
-
当y为1,p越接近1,损失越小,y为-1,p越接近0,损失越小。
-
标准的交叉熵中所有样本权重相同,若正负样本不均衡,大量简单负样本会占据主导地位,少量的难样本与正样本会起不到作用,导致精度变差。
-
故FL( -(1-pt)的gamma次方 log(pt) )出现,增加 (1-pt)的gama次方,控制难易样本权重,目的是通过减少 易分样本的权重,从而使得 模型在训练中 更加专注难样本的学习。
-
若y=1,p较小=0.2难样本,则pt=0.2, 1-pt就很大
-
若y=1, p=0.8为易样本,则 pt=0.8, 1-pt就很小,
-
若y=-1, p=0.2,则pt=0.8, 1-pt=0.2
-
若y=-1, p=0.8 难样本, 则pt=0.2, 1-pt=0.8 就很大
-
2- QFL: FL只支持0/1标签也就是 y=1/-1, 但对于 smooth (比如标签平滑)的 label(分数:0 ~ 1之间)是无能为力的
-
标签平滑:解决过拟合,因为 深度学习中损失函数loss 鼓励模型去接近对应的label,巴不得label为1的时候输出是0.9999.
-
比如交叉熵这类loss,一旦输出有些偏差,loss值就往无穷大走了,但是万一好不容易接近label了,结果这条训练数据是错误的,或者训练数据没有覆盖所有数据类型,那么就会过拟合了。所以就需要 适当调整label,让两端的极值往中间凑凑,可以增加泛化性能
- 所谓平滑,就是把0,1变为两个不那么极端的值,使神经网络训练时可以更加聚类,同时降低了神经网络的自信程度,降低过拟合。
-
故引入 因子(y-σ)的β次方,代替FL的 (1-pt)的γ次方。y 是 smooth 后的label(0~1), σ 是预测结果。
3- DFL: 以更泛化的形式,不需要让获得的分布像狄拉克分布那么极端(只存在标签值),但也在标签值附近。故提出DFL 目的使得网络快速聚焦到标签附近,使标签处的概率密度尽量大,思想是使用交叉熵函数(衡量两个概率之间的差别),来优化标签y附近左右两个位置的概率,
4- GFL: QFL+DFL
-
-
2- Creg: Giou损失
- 交并比
3- Cdis:α的 (xpred-xgt)-β 次方
-
-
-