yolov3大体步骤

1、输入图像

2、将图像送入卷积神经网络中进行特征提取---得到特征图

特征图的提取,这里用的是darknet53网络,就是来得到特征图

3、对特征图进行操作,输出想要的形状

后面就是对特征图简单操作一下,将形状变成(13*13*25526*26*25552*52*255

这里采用了多个尺度,所以得到了3个特征图,其实和yolov11个特征图的目的一样。

这个13*13*255本身没有意义,是作者赋予它意义,引导网络,按着作者的意思来进行。

这个13*13就是作者将图片划分13*13区域,共有169个网格,每个网格产生3框,3预测不同的类别,coco数据80,每个框有(cxywh)五个参数,所以每个网格有(80+5* 3 = 255 参数,所以通道数就是255

 

4、将标签变换成一致的形状,进行损失的计算

自定义的损失函数一般也继承于pytorch的类,因为得到的损失,也要进行梯度计算,相当于通过框架来进行的一些计算,可以自动的求梯度)

4.1---标签变成与网络输出一致的形状,首先要确定网络输出的形状。

网络输出的通道255其中240类别,另外3c是置信度,还有3的(xywh),其实这里直接写成(xywh)也可以,就是中心点坐标和宽高,但是这样的话没有一个范围,不便于优化,所以,最好是让这4个值是在0-1之间,那么很自然的想到进行归一化,把wh都除以宽高,这时候wh都是在0-1之间了。而对于xy来说,替换成pxpypxpy是该中心点坐标在这个网格中的相对位置,取值范围也是0-1。所以,这个时候的(xywh)被替换成了(pxpyw/Wh/H)。替换后的这4个值,范围都在0-1之间

上面的这个做法是yolov1的操作。

yolov3的时候,对于xy的思路基本一样,就是相对于当前网格左上角的偏移值。

但是,wh,思路做了改变,引进了锚框的机制,就是相当于锚框的长宽,需要偏移多少。这个偏移量基本上都是很小的,这里再次说明了这点,其实预测出来的几个值,没有限制,随便是谁都行,只要可以把这个框给描绘出来,因为锚框的长宽是已知的,也就是人为设定的,所以根据偏移量,其实可以算出预测框的长宽。

框:其实就是人为对所有样本来做一个统计,观察到,目标的长宽,差不多是哪几种长宽出现的比较多。提前把这个长宽在图像上设置出来。。对于每一个小网格,都配备3个锚框,不同尺度特征图上,锚框的尺寸也不一样。所以,其实一个点,也就是有9个不同尺度的锚框。

 

 

 4.2---确定标签的形状

 标签也需要转换成一13*13*255矩阵,其中通道中的每一个数的含义,都需要和网络输出中的对应上。

1、初始化一个全零13*13*255矩阵。

2、计算真实框在哪个网格中(ij

3、将真实框的(xywh)转换成txtytwth

4、将第(ij)网格的15通道设置为( txtytwth 1 txtytwth 1 txtytwth ),置信度设置为1(这里的tx应该是3个不一样的,是相对3个锚框的偏移量

5、将第(ij)网格的240通道设置为(000,,,1,,,000

 

损失函数部分,可以分为3个部分,第一个部分,就是框的坐标误差;第二个部分,就是框的置信度误差;第三个部分,就是框的类别误差。

前提:以图片中只有一个目标为例。

标签中,只有第(ij)这个网格的位置,通道数255个数有值,其他的位置都没有数值。

预测图中,所有的网格位置,每个网格的通道数255个数,都是有值的

所以,计算损失的时候,不同网格的不同锚框,计算不一样的损失。

正样本的损失计算​ 对tx ty均方误差,对tw th均方误差,对80类分类结果求二类交叉熵误差,对置信度C计算二类交叉熵误差(C期望值=1)。

负样本的损失计算:负样本就是边框和真实值IOU<阈值(背景、负样本)只对置信度C计算二分类交叉熵误差(C期望值=0

其余既不负责预测物体,且IOU较大的边框不参与loss计算

负样本<阈值】【正样本>阈值,并且与gtiou最大,也就是只有一个正样本】【不参与计算>阈值

loss计算中,“负责预测目标”(即正样本)和背景(即负样本),以及不参与计算loss的部分是怎么选择的

样本的选择:首先计算目标中心点落在哪个grid上,然后计算这个grid9个先验框(anchor)和目标真实位置的IOU值(直接计算,不考虑二者的中心位置),取IOU值最大的先验框和目标匹配。于是,找到的 该grid中的 该anchor 负责预测这个目标,其余的网格、anchor都不负责

样本的选择:计算各个先验框和所有的目标ground truth之间的IOU,如果某先验框和图像中所有物体最大的IOU都小于阈值(一般0.5),那么就认为该先验框不含目标,记作负样本,其置信度应当为0

参与计算部分:部分虽然不负责预测对象,但IOU较大,可以认为包含了目标的一部分,不可简单当作负样本,所以这部分不参与误差计算

 

蓝色框为聚类得到的先验框,黄色框是ground truth,红框是目标中心点所在的网格。

不是很理解的地方:

 如果匹配的最优先验框所在的grid和gt box所在的grid不重合怎么办?既然不重合,那怎么使用sigmoid来预测中心点基于grid的偏移呢?因为我已经看过了一些开源实现,他还是在gtbox所在的grid里面选择一个IOU最大的anchor来作为匹配结果的

在原论文中,确实是使用先验框来训练的,也就是静态指定。静态指定就没有你说的问题了。动态的话,训练其实也是收敛的,中心点偏移只会发生在训练初期,就算照着错误的训练,慢慢的中心点偏移出grid的情况就会渐渐没有。这两种训练方式我都试过,并没有太大区别。关于动态训练的只是我个人见解,不一定正确哈。静态训练的方法肯定是没有问题的。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用Dreamweaver制作带有表格和CSS的网页的大体步骤如下: 1. 打开Dreamweaver软件,选择“网站” -> “新建网站”,填写网站名称、本地站点文件夹、HTTP地址等信息,创建一个新的网站。 2. 在“文件”菜单中,选择“新建” -> “HTML”,创建一个新的HTML文件。 3. 在新的HTML文件中,使用表格标签`<table>`创建表格。例如: ``` <table> <tr> <th>姓名</th> <th>年龄</th> <th>性别</th> </tr> <tr> <td>张三</td> <td>25</td> <td>男</td> </tr> <tr> <td>李四</td> <td>30</td> <td>女</td> </tr> </table> ``` 这个代码段创建了一个包含表头和表格内容的简单表格。 4. 在CSS样式表中定义表格的样式。在Dreamweaver中,您可以使用CSS面板来创建和编辑样式表。例如,以下CSS代码定义表格的样式: ``` table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid black; padding: 8px; text-align: center; } ``` 这个代码段将表格的边框合并为一个,将表格宽度设置为100%,并将表头单元格和表格单元格的边框设置为1像素的黑色实线,并设置单元格内边距为8像素,并将单元格内容居中对齐。 5. 在CSS样式表中定义页面的样式。例如,以下CSS代码定义了页面的背景颜色和标题的样式: ``` body { background-color: lightblue; } h1 { color: white; font-size: 36px; text-align: center; } ``` 这个代码段将页面的背景颜色设置为浅蓝色,并将页面的大标题颜色设置为白色,字体大小为36像素,并将标题居中对齐。 6. 将CSS样式表应用于表格和页面。在HTML文件中,使用`<link>`标签将CSS样式表文件链接到HTML文件中。例如,以下代码将CSS样式表文件(styles.css)链接到HTML文件中: ``` <head> <link rel="stylesheet" href="styles.css"> </head> ``` 7. 在Dreamweaver中预览和测试您的网页。在Dreamweaver中,您可以使用“实时视图”或“设计视图”来查看和测试您的网页。您还可以在浏览器中打开HTML文件来查看和测试您的网页。 希望这些步骤可以帮助您使用Dreamweaver制作带有表格和CSS样式的网页!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值