1. 程式人生 > 其它 >Waymo object detect 2D解決方案論文拓展

Waymo object detect 2D解決方案論文拓展

半監督中的基礎論文,自監督和模型一致性的代表作。

  1. Consistency regularization: 無監督學習的方式,資料\(A\)和經過資料增強的\(A\)計做\(A'\) ,同時輸入模型\(f\) ,由於其種類相同(未知但相同),所以\(f(A)=f(A')\) ,利用分佈相同進行訓練即可。
  2. Pseudo-labeling: 偽標籤,使用人工標註資料集訓練模型\(f\),然後使用此模型去預測未標註資料集,結果使用閾值進行過濾當做未標註資料的標籤。

假設存在資料集 \(D\),有標籤資料集\(D^l\) ,無標籤資料集\(D^u\) ,所以\(D=\{D^l,D^u\}\)

,訓練模型\(f\),訓練步驟如下:

  1. 有標籤的資料直接使用交叉熵loss
  2. 無標籤的資料線進行前向計算得到結果計做\(Result\) ,設定閾值\(T\)\(0 \ \ if \ softmax(Result)>T \ else \ 0\) 製作一個one-hot的label,利用此label進行交叉熵loss計算
  3. 在訓練的初期會經常出現loss為0的情況,因為前期不穩定,無標籤的置信度小於閾值
  4. 這篇論文主要敘述資料增強的作用,閱讀較為簡單

將半監督遷移至目標檢測的論文,訓練步驟:

  1. 使用已標註的資料訓練一個大模型\(f_{large}\)

  2. 使用這個大模型對未標註資料集進行預測,經過NMS,使用置信度閾值進行過濾,獲得\(Pseudo-labeling\)

  3. 如果使用資料增強(幾何變換),需要將label進行對齊

  4. 計算loss即可

2021最新的半監督目標檢測,下面的論文是其中一個模組(Co-rectify)參考論文,以下給出訓練步驟:

  1. 先使用標註影象訓練一個大模型,未標註影象直接使用大模型生成(先進行NMS,後面置信度設定一個閾值進行過濾)
  2. 使用偽標籤訓練模型\(f_a\) ,其中資料使用弱資料增強(RandomFlip)
  3. 使用偽標籤訓練模型\(f_b\),其中資料使用強資料增強(mosaic、mixup等),模型\(f_b\)可以不等於\(f_b\)
  4. 模型 \(f_a\)\(f_b\) 預測的結果進行聯合預測,假設模型\(f_a\)的Head網路為\(head_a\),其他類似。例如模型輸入為 \(data\)\(out_a = f_a(data),out_a'=f_b(data,out_a)\) 其中\(out_a\)為模型\(f_a\)的直接輸出,\(out_a'\)是模型\(f_b\)的Head層輸出(相當於RPN的結果)。最後將兩個結果進行加權平均即可。
\[\left\{\begin{aligned} \left(c_{i}, \mathbf{t}_{i}\right) &=f_{a}\left(\mathbf{x}_{u}\right) \\ \left(c_{i}^{r}, \mathbf{t}_{i}^{r}\right) &=f_{b}\left(\mathbf{x}_{u} ; \mathbf{t}_{i}\right), \\ c_{i}^{*} &=\frac{1}{2}\left(c_{i}+c_{i}^{r}\right), \\ \mathbf{t}_{i}^{*} &=\frac{1}{c_{i}+c_{i}^{r}}\left(\mathbf{t}_{i} c_{i}+\mathbf{t}_{i}^{r} c_{i}^{r}\right) . \end{aligned}\right. \]
  1. loss使用下面的函式表示,監督loss和偽監督loss
\[\begin{aligned} \ell_{u}=& \sum_{u}\left[\frac{1}{N_{c l s}} \sum_{i} L_{c l s}\left(p\left(c_{i} \mid A\left(\mathbf{x}_{u}\right)\right), \hat{c}_{i}^{u}\right)\right.\\ &\left.+\frac{\lambda}{N_{r e g}} \sum_{i}\left(\max \left(c_{i}^{u}\right) \geq \tau\right) L_{r e g}\left(p\left(\mathbf{t}_{i} \mid A\left(\mathbf{x}_{u}\right)\right), \mathbf{t}_{i}^{u}\right)\right] \end{aligned} \]
  • 總結

由於看到Waymo object detect 2D比賽中有人使用此方案,所以才進行探索一下:第二名方案論文。這裡總結一下這個比賽的方案,關於弱監督套路一樣,以上三篇論文完全代表其發展程序了。

  1. 基礎)將手動標註的影象進行訓練,且此模型儘量是大模型(比賽有速度和精度要求,論文使用YoloR)。參賽給的訓練資料集
  2. 基礎)將未標註的影象進行偽標註。參賽給的測試集
  3. 優化)anchor的選擇,由於目標差異比較大(自行車和汽車兩類bbox分佈較為接近、自行車單獨計算),和後面模型結合起來分析
  4. 優化)針對小目標的處理,由於資料在影象中間分佈,所以裁剪之後進行放大,提高小目標的出鏡率
  5. 優化)使用TensorRT進行加速
  6. 優化)針對困難樣本(模糊等),使用弱監督的Co-rectify方案,論文裡面說是 we learn from the self-learning method which use multi-different models check with each other to automatically clean the dataset during the model training process to solve this problem and improve the model performance. 也就僅僅一句話帶過,這裡後面進行拓展說明。
  7. 優化)Model Ensemble,多個模型進行投票。這裡採用不用模型預測不同目標的方式,YOLOR-W6預測車輛和行人,YOLOR-P6預測自行車。

這裡主要說明一下采用的Co-rectify方案(出自Paper),兩個結構相同且引數不同的模型YOLOR-W/P,由於是單階段網路,所以只能直接預測,而不是像原始論文使用Head分支進行。假設模型 \(f_w\)\(f_p\) 預測的結果進行聯合預測。如模型輸入為 \(data\)\(out_w = f_w(data),out_w'=f_b(data)\) 其中\(out_w\)為模型\(f_a\)的直接輸出,\(out_w'\)是模型\(f_b\)的輸出。直接進行加權平均,會使得模型朝著一個方向學習。如原始論文中原文:

The key to the success of co-rectify is that the two models will not converge to the same model. We take two measures to ensure that the two models converge independently.
First, although the two models have the same structure, they use different initialization parameters. Second, although the two models share the same data in each mini-batch, their data augmentations and pseudo annotations are also different.

雖然說兩個模型的引數是不同的,但是此處的目的是去除模糊框,如何做到兩個模型就能去除模糊框?

個人猜測是1)模糊框是少數,大量的資料訓練本身就能去除這類樣本。2)兩個型模同時訓練,會增加網路的魯棒性,畢竟每個網路都有自己擅長的點(不同目標的檢測精度不同),聯合之後各取所長吧。