计算机视觉caffe之路第四篇:VOC2007数据集训练及预测实例

10 篇文章 0 订阅
3 篇文章 0 订阅

1.准备工作

1). 下载预训练模型

http://cs.unc.edu/~wliu/projects/ParseNet/VGG_ILSVRC_16_layers_fc_reduced.caffemodel

将此文件放置在/home/software/caffe/models/VGGNet/目录下,如果原来有,最好备份一下。

2). 下载VOC2007数据集

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

主要应用VOCtrainval_06-Nov-2007.tar、VOCtest_06-Nov-2007.tar, 两个文件解压都得到VOCdevkit

3).合并VOC2007数据集的trainval和test
VOCtrainval_06-Nov-2007.tar、VOCtest_06-Nov-2007.tar解压得到的VOCdevkit直接合并,则其中Annotations、ImageSets、JPEGImages、SegmentationClass和SegmentationObject都包含了trainval、train、var和test类型的文件。

4).文件夹放置

  • 将VOCdevkit放在/home/working/目录下:
    /home/working/VOCdevkit
  • /home/software/caffe/data目录下,将原来的VOC0712文件夹复制备份,此文件夹包含create_data.sh、create_list.sh、labelmap_voc.prototxt以及生成的test.txt、test_name_size.txt、trainval.txt
    /home/software/caffe/data/VOC0712
    /home/software/caffe/data/VOC0712_bak

  • /home/software/caffe/examples目录下,将原来的VOC0712文件夹复制备份,此文件夹用于放置生成的lmdb文件:
    /home/software/caffe/examples/VOC0712
    /home/software/caffe/examples/VOC0712_bak

  • /home/software/caffe/models/VGGNet目录下,将原来的VOC0712文件夹复制备份,此文件夹用于放置生成的SSD_300X300模型文件夹:
    /home/software/caffe/models/VGGNet/VOC0712
    /home/software/caffe/models/VGGNet/VOC0712_bak

  • /home/software/caffe/jobs/VGGNet目录下,将原来的VOC0712文件夹复制备份,此文件夹用于放置生成的VGG_VOC0712__SSD_300X300.sh等文件,当将/home/software/caffe/examples/ssd/目录下的ssd_pascal.py等Python文件内的run_soon参数改为False的时候,就需要手动执行这个.sh文件启动模型训练:
    /home/software/caffe/jobs/VGGNet/VOC0712
    /home/software/caffe/jobs/VGGNet/VOC0712_bak

  • /home/software/caffe/jobs/VGGNet目录下,新建一个results文件夹,此文件夹用于放置模型训练结果,此步骤选做,主要目的是为了模型训练数据集中管理:
    /home/software/caffe/jobs/VGGNet/results

2.修改各类原始文件路径

由于第一步新建了用户自己的目录(为了不破坏原始数据),因此需要将各文件内的路径修改指向到用户目录下。
1).修改/home/software/caffe/dataVOC0712目录下的create_data.sh、create_list.sh

# create_list.sh
# !/bin/bash
# data_root_dir="$HOME/data/VOCdevkit"
root_dir=/home/working/VOCdevkit ## 自行修改
sub_dir=ImageSets/Main
bash_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
for dataset in trainval test
do
  dst_file=$bash_dir/$dataset.txt
  if [ -f $dst_file ]
  then
    rm -f $dst_file
  fi
  for name in VOC2017 ## 自行修改
# create_data.sh
# !/bin/bash
cur_dir=$(cd $( dirname ${BASH_SOURCE[0]} ) && pwd )
root_dir=$cur_dir/../..

cd $root_dir

redo=1
# data_root_dir="$HOME/data/VOCdevkit"
data_root_dir="/home/working/VOCdevkit" ## 自行修改
dataset_name="BIRD2017"

2).将/home/software/caffe/examples/ssd/ssd_pascal.py备份

/home/software/caffe/examples/ssd/ssd_pascal_bak.py
/home/software/caffe/examples/ssd/ssd_pascal.py

