0.简略描述

  • 1.将真值检测框变换到特征图尺度上
  • 2.计算以特征图每个网格中心为中心点时所有锚框与真值检测框的交并比
  • 3.取与真值检测框交并比最大的锚框的id,及真值检测框中心所在cell的id,有此,可将真值检测框与预测结果对应起来
  • 4.计算位置回归损失,置信度损失,分类损失

1,网络的输出

图1

yolov2 网络对于检测框位置大小的输出是:

对于1个batch网络的输出的shape[batch_size, H*W*num_anchors, 5+num_classes], 其中:

  • num_anchors:指1个点处的anchor数量
  • H,W分别是卷积得到的feature map的高宽
  • 5 + num_classes,分别指 txt_xtx​、tyt_yty​、tωt_\omegatω​、tht_hth​及检测框的评分score

2.输出的处理

拿到网络的输出后,使用图1中的公式计算得到σ(tx),σ(ty),etω,eth\sigma(t_x),\sigma(t_y),e^{t_\omega},e^{t_h}σ(tx​),σ(ty​),etω​,eth​,再分别得到feature_map尺度上的所有cx,cyc_x,c_ycx​,cy​,根据不同anchors计算得每个预测点对应的检测框如下图:

裁切去超出的部分:

其中,pa11、pa21、pa31即在2x2feature_map上的中心点落在cell1时对应的预测框,在本例中feature_mapH、W都为2,每个cell上分别有不同尺度的anchor3个,由此可得1张图像上的检测框共有HxWxnum_anchors个。

3.端到端训练loss的计算

#1,#2中所讲,网络输出的shape[batch_size,H*W*num_anchors, 5+num_classes],输出的内容是tx,ty,tω,th,score,class_scoret_x,t_y,t_\omega,t_h,score,class\_scoretx​,ty​,tω​,th​,score,class_score, yolov2loss函数有3部分构成:

loss=losscoordination+lossconfidence+lossclassificationloss = loss_{coordination}+loss_{confidence}+loss_{classification}loss=losscoordination​+lossconfidence​+lossclassification​

代码示例:

box_loss = 1 / b * cfg.coord_scale * F.mse_loss(delta_pred_batch * box_mask, box_target * box_mask, reduction='sum') / 2.0
iou_loss = 1 / b * F.mse_loss(conf_pred_batch * iou_mask, iou_target * iou_mask, reduction='sum') / 2.0
class_loss = 1 / b * cfg.class_scale * F.cross_entropy(class_score_batch_keep, class_target_keep, reduction='sum')

这里比较关键的一点,网络的输出是H*W*num_anchors个预测结果,且预测的tx,ty,tω,tht_x,t_y,t_\omega,t_htx​,ty​,tω​,th​还只是预测框相对于anchor锚框的的偏移量。检测训练数据中,标签文件是ground truth box的中心点和宽高归一化后的坐标,且ground truth box(gt box)的数量远小于预测数H*W*num_anchors,如何将gtbox与预测的结果对应起来呢?如上图,如何确定是cell1中的pa11负责预测图中的小人呢?这里有个anchor assignment的过程,在yolo源码中有一个函数build_target正是处理gt box与预测结果之间的对应。

其映射过程如下,首先将gt boxanchor都乘上[W,H]变换到feature map尺度上,计算可得gt boxH*W*num_anchorsanchor锚框之间的IOU,计算gt_boxanchors之间的IOU时分别取特征图每个cell的中心,得

overlaps = box_ious(all_anchors_xxyy, gt_boxes).view(-1, num_anchors, num_obj)

然后确定gt box中心落在feature map哪个cell中,根据cxc_xcx​,cyc_ycy​可求得:

cell_idx_x, cell_idx_y = torch.floor(gt_box_xywh[:2])

据此求得gt box的中心在哪个cell,结合上面已求出的IOU得到每个gt box与该cell中每个anchorIOU,其最大者即负责预测当前gt_box

cell_id = cell_idx_x*W+cell_idx_y
overlaps_in_cell = overlaps[cell_id, :, t]
argmax_anchor_idx = torch.argmax(overlaps_in_cell)

上图中,gt_box时检测小人的检测框,其中心落在cell1中,且计算可知其与anchor锚框ta11IOU最大,故cell1中的ta11负责预测gt_box
找到gt box对应的cellanchor后可根据图1反向计算得真值偏移量用以计算loss,在shape[batch_size, H*W*num_anchors,5+num_class]的预测中除cell_id,argmax_anchor_idx对应的预测框外,其他对预测结果无用,边框回归和分类评估时都直接忽略(使用mask=0抑制),计算confidence将其目标计为0

