python 训练caffe_ssd数据
1.构造训练数据集
SSD_ROOT/data/VOC0712文件夹下有create_list.sh和create_data.sh两个脚本,用于生产训练数据的list和实际数据的LMDB格式。
1. 手动生成list文件,共3个:”test.txt”, “test_name_size.txt”, “trainval.txt”(我自己按照这个txt的格式用matlab重写了个脚本生成)
2. 利用create_data.sh生成训练用的LMDB格式文件(该文件调用的是SSD_ROOT/scripts/create_annoset.py文件,需要修改下路径什么的参数。
3. 修改labelmap_indoor.prototxt(要训练的类别),格式如下
item {
name: “none_of_the_above”
label: 0
display_name: “background”
}
item {
name: “door”
label: 1
display_name: “door”
}
2. 训练
训练脚本为$SSD_ROOT/examples/ssd/ssd_pascal.py
训练时需要修改该脚本参数,大致如下(各种路径都看看对不对):
1. train_data:”../../data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb”
2. test_data”../../data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb”
3. job_name “SSD_{}”.format(resize)
5. name_size_file”../../data/VOC0712/test_name_size.txt”
7. label_map_file”../../data/VOC0712/labelmap_voc.prototxt”
9. num_classes 21(分类数+1)
11. min_dim 300
13. gpus :”0”(可以通过nvidia-smi查gpu id)
15. batch_size 8
17. base_lr 2000
这个脚本会生成我们要训练的prototxt文件,所以不需要手动写。然后就开始训练了。
报Check failed:mdb_status == 0 (2 vs. 0) No such file or directory
-检查ssd_pascal.py中的lmdb的路径
报invalid device ordinal
-ssd_pascal.py中的
gpus = “0,1,2,3”
改成
gpus = “0”
报out of memory
-ssd_pascal.py中的
batch_size = 32
accum_batch_size = 32
改成
batch_size = 8
accum_batch_size = 8