Please enable JavaScript.
Coggle requires JavaScript to display documents.
DETR(2020) - Coggle Diagram
DETR(2020)
组件
设置预测
-
原理
- 通过全局推断方案建模所有预测的交互,避免冗余
- 使用匈牙利算法寻常预测是真实的二分匹配,确保排列不变性和目标元素有单一的匹配
-
实现
步骤
- 设定一个固定的大于一般图片中目标的常量N
- 设真实值为y,长度为N,其中有表示目标和补零
- 计算对应一对一index的损失
公式
最小损失公式表示
$$\hat{\sigma} = \mathop{\arg\min} _{\sigma \in \sigma_N} \sum_i^N L_{match}(y_i, \hat{y}_{\sigma(i)})$$
解释
- 匹配计算真实值和预测值对应i的损失
- argmax下面的符号是确保不同最大匹配的不变性
Lmatch
$$-\mathbb{1}_{c_i \neq \varnothing} \hat{p}_{\sigma(i)} (c_i) + \mathbb{1}_{c_i \neq \varnothing} L_{box}(b_i, \hat{b}_{\sigma(i)})$$
解释
- 1是空心1,表示旨在c不为空时才计算损失
- ci是第i个index的label为c,第一部分就是第i个index预测为c的概率
- y和y_hat都分为两部分,第一部分是分类,第二部分是检测狂的xy坐标和长宽
- 目标是为了找到一对一没有重复的匹配
损失函数
$$L_{Hungarian(y, \hat{y})}=
\sum_{i=1}^N[
-\log{\hat{p}_{ \hat{\sigma} (c_i)}}+
\mathbb{1}_{c_i \neq \varnothing}
L_{box}(b_i, \hat{b}_{\hat{\sigma}(i)})]$$
解释
- 这个损失充当了匈牙利算法的角色
- 第一部分为配对分类的损失,当预测不为空时使用softmax(而不是sigmoid)的交叉熵,这样量级和识别框损失相符且效果更好
- 当第一部分预测为空时则用常数10作为损失,有助分类平衡
- 第二部分计算非空的识别框
Lbox
$$\lambda_{iou}L_{iou}(b_i, \hat{b}_{\sigma(i)})+
\lambda_{L1} || b_i - \hat{b}_{\sigma(i)} ||_1 $$
解释
- 因为只用L1 Loss会让大box的小差距和小box的大差距有相似的损失,所以引入了iou损失
- lambda是超参数
Transformer encoder
步骤
- 通过1x1卷积压缩channel数到d(就是step)
- 将2D特征图展开成1D特征图,大小为HW
- 将d*HW的特征图作为输入到encoder
- 将固定的位置编码输入到每层的注意力层
Transformer decoder
步骤
- 确保检测的排列不变性,所以decoder的输入会加入可学习的位置Embedding到每个注意力层,最后得出N个输出
- 其他和普通的Transformer Decoder一样
-
辅助解码损失
概述
decoder每层的输出都经过归一化后分别输入FFNs计算损失,然后反向传播
-
-
优缺点
优点
- 通过去掉非极大值抑制和anchor等后处理过程简化流程
- 执行预测与真实的二分匹配,通过一系列损失函数实现端到端的训练
- 将自然语言处理的Transformer融合到计算机视角中
- 易于扩展到其它更复杂的任务
缺点
- 效果不如目前最好的模型,特别是在小目标上
- 需要更长的训练时间
-