目標檢測(九)——YOLO v3
YOLOv3: An Incremental Improvement
從上邊的圖片中就可以看出,YOLO v3最主要的提升網路的就算速度。YOLOv3能在22毫秒內完成處理,並取得28.2mAP的成績。它的精度和SSD相當,但速度要快上3倍。 但是整體模型也變得複雜不少。
創新點
邊界框的預測
與之前yolo版本一樣,yolov3的anchor boxes也是通過聚類的方法得到的。yolov3對每個bounding box預測四個座標值,對於預測的cell(一幅圖劃分成S×S個網格cell)根據影象左上角的偏移
在訓練這幾個座標值的時候採用了sum of squared error loss(平方和距離誤差損失),因為這種方式的誤差可以很快的計算出來。
分類預測
作者使用二元交叉熵損失來代替softmax進行預測類別,這個選擇有助於把YOLO用於更復雜的領域。Open Images Dataset V4資料集中包含了大量重疊的標籤(如女性和人)。如果用的是softmax,它會強加一個假設,使得每個框只包含一個類別。但通常情況下這樣做是不妥的,相比之下,多標記的分類方法能更好地模擬資料。
函式 | 均方差 | 二元交叉熵損失 |
---|---|---|
公式 | ||
函式更新梯度的絕對值 |
通過梯度絕對值對比能夠發現
這個最小值0.25,就是斜率y′y′的最小值,直接對y′=y(1−y)=y−y2y′=y(1−y)=y−y2求導等於0,就可以發現y=12y=12的時候斜率最小,為0.25。而且,從sigmoidsigmoid函式可以發現,對於均方差MSE損失,輸出越大,梯度越小。比如當真實標註為00的時候,y=σ(wh+b)y=σ(wh+b)越大,sigmoid的值越大,但是sigmoid的梯度越小,這也就導致了的梯度大(因為沒sigmoid導數這一項),但是的梯度小(因為乘以了sigmoid較遠的非常小的梯度)。
具體細節可以檢視——損失函式梯度對比-均方差和交叉熵
跨尺寸預測
YOLOv3提供了3種尺寸不一的邊界框。用相似的FPN(feature pyramid network)網路提取這些尺寸的特徵,以形成金字塔形網路。在基本特徵提取器中增加了幾個卷積層,並用最後的卷積層預測一個三維張量編碼:邊界框、框中目標和分類預測。在COCO資料集實驗中,神經網路分別為每種尺寸各預測了3個邊界框,所以得到的張量是N ×N ×[3∗(4+ 1+ 80)],其中包含4個邊界框offset、1個目標預測以及80種分類預測。
接著,從前兩個圖層中得到特徵圖,並對它進行2次上取樣。再從網路更早的圖層中獲得特徵圖,用element-wise把高低兩種解析度的特徵圖連線到一起。這樣做能使找到早期特徵對映中的上取樣特徵和細粒度特徵,並獲得更有意義的語義資訊。之後,新增幾個卷積層來處理這個特徵對映組合,並最終預測出一個相似的、大小是原先兩倍的張量。 用同樣的網路設計來預測邊界框的最終尺寸,這個過程其實也有助於分類預測,因為可以從早期影象中篩選出更精細的特徵。
和上一版一樣,YOLOv3使用的聚類方法還是K-Means,它能用來確定邊界框的先驗。在實驗中,選擇了9個聚類和3個尺寸,然後在不同尺寸的邊界框上均勻分割維度聚類。在COCO資料集上,這9個聚類分別是:(10×13)、(16×30)、(33×23)、(30×61)、(62×45)、(59×119)、(116 × 90)、(156 × 198)、(373 × 326)。
特徵提取器
這次用了一個新的網路來提取特徵,它融合了YOLOv2、Darknet-19以及其他新型殘差網路,由連續的3×3和1×1卷積層組合而成,當然,其中也添加了一些shortcut connection,整體體量也更大。因為一共有53個卷積層,所以稱它為 Darknet-53!
這個新型網路在效能上遠超Darknet-19,但在效率上同樣優於ResNet-101和ResNet-152。下表是在ImageNet上的實驗結果:
每個網路都使用相同的設定進行訓練,輸入256×256的圖片,並進行單精度測試。執行環境為Titan X。得出的結論是Darknet-53在精度上可以與最先進的分類器相媲美,同時它的浮點運算更少,速度也更快。和ResNet-101相比,Darknet-53的速度是前者的1.5倍;而ResNet-152和它效能相似,但用時卻是它的2倍以上。
Darknet-53也可以實現每秒最高的測量浮點運算。這意味著網路結構可以更好地利用GPU,使其預測效率更高,速度更快。這主要是因為ResNets的層數太多,效率不高。
失敗嘗試
1. Anchor box座標的偏移預測。
嘗試了常規的Anchor box預測方法,比如利用線性啟用將座標x、y的偏移程度預測為邊界框寬度或高度的倍數。但發現這種做法降低了模型的穩定性,且效果不佳。
2. 用線性方法預測x,y,而不是使用邏輯方法。
嘗試使用線性啟用來直接預測x,y的offset,而不是邏輯啟用。這降低了mAP成績。
3. focal loss。
嘗試使用focal loss,但它使的mAP降低了2點。 對於focal loss函式試圖解決的問題,YOLOv3從理論上來說已經很強大了,因為它具有單獨的物件預測和條件類別預測。因此,對於大多數例子來說,類別預測沒有損失?或者其他的東西?並不完全確定。
4. 雙IOU閾值和真值分配。
在訓練期間,Faster RCNN用了兩個IOU閾值,如果預測的邊框與.7的ground truth重合,那它是個正面的結果;如果在[.3—.7]之間,則忽略;如果和.3的ground truth重合,那它就是個負面的結果。嘗試了這種思路,但效果並不好。