【视觉感知--目标检测与定位】YOLOV3多目标识别算法

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
TODO:写完再整理

文章目录

  • 系列文章目录
  • 前言
  • 一、YOLOV3介绍
  • 二、YOLOV3新的网络Darknet-53
  • 三、YOLOV3的改进策略
    • 1.融合 FPN
    • 2.用逻辑回归替代 softmax 作为分类器
  • 四、YOLOV3视觉目标检测部署步骤(非ROS部署。就是简单在PC的跑demo)
  • YOLO系列总结
  • 参考资料


前言

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!

本文先对YOLOV3多目标识别算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章


提示:以下是本篇文章正文内容

一、YOLOV3介绍

YOLOv3总结了自己在YOLOv2的基础上做的一些尝试性改进,有的尝试取得了成功,而有的尝试并没有提升模型性能。其中有两个值得一提的亮点,一个是使用残差模型,进一步加深了网络结构;另一个是使用FPN架构实现多尺度检测

YOLOv3在之前Darknet-19的基础上引入了残差块,并进一步加深了网络,改进后的网络有53个卷积层,取名为Darknet-53

YOLOv3借鉴了FPN的思想,从不同尺度提取特征。相比YOLOv2,YOLOv3提取最后3层特征图,不仅在每个特征图上分别独立做预测,同时通过将小特征图上采样到与大的特征图相同大小,然后与大的特征图拼接做进一步预测。用维度聚类的思想聚类出9种尺度的anchor box,将9种尺度的anchor box均匀的分配给3种尺度的特征图
.
.

二、YOLOV3新的网络Darknet-53

将 256x256 的图片分别输入以 Darknet-19,ResNet-101,ResNet-152 和 Darknet-53 为基础网络的分类模型中,Darknet-53 比 ResNet-101 的性能更好,而且速度是其 1.5 倍,Darknet-53 与 ResNet-152 性能相似但速度几乎是其 2 倍。注意到,Darknet-53 相比于其它网络结构实现了每秒最高的浮点计算量,说明其网络结构能更好的利用 GPU
【视觉感知--目标检测与定位】YOLOV3多目标识别算法_第1张图片
1、YOLOV3主干特征提取网络是darknet,用于提取特征的

(1)输入的是4164163的图片
(2)对输入的4164163图片,不断经过卷积层进行卷积来提取特征(这个过程被称为下采样),这样图片的高和宽就不断被压缩了,相应的深度(通道数)就不断增加。其中每个卷积层都是特征层,可以用来表示输入进来图片的特征【4164163->41641632->20820864->104104128->5252256->2626512->13131024】

2、使用主干网络最后的三个特征层【5252256->2626512->13131024】
其中13131024的特征层进行5次卷积操作,把结果同时提供给两个方向
第一个方向用于分类预测和回归预测【操作是继续进行两次卷积,生成131375的图片,实质能理解成为1313325(13133(20+1+4))的图片,这个分辨率的图片的含义是对每张输入进来的图片进行1313的均等划分,分成1313个网格;每个网格里面有3个先验框,这个先验框是我们预先预测标定在图片中的,网络预测的结果会判断先验框中是否包含物体,若是包含物体就会继续判断物体的种类,在对先验框进行中心和宽高的调整;20的含义是VOC的数据集中物体有20个种类,每个种类都会给出准确度的概率;1是判别先验框中是否有物体;4是表示先验框中的4个调整参数】

第二个方向用于上采样,生成2626512的特征图,和主干网络中倒数第二层的2626512的特征图进行堆叠(concat),其实就是构建特征金字塔的过程,使得特征提取得更精确;再进行5次卷积,生成2626256的特征图;再进行分类预测和回归预测(实质使进行了一次33和11的卷积,生成262675的特征图,可以理解成2626325->26263(20+1+4)),相应的理解为吧输入的一张图片分解成为26*26个网格;每个网格有3个先验框,VOC数据集中20个物体相应概率,1代表先验框中是否有物体,4是先验框中的4个调整参数

注意,后面对特征主干网络的操作原理都是类似的,都是上采样、堆叠、卷积的过程
.

三、YOLOV3的改进策略

