3

DL、ML筆記(14):yolo v1

 3 years ago
source link: https://panchuang.net/2021/09/14/dl%e3%80%81ml%e7%ad%86%e8%a8%9814%ef%bc%9ayolo-v1/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

DL、ML筆記(14):yolo v1

fendouai • 2021年9月14日 am5:05 • Medium

以往常見的物體檢測方法是將檢測視為一個分類問題,第一階段使用区域建议找出物體可能之位置,接著再交由分類器分类器對局部區域分類,區分物體或背景。

而這篇論文,作者將物體檢測視為一個回归問題,只使用一個神經網路進行一次計算來直接預測物體位置及物體類別.

以下為YOLO纸张中敘述:

First, YOLO is extremely fast. Since we frame detection as a regression problem we don’t need a complex pipeline.

其中有幾個優點:

Yolo可以分為兩個部分,第一部分預測物體包围盒和置信度,找出物體位置,第二部分為物體的類別,將圖片分割SxS的网格,同時預測物體位置及物體類別。

物體包围盒和置信度

當物體的中心點位於某個網格中,這個網格就負責預測此物體,如下圖:

每個包围盒有五個參數:框的中心(X,Y)、框的長寬(W,H)、框的可信度置信度。框的中心(X,Y)是相對於該网格单元格的座標位置,非圖片之整體座標。框的長寬(W,H)則是相對於整張圖片的尺寸.信心為該网格单元《是否有物體之機率“及”物體預測及Ground Truth間IOU》的乘積:

  • 如果在該信元中無物體,置信度則為0(Pr(对象)=0)
  • 假如有物體(PR(对象)=1),置信度就是借条分數。其表示預測之包围盒與地面真实包围盒的吻合程度。當完全吻合時,借条=1。

物體类别概率图

类概率图則是對整張圖片進行類別預測,每個网格单元格會預測出一種類別pr(类|对象)。只要該CELL與物體有交集,則該CELL之類別即歸類為該物體對應之類別.其概念與图像分割雷同,只是密度較低,將圖片以网格单元為單位預測圖片類別。

綜合包围盒、置信度及类概率图,即可以完成目标检测,形成一個端到端&One Stage的物體檢測架構。

在訓練時,每個包围盒會有X,Y,W,H,置信度,分类概率。而在測試時,會將包围盒置信度及物體類別分數相乘,得到特定類別之可信度分數,此分數就會同時代表“該類別在框中的機率”及“框吻合物體的程度”,計算如下:

Yolo最後綜合輸出之张量結構為S x S x(B*5+C),S x S為网格单元數量,B為每個单元預測包围盒之數量,C為物體類別數量.YOLO使用PASCAL VOC数据集,S=7,B=2,C=20,因此輸出张量為7x7x30,圖片示意如下:

受到googleNet的啟發,yolo之網路架構中包含24層卷积层及2層全连接层。但不使用GoogleNet中初始模块,單純使用1×1层對網路特徵壓縮後在接3×3卷积层。Fast Yolo則是在將網路層減少,換取更快的速度。

Yolo使用和平方误差,但這種計算方式並不能完全符合最大化MAP的目標。其原因為位置誤差及類別誤差擁有相同的權重,但並不一定符合現況.在檢測時也會有网格单元格中無任何物體的狀況,這會造成边界框置信度趨向於0。

因此yolo針對這些狀況進行加權,加強“座標誤差”的比重及減少“無物體包围盒誤差”的比重,yolo設定λcoord=5及λnoobj=0.5.

而包围盒有大小差別之分,和平方误差會使較大物體在計算誤差時擁有較大權重,因此對座標誤差(X,Y,W,H)取平方根,平衡此現象。

YOLO在預測時會產生多個框,因此誤差計算只選擇與地面真相擁有最高欠条的預測包围盒。

模型訓練培训

YOLO取前20層卷积层,並在網路後方加上Average-Pooling及Full Connected Layer,並在ImageNet1000類的DataSet上進行預訓練,此時輸入圖片大小為224×224.

使用完整YOLO架構,並隨機初始化未訓練過的權重,並將輸入圖片尺寸改為448×448。最後一層激活函数使用线性激活函数,其餘皆是使用Leaky REU,Leaky REU公式如下:

對於边界框,根據圖片的長寬正規化边界框的W,H至[0,1]的範圍,而边界框的X,Y則是根據其所在网格单元的偏移量,並且也正規化至[0,1]。

訓練細節:

EPOCH=135EPOCH批量大小=64、动量=0.9EPOCH=0.0005、学习速率=10-2(0~75 EPOCH)、10-3(~105EPOCH)、10-4(~135EPOCH)

資料擴增:

  • 圖片隨機縮放原始圖片的20%
  • 隨機調整圖片的亮度及飽和度(1.5倍,HSV色彩空間)

模型測試推理

基于由於YOLO會輸出多個框,但並不會像分类器的方法產生大量的框,在較大的框時,預測結果才較容易輸出多個重疊框,但使用NMS(Non-Maximum Supperssion)還是可以提高2~3%MAP。

  • yolo一次只會產生兩個包围盒及一個类,因此對於群體集中的狀況(例如:鳥群),預測效果不佳
  • 由於Yolo使用較高維的特徵及從數據中學習預測,因此模型較難泛化至長寬比較為極端的狀況
  • 計算Lost時不會受到框的大小影響,而較小的框對IOU的影響程度較高,因此位置誤差為Loss佔比較高的部分.

友乐測試結果

  • YOLO是一個簡易結構的模型並且使用整張圖片進行預測的模型(端到端模型)
  • 基于與其他分类器的模型不同,yolo直接使用损失函数對整個模型進行訓練
  • FAST YOLO是個快速且通用的模型
  • YOLO在实时目标检测是SOTA模型
  • 網路架構中有全連接層,位置資訊可能混亂,位置誤差較大
  • 只有2個候選框,速度快但Recall較低
  • 小物體及重疊物體檢測效果較差
  • 缺乏锚定先驗,長寬比較為極端的情況下,檢測效果較差

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/09/14/dl%e3%80%81ml%e7%ad%86%e8%a8%9814%ef%bc%9ayolo-v1/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK