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
慢慢等待吧!