iT邦幫忙

tag不存在或已被下架!

2021 iThome 鐵人賽

DAY 18
0
AI & Data

觀賞魚辨識的YOLO全餐系列 第 18

Day 18 - 深入討論 YOLO 相關設定

  • 分享至 

  • xImage
  •  

Day 18 - 深入討論 YOLO 相關設定

今天來分析 Joseph Redmon 所設計的 YOLOV3 的設定檔,裡面會看到他是如何設計整個卷積網路結構,下圖是 github 中 cfg 文件夾的 YOLO 結構的檔案,看 yolov1.cfg, yolov2.cfg, yolov3.cfg 等檔名後面帶著-xxx,例如: yolov2-voc.cfg, yolov3-voc.cfg。 這是指針對不同的數據集 (datasets) 訓練時的網路結構組態檔案,沒有帶 -xxx 的組態檔,基本上的數據集就是微軟的 COCO 數據集,總類別數是 80 類。帶有 -voc 則是跑 VOC 數據集,類別數是 20 類。

https://ithelp.ithome.com.tw/upload/images/20210918/20129510M1guqwiSwd.png
圖 1、YOLO 組態檔文件夾的結構

下圖是根據 Joseph Redmon 所發表的 YOLOv3 結構用來萃取特徵圖的 darknet53 網路結構。

https://ithelp.ithome.com.tw/upload/images/20210918/20129510g5vqgkLf61.png
圖 2、YOLOv3 的 darknet53

打開 yolov3.cfg,下圖是檔案內前三層的卷積層的設定,比對兩圖的過濾器(filter),卷積核心大小(size) 以及步進 (stride),可以發現一模一樣,分別是 (32 * 32, 3, 1), (64 * 64,3,2), (32 * 32, 1, 1)。這樣不難理解 yolov3.cfg 的目的就是在描述 yolov3 的網路結構,所以我們只要使用不同的組態檔,就可以實作 yolov1,yolov2 或是 yolov3。

https://ithelp.ithome.com.tw/upload/images/20210918/20129510TpVXpNZf7r.png
圖 3、yolov3.cfg 的前三項設定

因此,全局的設定都是在 [net] 這個選項中進行設定,通常我們針對不同的環境都是修改這裡的設定。

batch=64
subdivisions=16
width=608
height=608
channels=3

batch指的就是一批要多少訓練樣本(batchsize),以我們的例子來說就是圖片,這主要是取決於訓練時的 GPU 記憶體,而 yolo 還有一個參數是 subdivisions,是用來細分,一次放多少樣本到記憶體中,以上述的設定,通常是記憶體足夠大,可以一次放入 4 張圖片 (64/16),如果自己評估記憶體夠用的話, subdivisions 可以設的更小一點,原則上是 8 的倍數。下面這個方程式說明批次 (batchsize) 跟迭代 (iteration) 與期數 (epoch) 的關係。

epoch = (全部訓練樣本 / batchsize) / iteration

舉個例子,訓練集有 1000 個樣本,batchsize = 10,那麼訓練完整個樣本集(1次epoch)需要:100 次iteration。
1 = (1000 / 10) / 100

width, height, channels 這三個參數用來指定訓練圖片大小,必須是 32 的倍數,資料集中的圖片大小務必要跟這個設定相同。

底下是整個模型找尋最佳解的超參數,可以參考機器/深度學習-基礎數學(三):梯度最佳解相關算法(gradient descent optimization algorithms)

