SSD训练自己的数据集

    xiaoxiao2021-03-25  95

      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 进行测试

    转载请注明原文地址: https://ju.6miu.com/read-18299.html

    最新回复(0)