修改其中的路径及配置:

train_data = "examples/VOC0712/VOC0712_trainval_lmdb" # 训练数据路径,

test_data = "examples/VOC0712/VOC0712_test_lmdb" # 测试数据路径

model_name = "VGG_VOC0712_{}".format(job_name) # 模型名字

save_dir = "models/VGGNet/VOC0712/{}".format(job_name) # 模型保存路径

snapshot_dir = "models/VGGNet/VOC0712/{}".format(job_name) # snapshot快照保存路径

job_dir = "jobs/VGGNet/VOC0712/{}".format(job_name) # job保存路径

output_result_dir = "{}/data/VOCdevkit/results/VOC2007/{}/Main".format(os.environ['HOME'], job_name) # 测试结果txt保存路径
改为:
output_result_dir = "jobs/VGGNet/results/VOC2007/{}/Main".format(job_name)

name_size_file = "data/VOC0712/test_name_size.txt" # 

label_map_file = "data/VOC0712/labelmap_voc.prototxt" # label文件路径

num_classes = 21 # 总类别数

gpus = "0,1,2,3" # 使用哪块GPU
改为:
gpus = "0" # 只有1块GPU

batch_size = 32 # 一次处理的图片数
batch_size = 2 # Jetson TX1经测试选择2勉强满足
accum_batch_size = 2 

# Evaluate on whole test set.
num_test_image = 4952 # 测试图片数量,这个数量应该和test_name_size.txt保持一致
test_batch_size = 2 # Jetson TX1经测试选择2勉强满足


run_soon = True # 生成文件后自动开始训练
run_soon = False # 手动挡,需要自己执行`/home/software/caffe/jobs/VGGNet/VOC0712/VGG_VOC0712_SSD_300X300.sh`

学习率设置,学习率不宜过小,我设置base_lr 为0.000002,则学习率为:base_lr *25 = 0.00005。

# Use different initial learning rate.
if use_batchnorm:
    base_lr = 0.0004
else:
    # A learning rate for batch_size = 1, num_gpus = 1.
    base_lr = 0.000002

模型保存周期:

solver_para={
···
'snapshot':10000, #原来为80000,改小写方便及时存储模型,否则出错又会从0开始训练
···
}

3.生成文件

注意:以下命令执行均需在caffe根路径下执行,否则会出错!

1).运行create_list.sh

cd home/software/caffe
./data/VOC0712/create_list.sh

生成:
这里写图片描述

2).运行create_data.sh

cd home/software/caffe
./data/VOC0712/create_data.sh

生成lmdb文件:
这里写图片描述

3).运行ssd_pascal.py

cd home/software/caffe
python examples/ssd/ssd_pascal.py
./jobs/VGGNet/VOC0712/VGG_VOC0712_SSD_300X300.sh #如果run_soon为True,则无需此步骤

至此训练就正式开始了,过程较长。

4.模型测试

1).图片数据集上测试

cd home/software/caffe
python examples/ssd/score_ssd_pascal.py

2).webcam测试:

在caffe的根目录运行ssd_pascal_webcam.py这个文件,这是使用摄像头实时测试的软件,读取的caffemodel是在caffe/models/VGGNet/VOC0712/SSD_300x300_webcam下最新的model,所以记得在这个文件夹中放入模型。 还要更改下ssd_pascal_webcam.py中label_map_file到你的labelmap_voc.prototxt

cd home/software/caffe
python examples/ssd/ssd_pascal_webcam.py

3).ssd_detect.cpp文件测试:

./build/examples/ssd/ssd_detect.bin models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel examples/videos/test.txt --file_type video --out_file output.txt --confidence_threshold 0.4



参考文献:

SSD算法caffe配置,训练及测试过程
SSD: Single Shot MultiBox Detector 训练KITTI数据集(1)
深度学习ssd配置并在VGG模型上训练自己的数据

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值