SSD是使用单个网络进行对象检测的统一框架。 您可以使用该代码来训练/评估网络以进行对象检测任务。 有关详细信息,请参阅我们的arXiv论文和幻灯片 。
系统 | VOC2007测试mAP | FPS (Titan X) | 箱数 | 输入分辨率 |
---|---|---|---|---|
更快的R-CNN(VGG16) | 73.2 | 7 | 〜6000 | ~1000 x 600 |
YOLO(定制) | 63.4 | 45 | 98 | 448 x 448 |
SSD300 *(VGG16) | 77.2 | 46 | 8732 | 300 x 300 |
SSD512 *(VGG16) | 79.8 | 19 | 24564 | 512 x 512 |
注意:SSD300 *和SSD512 *是最新型号。 当前代码应该重现这些结果。
$CAFFE_ROOT
git clone https://github.com/weiliu89/caffe.git cd caffe git checkout ssd
#根据您的Caffe安装修改Makefile.config。 cp Makefile.config.example Makefile.config make -j8 #确保将$ CAFFE_ROOT / python包含在PYTHONPATH中。 制作py make test -j8 # (可选) make runtest -j8
下载完全卷积减少(atrous)VGGNet 。 默认情况下,我们假设模型存储在$CAFFE_ROOT/models/VGGNet/
下载VOC2007和VOC2012数据集。 默认情况下,我们假设数据存储在$HOME/data/
#下载数据。 cd $ HOME / 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 #解压缩数据。 tar -xvf VOCtrainval_11-May-2012.tar tar -xvf VOCtrainval_06-Nov-2007.tar tar -xvf VOCtest_06-Nov-2007.tar
cd $ CAFFE_ROOT #在data / VOC0712 /中创建trainval.txt,test.txt和test_name_size.txt ./data/VOC0712/create_list.sh #如果需要,您可以修改create_data.sh中的参数。 #它将为trainval创建lmdb文件并使用编码的原始图像进行测试: # - $ HOME / data / VOCdevkit / VOC0712 / lmdb / VOC0712_trainval_lmdb # - $ HOME / data / VOCdevkit / VOC0712 / lmdb / VOC0712_test_lmdb #并在示例中制作软链接/ VOC0712 / ./data/VOC0712/create_data.sh
#它将创建模型定义文件并将快照模型保存在: # - $ CAFFE_ROOT / models / VGGNet / VOC0712 / SSD_300x300 / #和作业文件,日志文件和python脚本: # - $ CAFFE_ROOT / jobs / VGGNet / VOC0712 / SSD_300x300 / #并保存临时评估结果: # - $ HOME / data / VOCdevkit / results / VOC2007 / SSD_300x300 / #它应该在120k迭代时达到77. * mAP。 python examples / ssd / ssd_pascal.py
如果您没有时间训练模型,可以在此处下载预先训练的模型。
#如果您想测试您训练过的模型,您可以: python examples / ssd / score_ssd_pascal.py
#如果您想将网络摄像头连接到您训练过的模型,您可以: python examples / ssd / ssd_pascal_webcam.py
以下是运行在MSCOCO数据集上训练的SSD500模型的演示视频。
查看examples/ssd_detect.ipynb
或examples/ssd/ssd_detect.cpp
,了解如何使用SSD模型检测对象。 查看examples/ssd/plot_detections.py
,了解如何绘制ssd_detect.cpp输出的检测结果。
要训练其他数据集,请参阅data / OTHERDATASET以获取更多详细信息。 我们目前增加了对COCO和ILSVRC2016的支持。 我们建议使用examples/ssd.ipynb
来检查是否正确准备了新数据集。
我们提供了从不同数据集中训练的最新模型。 为了帮助重现表6中的结果,大多数模型包含预.caffemodel
文件,许多.prototxt
文件和python脚本。
PASCAL VOC型号:
COCO型号:
ILSVRC型号:
[1]我们使用examples/convert_model.ipynb
从预训练的COCO模型中提取VOC模型。
_______________________另说----------------------------------------------------------
Caffe深度学习入门——配置caffe-SSD详细步骤
主要参考 https://github.com/weiliu89/caffe/tree/ssd
git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd
cd caffe
cp Makefile.config.example Makefile.config
编译caffe
make all -j8 //-j16根据本机的处理器配置,16是16核处理器的意思
make pycaffe -j8
make test -j8
make runtest -j8(这一步不是必须的)
下载预训练模型 链接:链接:https://pan.baidu.com/s/1o9c0GGU 密码:fucx,将它放入caffe/models/VGGNet/目录下
下载VOC2007和VOC2012数据集,放到/caffe/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
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
将图片转化为LMDB文件,用于训练,在caffe目录下
cd ..
cd caffe
./data/VOC0712/create_list.sh
./data/VOC0712/create_data.sh
训练模型
在下载的caffe根目录执行如下命令训练,在examples/ssd下存在几个.py文件,训练的时间较长。
python examples/ssd/ssd_pascal.py
实验效果
(1)在图片测试集上测试
python examples/ssd/score_ssd_pascal.py
2)在视频上测试
python examples/ssd/ssd_pascal_video.py
3)在摄像头上测试
python examples/ssd/ssd_pascal_webcam.py
报错问题解决以及填坑笔记:
1. 报错:no module named caffe等错误
这是由于caffe的Python环境变量未配置好,可按照下面方法解决:
确保先重新make下pycaffe,然后 将python的路径配置到环境变量中
make pycaffe -j8
vim ~/.bashrc
加入 export PYTHONPATH=/SSD所在目录/caffe/python
source ~/.bashrc
2. 配置SSD-caffe测试时出现“Check failed: error == cudaSuccess (10 vs. 0) invalid device ordinal”解决
运行 python examples/ssd/ssd_pascal.py 时报错
解决方案:这是由于GPU数量不匹配造成的,如果训练自己的数据,那么我们只需要将solver.prototxt文件中的device_id项改为自己的GPU块数,一块就是0,两块就是1,以此类推。
但是SSD配置时的例子是将训练语句整合成一个python文件ssd_pascal.py,所以需要改此代码。相关配置训练方法请参看转载博文:http://blog.csdn.net/xunan003/article/details/78427446
解决方法:将ssd_pascal.py文件中第332行gpus = “0,1,2,3”的GPU选择改为gpus = “0”,后面的1,2,3都删掉即可。再次训练即可。
当然,由于博主只有一块GPU且电脑运行内存有限,还需要将ssd_pascal.py文件中的337行batch_size = 32和338行accum_batch_size = 32都改小一倍,即更改批量大小,不然会出现“Check failed: error == cudaSuccess (2 vs. 0) invalid …”的错误。
3. 配置SSD-caffe出现“ AttributeError: ‘module’ object has no attribute ‘LabelMap’”解决
这是由于caffe的Python环境变量未配置好,可按照下面方法解决:
vim ~/.bashrc
加入 export PYTHONPATH=/SSD所在目录/caffe/python
source ~/.bashrc
--------------------------------------另说--------------------
ssd在github上的项目主页:weiliu89/caffe
(进入到主页以后,大家跟着里面的配置步骤来,部署caffe这里就不在多说了)
主页上给出的几个文件:
# Download the data.
cd $HOME/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
# Extract the data.
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar
这里因为网络的问题,一般下得很慢,贴一下我放到百度云网盘中的资源:
链接:http://pan.baidu.com/s/1c1AwrRy 密码:ly70
这些是VOC的训练集,方便大家自己去亲手操作训练,不过我们今天的目的主要是运行demo,所以需要模型文件还有prototxt文件,在主页的最后,作者给出了自己最新的预训练好的模型文件,还有网络文件:
在我的百度云网盘里面也准备好了(这里我下载的是07++12的模型打包):
链接:http://pan.baidu.com/s/1kVoJ6GR 密码:leo6
有的人可能从github上clone比较慢,我这里提供一份在Windows上clone下来的,同样也是ssd分支的源码压缩包(需要注意的是,里面的脚本文件,是dos格式的,在vim里面用 set ff=unix将其改为unix格式):
链接:http://pan.baidu.com/s/1c19auCK 密码:rog6
目前来看,所有需要准备的东西全部齐全了,我们可以进行到下一步了。
根据github主页上的步骤来做,在caffe路径下,建议大家在环境中将其路径定义为$CAFFE_ROOT,这样之后的一些脚本文件就不用改太多了。
cp Makefile.config.example Makefile.config
make -j8
# Make sure to include $CAFFE_ROOT/python to your PYTHONPATH.
make py
make test -j8
# (Optional)
make runtest -j8
在这一步,有几个坑,第一个Makefile.config文件,如果你自己的电脑不是cuda8.0的话,cuda9.0 把config文件中的:
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
#-gencode arch=compute_61,code=sm_61
CUDA_ARCH :=
#-gencode arch=compute_20,code=sm_20 \
# -gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_61,code=sm_61
最后一句注释掉,不然之后报错会有不支持compute_61的错误;第二个坑就是,博主之前给服务器搭建环境的时候caffe的版本还比较老,SSD这个方法用的是目前最新的caffe版本吧貌似,所以主要注意的Linux系统的依赖库有(boost,hdf5),一开始我以为之前都搭建过caffe了,依赖库什么的全部搞定了,后来才想明白貌似caffe在全年年底的时候有过更新,不管怎样,大家在Linux下多敲一些命令,把依赖库都搞定吧,所以这里关于搭建环境推荐两篇博客,选择合适你的地方看就好:
GTX1070+CUDA8.0+Ubuntu16.04+Caffe+SSD 深度学习框架搭建 细节一步到位版
SSD安装及训练自己的数据集
环境部署成功之后就开始demo的演示了,这里先跳过了caffe使用SSD训练自己的数据集,直接用官方的模型和网络文件来先演示下demo,先推荐一个博客:
SSD: Single Shot MultiBox Detector检测单张图片
网络上能搜到的大多数演示都挺无聊的,浪费大家时间,只是把官方主页上的东西搬过来,甚至于一张图片的效果都没有,官方给出的python的脚本是读取网络摄像头的,但是对于单张图片的检测,也给出了C++和python的接口,这里先说python的,文件是examples/ssd_detect.ipynb,这里需要用到ipython和jupyter库,这里其实我挺搞不懂,干嘛不直接写一个py文件好了,不过这也就留给我当做之后的任务吧。
具体的操作在上面贴出来的博客里面已经有了,我说几个遇到的问题:
第一:就是每个接触caffe的人都能会心一笑的路径问题,一共就几个文件,caffemodel文件,prototxt文件,一定要把路径确认好,推荐还是使用绝对路径比较靠谱;
第二:在deploy.prototxt文件的最后,如下图所示:
第一个是输出文件的路径,一定要修改过来;第二个圆圈比较重要,在作者github主页上弄下来的data文件夹中,是没有data/VOC0712/test_name_size.txt这个文件的,大家需要到data路径下的相应位置,找到一个名字叫做create_list.sh的脚本,将里面data的路径修改为自己的,也就是我给大家的第一个百度云盘链接里面的那些文件到时候放到你的系统中的位置,训练完之后才有这个txt文件。
第三:上图中最后其实并不是4952,原本是1w+的,但是官方给的数据集中其实只有4952张图片,没去数过,反正运行create_list那个脚本,输出的统计信息就是4952张图片,改一下就好了。
然后主要的问题就这些了,现在可以看一看效果了。
以上便是这一次实验的目的,至于性能什么的还没来得及去感受,这应该是之后几天的任务了,了解下cpp下的demo,然后梳理一下自己写一个python的接口文件出来,有什么问题欢迎大家一起留言沟通。