【视觉感知--目标检测与定位】YOLOV3多目标识别算法_第2张图片
【视觉感知--目标检测与定位】YOLOV3多目标识别算法_第3张图片
【视觉感知--目标检测与定位】YOLOV3多目标识别算法_第4张图片

1.融合 FPN

YOLOv3 借鉴了 FPN 的思想,从不同尺度提取特征。相比 YOLOv2,YOLOv3 提取最后 3 层特征图,不仅在每个特征图上分别独立做预测,同时通过将小特征图上采样到与大的特征图相同大小,然后与大的特征图拼接做进一步预测。用维度聚类的思想聚类出 9 种尺度的 anchor box,将 9 种尺度的 anchor box 均匀的分配给 3 种尺度的特征图
.

2.用逻辑回归替代 softmax 作为分类器

在实际应用场合中,一个物体有可能输入多个类别,单纯的单标签分类在实际场景中存在一定的限制。举例来说,一辆车它既可以属于 car(小汽车)类别,也可以属于 vehicle(交通工具),用单标签分类只能得到一个类别。因此在 YOLO v3 在网络结构中把原先的 softmax 层换成了逻辑回归层,从而实现把单标签分类改成多标签分类。用多个 logistic 分类器代替 softmax 并不会降低准确率,可以维持 YOLO 的检测精度不下降
.

.

四、YOLOV3视觉目标检测部署步骤(非ROS部署。就是简单在PC的跑demo)

搭建训练硬件(PC台式电脑)、软件环境

收集公用数据集(训练集+测试集)

部署pytorch深度学习框架

开始部署
(1)计算及确定图片中的猫的位置需要四个参数
【视觉感知--目标检测与定位】YOLOV3多目标识别算法_第5张图片

(2)图片卷积大概流程

(1)一张图片传入到YOLOV3的时候,先调整成为416*416的大小
(2)为了防止失真,会在图片边上加上灰条
(3)把416*416的图片划分为三张图片,图片内容相同,分辨率大小分别为13*13、26*26、52*52
(4)由于图像多次卷积压缩容易漏检小目标物体,故52*52的图片用于检测小物体,26*26的图片用于检测中目标、13*13的图片用于检测大目标

(3)安装anaconda2019.10
教程https://blog.csdn.net/weixin_44791964/article/details/106037141

(4)下载cudnn7.4.1.5和cuda10.0,解压cudnn7.4.1.5放置在cuda10.0文件夹中
教程https://blog.csdn.net/weixin_44791964/article/details/106037141

(5)配置torch环境

(6)YOLO的程序的pytorch实现

(1)基础
(2)编程实现各各块(black)yolo.py
(3)先验框的调整(中心和大小)过程decodebox,utils.py理解
(4)目标预测的过程predict.py理解
(5)数据集的格式(VOC数据集格式)介绍
(6)数据集的制作过程
(7)训练自己的YOLOV3过程 

(7)网络性能指标测试
如MAP和IOU


YOLO系列总结

从YOLOv1到YOLOv2再到YOLO9000、YOLOv3, YOLO经历三代变革,YOLOv1创造性的将识别与定位合二为一,YOLOv2提升了定位的准确度,改善了召回率,YOLO9000是一种联合训练方法可以检测超过9000个类别的模型,YOLOV3有两点重大改进,即使用残差模型和使用FPN架构实现多尺度检测。YOLO是一种优秀的目标检测算法,在发展过程中在保持速度优势的同时,不断改进网络结构,同时汲取其它优秀的目标检测算法的各种trick,先后引入了anchor box机制和FPN实现多尺度检测等,提高了检测的速度和准确度

对于对象检测,不仅要考虑精度,还要考虑实时运行的性能,虽然现在算力大幅度上升,但是普通的设备跑起来还是有点吃力。提高精度和加快速率仍是目标检测的重大课题,道阻且长!

.
.

参考资料

YOLOV3论文
《YOLOv3: An Incremental Improvement》

YOLOV3论文及demo链接
https://arxiv.org/abs/1804.02767
https://github.com/pjreddie/darknet
https://pjreddie.com/media/files/papers/YOLOv3.pdf YOLOv3 Paper
https://blog.csdn.net/leviopku/article/details/82660381
https://mp.weixin.qq.com/s/yccBloK5pOVxDIFkmoY7xg

你可能感兴趣的:(2,感知perception,目标检测,算法,计算机视觉)