1.在/data/VOCdevkit下建立自己的数据集名称如MyDataSet,在MyDataSet目录下需包含Annotations、ImageSets、JPEGImages三个文件夹:
2、ImageSets下建立Main文件夹
3、新建dir.py 写入下面代码
import os import random trainval_percent = 0.66 train_percent = 0.5 xmlfilepath = 'Annotations' txtsavepath = 'ImageSetsMain' total_xml = os.listdir(xmlfilepath) num=len(total_xml) list=range(num) tv=int(num*trainval_percent) tr=int(tv*train_percent) trainval= random.sample(list,tv) train=random.sample(trainval,tr) ftrainval = open('ImageSets/Main/trainval.txt', 'w') ftest = open('ImageSets/Main/test.txt', 'w') ftrain = open('ImageSets/Main/train.txt', 'w') fval = open('ImageSets/Main/val.txt', 'w') for i in list: name=total_xml[i][:-4]+' ' if i in trainval: ftrainval.write(name) if i in train: ftrain.write(name) else: fval.write(name) else: ftest.write(name) ftrainval.close() ftrain.close() fval.close() ftest .close()
4、运行python dir.py,在ImageSetsMain里有四个txt文件:test.txt train.txt trainval.txt val.txt
5、在caffe-ssd/data目录下创建一个自己的文件夹MyDataSet文件夹,把data/VOC0712目录下的create_list.sh 、create_data.sh、labelmap_voc.prototxt 这三个文件拷贝到MyDataSet下
6、在caffe-ssd/examples下创建MyDataSet文件夹,用于存放后续生成的lmdb文件
7、修改labelmap_voc.prototxt文件(改成自己的类别),以及create_list.sh和create_data.sh文件中的相关路径
#labelmap_voc.prototxt需修改: item { name: "none_of_the_above" label: 0 display_name: "background" } item { name: "aeroplane" label: 1 display_name: "person" } #create_list.sh需修改: root_dir=/home/yi_miao/data/Mydataset/ ... for name in yourownset ... #if [[ $dataset == "test" && $name == "VOC2012" ]] # then # continue # fi #create_data.sh需修改: root_dir=/home/yi_miao/caffe-ssd data_root_dir="/home/yi_miao/data/Mydataset" dataset_name="Mydataset"
8、运行脚本
./data/mydataset/create_list.sh
./data/mydataset/create_data.sh
9、训练
caffe/models/VGGNet/VGGNet 预训练模型
2、
82行:train_data路径; 84行:test_data路径; 237-246行:model_name、save_dir、snapshot_dir、job_dir、output_result_dir路径; 259-263行:name_size_file、label_map_file路径; 266行:num_classes修改为1 + 类别数; 360行:num_test_image:测试集图片数目
另外, 如果你只有一个GPU, 需要修改285行: gpus=”0,1,2,3” ===> 改为”0” ,如果出现 out of memory,则将batch size 相应改小一些。
3、训练
python ./examples/ssd/ssd_pascal.py
4、测试
1.测试单张图片
测试程序为/examples/ssd/ssd_detect.py,运行之前,我们需要修改相关路径代码,ssd_detect.py作如下修改(#部分为修改内容):
parser.add_argument('--labelmap_file', default='data/VOC0712/labelmap_voc.prototxt')#**修改为你的路径** parser.add_argument('--model_def', default='models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt')#**修改为你的路径** parser.add_argument('--image_resize', default=300, type=int) parser.add_argument('--model_weights', default='models/VGGNet/VOC0712/SSD_300x300/'#**修改为你的路径** 'VGG_VOC0712_SSD_300x300_iter_120000.caffemodel') parser.add_argument('--image_file', default='examples/images/fish-bike.jpg')#**修改为你的路径**
Python ./example/ssd/ssd_detect.py
c++测试
cd ssd-caffe
$ build/examples/ssd/ssd_detect.bin models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel examples/images/test.txt
其中test.txt内容为
examples/images/1.jpg examples/images/2-bike.jpg examples/images/3.jpg
结果可视化
$ python examples/ssd/plot_detections.py examples/images/result.txt /home/your path/ssd-caffe --labelmap-file data/VOC0712/labelmap_voc.prototxt --save-dir examples/
找不到
caffe.pb.h
$ protoc src/caffe/proto/caffe.proto --cpp_out=. $ sudo mkdir include/caffe/proto $ sudo mv src/caffe/proto/caffe.pb.h include/caffe/proto
参考:https://blog.csdn.net/yu734390853/article/details/79481660