利用YOLO实现自己的目标检测

因为很多是我按照记忆来写的,可能会有错误,大家一定按照给的链接为准,参考这些即可。。。。。

最近,在师哥的引导下,接触了一下YOLO算法,是近年来一个比较好的目标检测算法,而且它有自己的开源深度学习框架—darknet,使用起来比较简单,对于我一个新手来说,挺直白的这个,可以学习一下。

我是在ubuntu16.04下配置的darknet,darknet的安装比较简单,官网上有详细的步骤,按部就班就能装上。

darknet的   官网   

darknet的安装并不困难,但是因为要训练,就需要配置GPU,要安装显卡驱动,这里面的坑是巨大的,我是站在师哥的肩膀上,师哥已经配置好了,就方便多了,使用darknet不难,配置GPU是真的坑多,按照教程一步一步来,不行就多配置几遍,因为就算第一次配置成了,下一次也不一定成功,配置就是这么烦的工作。我推荐一个网址,可以按照下面链接的教程来。

                                                                  Ubuntu配置GPU

这里面比较别扭的是要很多操作要进入字符界面操作,但是像我这样对Ubuntu系统很不熟悉,几乎陌生的人,玩不转,但是只要耐心多弄几次,不会的就多百度,慢慢就弄出来了,详细的步骤就按照上面的教程来。

还需安装opencv,配置opencv。。。。。

下面说一下,怎么利用YOLO算法的darknet框架来进行自己的目标检测。

先贴一个github教程        

          Yolo-v3 and Yolo-v2 for Windows and Linux

就按照这个教程来,就能做出自己的目标检测了,下面我再解释几个重要的部分。

首先要有样本,我们要有图片,需要对图片进行标注,这里面就要用到一个标注工具  YOLO—mark,需要下载这个包,然后编译配置,安装这个教程来         YOLO—mark    

先把github上的这个包下载下来,解压,然后就把一些文件的参数改改,把图片替换成自己的就行。

先把 x64/Release下的yolo-obj.cfg 文件中的classes和filters改成自己的,classes就是你要检测目标一共有多少种,filters=(classes+5)*5,打开yolo-obj.cfg 文件,按住Ctrl+f搜索classes跟filters,改成自己需要的数,classes只有一个,filters有很多,改哪一个,看一下上面那个教程,只需要修改一处。。


然后再对x64/Release/data下的进行修改。img里面的照片换成自己的,按上面给的教程修改obj.data和obj.names文件里面的内容,obj.data文件里要修改的就是classes,自己检测多少种,就改多少。obj.names就是要检测目标的名字,比如cat,dog,car。。。。一个名字一行。。。train.txt不用动,这个文件是一会运行自动生成的,里面是你标注过的图片的路径。那两个文件怎么修改,参考上面的教程即可,这就不多啰嗦了。train.txt文件内容参考下图


首先cd Yolo_mark-master,先到Yolo_mark-master这个文件夹路径下

然后按照指令编译即可

cmake .     (注意cmake和  .  之间是有一个空格的)

make

编译好了会生成一些文件,如下图


第一个文件夹,第3,4个文件,还有倒数第三个可执行程序就是新生成的。

然后 ./linux_mark.sh 就会运行了。

输入./linux_mark.sh这个指令可能会报错,缺少权限,再输入指令

chmod a+x ./linux_mark.sh

再输入

./linux_mark.sh


应该就可以成功运行了,这就解决了标注问题。标注除了会生成那个train.txt文件外,再就会在img文件夹下生成一些txt文件,标注一张图片都会生成想应的txt文件,文件里面就是标注框的中心点坐标和标注框的长宽,长和宽是按照一定比例折算的,不是实际的大小。

剩下的工作就是将你所需要训练的照片都标注上,标注完成后将data文件复制到darknet/x64/Release/下,替换原来的data文件夹。


然后需要修改yolo-obj.cfg文件里面的内容,到darknet/cfg/下,找到yolov3.cfg,将里面的内容复制到yolo-obj.cfg文件中。

需要修改一些内容,还是按住Ctrl+f搜索classes,一共三处classes,换成你要检测的种类。再搜索yolo,将yolo层上面的filters改成(classes+5)*3,也是一共三处,参考下图。具体参考yolov3。。。for win and linux那个教程,会告诉具体修改哪一行。

这里要注意,不要跟配置标注工具的时候混淆了。。。。。。。filters的计算是不一样的,数目也不一样,标注工具的只有一处,这有三处。。。。。。

          


在训练的时候,按照下图


测试的时候,按照下图修改


正常训练过程如下图


如果,全部都显示nan,说明训练发生错误,可能是哪个文件没修改对,期望的是class趋近1,obj趋近1,no obj趋近0。

前900次,每100次会生成一个模型,后面10000次生成一个,存储在darknet/backup文件夹下


其中yolo-obj.backup这个是实时存储的,剩下的到了一定步数生成的。

在训练的时候一定要修改yolo-obj.cfg文件,将来转换为训练模式,测试的时候记得修改成测试模式。

下面是训练指令


./darknet detector train 是训练固定的   x64/Release/data 是obj.data的路径  x64/Release是yolo-obj.cfg的路径,cd darknet是到了darknet路径下,即它们都是在darknrt路径下的

下面是测试指令


backup/yolo-obj.backup是保存在backup文件下的训练生成的模型

data/test1241.jpg是data文件夹下的一张测试图片

对于一个ubuntu的新手来说,务必要搞清楚这些路径问题。。。。。。。


因为很多是我按照记忆来写的,可能会有错误,大家一定按照给的链接为准,参考这些即可。。。。。

阅读更多
想对作者说点什么? 我来说一句

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