其他分享
首页 > 其他分享> > 02.手动实现yolov1

02.手动实现yolov1

作者:互联网


文章目录

网络结构

在这里插入图片描述

Yolov1 流程图

假设输入图像 [1,3,448,448]–>backbone Net–>[1,2048,7,7]–>[1,B(1+4)+C,7,7]
则有 S=7, 取B=2,以PASCAL VOC数据为例有20个类别,则C=20

[[1,B(1+4)+C,7,7]]=[1,30,7,7]

这30列的具体意义,如下图所示
在这里插入图片描述

方式一

也可以按这种方式解析,只需保证训练与推理时使用同一种解析方式
在这里插入图片描述

方式二

算法流程解析

算法首先把输入图像划分成S*S的格子,然后对每个格子都预测B个bounding boxes,每个bounding box都包含5个预测值:x,y,w,h和confidence。x,y就是ground truth的中心坐标,与grid cell左上角的偏差/格网大小使得范围变成0到1;w和h进行归一化(分别除以图像的w和h,这样最后的w和h就在0到1范围)。

输入图像大小 h=448,w=448
每个grid cell大小为 h_gc=w_gc=448//S=448//7=64
假设ground truth 的boxes为 [100,200,300,400] x1,y1,x2,y2的格式,

来看看 S×S×30 的数据块的具体含义。

loss 计算

在这里插入图片描述
第三、四行表示bounding box的confidence损失,就像前面所说的,分成grid cell包含与不包含object两种情况。这里注意下因为每个grid cell包含两个bounding box,所以只有当ground truth 和该网格中的某个bounding box的IOU值最大的时候,才计算这项。

因为很多grid cell是不包含物体的,这样的话很多grid cell的confidence score为0。所以采用设置不同权重方式来解决,一方面提高localization error的权重,另一方面降低没有object的box的confidence loss权值,loss权重分别是5和0.5。而对于包含object的box的confidence loss权值还是原来的1。

需要注意的


代码实现

完整代码在这里:here

数据集

数据描述: 只有170张,随机取出150张做训练,剩下的20张做验证

模型

查看训练过程loss变化:tensorboard --logdir=./yolov1_resnet50_416 --host 0.0.0.0

选择resnet50-416(输入大小统一resize为416x416)

在验证集上的结果:

在这里插入图片描述

在这里插入图片描述

后续改进

风吴痕 发布了96 篇原创文章 · 获赞 179 · 访问量 64万+ 他的留言板 关注

标签:02,box,yolov1,loss,pred,手动,cell,grid,bounding
来源: https://blog.csdn.net/wc781708249/article/details/104061518