-
V1,CVPR2016:https://arxiv.org/abs/1506.02640
-
V2,CVPR2017:https://arxiv.org/abs/1612.08242
1、yolov1
- 速度快,能够达到实时的要求。在 Titan X 的 GPU 上 能够达到 45 帧每秒。
- 使用全图作为 Context 信息,背景错误(把背景错认为物体)比较少。
- 泛化能力强。
-
YOLO的核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。
-
faster RCNN中也直接用整张图作为输入,但是faster-RCNN整体还是采用了RCNN那种 proposal+classifier的思想,只不过是将提取proposal的步骤放在CNN中实现了。
实现方法:
将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。
整体来看,Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测,整个系统如图5所示:首先将输入图片resize到448x448,然后送入CNN网络,最后处理网络预测结果得到检测的目标。相比R-CNN算法,其是一个统一的框架,其速度更快,而且Yolo的训练过程也是end-to-end的。
网络设计
Yolo采用卷积网络来提取特征,然后使用全连接层来得到预测值。网络结构参考GooLeNet模型,包含24个卷积层和2个全连接层。对于卷积层,主要使用1x1卷积来做channle reduction,然后紧跟3x3卷积。对于卷积层和全连接层,采用Leaky ReLU激活函数: 。但是最后一层却采用线性激活函数。
都是搬运的笔记,重点做的记录,更多内容:https://zhuanlan.zhihu.com/p/32525231
在实现上,GitHub上已经有很多代码,我主要实现了yolov3与yolov5,分别在给定的任务数据集上,我觉得难点主要在数据集处理上做的工作。我们的数据集主要是图片跟labelimage标注好的label文件。
在yolov3上参考了:https://blog.csdn.net/sinat_27634939/article/details/89884011,yolov3官方代码为:https://github.com/ultralytics/yolov3,这里构建数据集用的是voc格式的,格式区别参考:( YOLO,VOC数据集标注格式解析_xiaobumi123的博客-CSDN博客)
结构为:
MakeText代码为:(主要构建ImageSets内的路径文件)
构造lables的代码为:
具体链接:https://blog.csdn.net/sinat_27634939/article/details/89884011
按照这种方法来运行的时候有错误,错误在:
data_dict = yaml.load(f, Loader=yaml.FullLoader)
提示data_dict 是一个str,我强制将data_dict改成一个字典可以运行:
数据集在yolov5上进行调试,这里需要将数据集转换成yolo格式的:主要参考的(https://blog.csdn.net/laovife/article/details/106802725)
进行数据转换参考的:( 将XML数据集转换为YOLOv3格式数据集_sxfd91307的博客-CSDN博客)
用的模型是官网的demo: https://github.com/ultralytics/yolov5
大概展示一下yolov5的效果:
train:
test:
左边是标签,右边是训练出来的。
参数展示:
由于是笔记本跑的,训练图片为500张,测试图片为65张,训练epochs为10,batch-size为2,训练数据增多,epochs增大效果会更好