SSD采用VGG16作为基础模型,然后在VGG16的基础上新增了卷积层来获得更多的特征以用于检测。SSD的网络结构如上图所示(上面是SSD模型,下面是Yolo模型),可以明显看到SSD利用了多尺度的特征图做检测。

安装

  1. clone代码(假设代码clone到$CAFFE_ROOT目录)。
git clone https://github.com/weiliu89/caffe.git
cd caffe
git checkout ssd
  1. 编译。这一步骤假设已经安装好caffe环境,caffe的安装可参考:http://caffe.berkeleyvision.org/installation.html
# Modify Makefile.config according to your Caffe installation.
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需要根据环境进行修改,我的改动如下:

# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the lines after *_35 for compatibility.
# 我是cuda9.0环境,注释掉:-gencode arch=compute_20,code=sm_20和-gencode arch=compute_20,code=sm_21
CUDA_ARCH := -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

准备工作

  1. 下载VGG模型。假设模型存储在$CAFFE_ROOT/models/VGGNet目录。
  2. 下载VOC2007和VOC2012数据集。假设数据存储在$HOME/data/目录。
# 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
  1. 创建lmdb文件
cd $CAFFE_ROOT
# Create the trainval.txt, test.txt, and test_name_size.txt in data/VOC0712/
./data/VOC0712/create_list.sh
# You can modify the parameters in create_data.sh if needed.
# It will create lmdb files for trainval and test with encoded original image:
#   - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb
#   - $HOME/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb
# and make soft links at examples/VOC0712/
./data/VOC0712/create_data.sh
  • 问题一:执行create_list.sh报错

    报错信息:

terminate called after throwing an instance of 'std::runtime_error'what():  locale::facet::_S_create_c_locale name not valid
./create_list.sh: line 7: 46203 Aborted                 $bash_dir/../../build/tools/get_image_size $root_dir $dst_file $bash_dir/$dataset"_name_size.txt"

可以通过export LC_ALL="C"解决。

  • 问题二:执行./create_data.sh报错

    报错信息:

Traceback (most recent call last):File "/data/home/chuxing/AI/caffe-ssd/data/VOC0712/../../scripts/create_annoset.py", line 103, in <module>label_map = caffe_pb2.LabelMap()
AttributeError: 'module' object has no attribute 'LabelMap'
Traceback (most recent call last):File "/data/home/chuxing/AI/caffe-ssd/data/VOC0712/../../scripts/create_annoset.py", line 103, in <module>label_map = caffe_pb2.LabelMap()
AttributeError: 'module' object has no attribute 'LabelMap'

可以通过export PYTHONPATH=/data/home/chuxing/AI/caffe-dssd/python解决。

正常情况下的输出:

