yolo_v2的训练过程

来源:互联网 发布:数据挖掘应用案例分析 编辑:程序博客网 时间:2024/04/28 15:11
最近在使用yolo_v2进行新的训练,所以总结了一下训练过程,以便加深自己的理解,菜鸟一只,如果哪里有理解的不对,还请指正,谢谢,接下来大概一下训练过程:

1. 训练所需要准备的数据,和v1版本的一样:

   A. 准备好Images,和保存类位置信息的Tags文件
   B. 使用脚本准备训练所需的label文件,imageList-all.txt,iamgeList-train.txt,imageList-validation.txt文件,其实我们只用到了iamgeList-train.txt文件

2. 修改cfg文件,cfg文件夹下有许多cfg文件,这里我们用的是cfg/yolo-voc.cfg,【region】层里classes=20,我们这里只训练一个类,所以改为:classes=1,修改最后一层卷 积层核参数个数,计算公式是依旧自己数据的类别数filter=num×(classes + coords + 1)=5×(1+4+1)=30,所以改为:filters=30

3. 接着需要修改cfg文件夹中的voc.data文件。这个按自己文件所放的路径修改,修改之后是:

   classes= 20  #修改为classes= 1
   train  = /home/pjreddie/data/voc/2007_test.txt  #改为你iamgeList-train.txt文件所在的绝对路径
   valid  = coco_testdev  #似乎没用到,不用管
   names = data/voc.names  #这里不用修改,下一步就是修改voc.names里的内容
   backup = /home/pjreddie/backup/  #这里是保存生成的权值的路径,你自己设置

4. 接着再修改data文件夹下voc.names文件里的内容,这里面你只需要保存你训练的类名就行,其它的可以全部删掉

5. 修改代码,有些内容需要改动

    A.去src里找到data.c文件,在代码里找void fill_truth_swag(),void fill_truth_region(),void fill_truth_detection()函数,分别添加上find_replace(path, "Images", "labels", labelpath);

    B.再打开detector.c文件,在void train_detector()函数里修改保存权值文件的迭代次数,默认好像是100次迭代保存一个结果,我改成了1000;

    C.打开image.c文件,在代码里找void draw_detections()函数,调节下画的框的大小(int width = im.h * .012;)(当然这里可以不用修改,我修改是因为边框有点粗影响了观看  检测的效果,所以这里根据自己情况选择);

D.全部完成之后,重新进行编译,make -j4。

6. 到这里,我们所有的准备工作就完成了,接下来就可以开始训练了,这里有两种情况:

    A.使用yolo官网提供的已经训练好的模型,初始化,进行训练:

      ./darknet partial cfg/darknet19_448.cfg darknet19_448.weights darknet19_448.conv.23 23

     ./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23

   B.用自己的数据集直接进行训练:

    ./darknet detector train cfg/voc.data cfg/yolo-voc.cfg 

7.训练结果出来后,我们就可以进行测试了,具体命令如下:

   测试图片:./darknet detector test cfg/voc.data cfg/yolo-voc.cfg yolo-voc_final.weights images.png

   测试视频:./darknet detector demo cfg/voc.data cfg/yolo-voc.cfg yolo-voc_final.weights test.MP4
  

0 0