1

DL、ML筆記(15):yolo v2

 3 years ago
source link: https://panchuang.net/2021/09/18/dl%e3%80%81ml%e7%ad%86%e8%a8%9815%ef%bc%9ayolo-v2-2/
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筆記(15):yolo v2

fendouai • 2021年9月18日 am5:03 • Medium

YOLO v2為YOLO v1的改進版本,其採用了當前最新及先前的多種技術,希望在提高速度的同時維持一定的精準度,與更快的R-cnn及固态硬盘擁有相同檢測效果的狀態下,卻擁有相當快檢測速度。

其中可以分為三個部分介紹,更好:使檢測效果更好,更快:使網路速度更加快速,更强:使模型可以使用多個DataSet,並擁有更細緻的標籤類別,以下分別以三個部分介紹:

批量归一化

Batch Normalization是將特徵縮放,將前一層的Output標準化後再轉至下一層,通過標準化特徵,可以使收斂速度更快,並且減少内部协变量移位問題。

内部协变量偏移:神經網路為多層結構,而每一層網路在訓練時皆使權重更新產生變化,這也會造成數據的分布逐漸改變,因此每一層網路還需要根據改變的數據分布再多加調整,再訓練時需要更加謹慎設定學習率及初始權重等其餘因素。

在網路中還會有激活函数、假如無批量归一化、内部协变量移位可能會使每層激活函数輸出皆作用於飽和區,使輸出逐漸變為常數,該層輸出無效。

批次标准化公式如下:

其意義即為計算當前資料之均值(μ)及方差(σ),將資料正規化.但除了正規化,還有γβ這兩個參數,其為模型的權重,由於已將資料進行正規化,其可能造成資料的特徵消失,因此再加入可學習之均值(β)及方差(γ),使網路學習調整資料分布.

高分辨率分类器

以往的Detector會先在ImageNet預訓練後,再在目標DataSet上FINE TUNE,而這兩次訓練使用的影像尺寸會不相同,預訓練會使用較小的尺寸,FINE TUNE會使用較大的尺寸(YOLOv1预训练:224,FINE TUNE:448)。但影像尺寸不同會使網路需要再適應尺寸的改變,因此YOLOV2在預訓練後,改變尺寸再訓練少許大纪元,使網路適應目標尺寸後再精调。

带锚箱的卷积

在YOLOv1中,輸入圖像為448×448、YOLOv2更改為416×416、由於網路會經過多次縮減(池化)、使用448會使輸出Size為14×14、擁有四個中心小区(5層池化)、而使用416可以使輸出Size為13×13、中心小区只有一個。其更改原因為物體較常出現於圖片中央,因此需要確保中心单元格只有一個、中心单元格有四個時較難分配哪一個单元格用來預測中央物體、YOLOv1輸出7×7的网格也是此原因。

YOLOv2相較YOLOv1減少一層Pooling層用來保留較高的解析度,並且將YOLOv1中的全連接層移除,使用卷积代替,這樣可以使特徵保留位置訊息,使位置預測問題較為單純.

YOLOv2參考快速R-cnn,將網路更改為锚基方法,使模型可以擁有更多預測框,會造成MAP些微下降,但可以提高召回。並更改包围盒參數,使每個锚定預測自己的類別(类)(YOLOv1兩個包围盒共享一個物體類別)。

YOLOv2轉換回锚基方法後,需要設定锚的大小,在更快的R-CNN中,锚尺寸是根據經驗(手動)設定的,再經過網路訓練調整大小,但一開始就根據數據取得與數據相匹配的锚,可以使模型更好訓練及預測效果更佳,因此YOLOv2使用K-Means對數據的包围盒聚類,取得之前的锚大小。

欧几里德K-均值(但使用標準的Distance來評估各數據間的差異)會使得較大的框會有較大的誤差,因此較大的框在聚類時的群體會較小,而小框的群體較大.但目標與框的大小無關(大小框需產生相同誤差),因此使用欠条來定義數據間的差異:

可以不同的K值(聚類類別數量)來評估數據需要聚類,一樣使用IOU計算,聚類數量越多,IOU誤差越小,但考慮模型複雜度及Recall,作者選擇K=5時有較平衡的效果。

聚類結果可以發現多數主播為長型的,且與更快的R-cnn比較,使用5種主播就可以與更快的R-cnn的9個主播效果相當。

直接位置预测