[root@kenjyli /data/home/chuxing/AI/caffe-ssd/data/VOC0712]# ./create_list.sh
Create list for VOC2007 trainval...
Create list for VOC2012 trainval...
Create list for VOC2007 test...
I1125 18:00:32.029615 47232 get_image_size.cpp:61] A total of 4952 images.
I1125 18:00:34.016815 47232 get_image_size.cpp:100] Processed 1000 files.
I1125 18:00:36.004880 47232 get_image_size.cpp:100] Processed 2000 files.
I1125 18:00:38.001279 47232 get_image_size.cpp:100] Processed 3000 files.
I1125 18:00:39.987417 47232 get_image_size.cpp:100] Processed 4000 files.
I1125 18:00:41.879824 47232 get_image_size.cpp:105] Processed 4952 files.
[root@kenjyli /data/home/chuxing/AI/caffe-ssd/data/VOC0712]# ./create_data.sh
/data/home/chuxing/AI/caffe-ssd/build/tools/convert_annoset --anno_type=detection --label_type=xml --label_map_file=/data/home/chuxing/AI/caffe-ssd/data/VOC0712/../../data/VOC0712/labelmap_voc.prototxt --check_label=True --min_dim=0 --max_dim=0 --resize_height=0 --resize_width=0 --backend=lmdb --shuffle=False --check_size=False --encode_type=jpg --encoded=True --gray=False /data/home/chuxing/AI/caffe-ssd/data/VOCdevkit/ /data/home/chuxing/AI/caffe-ssd/data/VOC0712/../../data/VOC0712/test.txt /data/home/chuxing/AI/caffe-ssd/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb
I1125 18:03:31.340348 50194 convert_annoset.cpp:122] A total of 4952 images.
I1125 18:03:31.340778 50194 db_lmdb.cpp:35] Opened lmdb /data/home/chuxing/AI/caffe-ssd/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb
I1125 18:03:35.693153 50194 convert_annoset.cpp:195] Processed 1000 files.
I1125 18:03:39.981063 50194 convert_annoset.cpp:195] Processed 2000 files.
I1125 18:03:44.308907 50194 convert_annoset.cpp:195] Processed 3000 files.
I1125 18:03:48.640877 50194 convert_annoset.cpp:195] Processed 4000 files.
I1125 18:03:52.684872 50194 convert_annoset.cpp:201] Processed 4952 files.
/data/home/chuxing/AI/caffe-ssd/build/tools/convert_annoset --anno_type=detection --label_type=xml --label_map_file=/data/home/chuxing/AI/caffe-ssd/data/VOC0712/../../data/VOC0712/labelmap_voc.prototxt --check_label=True --min_dim=0 --max_dim=0 --resize_height=0 --resize_width=0 --backend=lmdb --shuffle=False --check_size=False --encode_type=jpg --encoded=True --gray=False /data/home/chuxing/AI/caffe-ssd/data/VOCdevkit/ /data/home/chuxing/AI/caffe-ssd/data/VOC0712/../../data/VOC0712/trainval.txt /data/home/chuxing/AI/caffe-ssd/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb
I1125 18:03:53.822151 50373 convert_annoset.cpp:122] A total of 16551 images.
I1125 18:03:53.822559 50373 db_lmdb.cpp:35] Opened lmdb /data/home/chuxing/AI/caffe-ssd/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdb
I1125 18:03:59.236438 50373 convert_annoset.cpp:195] Processed 1000 files.
I1125 18:04:04.636438 50373 convert_annoset.cpp:195] Processed 2000 files.
I1125 18:04:09.896461 50373 convert_annoset.cpp:195] Processed 3000 files.
I1125 18:04:15.108736 50373 convert_annoset.cpp:195] Processed 4000 files.
I1125 18:04:20.400451 50373 convert_annoset.cpp:195] Processed 5000 files.
I1125 18:04:25.572449 50373 convert_annoset.cpp:195] Processed 6000 files.
I1125 18:04:30.748452 50373 convert_annoset.cpp:195] Processed 7000 files.
I1125 18:04:35.940444 50373 convert_annoset.cpp:195] Processed 8000 files.
I1125 18:04:41.180445 50373 convert_annoset.cpp:195] Processed 9000 files.
I1125 18:04:46.364439 50373 convert_annoset.cpp:195] Processed 10000 files.
I1125 18:04:51.645030 50373 convert_annoset.cpp:195] Processed 11000 files.
I1125 18:04:56.840816 50373 convert_annoset.cpp:195] Processed 12000 files.
I1125 18:05:02.104444 50373 convert_annoset.cpp:195] Processed 13000 files.
I1125 18:05:07.312445 50373 convert_annoset.cpp:195] Processed 14000 files.
I1125 18:05:12.572444 50373 convert_annoset.cpp:195] Processed 15000 files.
I1125 18:05:17.740444 50373 convert_annoset.cpp:195] Processed 16000 files.
I1125 18:05:20.680899 50373 convert_annoset.cpp:201] Processed 16551 files.

生成的lmdb文件结构树状图:

`-- lmdb|-- VOC0712_test_lmdb|   |-- data.mdb|   `-- lock.mdb`-- VOC0712_trainval_lmdb|-- data.mdb`-- lock.mdb

训练

命令:

# It will create model definition files and save snapshot models in:
#   - $CAFFE_ROOT/models/VGGNet/VOC0712/SSD_300x300/
# and job file, log file, and the python script in:
#   - $CAFFE_ROOT/jobs/VGGNet/VOC0712/SSD_300x300/
# and save temporary evaluation results in:
#   - $HOME/data/VOCdevkit/results/VOC2007/SSD_300x300/
# It should reach 77.* mAP at 120k iterations.
python examples/ssd/ssd_pascal.py

训练时实际执行的命令保存在文件jobs/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300.sh中。

  • 问题一:invalid device ordinal

    报错信息如下:

F1125 21:27:39.701442 14813 parallel.cpp:130] Check failed: error == cudaSuccess (10 vs. 0)  invalid device ordinal
*** Check failure stack trace: ***@     0x7fcefc5dd84d  google::LogMessage::Fail()@     0x7fcefc5df61c  google::LogMessage::SendToLog()@     0x7fcefc5dd43c  google::LogMessage::Flush()@     0x7fcefc5dff2e  google::LogMessageFatal::~LogMessageFatal()@     0x7fcf04067858  caffe::DevicePair::compute()@     0x7fcf0406c6dc  caffe::P2PSync<>::Prepare()@     0x7fcf0406cc5c  caffe::P2PSync<>::Run()@           0x408c7c  train()@           0x4064cc  main@     0x7fcee5b06b35  __libc_start_main@           0x406e8d  (unknown)

解决方式:

examples/ssd/ssd_pascal.py中的第332行改为gpus = "0",下面是修改前的配置:

330 # Solver parameters.
331 # Defining which GPUs to use.
332 gpus = "0,1,2,3"
  • 问题二:out of memory

    报错信息如下:

F1125 22:03:52.982959 45117 syncedmem.cpp:56] Check failed: error == cudaSuccess (2 vs. 0)  out of memory
*** Check failure stack trace: ***@     0x7fb3c087a84d  google::LogMessage::Fail()@     0x7fb3c087c61c  google::LogMessage::SendToLog()@     0x7fb3c087a43c  google::LogMessage::Flush()@     0x7fb3c087cf2e  google::LogMessageFatal::~LogMessageFatal()@     0x7fb3c82ea291  caffe::SyncedMemory::to_gpu()@     0x7fb3c82e9579  caffe::SyncedMemory::mutable_gpu_data()@     0x7fb3c82dad33  caffe::Blob<>::mutable_gpu_diff()@     0x7fb3c8522914  caffe::CuDNNConvolutionLayer<>::Backward_gpu()@     0x7fb3c8319467  caffe::Net<>::BackwardFromTo()@     0x7fb3c83195d1  caffe::Net<>::Backward()@     0x7fb3c82f3c43  caffe::Solver<>::Step()@     0x7fb3c82f433e  caffe::Solver<>::Solve()@           0x40916a  train()@           0x4064cc  main@     0x7fb3a9da3b35  __libc_start_main@           0x406e8d  (unknown)

解决方式:

examples/ssd/ssd_pascal.py中的第337行和第338行,把batch_sizeaccum_batch_size分别减小一倍,下面是修改前的。

336 # Divide the mini-batch to different GPUs.
337 batch_size = 32          #改为16
338 accum_batch_size = 32    #改为16

参考来源:

[1] https://github.com/weiliu89/caffe/tree/ssd

