YOLOv3

文章目录[隐藏]

 YOLOv3

1. YOLOv3效果

1.1 COCO AP

YOLOv3速度最快,但准确率不是很高

                                                                  COCO数据集的一些指标含义

其中 AP指,IoU从0.5开始,以0.05为步距,直到0.95的所有AP IoU的均值

1.2 COCO AP IOU=0.5

1.3 YOLOv3的BackBone为DarkNet-53(53个卷积层)

 1.3.1 取消Max Pooling层,通过卷积层的步距设计实现下采样,这样做可能是提升准确率的原因。

1.3.2 DarkNet-53相比于ResNet的卷积核个数少,训练参数少,所以训练速度更快。

1.3.3 Convolutional层包括ConvLayer -> BN -> LeakyReLU

因为BN的1存在,卷积层中无偏置参数

1.3.4 上图每个方块都是一个残差结构(有何作用?)

 

2. YOLOv3结构

2.1 使用k-means聚类来确定bounding box,YOLOv3预测三个不同尺度的boxes,使用特征金字塔网络来提取这些对于尺度boxes的特征。

在COCO数据集上,对于每个尺度预测三个boxes,张量为N * N * [ 3 * ( 4  + 1 + 80 ) ]

80为类的个数,4为位置信息,1为confidence,N * N指对提取到的特征的每个像素都要预测

2.2 结构

 三个预测输出分别对应不同尺度的检测目标,预测输出1用来预测相对较大的目标,预测输出2用来预测中等大小的目标,预测输出3用来预测小目标,其中2和3之所以有预测较小目标的能力,一个是因为进行了上采样(How?),二是因为结构中融合了先前的特征,通道数增多,或者说上采样的目的就是为了融合之前的像素较高的特征,2中为26 *26,3中为52 * 52。

3. 目标边界框的预测

锚框参数为c~x~,c~y~,p~w~,p~h~网络预测四个边界参数t~x~,t~y~,t~w~,t~h~,从一个cell的左上角来偏移,cell左上角的的坐标为(c~x~,c~y~),初始预测框长宽为p~w~,p~h~,那么预测值如下:

 

σ函数即sigmoid函数,将预测的值压缩至0-1之间,一个cell的长宽就是1,保证在偏移时候选框的左上角点不会离开当前cell

 Q:长宽的更新为什么要选指数函数?

4. 正负样本匹配

如果一个bounding box的IoU不是最高的但大于阈值(0.5),则将该bounding box 丢掉。

如果一个bounding box没有被分配给任何一个GT(ground truth),则此bounding box只有confidence损失,没有候选框损失和分类损失。 

5. 损失计算

5.1 confidence损失

使用二值交叉熵,但在计算时o~i~的取值是0-1

 5.2 class 损失

使用二值交叉熵时,每个类别的概率相互独立,所有类别的概率之和并不等于一,这与交叉熵损失不同。

 6. 丢丢代码

numpy.round(x)

//返回浮点数x的四舍五入值

torch detach()

//当反向传播经过这个node时,梯度就不会从这个node往前面传播

torch.tensor(data, dtype=None, device=None, requires_grad=False)

//可以将numpy数组转换为tensor,torch.tensor()可以从data中的数据做拷贝而不是直接引用

 7. 定位损失

 

 注:g^i^~x~为GT的x坐标,c^i^~x~为cell左上角的x坐标,相减得到GT相对于cell左上角坐标的偏移量。这里定位损失计算的预测偏移量与真实偏移量间的损失。

  是由   反推出来的,

 

 

版权声明:本文为CSDN博主「Qing豆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yihool_/article/details/122391282

Qing豆

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

FPN (特征金字塔) 的原理和代码

1. 为什么会使用金字塔式的representation以及它存在的问题。 论文中提到一些传统的使用深度学习来做物体检测的结构会倾向于避开使用金字塔性质的representation, 因为使用这样的representation会对算力和内存

Matlab实现Faster-RCNN目标检测

用Matlab自带的FastRcnnNetwork工具箱实现深度学习目标检测 一.搭建训练数据集和验证数据集 用的是Matlab2018a以上版本里的应用程序带的ImageLabeler来进行数据标记: 将标记好的数据以.gro