momentum=0.9
decay=0.0005
learning_rate=0.0005
max_batches = 60000
policy=steps
steps=400000,450000
scales=.1,.1
  • 動能 (momentum): 主要是用在計算參數更新方向前會考慮前一次參數更新的方向,如果當下梯度方向和歷史參數更新的方向一致,則會增強這個方向的梯度,若當下梯度方向和歷史參數更新的方向不一致,則梯度會衰退。然後每一次對梯度作方向微調。這樣可以增加學習上的穩定性(梯度不更新太快),這樣可以學習的更快,並且有擺脫局部最佳解的能力。。
  • 衰減 (decay) : 為了能較快的找到最佳解,通常一開始會用大的學習率,接著在變成較小的學習率,而衰減參數就是用來決定衰減的速度。
  • 學習率 (learning_rate): 最佳化模型的學習參數,下圖左是一個學習率設定為 0.9 的學習過程,假設中心點是我們要找的最佳解,因為學習率過大,導致整個學習過程如鋸齒狀般的前進;而圖右則是學習率為 0.5 ,很快就沿著最佳解前進,但因為學習率低,所以前進速度很慢。
  • 學習政策 (policy):這個參數是用來調整學習率的策略,包含CONSTANT, STEP, EXP, POLY,STEPS, SIG, RANDOM。
  • 步進 (steps): 這邊就是當迭代在第幾次時,學習率會發生變化。建議為 max_batches 的 70%, 80%, 90% 等逐步增加。
  • scales : 和 steps 是一組的,所以數量和 steps 是一樣的,這個參數就是在第幾次時,學習率會發生變化比例。
  • max_batches: 這裡的 batch 指的是迭代次數 (iteration),設定大小建議是 類別數 * 2000 ,但不可以小於 6000 或是訓練樣本數量。所以如果有 3 個樣本,那可以設定 3 * 2000 = 6000。

https://ithelp.ithome.com.tw/upload/images/20210918/20129510uPnM8PfJ8C.png
圖 4、找尋最佳解的過程

資料擴增相關參數,用來隨機產生新的資料用來訓練模型。
angle(角度): 圖片角度變化,單位是度, angle=10,就是隨機生成 -10 ~ 10 度旋轉的圖片。
saturation(飽和度)和exposure(曝光度): 代表飽和度和曝光度設定 1.5 代表用飽和度和曝光度進行 0 ~ 1.5 倍隨機生成圖片。以下為 DarmMark 所做的示例,它建議可以在 0 - 10 之間調整,但是 darknet 可以容許更大的值。
hue(色調): 色調設定為 0.1 代表在色調隨機變化 0 ~ 0.1 生成圖片。DarmMark 建議可以在 0.0 到 1.0 之間調整。

angle=0
saturation = 1.5
exposure = 1.5
hue=.1

https://ithelp.ithome.com.tw/upload/images/20210918/20129510wLMd8wbNdF.png
圖 5、DarkMark的圖型效果

最後辨識判斷的結果在 YOLOv3 為[yolo]這個選項中。

  • ignore_thresh:這個參數用來決定物件是否要被納入 cost function 計算。若 best IoU 大於此參數,則此 IoU 誤差不會納入 cost function中。
  • random:等於 1 代表每 10 次迭代輸入影像會隨機縮放到 320 * 320 – 608 * 608。
  • classes:表示要辨識的種類數量。
  • jitter:主要是利用這個方法裁圖 (crop) 跟 翻轉圖片 (flip) 產生更多資料抑制 overfitting。
  • 錨 anchors:先驗框 (anchor boxes) 是在 yolov2 提出,用來預測邊界框,進行卷積來預測每個位置的邊界框以及置信度(是否含有物體),並且各個位置設置不同尺度和比例的先驗框。
  • num:說明有幾個錨 (anchor),但實際用到哪幾個錨是看 mask 來決定,mask=0, 1, 2 代表用 anchors 的前三組(一組兩個數字),mask=6, 7, 8 代表用 anchors 的第6, 7, 8組
[yolo]
mask = 6,7,8
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=80
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1

要記得在三個 [yolo] 層的前一個卷積層,都要將 fliters 根據辨識的種類數量來進行修改,公式如下,位置可以參考下圖。

filters=(classes + 5) * 3 

https://ithelp.ithome.com.tw/upload/images/20210918/20129510ZTn8OFYD9r.png
圖 6、修改判斷層前的卷積層的過濾器

參考資料


上一篇
Day 17 - YOLO 相關概念說明
下一篇
Day 19 - 安裝 AlexeyAB/darknet ON Amazon Linux 2
系列文
觀賞魚辨識的YOLO全餐38
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言