Caffe SSD编译、训练及测试相关推荐

  1. 笔记:caffe ssd gpu训练自己的数据集

    caffe ssd GPU训练自己的数据集 一.caffe环境搭建 二.数据集 三.训练和测试 一.caffe环境搭建 环境搭建过程网上有很多教程,可能要踩些坑吧,正常,这里不多赘述,主要是我当时也没 ...

  2. 笔记:caffe安装编译,并用ssd gpu训练自己的数据集

    caffe ssd GPU训练自己的数据集 一.caffe环境搭建 二.数据集 三.训练和测试 一.caffe环境搭建 环境搭建过程网上有很多教程,可能要踩些坑吧,正常,这里不多赘述,主要是我当时也没 ...

  3. Caffe上用SSD训练和测试自己的数据

        学习caffe第一天,用SSD上上手. 我的根目录$caffe_root为/home/gpu/ljy/caffe    一.运行SSD示例代码    1.到https://github.com ...

  4. caffe安装,编译(包括CUDA和cuDNN的安装),并训练,测试自己的数据(caffe使用教程)

    caffe是一个非常清晰且高效的深度学习框架,目前有着不少的用户,也渐渐的形成了自己的社区,社区上可以讨论相关的问题. 我从开始看深度学习的相关内容到能够用caffe训练测试自己的数据,看了不少网站, ...

  5. caffe-ssd编译、训练、测试全过程(最后有彩蛋)

    大家好,终于把SSD整通了,现在我把整个过程搭建给你们讲讲. caffe_ssd多目标检查效果还是非常好的,在线测试,FPS在20左右.我的训练的还是官方的数据集,其实我们可通过做自己的数据集得到预测 ...

  6. SSD 安装、训练、测试(ubuntu14.04+cuda7.5+openvc2.4.9)

    安装步骤 1.安装git,下载SSD源码包 sudo apt-get install git git clone https://github.com/weiliu89/caffe.git cd ca ...

  7. Caffe SSD Ubuntu16 04 训练自己的数据集

    总的来说,Caffe 是一个比较难上手的框架.这次尝试训练 Caffe 框架下 SSD 模型的训练是我第一次使用 Caffe 框架.下面就说一说我踩过的几个坑,希望能够帮助到大家. 1 编译 Caff ...

  8. caffe安装_目标检测之caffe-ssd模型训练与测试

    最近把一个ssd网络的net..prototxt网络结构和自己生成的hdf5格式数据一起做训练时发现经常报错,因为ssd中一些层在caffe中并没有实现,需要自己写相应的.cpp,.cu文件重新编译, ...

  9. 目标检测:SSD 安装、训练、测试

    说明:这个是SSD刚出来时候的博文记录,最新的可能会有更变,如有问题,请大家查阅官网链接. 环境:ubuntu14.04+cuda7.5+openvc2.4.9 安装 1.下载SSD sudo apt ...

最新文章

  1. 从 ACM 训练领悟坚持之道
  2. SQLite的Pragma语句
  3. UA MATH563 概率论的数学基础 中心极限定理11 强大数定律 版本1:四阶矩有界
  4. getplotlyoffline(‘http://cdn.plot.ly/plotly-latest.min.js‘)无法下载如何解决
  5. VMwareWorkstation设置U盘启动(或U盘使用)
  6. mysql集群重启报错lock_CentOS7.2 下 MySQL 之 PXC 集群部署【Docker+单机多节点】
  7. 程序员的半衰期只有15年?
  8. 数据太少怎么办?试试自监督学习,CV训练新利器,fast.ai新教程,LeCun点评
  9. python如何爬取sci论文_通过爬虫确定SCI期刊的发表周期
  10. python参数报错_python 报错信息汇总
  11. 【BZOJ】1061: [Noi2008]志愿者招募
  12. 微会动平台与微云推战略携手赋能企业数字营销推广与业绩增长闭环
  13. nginx配置详解及设置代理服务器(1)
  14. L1-061 新胖子公式
  15. 未来十年,都从今天开始 | 全球视角的心理AI产品应用与探索
  16. 计算机毕业设计Java诚越园区垃圾分类信息科普系统(源码+系统+mysql数据库+lw文档)
  17. 关于图片存储格式的整理(BMP)
  18. 出发点不对,听再多道理也做不好管理
  19. 基于Pytorch实现的声纹识别模型
  20. jenkin swindows启动_Windows环境下实现Jenkins自动化部署

热门文章

  1. WinRAR 5.90 中文版 — 经典解压缩工具
  2. 微软在向IPhone宣战
  3. Haskell构造binary Tree|99题(55)
  4. 配置oracle用户ssh对等性,配置SSH的对等性
  5. HTTP劫持和DNS劫持
  6. Java识别图片扩展名(后缀名)
  7. imx6ull kernel 添加 sdma-imx6q.bin
  8. tpcc-mysql压测
  9. 前端简历,汇总一下常见的问题
  10. Linux驱动之i2c用户态函数调用