YOLOv2更該為锚基方法後,會遇到一個問題,模型在訓練初期會不穩定,而這主要是因為包围盒座標(x,y)預測的因素。在Ficker R-cnn的rpn中,網路直接預測包围盒座標,且不給予位置的限制,包围盒可以出現在圖片中所有位置,之後再回归包围盒,公式如下:

此公式為YOLOv2中所寫的,但其中公式與更快的R-CNN有些差異,在更快的R-CNN中公式如下:

需要將YOLOv2中Xa更改為加號即相同.YOLOv2不使用直接預測的方法,而是跟YOLOv1相同的方式,边界框座標(x,y)是由該网格单元位置加上偏移量計算取得,如下圖所示:

並且將偏移量經過Sigmoid,限制輸出範圍至[0,1],歸一化也可以使訓練更穩定.

细粒度要素

由於經過多層卷积及池,會使得檢測的解析度越來越低,使得檢測小物體更加困難,因此YOLOv2加入一層穿透层,將特徵重新排列(26x26x512>13x13x2048),用來保留較高解析度的特徵。

多规模培训

由於網路皆是卷积,因此可以改變輸入圖片的尺寸。YOLOv2在Fine Tune時使用不同尺寸的圖片進行訓練,每訓練10個Batch就會改變圖片尺寸,由於網路中有五層DownSamples,因此圖片的尺寸為32的倍數即可,YOLOv2使用{320352,…,608}等尺寸。

這種訓練方式可以使網路對不同解析度的圖片進行檢測,雖然在圖片大小較大時,訓練較慢,但可以提高準確率,在速度及準確率取得平衡。

暗网-19

YOLOv2提出了一個新的分类模型,與VGG16有些雷同.網路中參考的方法,在中的网络3×3卷积中間使用1×1卷积來壓縮特徵,並提高非線性組合。在分类模型的最後使用全球平均池進行預測,可以減少原始使用全連接層的參數量,並且避免因為權重過多產生的过拟合。

多项式速率衰减可以避免在訓練後期因為學習率過小網路卡在局部最小值的狀況,提高學習率跳出局部最小值。

YOLOv2將分类模型調整為检测模型,去除最後一層卷积,改為3×3卷积,並且加入通层。

YOLOv2改進部分

YOLOv2採用了多個改進方法,逐步提升檢測效果

YOLOv2效果

更强大(YOLO 9000)

YOLOv2提出了一個融合检测及分类数据集的訓練方法,使檢測模型擁有更細緻的標籤。

在检测数据集中,物體的標籤通常是較為廣義,而分类数据集的標籤則會較為細緻,就如“狗”,但狗還有許多品種(“柯基”、“柴犬”、等),而我們需要這兩種標籤同時存在,因此分类数据集的標籤需要經過一些轉換。

检测常用的预训练数据集Imagenet、其標籤是由wordnet中取得、wordnet為語言庫,其建構名詞間的關係,因為名詞為相互關係,非樹狀結構,如下圖:

因此作者將其修改,改建立樹狀結構,每個名詞僅一個根,如有多條路徑,則選擇最短路徑,變為多階層結構,並且可以使用條件機率來進行標籤的分類,如下圖:

轉變為WordTree後,會針對每個節點進行SoftMAX,選擇最單一節點,階層式分類語意類別.

数据集与WordTree的组合

將分类数据集的標籤轉換為字树結構後,就可以將检测及分类数据集進行融合,變成完整的字树,如下圖:

联合分类检测

當使用检测数据集進行訓練時,會使用完整的Loss來反向传播;當使用分类数据集時,就只使用與分类相關的Loss來更新網路。

而對於物體類別,則是取與標籤相對應的损失進行反向传播、假如標籤為“狗”,則只考慮到標籤“狗”的损失、而不考慮“柯基”或是“柴犬”的损失。

YOLOv2優缺點

  • 輸出网格為奇數,可由正中心預測物體
  • 使用多種方案(Batch Normize、高分辨率分类器),使檢測效果更佳
  • 改為锚基方法,檢測框更穩定
  • 使用通过层,融合較高解析度之特徵
  • 多尺度訓練,使探测器適應圖片解析度變化
  • 可以融合檢測及分類數據集(YOLO9000),多層級預測标签
  • 小物體效果依然較差
  • YOLO9000之訓練方法效果依然差(MAP:19.7MAP)

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK