天天看點

yolov3損失函數_tensorflow-yolov3資料流向解析

yolov3損失函數_tensorflow-yolov3資料流向解析

學習了下yolov3-tensoflow代碼,tensorflow版本還是1.x,撸完代碼後根據代碼畫了些簡單的資料流向圖并标注了邏輯加工代碼/函數,權當筆記了。

原始代碼來自:

https://github.com/YunYang1994/tensorflow-yolov3​github.com

主要解析了tensorflow-yolov3-mastercore中的yolov3.py、utils.py、dataset.py代碼,三者作用如下:

  • yolov3:構模組化型、損失函數等
  • dataset:建構資料集、為錨框打标簽、圖像預處理等
  • utils:工具,包括圖像前處理、後處理、畫邊界框、nms等
yolov3損失函數_tensorflow-yolov3資料流向解析

1.資料集構造

主要由dataset.py完成,構造訓練/測試資料集,并需要對各網格尺度的錨框打标簽。

yolov3損失函數_tensorflow-yolov3資料流向解析

難點在于了解錨框的正負樣本配置設定過程,每次訓練時會提前處理錨框标簽。最後輸出标簽label_box和真值邊界框boxes,用于計算損失函數。

  • sb代表小尺寸目标,mb代表中尺寸目标,lb代表大尺寸目标
  • label_box:(batch_size, train_output_sizes, train_output_sizes, anchor_per_scale, 5 + num_classes),實際取值為(6, 13, 13, 3, 85), (6, 26, 26, 3, 85), (6, 52, 52, 3, 85)
  • boxes: (batch_size, max_bbox_per_scale, 4), 實際取值為(6, 150, 4)
  • 涉及重要函數:preprocess_true_boxes

2.模型建構+損失函數

主要由yolov3.py完成,模型建構部分基礎網絡選用dartnet53,損失函數由三部分構成分别是邊界框誤差+邊界框置信度誤差+類别誤差,其中置信度誤差同時考慮正負樣本,邊界框誤差及類别誤差僅考慮正樣本。

yolov3損失函數_tensorflow-yolov3資料流向解析

難點在于了解誤差是用偏移量計算,還原到原始圖像尺寸的pred_box是用來計算giou值和iou值,giou用于邊界框誤差計算,iou篩選用于計算置信度損失的邊界框。

  • 涉及重要代碼:YOLOV3.loss_layer。3種損失計算公式

歡迎讨論哈!