《caffe學習之路》第七章:Ubuntu16.04 MobileNet_YOLOv3訓練自己的數據集

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 

慢慢等待吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章