MobileNet_YOLOv3有着速度快,mAP高的优势
这是MobileNet_SSD,这个推理速度稍微快一点
在MobileNet_YOLOv3如何训练自己的数据
第一步、生成lmdb数据集
这一步在此就不用多说了,第六章有详细介绍:
https://blog.csdn.net/hunzhangzui9837/article/details/88319710
第二步、训练
1、搭建环境
主要是cuda、cudnn、opencv以及python相关的包的安装,详情参考:
https://blog.csdn.net/hunzhangzui9837/article/details/87939458
2、下载
git clone https://github.com/eric612/MobileNet-YOLO.git
3、编译
cd $MobileNet-YOLO_root/
mkdir build`
cd build
cmake ..
make -j4
make pycaffe
可以通过运行里面的demo,测试是否编译成功,如:
cd $MobileNet-YOLO_root/
sh demo_yolo.sh
4、训练准备
(1)找一个模型做训练,如train_yolov3.sh
打开可以看到,里面用的solver是:models/yolov3/mobilenet_yolov3_solver.prototxt
用的预训练模型是:mobilenet_iter_73000.caffemodel
(2)在根目录example里面建立一个文件(自己定义),里面用于保存自己的训练文件
里面包含如下文件:
其中,train_Mobilenet_YOLOv3.sh是train_yolov3.sh基础上改的,里面包含solver.prototxt(在mobilenet_yolov3_solver.prototxt基础上改的),以及预训练模型路径。如下:
#!/bin/sh
./build/tools/caffe train -solver="examples/YOLO_Helmet/solver.prototxt" \
-weights="models/MobileNet/mobilenet_iter_73000.caffemodel" \
--gpu 1 2>&1 | tee examples/YOLO_Helmet/YOLO_Helmet.log \
YOLO_Helmet.log为训练时输出的日志,便于查看哪一次训练的mAP更高;
我们一层一层的看,solver.prototxt里面的内容:
train_net: "examples/YOLO_Helmet/train.prototxt"
test_net: "examples/YOLO_Helmet/test.prototxt"
test_iter: 635
test_interval: 2000
base_lr: 0.0005
display: 10
max_iter: 120000
lr_policy: "multistep"
gamma: 0.5
weight_decay: 0.00005
snapshot: 2000
snapshot_prefix: "models/MobileNet/mobilenet_yolov3_deploy"
solver_mode: GPU
debug_info: false
snapshot_after_train: true
test_initialization: false
average_loss: 10
stepvalue: 25000
stepvalue: 50000
stepvalue: 75000
iter_size: 4
type: "RMSProp"
eval_type: "detection"
ap_version: "11point"
show_per_class_result: true
每行参数的意义我就不一一说明(自行百度),重点说一下三个路径:
train_net:存放train.prototxt(在mobilenet_yolov3_train.prototxt基础上改的)的路径;
test_net:存放test.prototxt(在mobilenet_yolov3_test.prototxt基础上改的)的路径;
snapshot_prefix:训练输出模型的路径,其中mobilenet_yolov3_deploy为模型名字;
我们一层一层的看,先看test.prototxt
找到上图的位置,修改三个地方:
(a)source路径(这里就是lmdb格式的测试集);
(b)batch_size的大小,这里的batch_size×solver.prototxt里面的test_iter>=测试集的数据,不然在训练时loss值可能不会下降,但是batch_size不能过大,否则GPU承受不了。
(c)label_map_file路径要修改
上图的num_output需要修改(有三处),具体大小参考官方说明:
比如我的分类只有5类(不包含background),所以这里设置为30
所以上图的num_classes设置为5
但是这儿需要设置为6(包含background)
我们一层一层的看,再看train.prototxt
这儿跟上面一样,修改就好了
这儿也跟上面一样,修改就好了
num_classes都设置为5(有三处)、
5、训练
cd $MobileNet-YOLO_root/
./examples/YOLO_Helmet/train_Mobilenet_YOLOv3.sh
慢慢等待吧!