yolov3

一:深度学习目标检测回顾

1:R-CNN

在这里插入图片描述

2:Fast-RCNN

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3:Faster-RCNN

在这里插入图片描述

4:Yolov1

在这里插入图片描述
论文中有20类。7x7的网格,每个网格要预测2个 bounding box(如下图所示) 和 20个类别概率,输出就是 7x7x(5x2 + 20) 。 (通用公式: SxS个网格,每个网格要预测B个bounding box还要预测C个categories,输出就是S x S x (5*B+C)的一个tensor。 注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的)
在这里插入图片描述
YOLO的缺点:

1:YOLO对相互靠的很近的物体,还有很小的群体 检测效果不好,这是因为一个网格中只预测了两个框,并且只属于一类。
2:对测试图像中,同一类物体出现的新的不常见的长宽比和其他情况是。泛化能力偏弱。
3:由于损失函数的问题,定位误差是影响检测效果的主要原因。尤其是大小物体的处理上,还有待加强。

5:Yolov2

在这里插入图片描述
yolo_v2中对于前向过程中张量尺寸变换,都是通过 最大池化来进行,一共有5次,darknet-19是不存在残差结构,和VGG是同类型的backbone。

注:yolo的先验框一般采用K-means聚类(数据较多时比较费时间),有时单目标检测时有可进行目测估计。

二:yolov3基础

1:网络结构可视化

如果需要查看网络结构,可以使用TensorboardX在网络实例化后打印网络结构。

from tensorboardX import SummaryWriter
# 定义Summary_Writer
writer = SummaryWriter('./Result')   # 数据存放在这个文件夹
model = torchvision.models.resnet18(False)
writer.add_graph(model, torch.rand([1,3,224,224]))# 自己定义的网络有时显示错误,原因暂时不清楚,还请大佬指教。

当然也可以使用netron查看网络结构图,在此只提供在线版本:https://lutzroeder.github.io/netron/。其中netron支持的网络框架及对应的文件:
在这里插入图片描述
实验式支持,可能不太稳定
在这里插入图片描述

2:yolov3网络结构图

由于自己比较懒,在此直接"盗用"博主大佬江大白的图,也非常感谢大佬的贡献。
在naas=这里插入图片描述

注:上图下方的三个框表示yolov3的三个基本组件:

(1):CBL:Yolov3网络结构中的最小组件,由Conv+Bn+Leaky_relu激活函数三者组成。
(2):Res unit:借鉴Resnet网络中的残差结构,让网络可以构建的更深。
(3):ResX:由一个CBL和X个残差组件构成,是Yolov3中的大组件。每个Res模块前面的CBL都起到下采样的作用,因此经过5次Res模块后,得到的特征图是608->304->152->76->38->19大小。

其他操作:
Concat:张量拼接,会扩充两个张量的维度,例如26×26×256和26×26×512两个张量拼接,结果是26×26×768。Concat和cfg文件中的route功能一样。
Add:张量相加,张量直接相加,不会扩充维度,例如104×104×128和104×104×128相加,结果还是104×104×128,add和cfg文件中的shortcut功能一样。

为了方便大家了解细节,同时呈上网络细节结构以做对比,虽然输入大小不一样,但只要是32的倍数即可(5倍下采样),一般常见输出大小:608x608,416x416,320x320。
在这里插入图片描述

3:some tricks


版权声明:本文为sc9876543210原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。