本笔记主要记录个人安装caffe2与Detectron中出现的安装问题,并在安装完成后测试了FAIR官方的Mask-RCNN。
主要内容:
① caffe2的安装和测试;
② Detectron的安装和测试;
③ Mask-RCNN模型的下载和测试命令;
测试平台配置简述:
① 主板平台:x-99
② CPU:i7-5820k
③ GPU:2块(1080ti,TITAN Xp)
④ 系统:ubuntu 16.04.4 LTS
⑤ CUDA:CUDA-8.0,cudnn-7.1.2
首先我们开始caffe2的安装,caffe2的官方网站给出了安装的相关教程,从安装类型上主要分为四个类型:①Pre-Build Binaries(conda install),②Build From Source(从GitHub上clone下来,cmake),③Docker Images,④Cloud;后两种由于平台限制没有研究,主要对前两种方式进行了尝试,最后实际安装使用了第②种安装方式。
注释:为什么不使用第①种方式? 解答:第①种安装方式(conda install xxx)从操作的难度上来说确实比较简便,但是,在随后的安装完整性测试中发现(caffe2安装成功测试与GPU运行支持),GPU运行支持无法通过,即caffe2只能使用CPU进行计算,这种计算方式显然无法发挥平台的性能,具体原因尚未探究,只能迭代其他安装方式。
在我们选定使用的第②种安装方式,也并不是完全按照官方网站的标准方式,而是参考了官网上其他的安装示例进行改进,目标是为caffe2的运行构造出一个独立的运行环境,为了达到这点参考了官方网站的Custom Anaconda Install ,从名字就可以看出,要实现独立运行环境需要安装Anaconda。为caffe2创造独立的运行环境可以①保证不影响现有的python配置;②可以重新搭配python的版本2&3及对应的库文件;③一旦安装失败,可以全部删除配置的环境及库文件,并且对于现有的配置和库文件没有影响。
下面开始介绍安装的步骤和需要注意的问题:
① 首先需要检测依赖库Eigen的版本,Eigen的版本至少需要3.3.0以上,否则在caffe2 make install 阶段会出现
#error Caffe2 requires Eigen to be at least 3.3.0
检测版本的命令是
cat /usr/include/eigen3/Eigen/src/Core/util/Macros.h | grep VERSION
如果版本不满足或者未安装,则可以按照以下步骤更新或安装Eigen库,其实只是替换文件的过程:
1. 从Eigen库官网下载最新版本的库
2. 解压文件并将重命名文件夹为eigen3
3. 打开目标安装路径: cd /usr/include
4. 删除旧版本: sudo rm -rf eigen3/
5. 将解压后重命名的文件移动到目标安装路径: sudo mv path/of/eigen3 /usr/include/
6. 重新检测Eigen版本: cat /usr/include/eigen3/Eigen/src/Core/util/Macros.h | grep VERSION
7. 如果安装的版本是3.3.4则会出现:
EIGEN_WORLD_VERSION 3
EIGEN_MAJOR_VERSION 3
EIGEN_MINOR_VERSION 4
此时新版本的Eigen库安装成功,本安装参考stackoverflow的指导
② 安装caffe2,采用源代码编译、安装的方式
1. 使用conda命令建立新的环境:
conda create -yn caffe2_env python=2.7
其中caffe2_env可以根据自己的命名习惯进行更改,代表独立运行环境的名字,python=2.7代表指定该独立运行环境中使用的python版本,即不管默认环境中的python版本如何,一旦通过source命令激活了该运行环境,则该运行环境就会使用创建时指定的python版本。在创建新的运行环境的同时,可以增加同步安装的库文件,具体参考conda的手册。安装caffe2的过程中我使用了python2的版本,这可能和我默认的Anaconda2的版本
2. 激活创建的运行环境:source activate caffe2_env
这之前的两步和安装anaconda2与anaconda3的并存是一样的步骤,只不过新的环境中没有anaconda的包,需要自己安装
3. 安装依赖包:
conda install -y \
future \
gflags \
leveldb \
mkl \
mkl-include \
numpy \
opencv \
protobuf \
six
同时,还需要安装
pip install \
flask \
graphviz \
hypothesis \
jupyter \
matplotlib \
pydot \
pyyaml \
requests \
scikit-image \
scipy \
setuptools \
tornado
4. 下载代码到本地
cd ~ && git clone --recursive https://github.com/pytorch/pytorch.git && cd pytorch
git submodule update --init
caffe2已经整合到pytorch的源代码中,下载速度较慢的推荐安装并使用proxychains在终端中下载。
5. 在pytorch的根目录中创建build文件夹,并利用cmake编译
rm -rf build && mkdir build && cd build
cmake -DCMAKE_PREFIX_PATH=~/anaconda2/envs/caffe2_env -DCMAKE_INSTALL_PREFIX=~/anaconda2/envs/caffe2_env -DUSE_NATIVE_ARCH=ON ..
make install
-DCMAKE_PREFIX_PATH 和 -DCMAKE_INSTALL_PREFIX 两个参数必须是创建的新的运行环境的路径。
6. 检测caffe2安装
在运行环境中输入
###Test Install Success
python -c 'from caffe2.python import core' 2>/dev/null && echo "Success" || echo "Failure"
可以检测caffe2是否安装成功,之后再输入
###Test GPU Support
python2 -c 'from caffe2.python import workspace; print(workspace.NumCudaDevices())'
应该返回可用的GPU数量,即代表GPU支持安装完成,我的返回 2 。
或者在进入ipython或python控制台后,输入
import caffe2.python.core
无任何返回数据即代表GPU支持安装完成。
Detectron的安装比较简单,分为下载源代码,编译,测试
① 下载源代码:
# DETECTRON=/path/to/clone/detectron
git clone https://github.com/facebookresearch/detectron $DETECTRON
② 编译:
cd $DETECTRON/lib
make
③ 测试,其采用的测试框架是unittest:
python2 $DETECTRON/tests/test_spatial_narrow_as_op.py
到了这一步已经足够我们进行Mask-RCNN的测试了,如果需要Detectron来训练自己的检测模型,请参考这篇博文,编译ops运算符库。
① 测试Mask-RCNN同样在下载的Detectron的源代码里,使用Detectron中tools/infer_simple.py完成Mask-RCNN的测试,而在开始测试最好先下载两个测试会用的参数模型,但是如果你认为你的网速足够快,线路足够好,可以直接测试运行测试。
线路稳定的测试代码:
python2 tools/infer_simple.py \
--cfg configs/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml \
--output-dir /tmp/detectron-visualizations \
--image-ext jpg \
--wts https://s3-us-west-2.amazonaws.com/detectron/35861858/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml.02_32_51.SgT4y1cO/output/train/coco_2014_train:coco_2014_valminusminival/generalized_rcnn/model_final.pkl \
demo
② 如果网络线路不好(大部分时候),需要下载两个模型,网址分别是
https://s3-us-west-2.amazonaws.com/detectron/35861858/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml.02_32_51.SgT4y1cO/output/train/coco_2014_train:coco_2014_valminusminival/generalized_rcnn/model_final.pkl
https://s3-us-west-2.amazonaws.com/detectron/ImageNetPretrained/MSRA/R-101.pkl
第一个模型是训练好的Mask-RCNN模型,对应的参数--wts,第二模型需要放在
/tmp/detectron-download-cache/ImageNetPretrained/MSRA/R-101.pkl
路径下。
独立下载模型的测试代码是
python2 tools/infer_simple.py \
--cfg configs/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml \
--output-dir output/detectron-visualizations \
--image-ext jpg \
--wts model/MaskRCNN/e2e_mask_rcnn_R-101-FPN_2x_model_final.pkl \
demo
至此,全部构建结束。