前言

Mobilenet SSD框架搭好后,我们就可以开始对自己数据集进行训练,然后验证其模型是否运行正确。

准备工作

1)数据集复用SSD项目的,不用拷贝过来,直接使用软链接,如下所示。

 ln -s /work/xxx/caffe_ssd/data/VOCdevkit/VOC201909/lmdb/VOC201909_test_lmdb/ test_lmdb

ln -s /work/xxx/caffe_ssd/data/VOCdevkit/VOC201909/lmdb/VOC201909_trainval_lmdb/ trainval_lmdb 

2)使用下面命令来生成网络结构文件

#注,9是我自己数据集的种类数目,包括背景
sh gen_model.sh 9

该命令会在./example下生成三个网络结构相关的文件

 MobileNetSSD_deploy.prototxt, MobileNetSSD_test.prototxt以及MobileNetSSD_train.prototxt

3)编辑本项目根目录下的solver_train.prototxt,并更改设置如下。重要部分已经用中文注释表示出来:

train_net: "example/MobileNetSSD_train.prototxt"  #网络训练模型定义文件
test_net: "example/MobileNetSSD_test.prototxt"    #网络测试模型定义文件
test_iter: 21
test_interval: 10000                              #train10000次就测试一次
base_lr: 0.0005       
display: 10
max_iter: 50200                                   #最大train的迭代次数
lr_policy: "multistep"
gamma: 0.5
weight_decay: 0.00005
snapshot: 10000                                   #每隔10000次训练就存储当前模型文件一次
snapshot_prefix: "snapshot/mobilenet"
solver_mode: GPU
debug_info: false
snapshot_after_train: true
test_initialization: false
average_loss: 10
stepvalue: 20000
stepvalue: 40000
iter_size: 1
type: "RMSProp"
eval_type: "detection"
ap_version: "11point"

 4)编辑(vi) ./labelmap.prototxt来使得目标类型名和待训练数据集对应起来。

训练模型 

vi ./train.sh 

#!/bin/sh
if ! test -f example/MobileNetSSD_train.prototxt ;then
        echo "error: example/MobileNetSSD_train.prototxt does not exist."
        echo "please use the gen_model.sh to generate your own model."
        exit 1
fi
mkdir -p snapshot
/work/xxx/caffe_ssd/build/tools/caffe train -solver="solver_train.prototxt" \
-weights="mobilenet_iter_73000.caffemodel" \
-gpu 0

使用基础SSD 项目中的build/toos/caffe工具训练模型。 其中 mobilenet_iter_730000.caffemodel是预训练模型。

train.sh修改完成后,就可以敲入命令: sh ./train.sh 开始训练。 训练好的模型存储在./snapshot下。

 

 

 


 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