基于caffe的ssd代码运行记录

8 篇文章 0 订阅
4 篇文章 0 订阅

背景:

由于项目的需要(zxw)使用ssd算法,因此自己上网下载了github上基于caffe的代码进行运行测试。

简介:

SSD算法,英文全名是Single Shot MultiBox Detector,名字取得不错,Single shot指明了SSD算法属于one-stage方法,MultiBox指明了SSD是多框预测。

相比Yolo,SSD采用CNN来直接进行检测,而不是像Yolo那样在全连接层之后做检测。其实采用卷积直接做检测只是SSD相比Yolo的其中一个不同点,另外还有两个重要的改变,一是SSD提取了不同尺度的特征图来做检测,大尺度特征图(较靠前的特征图)可以用来检测小物体,而小尺度特征图(较靠后的特征图)用来检测大物体;二是SSD采用了不同尺度和长宽比的先验框(Prior boxes, Default boxes,在Faster R-CNN中叫做锚,Anchors)。
SSD采用VGG16作为基础模型(VGG16是在ILSVRC CLS-LOC数据集上预训练的,ILSVRC比赛 即我们所说的 ImageNet比赛 ),然后在VGG16的基础上新增了卷积层来获得更多的特征图以用于检测。
参考原文:https://blog.csdn.net/xiaohu2022/article/details/79833786
论文和代码:

论文作者Joseph Redmon的主页:https://github.com/weiliu89/caffe/tree/ssd,在该网站上可以找到论文和代码的链接

基于VGG的SSD的论文:

《SSD: Single Shot MultiBox Detector》,https://arxiv.org/abs/1512.02325

基于ResNet的SSD的论文:

《Enhancement of SSD by concatenating feature maps for object detection》, https://arxiv.org/abs/1705.09587

参考网页:

SSD(single shot multibox detector)算法及Caffe代码详解,https://blog.csdn.net/u014380165/article/details/72824889

目标检测算法之SSD,
https://blog.csdn.net/xiaohu2022/article/details/79833786

SSD算法详解,
https://blog.csdn.net/ytusdc/article/details/86577939

SSD算法的改进版之R-SSD,
https://blog.csdn.net/u014380165/article/details/77130922

训练SSD模型记录:

1.lmdb格式数据准备
由于已经有VOC格式的数据,因此直接将VOC2007数据集拷贝到caffe文件夹下的data文件夹下,并将VOC0712目录下的create_list.shcreate_data.shlabelmap_voc.prototxt三个文件拷贝到 VOC2007目录下,并修改create_list.sh、 create_data.sh中的路径,和labelmap_voc.prototxt中的类别名[参考:caffe-ssd 训练自己的VOC数据集(一):转换VOC xml数据为lmdb格式];
然后运行

    ./data/VOCdevkit/VOC2007/create_list.sh
    ./data/VOCdevkit/VOC2007/create_data.sh

在example下生成相应的训练和测试数据集,
2.预训练模型下载
下载VGG_ILSVRC_16_layers_fc_reduced.caffemodel预训练模型,放到$caffe_root/models/VGG下
3.模型训练
打开example/ssd/ssd_pascal.py进行如下修改:

# 82行:train_data路径; Created by data/VOC0712/create_data.sh
train_data = "examples/mydataset/mydataset_test_lmdb"
 # 84行:test_data路径;Created by data/VOC0712/create_data.sh
test_data = "examples/mydataset/mydataset_trainval_lmdb"
 
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 + 类别数,本文中为10+1=11;

342行:gpus = "0,1,2,3"根据自己需求修改,博主只有一块GPU即gpus = "0"
360行:num_test_image:测试集图片数目
374行:max_iter:最大迭代次数

修改完成后,运行

python ./examples/ssd/ssd_pascal.py

报错:

I0728 13:08:21.741503  3911 net.cpp:408] conv1_1 -> conv1_1
terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(3.4.2) /media/linux_data/chengxu/opencv-3.4.2/modules/imgproc/src/color.hpp:253: error: (-215:Assertion failed) VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'CvtHelper'

*** Aborted at 1564290501 (unix time) try "date -d @1564290501" if you are using GNU date ***
PC: @     0x7fa37acc8428 gsignal
*** SIGABRT (@0x3e800000f47) received by PID 3911 (TID 0x7fa3203ff700) from PID 3911; stack trace: ***
    @     0x7fa37acc84b0 (unknown)
    @     0x7fa37acc8428 gsignal
    @     0x7fa37acca02a abort
    @     0x7fa37bad784d __gnu_cxx::__verbose_terminate_handler()
    @     0x7fa37bad56b6 (unknown)
    @     0x7fa37bad5701 std::terminate()
    @     0x7fa37bad5919 __cxa_throw
    @     0x7fa37246f02a cv::error()
    @     0x7fa37246f124 cv::error()
    @     0x7fa36f77c39c cv::cvtColorBGR2HSV()
    @     0x7fa36f770240 cv::cvtColor()
    @     0x7fa37cbdf02c caffe::AdjustHue()
    @     0x7fa37cbe386b caffe::RandomHue()
    @     0x7fa37cbe4564 caffe::ApplyDistort()
    @     0x7fa37c9b33e2 caffe::DataTransformer<>::DistortImage()
    @     0x7fa37c9d9976 caffe::AnnotatedDataLayer<>::load_batch()
    @     0x7fa37c9ec1ff caffe::BasePrefetchingDataLayer<>::InternalThreadEntry()
    @     0x7fa37c9c4a75 caffe::InternalThread::entry()
    @     0x7fa36e973e3d thread_proxy
    @     0x7fa362e4b6ba start_thread
    @     0x7fa37ad9a41d clone
    @                0x0 (unknown)
Aborted (core dumped)

解决方法:在/examples/ssd/ssd_pascal.py的第175行的train_transform_param中添加’force_color’:True,
解决方法:在/examples/ssd/ssd_pascal.py的第213行的test_transform_param中添加’force_color’:True,参考[http://www.voidcn.com/article/p-mpxhemrk-brg.html]
再次运行:

python ./examples/ssd/ssd_pascal.py

在这里插入图片描述
运行成功。在models/VGGNet/VOC2007/SSD_300X300目录下,生成一些文件,包括deploy.prototxt、solver.prototxt、train.prototxt、test.prototxt、***.caffemodel(生成的模型文件)、***.solverstate(下次训练可以加载的训练状态),***.log(训练日志)
在这里插入图片描述
4)再次训练
下次再训练的时候,就可以不用运行ssd_pascal.py,而是直接在该目录下运行

sh VGG_VOC2007_SSD_300X300.sh

当然,前提是需要将相关文件中的若干路径、迭代参数等更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值