【代码解读】yolov3anchor匹配代码理解

yolov3项目完整的代码_tensorflow版本YunYang1994

关于损失函数的理解可以先参考:这篇博客

但是一直有一种没有搞懂一个问题,yolov3输出三个分支13;26;52;每一个分支都会有自己格式的格子,那么到底哪个anchor负责哪个目标呢?也就是哪个分支网格anchor负责去检测哪个目标?

根据代码我的理解是:假设一个图中有一个目标(比较容易理解),这个被分割成三种格子的形式,分割成 13 ∗ 13 13*13 1313 26 ∗ 26 26*26 2626 52 ∗ 52 52*52 5252

  • 这个目标中心坐标下采样8倍,(416/8=52),会落在 52 ∗ 52 52*52 5252 这个分支的所有格子中的某一个格子,落在的格子会产生3个anchor,3个anchor和目标(已经下采样8倍的目标框)分别计算iou,得到三个iou,凡是iou大于阈值0.3的,就记为正样本,就会将label[0]中这个iou大于0.3的anchor的相应位置 赋上真实框的值。

  • 这个目标中心坐标下采样16倍,(416/16=26),会落在 26 ∗ 26 26*26 2626 这个分支的所有格子中的某一个格子,落在的格子会产生3个anchor,3个anchor和目标(已经下采样16倍的目标框)分别计算iou,得到三个iou,凡是iou大于阈值0.3的,就记为正样本,就会将label[1]中这个iou大于0.3的anchor的相应位置 赋上真实框的值。

  • 这个目标中心坐标下采样32倍,(416/32=13),会落在 13 ∗ 13 13*13 1313 这个分支的所有格子中的某一个格子,落在的格子会产生3个anchor,3个anchor和目标(已经下采样32倍的目标框)分别计算iou,得到三个iou,凡是iou大于阈值0.3的,就记为正样本,就会将label[2]中这个iou大于0.3的anchor的相应位置 赋上真实框的值。

  • 如果目标所有的anchor,9个anchor,iou全部小于阈值0.3,那么选择9个anchor中和下采样后的目标框iou最大的,作为正样本,将目标真实值赋值给相应的anchor的位置。

总的来说!!!
就是将目标先进行三种下采样,分别和目标落在的网格产生的 9个anchor分别计算iou,大于阈值0.3的记为正样本。如果9个iou全部小于0.3,那么和目标iou最大的记为正样本。对于正样本,我们在label上 相对应的anchor位置上,赋上真实目标的值。

代码简单理解:

for bbox in bboxes:
一张图上可能有多个目标,这个循环表示一个目标一个目标处理:

	bbox传来的是xmin,ymin,xmax,ymax(416*416),先转变为bbox_xywh:x,y,w,h
	将416图上的目标,进行三种(8,16,32)下采样得到:bbox_xywh_scaled
	
		for i in range(3):三种下采样,一种一种处理
			i=0:52*52:找到目标中心下采样以后,落在哪个格子上,
			这个格子有3个anchor,计算3个anchor和下采样以后的目标框的iou记为iou_scale。
			iou_scale大于阈值0.3的记为正样本,将label[0]中正样本对应的anchor位置赋值真实目标的坐标bbox_xywh。
			并将iou
YOLOv5是一种单阶段目标检测算法,它在YOLOv4的基础上添加了一些新的改进思路,从而大大提升了速度和精度。其中的主要改进思路包括对输入端的改进,在模型训练阶段提出了一些新的思路。 对于YOLOv5的代码解读,我们可以从以下几个方面来理解: 1. 模型架构和配置:YOLOv5提供了不同模型对应的yml配置文件,例如yolov5l.yml和yolov5m.yml,这些文件定义了模型的架构、anchor(锚点)的设置、类别数以及模型的宽度和深度。在训练模型时,只需要修改类别数即可。要了解YOLOv5模型架构的设计和不同大小模型之间的区别,可以参考相关博客或文档,这些资料会提供详细而清晰的解释。 2. 训练代码解读:训练代码解读可以包括读取图片的标签和坐标,并进行错误检查。例如,每张图片对应的标签文件(txt文件)应该包含5列,第一列为对应的类别(0,1...),后四列为对应的坐标。如果标签文件的列数超过或不足5列,就会报错。此外,对于第一列的标签,它只能为正数,如果为负数也会报错。对于后四列的坐标,它们是相对于整张图的比值,所以它们应该小于1,如果大于1也会报错。如果没有标签文件或标签文件为空,对应的标签和坐标会被设置为空集。这样可以增加没有标签的数据作为负样本。 综上所述,通过对YOLOv5的代码进行解读,我们可以了解其模型架构和配置以及训练代码中的一些细节,从而更好地理解和使用YOLOv5目标检测算法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [YOLOV5+源码详细解读资源合集](https://download.csdn.net/download/Rocky006/87898393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [yolov5 代码内容解析](https://blog.csdn.net/qq_40629612/article/details/124107843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值