使用caffe框架利用faster-rcnn来训练自己的数据集

来源:互联网 发布:区块链 闪电网络 编辑:程序博客网 时间:2024/05/22 23:14

最近在研究caffe,前前后后差不多快一周了,论文看得比较少,直接上手来做的,期间遇到无数问题,大大小小的无数问题,不过通过上网,看别人的博客,几乎踩了很多大坑,这里给大家总结一下,希望后续同样做深度学习的小伙伴能够少踩点坑。在这里,我就不做重复功了,具体的配置还有改动的地方我会引用别人的博客,然后补充说明这些博客介绍得并不全面的地方。


备注:以下内容会不定期更新,该篇博客主要对安装caffe使用faster-rcnn中出现的问题进行分享,配置还有使用部分引用网上其它博客。


文件下载地址链接:http://pan.baidu.com/s/1qYnjZCo 密码:g7bo


实验目的:实验室最近要开始做深度学习,配置了一台K80服务器,按现在的水平显卡性能属于中等偏上,不过做做实验应该是够了。最初打算先实现个最简单的目标检测,即人脸检测,目的很简单,就是输入一张图片,判断有没有人脸,并且把人脸部分用box给框出来。


实验工具:caffe框架

                  faster-rcnn


主要语言:C++, Python


实验步骤

一、caffe框架的配置

                  这里给出rbg大神在github上的地址:https://github.com/rbgirshick/py-faster-rcnn

                  这里要注意,caffe的框架一定要使用rbg大神github上的版本,不建议使用伯克利大学维护的那一份caffe的代码,具体的原因主要是,使用faster-rcnn方法的这个版本的caffe比较老,现在官方维护的那个版本改动了一些部分,而且rbg大神使用了Python layer来定义了caffe中的数据层(data layer),所以在编译的时候需要将Python layer打开,这个之后会讲到。按道理,config文件修改合理的话肯定不会出问题的,不过建议还是使用大神的版本,比较省事。

                  rbg大神的caffe配置参考这篇博客,http://www.cnblogs.com/louyihang-loves-baiyan/p/4885659.html#3573006

                  上面这是一篇fast-rcnn的配置博客,实在抱歉,前几天我还找到一份faster-rcnn坑比较少的配置博客,今天怎么翻都找不到了,这一篇虽然是fast-rcnn的配置博客,不过我刚刚仔细看了下,配置过程是同样的,而且作者写得很用心,可以避免不少弯路。

                   大概流程就是先到py-faster-rcnn-master文件下的caffe-fast-rcnn(可以再坏境变量中修改为$FRCNN_CAFFE),修改config文件,将博客中提到的地方都取消注释,然后到py-faster-rcnn-master文件夹(环境变量中命名为$FRCNN_ROOT)中的lib文件夹中,执行

cd $FRCN_ROOT/libmake

这里需要注意下,确保你的Linux gcc的版本为最新版,因为版本比较老的话,编译有个部分会出错中断。

                    接下来就是到$FRCNN_CAFFE中编译caffe和pycaffe,执行命令

cd $FRCNN_CAFFEmake -j8 && make pycaffe
                    暂时想不到别的会出错的地方,如果大家出现什么问题,可以再下面留言告诉我,我能解决的一定尽快解决。


                    至此,caffe框架的配置算是完成了。

二、运行faster-rcnn的demo

                   完成了配置以后,为了验证是否正确安装,可以到$FRCNN_ROOT的tools文件夹中,对demo.py文件进行执行:

./demo.py

                   这里如果机器配置合适的话,就直接默认执行就好,因为默认执行以后使用的是大型网络vgg16,其他的参数主要为:
def parse_args():    """Parse input arguments."""    parser = argparse.ArgumentParser(description='Faster R-CNN demo')    parser.add_argument('--gpu', dest='gpu_id', help='GPU device id to use [0]',                        default=0, type=int)    parser.add_argument('--cpu', dest='cpu_mode',                        help='Use CPU mode (overrides --gpu)',                        action='store_true')    parser.add_argument('--net', dest='demo_net', help='Network to use [vgg16]',                        choices=NETS.keys(), default='vgg16')    args = parser.parse_args()    return args

                    这个函数大家可以看到,能够传入示例脚本的有--gpu  这里选择使用哪一块gpu,默认是0,传入的参数是数字,也就是说,不能使用-a来制定使用所有的gpu核来进行训练;--net参数,选择你要使用的是哪一个网络,网络的脚本dict如下:
NETS = {'vgg16': ('VGG16',                  'VGG16_faster_rcnn_final.caffemodel'),        'zf': ('ZF',                  'ZF_faster_rcnn_final.caffemodel')}

                    这里提供一个格式,后面进行预测的时候可以去定制。

                    至此执行以后一般不会不会成功,应该说一定不会成功,还有faster-rcnn的caffemodel和prototxt文件还没有下载,在$FRCNN_ROOT的data/script中有脚本,打开fetch_faster_rcnn_models.sh文件,按照上面引用博客里面的方法,拿到链接地址以后使用下载工具去下载,这样速度会快很多,prototxt文件在$FRCNN_ROOT的model中已经有文件存在了,到时候注意路径选择合适的文件就好了。(需要下载的文件已经放到网盘,大家可以下载

                     至此,执行demo的示例步骤也结束了。


三、使用示例脚本对官方数据进行训练

                     在$FRCNN_ROOT的experiments/script中有脚本可以使用,名字为:faster_rcnn_end2end.sh,脚本里面需要下载的的数据集为VOC2007,在上面提供的云盘地址中有资源存在了,可供下载。将数据集可以下载到自己的硬盘里面,然后把挂载的硬盘路径通过软链接链接到$FRCNN_ROOT的data/路径中,这样暂时在数据集上没有问题了。

                     脚本中提供的路径都不是正常的路径,需要将全局变量添加进去,比如这一句:

LOG="experiments/logs/faster_rcnn_end2end_${NET}_${EXTRA_ARGS_SLUG}.txt.`date +'%Y-%m-%d_%H-%M-%S'`"

                     系统中是不存在这个地址路径的,需要在前面加上$FRCNN_ROOT,即为:

LOG="$FRCNN_ROOT/experiments/logs/faster_rcnn_end2end_${NET}_${EXTRA_ARGS_SLUG}.txt.`date +'%Y-%m-%d_%H-%M-%S'`"

                     其他地方也是类似,也可以在前面加上../../ 使用相对路径来完成。




                    未完待续。。。。。

1 0
原创粉丝点击