天天看点

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种损失计算公式

欢迎讨论哈!