SSD算法caffe配置,训练及测试过程

最近由于需要在带有标注的VID视频数据集上利用caffe工具训练模型,所以需要将该种类型的原始数据文件转换成为lmdb格式的数据文件。在可获得的资料上可以查到SSD: Single Shot MultiBoxDetector,这种目标检测方法效果不错而且利用的是专门用来进行视频目标检测的数据集VOC2007/2012进行数据处理的,和我所需要处理的数据格式类似。所以首先简单的利用作者github上的文件进行了复现,感觉该方法的处理效果不错,速度相比fast-rcnn快但还是较慢,我使用的显卡是gtx950m显卡,测试中速度大概FPS=8左右,还是较慢。而且当检测的图片/视频文件内目标增多时,出现目标丢失/漏检的情况比较多。。。下面是实验的过程:

  • 在~/work/ssd/目录下clone作者github下的caffe文件包
   git clone https://github.com/weiliu89/caffe.git
   cd caffe
   git checkout ssd(出现“分支”则说明copy-check成功...作者caffe目录下有三个分支fcn/master/ssd,利用git checkout来切换分支,否则只有master目录下的文件)
  • 配置caffe所需文件进行编译
cp Makefile.config.example Makefile.config

根据电脑具体的配置修改Makefile.config(cudnn,opencv pythonpath等设置)具体可以参考Ubuntu16.04+CUDA8.0+caffe配置里面的Makefile.config和Makefile的设置。

make -j 8 all
make -j 8 runtest
make -j 8 pycaffe  #model是通过python编写的文件进行训练的

tips:如果在make all的时候出现/src/caffe/util/xxx.cpp报错,如io.cpp,bbox_util.cpp等报错问题,根据查到的一些资料显示可能是作者在生成ssd的时候用的是opencv2.0,而此处我用的是opencv3.2,这两个版本的opencv有很多不同的地方导致了这个错误,[Opencv 3.0环境下编译SSD的问题以及解决方法。]。所以我按照下面的这种方法Ubuntu 16.04 + Opencv3.0 + gtx1080 + caffe(SSD) + ROS(Kinetic)可以配置成功:

cd ~/caffe 
make clean
mkdir build 
cd build 
cmake .. 
make all -j16 
make install 
make runtest 
make pycaffe
  • 下载预训练模型
    链接:http://pan.baidu.com/s/1miDE9h2
    密码:0hf2
    将它放入caffe/models/VGGNet/目录下
  • 下载VOC2007和VOC2012数据集,放到/home/data(需要在home目录下生成data文件夹)
cd ..
   mkdir data
   cd data/
  • 下载数据集
wget  http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar

然后解压数据集,这样数据就准备好了,注意这里选择讲数据放置在/home/data内是因为训练时的脚本文件内的数据路径是这里,也可以不放置在该文件夹内,但是需要在脚本文件内更新数据的路径。

tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar

将图片转化为LMDB文件,用于训练。注意这两个文件对于我们训练ilsvrc数据集很有帮助!

   cd ..
   cd caffe/
   ./data/VOC0712/create_list.sh  
   ./data/VOC0712/create_data.sh
  • 开始训练
python examples/ssd/ssd_pascal.py

经过120000次的训练之后,我们可以得到所需要的带有超参数的训练model。

I0505 06:15:46.453992  7203 solver.cpp:596] Snapshotting to binary proto file models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel
I0505 06:15:47.089884  7203 sgd_solver.cpp:307] Snapshotting solver state to binary proto file models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.solverstate
I0505 06:15:48.236326  7203 solver.cpp:332] Iteration 120000, loss = 4.45728
I0505 06:15:48.236359  7203 solver.cpp:433] Iteration 120000, Testing net (#0)
I0505 06:15:48.236398  7203 net.cpp:693] Ignoring source layer mbox_loss
I0505 06:24:21.998587  7203 solver.cpp:546]     Test net output #0: detection_eval = 0.570833
I0505 06:24:22.015635  7203 solver.cpp:337] Optimization Done.
I0505 06:24:22.028441  7203 caffe.cpp:254] Optimization Done.
  • 模型测试
    (1)图片数据集上测试
python examples/ssd/score_ssd_pascal.py

输出为:

I0505 10:32:27.929069 16272 caffe.cpp:155] Finetuning from models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel
I0505 10:32:28.052016 16272 net.cpp:761] Ignoring source layer mbox_loss
I0505 10:32:28.053956 16272 caffe.cpp:251] Starting Optimization
I0505 10:32:28.053966 16272 solver.cpp:294] Solving VGG_VOC0712_SSD_300x300_train
I0505 10:32:28.053969 16272 solver.cpp:295] Learning Rate Policy: multistep
I0505 10:32:28.197612 16272 solver.cpp:332] Iteration 0, loss = 1.45893
I0505 10:32:28.197657 16272 solver.cpp:433] Iteration 0, Testing net (#0)
I0505 10:32:28.213793 16272 net.cpp:693] Ignoring source layer mbox_loss
I0505 10:42:04.390517 16272 solver.cpp:546]     Test net output #0: detection_eval = 0.570833
I0505 10:42:04.414819 16272 solver.cpp:337] Optimization Done.
I0505 10:42:04.414847 16272 caffe.cpp:254] Optimization Done.

可以看到图片数据集上的检测结果为57.0833%。利用caffe/examples/ssd_detect.ipynb文件可以用单张图片测试检测效果(注意文件内加载文件的路径,如果报错修改为绝对路径):

fish-bike.png
cat.png
horse-race.png

(2)视频数据测试

python examples/ssd/ssd_pascal_video.py 

可得到测试结果:

detect1
detect2
detect3.png

通过上面的检测结果可以看出测试的准确性还可以,但是也存在漏检的情况,而且速度也只有FPS=8左右。

(3)摄像头上测试:

 python examples/ssd/ssd_pascal_webcam.py

因此通过SSD的方法可以用来训练和检测交通标志,文本检测或人脸检测等等,也可以用此方法来讲带有标记信息的视频目标检测数据集进行转换,生成所需要的lmdb格式的数据文件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容