YOLO v1之总结篇(linux+windows)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_14845119/article/details/53612362

 

论文解读篇:

YOLO出自2016 CVPR You Only Look Once:Unified, Real-Time Object Detection,也是一个非常值得学习的框架,不得不说facebook的技术就是牛啊。

 

整个训练和检测框架都是端到端,YOLO达到了45帧每秒,Fast YOLO达到了155帧每秒,除了刚开始加载模型有点慢,检测部分确实是非常的快。

         整个检测过程分为3个阶段,

(1)将图像缩放到448*448

(2)通过神经网格进行检测和分类

(3)NMS抑制,输出最终结果

 

该模型首先,将输入的图像分为S*S个grid,然后每个grid产生B个预测边界框(包括,x,y,windth,height,confidence)和C类判别属性,最终将输出S*S*(B*5+C)维度的向量。

         在VOC上训练中,S=7,B=2,C=20,最终输出7*7*(2*5+20)维度的信息。

 

YOLO包含24个卷基层,2个全连接层,FastYOLO只包含9个卷基层,因此速度快很多,当然代价就是精度也相应的有损失。

         YOLO V1的所有损失函数的loss都是采用的L2 loss,包括边框中心坐标x,y,宽高w,h。边框的得分c,分类的得分p。

并且权衡了边界框的损失和类别判断的损失,使得边界框的损失是类别判断损失的10倍,即λcoord。使得更多的loss用来优化边框的回归。

同时兼顾了大的边界框和小的边界框的IOU偏差,使得同样的损失在大框中表现出很小的影响,小框中则变现出很大的影响。即使用了sqrt形式的w,h的L2 loss。

 

其中,

λcoord =5 ,

λnoobj =0.5,

1obji 表示是否物体出现在gridcell i中,

1objij表示grid cell i中的第j个边界框预测到了正确类别。

         训练过程数据:

epoch:135

batch size:64

momentum:0.9

decay:0.0005

learning rate:前75为0.01,中间30为0.001,最后30为0.0001

dropout layer rate:0.5

 

YOLO的优势在于,外围库的依赖少,纯c和CUDA写成,唯一的依赖就是pthreads,不像caffe那样需要一堆的dll。当然,缺点就是,训练的模型文件太大,750多M,2G显存的电脑直接挂掉,tiny-yolo虽然小,但是效果却大打折扣。另一个缺点就是由于其自身结构的设计,使得对聚集,堆叠的物体检测不是很好,当然,fast RCNN,ssd等在这点上也没有变现出不俗的效果。就YOLO v1的速度和识别率来看,还是比SSD差点。当然所有的这些都在YOLO v2中得到了大大的改善。

 

 

linux篇:

YOLOv1的官方链接为,http://pjreddie.com/darknet/yolov1/

安装步骤:

 

git clonehttps://github.com/pjreddie/darknet.git
cd darknet
vim Makefile
修改GPU=1  OPENCV=1
make -j8
wgethttp://pjreddie.com/media/files/yolov1.weights
./darknetyolo test cfg/yolov1/yolo.cfg yolov1.weights data/dog.jpg

 

 

 

 

 

注意这里,yolov1.weights,官网现在给的是753M的,实际上我用这个没有跑出结果,用了小伙伴的780多M的成功跑出了上面的结果,就这一个地方,折腾了一下午,换了不同机器测试过,也是被官网坑了啊。如果不对之处,还请大神斧正。

至此,YOLOv1就安装完毕,又可以愉快的玩耍了。

 

windows篇:

由于原版的官方YOLOv1是只支持linux 和mac的,如果要自己修改,可能需要走好对哦的坑,同时还得具备一定的技术水平,幸好有革命斗士为我们走出了这一步,

可以参考下面2个YOLO-windows,

https://github.com/frischzenger/yolo-windows

https://github.com/AlexeyAB/yolo-windows

 

随便下载上面的一个yolo,然后进入yolo-windows-master\build\darknet\下面,用vs2013直接打开darknet.sln,选择,x64版本,只要配置opencv和pthreads就可以,

为了方便大家参考,这里贴出本人的环境配置,

 

vc++目录,可执行文件,

 

E:\opencv2_4_12\build\x64\vc12\bin;
G:\yolo-windows-master\3rdparty\dll\x64;

 

 

 

vc++目录,包含目录,

 

 

 

E:\opencv2_4_12\build\include;
E:\opencv2_4_12\build\include\opencv;
E:\opencv2_4_12\build\include\opencv2;
G:\yolo-windows-master\3rdparty\include;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include(GPU版本加)

 

 

 

vc++目录,库目录,

E:\opencv2_4_12\build\x64\vc12\lib;
G:\yolo-windows-master\3rdparty\lib\x64;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64(GPU版本加)

 

链接器,输入,下面为release的输入,debug只将opencv的lib换成相应debug即可。

 

pthreadVC2.lib;
opencv_calib3d2412.lib;
opencv_contrib2412.lib;
opencv_core2412.lib;
opencv_features2d2412.lib;
opencv_flann2412.lib;
opencv_gpu2412.lib;
opencv_highgui2412.lib;
opencv_imgproc2412.lib;
opencv_legacy2412.lib;
opencv_ml2412.lib;
opencv_objdetect2412.lib;
opencv_ts2412.lib;
opencv_video2412.lib;
cublas.lib(GPU版本加)
curand.lib(GPU版本加)
cudart.lib(GPU版本加)

 

c/c++,预处理器

 

_CRT_SECURE_NO_WARNINGS
OPENCV
GPU(GPU版本加)

 

环境配好,点击生成就可以,

 

debug版本的生成信息,

release版本的生成信息,

 

进入,yolo-windows-master\build\darknet\x64\Release\下面,

去官网链接,http://pjreddie.com/media/files/yolov1.weights,下载好yolov1.weights,

然后运行,darknet.cmd,随便输入一张图像,例如,person.jpg,就会出来运行效果。

其中第一个为cpu+debug版本,第二个为cpu+release版本,

 

 

references:

https://github.com/watersink/yolov1_tutorial

 

 

展开阅读全文

没有更多推荐了,返回首页