SSD训练自己的数据集

  Faster-rcnn训练了自己的数据集,感觉效果还行,对于自己的数据集的准确率在89%左右,但是Faster-rcnn的速度就是个坑。因此,开始想着用SSD试一下。


因为已经有了Faster-rcnn数据集,所有数据集的制作步骤可以省略了。接下来就是SSD训练的修改了。

在此,设定SSD的根目录为caffe-ssd:

1、在caffe-ssd/data/VOCdevkit 中mkdir mydataset(自己的数据集名称)

2、cd到mydataset中,mkdir 3个文件夹Annotations、ImageSets、JPEGImages

3、在examples中mkdir mydataset(主要用来存放create_data.sh所生成的数据连接)

3、将.xml文件放在Annotations中,ImageSets中建立Main文件夹,把train.txt trainval.txt test.txt val.txt 放至Main文件夹中,JPEGImages放要训练的图片

4、在caffe-ssd/data中mkdir mydataset,将caffe-data/data/voc0712中的create_*.sh、labelmap_voc 拷贝至caffe-data/data/mydataset中

修改create_list.sh   第13行

for name in VOC2007 VOC2012: 

修改至

for name in mydataset:


修改create_data.sh 主要是路径的问题


修改labelmap_voc:

每个item中代表你标签,background必须要有

5、 

修改examples/ssd/ssd_pascal.py   中关于一些路径的问题,num_classes = 你的类别数量+1,num_test_image = 你训练时的test数量



6、运行sudo python ssd_pascal.py进行训练

注意训练时可能会出现

F0209 00:33:31.934646 21257 annotated_data_layer.cpp:205] Check failed:std::equal(top_shape.begin() + 1, top_shape.begin() + 4, shape.begin() + 1)

*** Check failure stack trace: ***
@ 0x7fc2c7d7e5cd google::LogMessage::Fail()
@ 0x7fc2c7d80433 google::LogMessage::SendToLog()
@ 0x7fc2c7d7e15b google::LogMessage::Flush()
@ 0x7fc2c7d80e1e google::LogMessageFatal::~LogMessageFatal()
@ 0x7fc2c84ff180 caffe::AnnotatedDataLayer<>::load_batch()
@ 0x7fc2c860c77f caffe::BasePrefetchingDataLayer<>::InternalThreadEntry()
@ 0x7fc2c84492b5 caffe::InternalThread::entry()
@ 0x7fc2bb6a55d5 (unknown)
@ 0x7fc2b617f6ba start_thread
@ 0x7fc2c65fb82d clone
@ (nil) (unknown)
Aborted (core dumped)

解决方法是将ssd_pascal.py 中183行:

resize_mode : P.Resize.warp 改为 P.Resize.FIT_SMALL_SIZE,

341行     batch_size = 1

364行 test_batch_size = 1

以上就可以运行ssd_pascal.py进行训练了



3、测试

   使用ssd_detect 进行测试






你可能感兴趣的:(SSD训练自己的数据集)