目標檢測
演算法
-
one stage
直接生成檢測框位置並用回歸
-
two stage
先產生候選的檢測框再,
推論速度較慢
模型結構
- Backbone
- Neck
- Head
實例
YoloV4
-
五個基本組件
- **CBM:**Yolov4网络结构中的最小组件,由Conv+Bn+Mish激活函数三者组成。
- **CBL:**由Conv+Bn+Leaky_relu激活函数三者组成。
- **Res unit:**借鉴Resnet网络中的残差结构,让网络可以构建的更深。
- **CSPX:**借鉴CSPNet网络结构,由卷积层和X个Res unint模块Concate组成。
- **SPP:**采用1×1,5×5,9×9,13×13的最大池化的方式,进行多尺度融合。
-
其他基础操作:
- **Concat:**张量拼接,维度会扩充,和Yolov3中的解释一样,对应于cfg文件中的route操作。
- **add:**张量相加,不会扩充维度,对应于cfg文件中的shortcut操作。
-
輸入端
- Mosaic數據增強:參考CutMix,4张图片,随机缩放、随机裁剪、随机排布的拼接
- 改善小目标(32x32)通常分佈不平均,而且AP通常很低
- 豐富數據
- 減少GPU消耗 (一張正常圖片裡面就有四個小圖片)
- 另一研究者的特別之處
- 如果上一个iteration中,小物体产生的loss不足(比如小于某一个阈值),则下一个iteration就用拼接图;否则就用正常图片训练,也很有意思。
- cmBN
- 傳統方法
- 原始的批歸一化會收集小批量數據內樣本的均值和方差
- 如果小批量數據規模很小,則這些估計結果將具有很高的噪聲。
- 僅收集單個批次內小批量數據之間的統計數據。
- SAT自对抗训练
- 傳統方法
- 我們希望模型直接學習如何好好檢測目標。
- 會在反向傳播過程中調整模型的權重來提升檢測器檢測圖像中目標的能力。
- SAT
- 它會修改圖像,使其能在最大程度上降低檢測器的性能。
- 即創建以當前模型為目標的對抗攻擊——即使新圖像可能在人眼看來與原來的一樣。
- 提高泛化能力
-
BackBone
- CSPDarknet53
- CSPNet:Cross Stage Partial Network
- 解決計算量太大的問題:重複梯度信息太多
- 使用Residual的概念,先将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将它们合并,在减少了计算量的同时可以保证准确率。
- 包含了5個CSP模塊
- CSP模塊就是由CBM+Res unit組成,後面再concat兩條路線
- CSP3代表中間有3個Res unit
- CBM = Conv + BN + Mish(類似ReLU但在原點處圓滑的激活函數)
- Res unit = 好幾個CBM後加上輸入的add
- 使用dropblock
- dropout是隨機去除
- dropblock是隨機挑幾個子區域(2x2)去除
- 參考2017的cutout
- 避免Conv還能從鄰近的格子中獲得資訊
- 训练时以一个小的比率开始,随着训练过程线性的增加这个比率。
- Cutout只能作用于输入层,而Dropblock则是将Cutout应用到网络中的每一个特征图上。
-
Neck
- SPP模塊,FPN+PAN
- SPP
- 使用四條池化路線
- 使用k={1*,*5,*9,*13}的最大池化的方式,再将不同尺度的特征图进行Concat操作。
- 使用padding來使輸出特徵圖size一致好concat
- 比单纯的使用k*k最大池化的方式,更有效的增加主干特征的接收范围,显著的分离了最重要的上下文特征。
- FPN
- Feature Pyramid Network
- 應對multi-scale特徵提取的問題
- 原本用featured image pyramid即每個下採樣後的尺度都輸出prediction,但時空間效率都差
- 結合encoder-decoder概念
- 左邊下採樣金字塔經1x1conv添加到右邊上採樣倒金字塔再經各層輸出prediction
- FPN在此主要指decoder的部分(encoder的部分是backbone)
- 不直接輸出prediction,而是先接到PAN作用層
- PAN
- 借鑑PANet,当时主要应用于图像分割领域
- FPN後添加自下向上的特徵pyramid
- pyramid有三層,所以中間會經過兩個PAN
- 在Bottom-up的過程中將FPN傳過來的特徵圖concat起來
- FPN层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征
-
Head