Fork me on GitHub

ssd

SSD: Single Shot MultiBox Detector
从 Github 上面下载源工程代码:caffe-SSD

配置Caffe-SSD

  • 进入caffe-ssd 主目录:cp /home/xxx/…/caffe-ssd/

    1
    cp Makefile.config.example Makefile.config
  • 编译项目:(进入 caffe-ssd 主目录)

    1
    2
    3
    4
    make -j8
    make py
    make test -j8
    make runtest -j8

    CUDA 版本比较高的需要注释掉config里面最后一行内容:

Makefile.config

  • 数据文件准备

    • 预训练模型(VGG):VGG_ILSVRC_16_layers_fc_reduced.caffemodel
      (下载地址:密码: t9ub

      下载完毕后将VGG模型放到caffe主目录下 models\VGGNet 下面(如果没有的话,models 下面没有的话mkdir VGGNet)

    • VOC2007 和 VOC2012 数据集

      进入caffe主目录下的data目录:

      1
      2
      3
      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

      如果安装失败,请转到:(VOC 2007 & 2012 Dataset 密码:j3in

    紧接着解压:

    1
    2
    3
    tar -xvf VOCtrainval_11-May-2012.tar 
    tar -xvf VOCtrainval_06-Nov-2007.tar
    tar -xvf VOCtest_06-Nov-2007.tar
    • 将数据转换为caffe处理的数据类型(LMDB):

      cd caffe主目录,执行:

      1
      2
      ./data/VOC0712/create_list.sh
      ./data/VOC0712/create_data.sh

    注意在执行 create_data.sh 如果提示no module caffe 的话,用如下指令:
    export PYTHONPATH=$PYTHONPATH:/home/xxx/.../caffe主目录/python自行修改中间路径

    • 训练示例
      在caffe主目录下面运行:
      python examples/ssd/ssd_pascal.py
    • 评估 & 检测
      1
      2
      python examples/ssd/score_ssd_pascal.py
      python examples/ssd/ssd_detect.py

    这里注意指定使用的快照模型的路径 & 在caffe主目录下面运行程序
    ssd_detect.py

训练

  • 训练准备
    创建自己的数据目录myData:

    1
    2
    cd /data
    mkdir myData

    /data/VOC0712下面的create_list.sh,create_data.sh,labelmap_voc.protoxt这三个文件拷贝到’data/myData’:

    1
    2
    cp data/create* ./myData
    cp data/label* ./myData

    /data/VOCdevkit目录按照VOC数据框架下面创建myData,用来存放自己的数据集

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cd data/VOCdevikit
    mkdir myData
    cd myData
    mkdir Annotations
    mkdir ImageSets
    mkdir JPEGImages
    cd ImageSets
    mkdir Layout
    mkdir Main
    mkdir Segmentation

    一般地,我们只需要关注 :
    Annotations:XML描述文件
    ImageSets: Main目录下面放 train.txt, val.txt, trainval.txt, test.txt
    JPEGImages:存放所有图片

  • 制作VOC数据集
    按照VOC Dataset要求整理好数据集后,将之转换为caffe的输入数据。首先,根据自己数据集特点,修改labelmap_voc.protxt,注意保留item中background类,其余的类别可以按照自己的需要照葫芦画瓢,给一个简单的示例:
    labelmap
    然后,依次运行create_list.sh,create_data.sh.注意修改sh中的路径到你自定义的数据集路径。
    需要注意的参数有:
    create_data.sh: data_root_dir, data_name,mapfile
    create_list.sh: root_dir,

    1
    2
    3
    4
    5
    # create_list.sh 中应该注释掉
    # if [[ $dataset == "test" && $name == "VOC2012" ]]
    # then
    # continue
    # fi
  • 训练
    在python主目录下运行命令:
    python examples/ssd/ssd_pascal.py

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #需要指定的路径与参数
    ...
    train_data = xxx/xxx_test_lmdb
    test_data = xxx/xxx_trainval_lmdb
    ...
    model_name =
    save_dir =
    snapshot_dir =
    job_dir =
    output_result_dir =
    ...
    name_size_file =
    pretrain_model =
    label_map_file =
    ...
    num_classes =
    ...
    num_test_image =

    Note: solver parameters中GPU的指定,个数不要超过可用个数,可以用nvidia-smi来查看可用GPU情况;另外,也可以调整solver_param参数,比如:iter_size, max_iter, etc.

检测

  • score_pascal.py
    Note: 注意修改参数与ssd_pascal.py中的路径相同

  • ssd_detect.py**
    Note: 检测单张图片,指定‘–gpu_id’, ‘–model_def’, ‘–model_weights’, ‘–image_file’.

  • 批量完成test images的可视化

    • 利用caffe主目录下build/examples/ssd/ssd_detect.bin对test结果进行文本输出,输出的格式为 ( path,label,confidence,xmin,ymin,xmax,ymax )

    caffe root 下执行:

    1
    build/examples/ssd/ssd_detect.bin models/VGGNet/mydataset/SSD_300x300/deploy.prototxt 	models/VGGNet/mydataset/SSD_300x300/mydataset_SSD_300x300_iter_100236.caffemodel 	data/VOCdevkit/mydataset/test_img_path.txt --confidence_threshold 0.5 --out_file output.txt`
    • 利用plot_detections.py进行检测结果的可视化

    output.txt 是 ssd_detect.bin 生成的检测结果的txt文档

    1
    python examples/ssd/plot_detections.py output.txt /home/wxb/caffe-ssd --labelmap-file data/mydataset/labelmap_voc.prototxt --save-dir results/bbox_results/SSD_300x300/Main/img/
-------------The end Thanks-------------
You donation will be huge motivation for me.