参考:
1.https://github.com/tztztztztz/yolov2.pytorch.git

Yolov2 训练时anchor是如何使用的?build_target相关推荐

  1. yolov2训练_一文看懂YOLO v2

    我的CSDN博客:https://blog.csdn.net/litt1e 我的公众号:工科宅生活 概述 新的YOLO版本论文全名叫"YOLO9000: Better, Faster, St ...

  2. yolov2训练_YOLOv2 : YOLO9000:Better,Faster,Stronger解读

    YOLOv2:YOLO9000:Better,Faster,Stronger解读,入门小白,若博文有不妥之处,望加以指点,笔者一定及时修正. ① 论文翻译 摘要 (emmmmmm......没啥重要的 ...

  3. EfficientDet训练数据集anchor设定教程101

    EfficientDet训练数据集anchor设定教程101 本文由小肉包老师原创,转载请注明出处,来自腾讯.阿里等一线AI算法工程师组成的QQ交流群欢迎你的加入: 1037662480 上一篇文章我 ...

  4. 理解YOLOv2训练过程中输出参数含义

    转载自https://blog.csdn.net/dcrmg/article/details/78565440 原英文地址: https://timebutt.github.io/static/und ...

  5. 深度学习——训练时碰到的超参数

    深度学习--训练时碰到的超参数 文章目录 深度学习--训练时碰到的超参数 一.前言​ 二.一些常见的超参数 学习率(Learning rate) 迭代次数(iteration) batchsize e ...

  6. Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用))

    Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用)) 目录 数据增强步骤 数据增强实现代码 ...

  7. tensorflow tf.train.Saver.restore() (用于下次训练时恢复模型)

    # 保存当前的Session到文件目录tf.train.Saver().save(sess, 'net/my_net.ckpt') # 然后在下次训练时恢复模型: tf.train.Saver().r ...

  8. yolo配置文件以及训练时各参数的定义

    引用文章:關於yolo配置文件以及训练时各参数的含义

  9. tensorflow 显存 训练_【他山之石】训练时显存优化技术——OP合并与gradient checkpoint...

    作者:bindog 地址:http://bindog.github.io/ 01 背景 前几天看到知乎上的文章FLOPs与模型推理速度[1],文中提到一个比较耗时又占显存的pointwise操作x * ...

最新文章

  1. python turtle库画七彩蟒蛇_Python实现七彩蟒蛇绘制实例代码
  2. boost::hana::values用法的测试程序
  3. ASP.NET中高级程序员 面试题
  4. C和汇编混合编程--------函数调用后ebp、esp值问题
  5. 【干货】一张蓝图九大行动领域,实现AI赋能的企业转型-IBM.pdf(附下载链接)...
  6. 编译原理算符分析器实现 -* c语言代码,编译原理论文-词法分析器的设计与实现...
  7. 如何使用以太网将 Mac 接入互联网?
  8. 关于代码家(干货集中营)共享知识点汇总系列——休息娱乐
  9. c语言中立方和乘法怎么表示什么区别,C语言程式设计中的平方立方怎么表示
  10. Json与List、Map、entity的互相转化
  11. (三)Detecting Spacecraft Anomalies Using LSTMs and Nonparametric Dynamic Thresholding
  12. 爱上python系列------python上下文管理器(二):对suppress进行装饰器重新实现
  13. 2019/9/6工学结合周记
  14. 玩转Kubernetes—尝试以不同方式初始化集群
  15. Android 安装自身更新APK时,包解析错误或无法访问文件的可能原因
  16. DFC开发平台的设计理念
  17. 如何优雅的面对一坨翔~~感悟编程代码
  18. 使用Frida进行IOS的抓包
  19. “no cuda-capable device is detected”问题解决方法
  20. WPF中使用Data Annotations验证Model

热门文章

  1. fail树(bzoj 3172: [Tjoi2013]单词)
  2. bzoj 1630 2023: [Usaco2005 Nov]Ant Counting 数蚂蚁(有重复元素的组合数)
  3. bzoj 1682: [Usaco2005 Mar]Out of Hay 干草危机(最小生成树)
  4. HDU 5978 2016ICPC大连 H: To begin or not to begin
  5. [Python / PyTorch] debug backward()
  6. [Python] 字典 items()方法:同时对字典的键和值进行遍历
  7. 安装自带python3.6的Anaconda3,并安装tensorflow,导入Pycharm中使用
  8. 使用TASM时报错extra characters on line的解决办法
  9. cad计算机制图论文,机械制图论文范文
  10. 代理对象之spring注解事务控制或shiro注解权限控制的理解