caffe下SSD训练与测试

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

配置Caffe-SSD

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

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

       make -j8
       make py
       make test -j8
       make runtest -j8
    

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

caffe下SSD训练与测试_第1张图片
Makefile.config
  • 数据文件准备

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

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

    • VOC2007 和 VOC2012 数据集

      进入caffe主目录下的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
    

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

    紧接着解压:

    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主目录,执行:

    ./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
    • 评估 & 检测
    python examples/ssd/score_ssd_pascal.py
    python examples/ssd/ssd_detect.py
    

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

    caffe下SSD训练与测试_第2张图片
    ssd_detect.py

训练

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

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

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

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

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类,其余的类别可以按照自己的需要照葫芦画瓢,给一个简单的示例:
    caffe下SSD训练与测试_第3张图片
    item.PNG

    然后,依次运行create_list.sh,create_data.sh.注意修改sh中的路径到你自定义的数据集路径。
    需要注意的参数有:
    create_data.sh: data_root_dir, data_name,mapfile
    create_list.sh: root_dir,
# create_list.sh 中应该注释掉
#    if [[ $dataset == "test" && $name == "VOC2012" ]]
#    then
#      continue
#    fi
  • 训练
    在python主目录下运行命令:
    python examples/ssd/ssd_pascal.py
#需要指定的路径与参数
...
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 下执行:

    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文档

    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/
    

你可能感兴趣的:(caffe下SSD训练与测试)