anchor方法:
代替滑窗方法取到目標周圍可能的目標框
通過將真實標注、認為正確的坐標框與預測的結果進行對比、計算損失,損失包括目標類別、目標框位置、特征圖相應位置是否有目標,通過將三者的損失進行加權求和反向傳播,反向傳播求出每一層權重對形成這些誤差的貢獻(偏導),並進行權重糾正。
在訓練時的損失計算:
目標類別損失,如果訓練圖像中有target,則找到target的類別,特征圖中找到對應圖像索引、對應網格位置的信息,如該網格處對應的類別信息,將網格對應的類別信息與target類別信息進行交叉熵計算求得損失(變換target中的類別格式,使與prediction的類別格式相同,除了正樣本的,其余都應該標志為負樣本)。
目標框坐標回歸損失,如果訓練圖像中有target,則找到target的類別,特征圖中找到對應圖像索引、對應網格位置的信息,把網格坐標進行回歸(激活函數和anchor處理)與target坐標框計算iou,(1-iou)作為目標框回歸損失。
特征圖相應位置是否有目標損失,已知模型輸出的特征圖尺寸,將target初始化為特征圖obiness尺寸,然后根據真實target的目標所在img_index, anchor,網格位置,將重新賦值的target的位置賦值為與預測框相應的iou值,其余值為0,與預測結果的objness計算交叉熵損失。
objness存在的意義是為了區別正樣本和負樣本兩種大類,增加模型的泛化能力,不因修改了背景就誤檢。
clsness是為了區別具體的正樣本的眾多類別
boxness是為了更新權重、使坐標回歸
以上以yolov5為例
anchor free 方法:
模型輸出特征圖與原圖尺寸相差倍數較小,通過特征圖映射原圖,特征圖上的每個點位置視為目標中心點,每個點的值用於判斷是否有目標,特征圖所在通道決定目標所屬類別。另起額外的分支用來判斷目標中心的偏移量和寬高。
以centernet為例,圖像從backbone出來后,經過三個分支class(64->80),wh(64->2),xy(64->2),需要計算類別損失、目標框寬高損失、目標點中心坐標偏移量損失。
損失計算:
目標類別損失,centernet將原圖中target bbox的中點映射到heatmap中的某一高斯核區域內,高斯核中心位置,賦值為1,次中心位置賦值依次遞減,然后利用focal loss(按照類別,即通道)計算損失
其中為網絡輸出的heatmap,為
ground_truth信息
目標寬高損失,將target bbox的寬高信息按照該映射關系,等同地映射到Height&Width特征圖中,利用L1Loss計算損失
目標點中心坐標偏移量損失,類別損失的特征圖代表中心點坐標,通過計算偏移量損失准確目標中心點位置。將target bbox的偏移信息等同地映射到Offset特征圖中,利用L1Loss計算損失
總結:
anchor和anchor free方法,候選目標框的選取和設定、類別判斷方法不同,使最后使用的損失函數不同,從而達到最后功能完善。
anchor free方法中截取的圖像參考網址:
https://zhuanlan.zhihu.com/p/187577938