美文网首页
[转]Yolo训练自己的数据集教程 Newest(2016-12

[转]Yolo训练自己的数据集教程 Newest(2016-12

作者: angerskon | 来源:发表于2017-06-29 18:00 被阅读652次

    refer

    Yolo darknet训练自己的数据集教程(Newest 2016.12.23)

    经过两天的折腾终于搞定了Yolo训练自己的数据集的过程,整个过程其实并不繁琐,只是网上一些过时的教程已经不适用了,依照那个反而让大家各种出出错,加之Yolo中文教程过少,因此本大神再次放一个,如果大家有任何问题直接在文章后面评论即可,笔者看到之后给予第一时间回复。

    先插一句,Atom中文不能跟随窗口wrap文字的同学,打开settingview,设置soft wrap即可,百度上的答案真的是渣

    Yolo简介

    在训练数据集之前,相信大家对yolo应该有一些了解,本文所采用的测试环境为:Ubuntu 16.04 + opencv2.4 + cuda8 + cudnn5.1 PLUS GTX1080,当然这个硬件不是必须,在下只是偶尔装一下逼。Yolo基于darknet编写,而编译draknet的时候最好安装一下opencv,因为没有opencv图不会自动弹出,没有那种快感,你懂得,不知道如何安装opencv的同学去我之前写的几个博客中搜寻。均能够找到最新的答案。

    yolo之所以快,是因为它的方法和fastrcnn以及其他detect算法不同,而采用了很多ssd的思想,在最新的更新中,yolo也改进了他们的算法,在pascal voc数据集上取得了不错的结果。本文将主要利用yolo来做realtime detect,对自己的数据进行训练和预测。

    开始开车

    OK,闲话不多说,让我们直接上车,这次是无人驾驶,速度比较快,大家系好安全带。

    Step 1 编译darknet,并熟悉目录结构

    第一部分没有什么说的,很简单其实,首先clone代码到本地~目录:

    cd ~
    git clone https://github.com/pjreddie/darknet
    cd darknet
    make
    这个时候我们在home根目录就有了darknet了。直接编译,不需要修改任何参数,当然如何你是土豪,你有GTX1080,像我一样(手动装比)。可以编译一下Makefile里面的参数。为了防止大家出错我还是说一下,直接改标志为:

    GPU=1
    CUDNN=1
    OPENCV=0
    DEBUG=0
    如果你的cuda没有设置环境变量,nvcc的路径也设置一下:

    NVCC=/usr/local/cuda/bin/nvcc
    不要想的很复杂其实很简单。ok,现在直接make,编译就可以了。

    **Step 2 准备自己的数据集 **

    好了我们现在有了darktnet,但是我要那个匡出物体的掉炸天的图怎么搞?莫慌,我们先用darknet自带的测试数据来测试一下。 首先呢,yolo这个网络是训练VOC数据集得来的,20中物体都能识别出来,我们直接下载已经训练好的权重然后来预测一张图片看看:

    wget http://pjreddie.com/media/files/yolo.weights
    这时候我们就下载好了yolo.weights,在darknet目录下。然后我们就可以用这个权重来预测啦!

    ./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
    detect命令意思是,检测,后面还有i一个命令是detector train,后者是训练的命令,预测用detect,cfg/yolo.cfg就是yolo这个网络的结构文件,后面是权重,最后后面是图片。 ok,enter你就可以看到狗和自行车了!~ 这就搞定了darknet,那么问题来了。自己的数据集怎么准备呢? 重点来了重点来了: * images 准备

    首先,把你的图片放到一个/images 文件夹下面,文件名的名字要有规律,比如0001.jpg,0002.jpg….0100.jpg;

    xml 准备
    我相信很多人都需要用图片标注工具来对图片生成标注信息来训练,但是图片标注工具生成的多半是xml的标签信息。darknet需要的label并不是xml格式,而是一张图片一个txt的形式,txt中是你标注的物体方框坐标。后面我会放出几个脚本来处理。

    xml 转 darknet label
    xml转为darknet需要的label形式,一张图片一个标注信息。

    生成图片路径 最后一部我们要生成两个txt文件,一个是train.txt,一个是valid.txt,train.txt包含了你训练图片需要的图片路径,没一行都是一张图片的路径,为了防止出错,后面我放出一个统一的脚本生成这个train.txt。
    Step 3 训练之前修改darknet参数

    接下来就要修改darknet的参数了,只要修改/cfg/voc.data 文件,因为yolo是为了voc而存在的,为了不修改源代码的情况下来训练我们的数据,建议直接修改voc.data而不是修改voc.data文件名。修改内容如下:

    classes= 20
    train = /home/pjreddie/data/voc/train.txt
    valid = /home/pjreddie/data/voc/2007_test.txt
    names = data/voc.names
    backup = /home/pjreddie/backup/

    这里,classes就是你数据集的类别,names你的新建一个,在data下面,然后在这里指向它,仿照voc.names 新建即可。 修改train.txt valid.txt的路径,用绝对路径哦,防止出错,因为你darknet和数据可能不再一个目录。 ok,这就setup完了,接着直接训练。 不过训练之前获取一个预处理的权重:

    curl -O http://pjreddie.com/media/files/darknet19_448.conv.23
    然后,train:

    ./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23
    对了,如果你上面改了voc.data的文件名,这里也要改,所以说其实改也是可以的。然后yolo-voc.cfg就可以不改了。

    Step 4 yolo训练出的模型预测

    ./darknet detect cfg/yolo-voc.cfg /backup/voc.weights data/sample.jpg
    这里不要和直接copy我的代码,cfg/yolo-voc.cfg就是我们训练的网络。后面是训练保存的权重,最后是你要预测的图片。 OK,看看结果咋么样~

    相关文章

      网友评论

          本文标题:[转]Yolo训练自己的数据集教程 Newest(2016-12

          本文链接:https://www.haomeiwen.com/subject/mwhvcxtx.html