OHEM算法的Caffe实现
来源:互联网 发布:数据库维护工资多少 编辑:程序博客网 时间:2024/06/06 14:05
这篇博文介绍如何用OHEM算法训练数据和测试数据。因为OHEM算法是对Fast RCNN的改造,所以Caffe代码的编译和Fast(er) RCNN基本类似。OHEM算法及Caffe代码的讲解可以参考另外一篇博客:OHEM算法及Caffe代码详解
代码的github地址:https://github.com/abhi2610/ohem
1、拉取项目
git clone --recursive https://github.com/abhi2610/ohem.git
并假设拉取的项目放在$OHEM_ROOT
目录下,如果你是在/home/user1/models/
目录下执行上面这个clone命令,那么$OHEM_ROOT就是/home/user1/models/ohem
。
2、拷贝Makefile.config
cd $OHEM_ROOT/caffe-fast-rcnncp Makefile.config.example Makefile.config
这里要修改Makefile.config两处地方:
2.1、将makefile.config里面的以下两行:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/includeLIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
换成这两行:其实就是加上了hdf5的路径
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/
不修改的话会在编译Caffe的时候遇到如下报错:即找不到hdf5文件
2.2、将makefile.config里面的 WITH_PYTHON_LAYER :=1
前面的注释去掉,这是因为faster R-CNN是要python接口的,所以这一项要有,不能注释。
否则如果后面有用到python的话会遇到这样错误:
3、编译 Cython
cd $OHEM_ROOT/libmake
4、编译 Caffe 和 pycaffe
cd $OHEM_ROOT/caffe-fast-rcnnmake -j32 && make pycaffe
前面一个是编译Caffe,后面一个是编译python接口,&&表示在前面运行成功的前提下执行后面
5、下载预训练的ImageNet模型
cd $OHEM_ROOT./data/scripts/fetch_imagenet_models.sh
运行成功后,就会在$OHEM_ROOT/data
文件夹下生成imagenet_models文件夹。但是博主希望你能够在一开始的时候就把这个文件夹下载到一个公共目录下,比如类似/home/user1/data/目录,这是因为很多目标检测的项目或者图像分类的项目都会用到预训练的ImageNet模型,这些预训练的模型又基本一样。因此如果每次下载一个新的项目都要下载新的预训练模型那肯定既麻烦又占用空间(大的模型有好几个G)。放在公共目录下可以这样操作(假设你的公共目录是/home/user1/data
):
cd /home/user1/data./data/scripts/fetch_imagenet_models.sh
然后用以下命令在当前项目下建立一个链接,这样任何项目都可以访问,而不需要重复拷贝。
cd $OHEM_ROOT/dataln -s /home/user1/data/imagenet_models imagenet_models
解释以下上面的命令,第一行是进入该项目下的data文件夹,然后运行第二行命令,表示将那个目录下的文件链接到当前目录,并取名imagenet_models,这里我是把下载下来的imagenet_models文件夹放在/home/user1/data/目录下,你要根据你下载的路径来改。
链接完的文件夹会多一个黑色的箭头,如下图:
6、准备数据
这里以下载VOC2007数据集为例:
首先命令行进入你想要存放数据的地方,跟前面一样推荐放在类似/home/user1/data/
这样的目录下,即某个用户下的data目录,因此假设你要放在上面那个目录,那么在命令行输入:
cd /home/user1/datawget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tarwget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tarwget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
然后解压:
tar xvf VOCtrainval_06-Nov-2007.tartar xvf VOCtest_06-Nov-2007.tartar xvf VOCdevkit_08-Jun-2007.tar
然后跟前面一样在你的项目中链接到这个数据集,因为你的项目一般默认是在项目的data目录下寻找数据。
cd $OHEM_ROOT/dataln -s $VOCdevkit VOCdevkit2007
这个命令意思就是将$VOCdevkit处的数据链接到当前目录,并命名为VOCdevkit2007。
7、准备Region Proposal
因为本文算法是建立在Fast RCNN上的,而Fast RCNN需要用selective search方式获得Region Proposal,因此需要额外下载已经生成好的Region Proposal文件:
可以从git地址下载:https://github.com/miraclewkf/selective_search_data
然后按照前面建立连接的方式建立连接。
8、开始训练模型
cd $OHEM_ROOT./experiments/scripts/fast_rcnn_ohem.sh 0 VGG16 pascal_voc
表示用ID为0的GUP,网络结构采用VGG16,数据集采用pascal_voc。
这个fast_rcnn_ohem.sh的主要内容包括下面两部分:训练和测试。
训练时候报错:
解决:很明显是找不到text_format,所以在$OHEM_ROOT/tools/
下面找到对应的训练脚本train_net.py,在开头添加一句:import google.protobuf.text_format
。然后再运行./experiments/scripts/fast_rcnn_ohem.sh 0 VGG16 pascal_voc
就可以成功运行了,如下图:
训练结束将会在$OHEM_ROOT/output/fast_rcnn_ohem/voc_2007_trainval/目录下生成相应的caffemodel。
9、测试模型
由于运行上面的
./experiments/scripts/fast_rcnn_ohem.sh 0 VGG16 pascal_voc
会在训练之后进行测试,如下图是正在测试:
最后是测试的结果:mAP达到0.7178还是很不错的。
- OHEM算法的Caffe实现
- OHEM算法及Caffe代码详解
- OHEM算法论文理解
- SqueezeNet网络的OHEM
- YOLO算法的Caffe实现
- R-FCN算法的Caffe实现
- A-Fast-RCNN算法的Caffe实现
- BP算法的推导及其在Caffe中的实现
- CenterLoss的caffe实现
- SqueezeNet的Caffe实现
- (Caffe)卷积的实现
- caffe中LRN的实现
- 实现caffe的自动安装
- caffe 中 BLOB的实现
- 实现caffe Mnist的程序代码
- Caffe中卷积的实现
- 【Caffe】优化算法 《很认真的讲讲Caffe》
- 【Caffe实践】基于Caffe的人脸识别实现
- Win10配置JDK变量注意事项
- 字符编码格式串转换之C语言版(UTF-8, Unicode, GB2312)
- leetcode-67. Add Binary(二进制串求和)
- [乐意黎]Nodejs采集程序抛Error: Cannot find module 'superagent' 及 Cannot find module 'superagent' 等的解决方法
- windows start 命令启动 GUI 程序
- OHEM算法的Caffe实现
- 子进程的异步等待方式
- java实现单链表
- c++操作符重载与友元函数 单目 双目 左移右移 ==号操作符重载 自定义数组
- virtualbox
- android studio clean project失败时的处理方法
- 在Intellij IDEA上使用Maven构建Spark应用(Scala)
- 时间复杂度
- (回溯法)LeetCode#90. Subsets II