zoukankan      html  css  js  c++  java
  • Caffe上用SSD训练和测试自己的数据

        学习caffe第一天,用SSD上上手。

       我的根目录$caffe_root为/home/gpu/ljy/caffe

       一、运行SSD示例代码

       1.到https://github.com/weiliu89/caffe.git下载caffe-ssd代码,是一个caffe文件夹

       2.参考已经配好的caffe目录下的makefile.config修改¥caffe_root下的makefile.config.

       3.在$caffe_root下打开命令行终端,输入以下命令

    make -j8
    make py
    make test -j8
    make runtest -j8
    编译完成
    4.下载VGG_ILSVRC_16_layers_fc_reduced.caffemodel预训练模型,放到$caffe_root/models/VGG下。(没有VGG文件夹就建一个)
    下载数据集VOCtest_06_Nov-2007.tar等三个压缩包放在$caffe_root/data下,并解压。
    5.修改
    ./data/VOC0712/create_list.sh里面的路径为自己的路径,修改./data/VOC0712/create_data.sh,本文如下图所示:(VOC0712文件夹可能没有,那就从网上下一个)

          

     6.命令行切换到$caffe_root并执行上面两个脚本,直接命令行输入就是执行
    7.训练,命令行输入下面:
    python examples/ssd/ssd_pascal.py
    或者下载训练好的模型
    8.测试
    A.python examples/ssd/score_ssd_pascal.py
    这个要先改里面的gpu个数,输出是分数
    B.python examples/ssd/plot_detections.py
    输出是是视频的标注...
    C. ./.build_release/examples/ssd/ssd_detect.bin models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel /home/gpu/ljy/caffe/data/ljy_test/TestData/pictures.txt
    这是单张图片的测试,C++版本的,其中ctrl+h可以查看隐藏文件夹,最后那个pictures.txt是待测试文件夹的路径列表,如下图:

       

          

         测试结果如下:(暂时还不知道输出的都是什么东西,可能是类别、置信度和位置吧)

         

        D 单张图片测试,python版本

        点开ssd_detect.ipynb,复制并保存为ssd_detect.py,然后修改里面的路径(包括$caffe_root和测试图片的路径),并在最后加上plt.show()

        然后命令行运行该代码即可

    
    

       二、训练并测试自己的数据

        1.生成训练和测试数据

         我们自己的数据基本是jpeg或者其他图片格式的,而caffe输入的一般是LMDB的数据,所以我们要进行转换。我们转换的方法是

         A.将图像用工具进行标注(工具这里先不介绍),得到txt标注文件

         B.将txt文件和图片转换成VOC格式(用脚本)

         C.将VOC格式转换为LMDB格式,利用SSD示例代码提供的转换脚本。

     (1) 在 $caffe_root/data/VOCdevkit目录下创建ljy_test目录,该目录中存放自己转换完成的VOC数据集;
    (2) $CAFFE_ROOT/examples目录下创建ljy_test目录;
    (3) $CAFFE_ROOT/data目录下创建ljy_test目录,同时将data/VOC0712下的create_list.sh,create_data.sh,labelmap_voc.prototxt
    这三个文件copy到ljy_test目录下,分别重命名为create_list_ljy_test.sh,create_data_ljy_test.sh, labelmap_ljy_test.prototxt
    (4) 对上面新生成的两个create文件进行修改,主要修改是将VOC0712相关的信息替换成ljy_test
    修改后的两个文件分别如下:


    然后修改
    labelmap_indoor.prototxt,将该文件中的类别修改成和自己的数据集相匹配,注意需要保留一个label 0 , background类别

          完成上面步骤的修改后,可以开始LMDB数据数据的制作,在$CAFFE_ROOT目录下分别运行:

      ./data/ljy_test/create_list_indoor.sh

      ./data/ljy_test/create_data_indoor.sh

      命令执行完毕后,可以在$CAFFE_ROOT/examples/ljy_test目录下查看转换完成的LMDB数据数据。

       2.训练

      A.将预训练好的模型放在$CAFFE_ROOT/models/VGGNet下(我们这里在运行SSD示例代码的4已经放过了,可以省略)

     B.将$caffe_root/examples/ssd/ssd_pascal.py拷贝到自己的文件夹$caffe_root/examples/ljy_test/下,并重命名为ssd_pascal_ljy.py

     C.修改ssd_pascal_ljy.py为自己的各个路径,其中要在$caffe_root/models/VGGNet/下建立ljy_test文件夹,修改如下:

     

      

      

      

      D.执行训练代码。在$caffe_root下打开命令行,并输入

    python examples/ljy_test/ssd_pascal_ljy.py
    等待训练就可以了...
    有可能遇到loss=nan的情况,这个待议,正常情况下是下面酱紫的:

      3.测试

      A.c++版本的测试

       跟上面ssd示例测试的差不多,改一下路径即可

      B.python版本的测试

      同最上面

      4.参考:http://blog.csdn.net/u014696921/article/details/53353896,https://github.com/weiliu89/caffe.git

  • 相关阅读:
    PHP运行出现Notice : Use of undefined constant 的解决办法
    Winfrom 设置Panel添加滚动条
    Unable to find the wrapper ”https”
    winfrom 控件的显示隐藏方法
    winfrom 窗体控件实现二级联动
    【最小生成树】Bzoj1601[Usaco2008 Oct]灌水
    【强连通分量】Bzoj1051 HAOI2006 受欢迎的牛
    【Homework】LCA&RMQ
    【建图+最短路】Bzoj1001 狼抓兔子
    【组合数学】Bzoj2916 [Poi1997]Monochromatic Triangles
  • 原文地址:https://www.cnblogs.com/EstherLjy/p/6863890.html
Copyright © 2011-2022 走看看