1.从github上clone对应的FPN的repository,我下载的是下面这个
$ git clone https://github.com/unsky/FPN.git
2. 下载VOC2007,2012以及ResNet50.caffemodel,
数据集VOC2007下载链接为 https://pan.baidu.com/s/1kXb26VX 密码:uvlj ,下载完之后把它放在data目录下
模型下载链接为 https://onedrive.live.com/?authkey=%21AAFW2-FVoxeVRck&id=4006CBB8476FF777%2117887&cid=4006CBB8476FF777,下载完之后把它放在data/models/models目录下
3.编译caffe
在docker hub上pull下来了我的基础镜像之后,我在容器里对caffe进行编译,
基础镜像为uhub.ucloud.cn/uaishare/gpu_uaitrain_ubuntu-14.04_python-2.7.6_caffe-py-faster-rcnn
$ sudo docker pull uhub.ucloud.cn/uaishare/gpu_uaitrain_ubuntu-14.04_python-2.7.6_caffe-py-faster-rcnn
然后通过Dockerfile将我本地的/服务器上的已经添加了数据集以及模型的FPN文件添加到我的基础镜像之中,即
$ vi Dockerfile
$ From uhub.ucloud.cn/uaishare/gpu_uaitrain_ubuntu-14.04_python-2.7.6_caffe-py-faster-rcnn
$ ADD ./FPN /root/FPN
以上我使用的基础镜像其中包括了py-faster-rcnn,我选择将其删除,即
$ rm -r /root/py-faster-rcnn
接下来就是最恶心的编译,刚开始是规规矩矩按照github上的步骤,即
$ cd /FPN/caffe-fpn
$ mkdir build && cd build
$ cmake ..
$ make -j16 all
$ cd /FPN/lib
$ make
由于我的基础镜像中没有cmake,我就用wget从url上下载了cmake,后来发现这就是我陷入困境的最大的bug之一,即
$ wget https://cmake.org/files/v3.10/cmake-3.10.2.tar.gz
$ tar -xzvf cmake-3.10.2.tar.gz
$ mv cmake-3.10.2 cmake
$ cd cmake
$ ./bootstrap
$ make -j8
$ sudo make install
然后我就遇到了一系列bug,这里跳过,安装完成之后我继续对caffe-fpn进行cmake,然后报错
Looking for pthread_create in pthreads - not found
据说好像是cmake版本的问题,因此我就去寻找archive下载,后来依然报错,就想起了之前复现rbg的faster r-cnn的时候似乎并没有用到cmake的命令,所以在我纠结了大概三四五六天之后我决定跳过cmake,转而下面这条路线:
$ cd /FPN/lib
$ make
$ cd /FPN/caffe-fpn
$ make -j8 && make pycaffe
测试是否编译成功,
$ cd /FPN/caffe-fpn/python/caffe
$ python
$ import caffe #没有报错就应该是成功了
4.跑demo
编译完之后我做的第一件事情是在服务器上跑了一下demo,由于服务器上看不到图形界面,但是还是可以看到结果如何,由于我发现github上FPN的作者不是官方,而且似乎是将rbg的faster r-cnn拷贝过来之后做了一些相应修而成的,所以对于demo还要对其做以下修改:
$ vi /FPN/tools/demo.py
$ NETS = {'vgg16': ('VGG16',
'VGG16_faster_rcnn_final.caffemodel'),
'zf': ('ZF',
'ZF_faster_rcnn_final.caffemodel')}
将代码中的上面部分改为下面部分
$ NETS = {'vgg16': ('FPN',
'VGG16_faster_rcnn_final.caffemodel'),
'zf': ('ZF',
'ZF_faster_rcnn_final.caffemodel')}
以及main函数中,
$ prototxt = os.path.join(cfg.MODELS_DIR, NETS[args.demo_net][0],
'faster_rcnn_alt_opt', 'faster_rcnn_test.pt')
改为
$ prototxt = os.path.join(cfg.MODELS_DIR, NETS[args.demo_net][0],
'FP_NET_end2end', 'solver.prototxt')
保存之后,
$ cd /FPN
$ python ./tools/demo.py
即可。
5.开始训练自己的数据
建立一个文件夹
$ mkdir train_with_battery_20180305
文件夹结构如下:
Dockerfile code data experiments output pack-run.cmd run.sh
下面分别介绍每一个文件/文件夹的情形:
Dockerfile的目的是用来建立一个训练镜像,内容如下:
FROM 19940608/prepo:battery-train-20180210
ADD ./code/ /data/
ADD run.sh /data/
实际上基础镜像应该是你最开始搭好FPN的那个镜像,我这里是另外一个镜像,理解大致意思就好
code文件夹主要包含的就是FPN下面的lib和tools文件夹,其中lib下面有些文件因为numpy版本的问题,需要修改一下,参考:https://github.com/ucloud/uai-sdk/tree/master/examples/caffe/train/faster-rcnn 即可。
data文件夹包含了FPN下面的models以及从网上下载的VOCdevkit2007文件
6. 开始训练自己的数据
这个训练文件夹是公司的前辈建的,里面的基本文件如下:
Dockerfile README.md batch_test config.json config.py config.pyc config_docker.json data docker-compose.yml main.py pytests requirements.txt src
Dockerfile的具体内容如下:
FROM 19940608/prepo:battery-train-20180210_2
MAINTAINER hongpu
WORKDIR /data
COPY ./ /data
RUN cp config_docker.json ./config.json
EXPOSE 7912 5000
RUN echo 'export PYTHONPATH=/root/FPN/lib:$PYTHONPATH' >> /root/.bashrc
RUN pip install -r requirements.txt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
batch_test是测试进行的核心文件夹,内容如下:
README.MD __init__.py faster_rcnn_test.py images output simhei.ttf
其中faster_rcnn_test.py为测试的核心python文件,主要是对tools里面的test_net.py等几个python文件进行了整合,使得更加简洁。images主要用来存放测试图片,output主要用来存储测试图片后的结果。
几个config文件即为配置文件,接下来是data文件夹,其内容为下:
labels models test_sets trained_models
labels主要存放模型标签,比如对应的分类标签;models存放的是test.prototxt;test_sets存放的是测试图片的名称;trained_models存放的是训练所得到的模型。
main.py是测试主程序