Caffe上用SSD训练和测试自己的数据
学习caffe第一天,用SSD上上手。
我的根目录$caffe_root为/home/gpu/ljy/caffe
一、运行SSD示例代码
1.到https://github.com/weiliu89/caffe.git下载caffe-ssd代码,是一个caffe文件夹
2.参考已经配好的caffe目录下的makefile.config修改¥caffe_root下的makefile.config.
3.在$caffe_root下打开命令行终端,输入以下命令
make -j8
make py
make test -j8
make runtest -j8
编译完成
4.下载VGG_ILSVRC_16_layers_fc_reduced.caffemodel预训练模型,放到$caffe_root/models/VGG下。(没有VGG文件夹就建一个)
下载数据集VOCtest_06_Nov-2007.tar等三个压缩包放在$caffe_root/data下,并解压。
5.修改./data/VOC0712/create_list.sh里面的路径为自己的路径,修改./data/VOC0712/create_data.sh,本文如下图所示:(VOC0712文件夹可能没有,那就从网上下一个)

6.命令行切换到$caffe_root并执行上面两个脚本,直接命令行输入就是执行
7.训练,命令行输入下面:
python examples/ssd/ssd_pascal.py
或者下载训练好的模型
8.测试
A.python examples/ssd/score_ssd_pascal.py
这个要先改里面的gpu个数,输出是分数
B.python examples/ssd/plot_detections.py
输出是是视频的标注...
C. ./.build_release/examples/ssd/ssd_detect.bin models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_120000.caffemodel /home/gpu/ljy/caffe/data/ljy_test/TestData/pictures.txt
这是单张图片的测试,C++版本的,其中ctrl+h可以查看隐藏文件夹,最后那个pictures.txt是待测试文件夹的路径列表,如下图:


测试结果如下:(暂时还不知道输出的都是什么东西,可能是类别、置信度和位置吧)

D 单张图片测试,python版本
点开ssd_detect.ipynb,复制并保存为ssd_detect.py,然后修改里面的路径(包括$caffe_root和测试图片的路径),并在最后加上plt.show()
然后命令行运行该代码即可
二、训练并测试自己的数据
1.生成训练和测试数据
我们自己的数据基本是jpeg或者其他图片格式的,而caffe输入的一般是LMDB的数据,所以我们要进行转换。我们转换的方法是
A.将图像用工具进行标注(工具这里先不介绍),得到txt标注文件
B.将txt文件和图片转换成VOC格式(用脚本)
C.将VOC格式转换为LMDB格式,利用SSD示例代码提供的转换脚本。
(1) 在 $caffe_root/data/VOCdevkit目录下创建ljy_test目录,该目录中存放自己转换完成的VOC数据集;
(2) $CAFFE_ROOT/examples目录下创建ljy_test目录;
(3) $CAFFE_ROOT/data目录下创建ljy_test目录,同时将data/VOC0712下的create_list.sh,create_data.sh,labelmap_voc.prototxt
这三个文件copy到ljy_test目录下,分别重命名为create_list_ljy_test.sh,create_data_ljy_test.sh, labelmap_ljy_test.prototxt
(4) 对上面新生成的两个create文件进行修改,主要修改是将VOC0712相关的信息替换成ljy_test
修改后的两个文件分别如下:
然后修改labelmap_indoor.prototxt,将该文件中的类别修改成和自己的数据集相匹配,注意需要保留一个label 0 , background类别
完成上面步骤的修改后,可以开始LMDB数据数据的制作,在$CAFFE_ROOT目录下分别运行:
./data/ljy_test/create_list_indoor.sh
./data/ljy_test/create_data_indoor.sh
命令执行完毕后,可以在$CAFFE_ROOT/examples/ljy_test目录下查看转换完成的LMDB数据数据。
2.训练
A.将预训练好的模型放在$CAFFE_ROOT/models/VGGNet下(我们这里在运行SSD示例代码的4已经放过了,可以省略)
B.将$caffe_root/examples/ssd/ssd_pascal.py拷贝到自己的文件夹$caffe_root/examples/ljy_test/下,并重命名为ssd_pascal_ljy.py
C.修改ssd_pascal_ljy.py为自己的各个路径,其中要在$caffe_root/models/VGGNet/下建立ljy_test文件夹,修改如下:




D.执行训练代码。在$caffe_root下打开命令行,并输入
python examples/ljy_test/ssd_pascal_ljy.py
等待训练就可以了...
有可能遇到loss=nan的情况,这个待议,正常情况下是下面酱紫的:

3.测试
A.c++版本的测试
跟上面ssd示例测试的差不多,改一下路径即可
B.python版本的测试
同最上面
4.参考:http://blog.csdn.net/u014696921/article/details/53353896,https://github.com/weiliu89/caffe.git
Caffe上用SSD训练和测试自己的数据的更多相关文章
- Caffe系列4——基于Caffe的MNIST数据集训练与测试(手把手教你使用Lenet识别手写字体)
基于Caffe的MNIST数据集训练与测试 原创:转载请注明https://www.cnblogs.com/xiaoboge/p/10688926.html 摘要 在前面的博文中,我详细介绍了Caf ...
- 物体检测算法 SSD 的训练和测试
物体检测算法 SSD 的训练和测试 GitHub:https://github.com/stoneyang/caffe_ssd Paper: https://arxiv.org/abs/1512.02 ...
- Caffe初试(二)windows下的cafee训练和测试mnist数据集
一.mnist数据集 mnist是一个手写数字数据库,由Google实验室的Corinna Cortes和纽约大学柯朗研究院的Yann LeCun等人建立,它有60000个训练样本集和10000个测试 ...
- Caffe学习系列(12):训练和测试自己的图片
学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个流程. 一.准备数据 有条件的同学,可以去 ...
- 转 Caffe学习系列(12):训练和测试自己的图片
学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测试模型的整个流程. 一.准备数据 有条件的同学,可以去 ...
- Ubuntu14.04+caffe+cuda7.5 环境搭建以及MNIST数据集的训练与测试
Ubuntu14.04+caffe+cuda 环境搭建以及MNIST数据集的训练与测试 一.ubuntu14.04的安装: ubuntu的安装是一件十分简单的事情,这里给出一个参考教程: http:/ ...
- Caffe学习系列(12):训练和测试自己的图片--linux平台
Caffe学习系列(12):训练和测试自己的图片 学习caffe的目的,不是简单的做几个练习,最终还是要用到自己的实际项目或科研中.因此,本文介绍一下,从自己的原始图片到lmdb数据,再到训练和测 ...
- CaffeExample 在CIFAR-10数据集上训练与测试
本文主要来自Caffe作者Yangqing Jia网站给出的examples. @article{jia2014caffe, Author = {Jia, Yangqing and Shelhamer ...
- caffe学习系列(2):训练和测试自己的图片
参考:http://www.cnblogs.com/denny402/p/5083300.html 上述主要介绍的是从自己的原始图片转为lmdb数据,再到训练.测试的整个流程(另外可参考薛开宇的笔记) ...
随机推荐
- 5、二、App Components(应用程序组件):0、概述
二.App Components(应用程序组件) 0.概述 App Components Android's application framework lets you create rich ...
- MangoDB学习笔记
01. 数据库操作 1. 查看当前数据库名称 db 2. 查看所有数据库名称,列出所有在物理上存在的数据库 show dbs; 3. 切换数据库,如果数据库不存在也并不创建,直到插入数据或创建集合时数 ...
- UILabel(富文本)
本文转载至 http://www.jianshu.com/p/5d24d22f99c3 富文本 NSString *str = @"人生若只如初见,何事秋风悲画扇.\n等闲变却故人心,却道故 ...
- mtd工具
http://daemons.net/linux/storage/mtd.html MTD The Memory Technology Devices (MTD) subsystem provides ...
- Kernel parameter requirements ( Linux DB2)
Kernel parameter requirements ( Linux DB2) https://www.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/ ...
- 常用Common集合
Log using System; using System.IO; using System.Linq; using System.Text; namespace Common { public c ...
- 基于微服务架构、运行于容器中的.NET Core示例应用eShopOnContainers
eShopOnContainers 是 <.NET Microservices – Architecture for Containerized .NET Applications>这本微 ...
- MySQL行(记录)的详细操作一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理
MySQL行(记录)的详细操作 阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操作: ...
- shell脚本之使用sed和awk进行文本处理
Shell这种脚本语言特点是,结果松散,场景复杂,针对于一些参数都有特殊意义.针对于大部分工程师而言,使用中的情况是你可能会经常忘记参数或其意义,使你不得不查阅man或网上寻求帮助.此篇文档作用就是在 ...
- 【编译原理】c++实现自上而下语法分析器
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...


