美文网首页CAFFE深度学习目标检测
SSD算法caffe配置,训练及测试过程

SSD算法caffe配置,训练及测试过程

作者: Ericzhang922 | 来源:发表于2017-05-05 14:30 被阅读16497次

    最近由于需要在带有标注的VID视频数据集上利用caffe工具训练模型,所以需要将该种类型的原始数据文件转换成为lmdb格式的数据文件。在可获得的资料上可以查到SSD: Single Shot MultiBoxDetector,这种目标检测方法效果不错而且利用的是专门用来进行视频目标检测的数据集VOC2007/2012进行数据处理的,和我所需要处理的数据格式类似。所以首先简单的利用作者github上的文件进行了复现,感觉该方法的处理效果不错,速度相比fast-rcnn快但还是较慢,我使用的显卡是gtx950m显卡,测试中速度大概FPS=8左右,还是较慢。而且当检测的图片/视频文件内目标增多时,出现目标丢失/漏检的情况比较多。。。下面是实验的过程:

    • 在~/work/ssd/目录下clone作者github下的caffe文件包
       git clone https://github.com/weiliu89/caffe.git
       cd caffe
       git checkout ssd(出现“分支”则说明copy-check成功...作者caffe目录下有三个分支fcn/master/ssd,利用git checkout来切换分支,否则只有master目录下的文件)
    
    • 配置caffe所需文件进行编译
    cp Makefile.config.example Makefile.config
    

    根据电脑具体的配置修改Makefile.config(cudnn,opencv pythonpath等设置)具体可以参考Ubuntu16.04+CUDA8.0+caffe配置里面的Makefile.config和Makefile的设置。

    make -j 8 all
    make -j 8 runtest
    make -j 8 pycaffe  #model是通过python编写的文件进行训练的
    

    tips:如果在make all的时候出现/src/caffe/util/xxx.cpp报错,如io.cpp,bbox_util.cpp等报错问题,根据查到的一些资料显示可能是作者在生成ssd的时候用的是opencv2.0,而此处我用的是opencv3.2,这两个版本的opencv有很多不同的地方导致了这个错误,[Opencv 3.0环境下编译SSD的问题以及解决方法。]。所以我按照下面的这种方法Ubuntu 16.04 + Opencv3.0 + gtx1080 + caffe(SSD) + ROS(Kinetic)可以配置成功:

    cd ~/caffe 
    make clean
    mkdir build 
    cd build 
    cmake .. 
    make all -j16 
    make install 
    make runtest 
    make pycaffe
    
    • 下载预训练模型
      链接:http://pan.baidu.com/s/1miDE9h2
      密码:0hf2
      将它放入caffe/models/VGGNet/目录下
    • 下载VOC2007和VOC2012数据集,放到/home/data(需要在home目录下生成data文件夹)
    cd ..
       mkdir data
       cd data/
    
    • 下载数据集
    wget  http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
    wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
    wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
    

    然后解压数据集,这样数据就准备好了,注意这里选择讲数据放置在/home/data内是因为训练时的脚本文件内的数据路径是这里,也可以不放置在该文件夹内,但是需要在脚本文件内更新数据的路径。

    tar -xvf VOCtrainval_11-May-2012.tar
    tar -xvf VOCtrainval_06-Nov-2007.tar
    tar -xvf VOCtest_06-Nov-2007.tar
    

    将图片转化为LMDB文件,用于训练。注意这两个文件对于我们训练ilsvrc数据集很有帮助!

       cd ..
       cd caffe/
       ./data/VOC0712/create_list.sh  
       ./data/VOC0712/create_data.sh
    
    • 开始训练
    python examples/ssd/ssd_pascal.py
    

    经过120000次的训练之后,我们可以得到所需要的带有超参数的训练model。

    I0505 06:15:46.453992  7203 solver.cpp:596] Snapshotting to binary proto file models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel
    I0505 06:15:47.089884  7203 sgd_solver.cpp:307] Snapshotting solver state to binary proto file models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.solverstate
    I0505 06:15:48.236326  7203 solver.cpp:332] Iteration 120000, loss = 4.45728
    I0505 06:15:48.236359  7203 solver.cpp:433] Iteration 120000, Testing net (#0)
    I0505 06:15:48.236398  7203 net.cpp:693] Ignoring source layer mbox_loss
    I0505 06:24:21.998587  7203 solver.cpp:546]     Test net output #0: detection_eval = 0.570833
    I0505 06:24:22.015635  7203 solver.cpp:337] Optimization Done.
    I0505 06:24:22.028441  7203 caffe.cpp:254] Optimization Done.
    
    • 模型测试
      (1)图片数据集上测试
    python examples/ssd/score_ssd_pascal.py
    

    输出为:

    I0505 10:32:27.929069 16272 caffe.cpp:155] Finetuning from models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel
    I0505 10:32:28.052016 16272 net.cpp:761] Ignoring source layer mbox_loss
    I0505 10:32:28.053956 16272 caffe.cpp:251] Starting Optimization
    I0505 10:32:28.053966 16272 solver.cpp:294] Solving VGG_VOC0712_SSD_300x300_train
    I0505 10:32:28.053969 16272 solver.cpp:295] Learning Rate Policy: multistep
    I0505 10:32:28.197612 16272 solver.cpp:332] Iteration 0, loss = 1.45893
    I0505 10:32:28.197657 16272 solver.cpp:433] Iteration 0, Testing net (#0)
    I0505 10:32:28.213793 16272 net.cpp:693] Ignoring source layer mbox_loss
    I0505 10:42:04.390517 16272 solver.cpp:546]     Test net output #0: detection_eval = 0.570833
    I0505 10:42:04.414819 16272 solver.cpp:337] Optimization Done.
    I0505 10:42:04.414847 16272 caffe.cpp:254] Optimization Done.
    

    可以看到图片数据集上的检测结果为57.0833%。利用caffe/examples/ssd_detect.ipynb文件可以用单张图片测试检测效果(注意文件内加载文件的路径,如果报错修改为绝对路径):

    fish-bike.png cat.png horse-race.png

    (2)视频数据测试

    python examples/ssd/ssd_pascal_video.py 
    

    可得到测试结果:

    detect1 detect2 detect3.png

    通过上面的检测结果可以看出测试的准确性还可以,但是也存在漏检的情况,而且速度也只有FPS=8左右。

    (3)摄像头上测试:

     python examples/ssd/ssd_pascal_webcam.py
    

    因此通过SSD的方法可以用来训练和检测交通标志,文本检测或人脸检测等等,也可以用此方法来讲带有标记信息的视频目标检测数据集进行转换,生成所需要的lmdb格式的数据文件。

    相关文章

      网友评论

      • 默写年华Antifragile:楼主你好,请问训练(ssd_pascal.py)出来的mAP和测试(score_ssd_pascal.py)出来的mAP一样是对的吗?看楼主上面的是一样的,我的也是一样的,但是按理说不应该一样

      本文标题:SSD算法caffe配置,训练及测试过程

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