• ubuntu16.04 Detectron目标检测库配置(包含GPU驱动,Cuda,Caffee2等配置梳理)


    Detectron概述

    Detectron是Facebook FAIR开源了的一个目标检测(Object Detection)平台。

    用一幅图简单说明下Object Detection。如Mask R-CNN已经能够做到多目标的Instance Segmentation。

    object detection

    图片来源: Fei-Fei Li, Andrej Karpathy & Justin Johnson (2016) cs231n, Lecture 8 - Slide 8, Spatial Localization and Detection (01/02/2016). Available: http://cs231n.stanford.edu/slides/2016/winter1516_lecture8.pdf 

    Detectron项目项目自 2016 年 下半年启动,基于Caffe2 ,目前支持大量机器学习算法和已经训练好的模型。项目地址:https://github.com/facebookresearch/Detectron

    其中目标检测算法的实现包括:

    Mask R-CNN (https://arxiv.org/abs/1703.06870)—Marr Prize at ICCV 2017

    RetinaNet (https://arxiv.org/abs/1708.02002)—Best Student Paper Award at ICCV 2017

    Faster R-CNN (https://arxiv.org/abs/1506.01497)

    RPN (https://arxiv.org/abs/1506.01497)

    Fast R-CNN (https://arxiv.org/abs/1504.08083)

    R-FCN (https://arxiv.org/abs/1605.06409)

    这些目标检测算法主要使用以下卷积网络架构:

    ResNeXt{50,101,152} (https://arxiv.org/abs/1611.05431)

    ResNet{50,101,152} (https://arxiv.org/abs/1512.03385)

    Feature Pyramid Networks (https://arxiv.org/abs/1612.03144) (with ResNet/ResNeXt)

    VGG16 (https://arxiv.org/abs/1409.1556)

    Detectron配置
    想要使用和理解其中各个方法,最基础的一步就是能够先配置好环境,将示例跑通,接下去也接着配置Detectron的机会,把GPU相关的配置再梳理一下。

    1、GPU驱动

    以往在linux下安装显卡驱动是一段非常东痛苦的经历,搞得不好,一重启就黑屏。如果是多显卡的机器,也会遇到无法切换,或者各种版本不兼容的问题。

    这两年在ubuntu社区和NVIDIA官方的努力下,社区的PPA专有驱动基本已经相对稳定。

    a)在安装之前,首先确认你的电脑是否在BIOS上有secure boot,如果有进入BIOS,把secure boot 设置成disable。 (这设置十分重要,不然会出现无法安装CUDA的情况)

    b)如果之前已经自带的NVIDIA驱动,需要删除老的驱动

    sudo apt-get –purge remove nvidia-glx nvidia-glx-new
    sudo apt-get –purge remove nvidia-settings nvidia-kernel-common

    c)确保万无一失,在原有驱动删除之后,需要将Ubuntu集成的开源驱动加入黑名单,即修改/etc/modprobe.d/blacklist.conf文件:

    sudo gedit /etc/modprobe.d/blacklist.conf

    d)在该文件中增加如下两行:
    blacklist nouveau
    options nouveau modeset=0

    e)然后需要确定你的显卡对应的驱动版本,知道自己的显卡型号后,可以利用官方提供的驱动下载查询界面: NVIDIA 驱动查询

    sudo add-apt-repository ppa:graphics-drivers/ppa
    sudo apt-get update

    f)接着在软件中心的 software & updates中的Additional Drivers的标签,找到和之前查到GPU驱动版本一致的条目,点击apply changes
    重启之后应该就安装好了。

    Tips:在16.04中有遇到过,在Additional Drivers那个界面选择了GPU驱动后,点击apply changes无法更改的尴尬情况。

    解决方法是直接使用命令行
    sudo apt-get install nvidia-××× nvidia-prime  (XXX为对应的驱动型号)

    测试驱动是否安装成功

    nvidia-smi
    如果出现了你的GPU列表,则说明驱动安装成功了。

    2、Cuda

    cuda的安装根据自己的系统选择合适的版本,为了避免一系列可能会出现的问题,在安装CUDA之前,可以进行一下安装前的自检,自检可以参照官方给的文档(CUDA安装前自检)

    官网下载 cudnn 需要注册帐号并登录。官方下载网址 

    下载完成后,在文件所在的文件夹
    sudo dpkg -i cuda-repo-ubuntu1604-×××××_amd64​.deb (××××为官方版本号)
    sudo apt-get update
    sudo apt-get install cuda​

    如果是CUDA8.0可能会遇到gcc版本的不兼容问题,可以给GCC降级。

    安装完之后,配置cuda的环境变量,在文件~/.bashrc之后加上
    gedit ~/.bashrc
    export PATH=/usr/local/cuda-××/bin:$PATH  (××是版本号)
    export LD_LIBRARY_PATH=/usr/local/cuda-××/lib64:$LD_LIBRARY_PATH (××是版本号)

    然后设置环境变量和动态链接库,在命令行输入
    sudo gedit /etc/profile
    在打开的文件里面加上(注意等号两边不能有空格)
    export PATH=/usr/local/cuda/bin:$PATH
    保存之后,创建链接文件
    sudo gedit /etc/ld.so.conf.d/cuda.conf
    在打开的文件中添加如下语句:
    /usr/local/cuda/lib64
    保存退出执行命令行:
    sudo ldconfig
    使链接立即生效。

    Tips:之前在配置ZED双目相机的,如果是 下载Local版的CUDA,都会在安装ZED SKD时出现找不到CUDA8的提示。

    在试了很多次之后,偶尔一次使用了CUDA下载页面中的 deb(network)版本,然后就成功了。 所以建议采用deb的方式安装。

    测试Cuda是否安装成功:

    cd /usr/local/cuda-××/samples/1_Utilities/deviceQuery (××为版本号)
    sudo make
    sudo ./deviceQuery

     

    3、CuDNN

    CuDNN是NVIDIA推出的针对深度学习的Cuda优化库,可以帮助提升算法效率

    官方下载网址

    ubuntu下使用deb比较方便,不需要自己设置环境变量

    先安装runtime库,这里以cuda9.0为例。

    sudo dpkg -i libcudnn7_7.0.3.11-1+cuda9.0_amd64.deb
    再安装dev库
    sudo dpkg -i libcudnn7-dev_7.0.3.11-1+cuda9.0_amd64.deb

    4、配置Caffee2

    Caffe2的安装相比于caffe的安装要简单很多,不需要自己去配置Makefile.config,可以在make的时候,自动检测GPU以各种库,例如OpenCV。如果没有就自动选择不使用。

    官方的安装说明永远是最好的说明

    https://caffe2.ai/docs/getting-started.html?platform=linux&configuration=compile

    这里也简单梳理下流程。

    首先确定系统和安装方式,这里采用直接编译源码的方式。

    安装需要的库

    sudo apt-get update
    sudo apt-get install -y --no-install-recommends
          build-essential
          cmake
          git
          libgoogle-glog-dev
          libgtest-dev
          libiomp-dev
          libleveldb-dev
          liblmdb-dev
          libopencv-dev
          libopenmpi-dev
          libsnappy-dev
          libprotobuf-dev
          openmpi-bin
          openmpi-doc
          protobuf-compiler
          python-dev
          python-pip                          
    sudo pip install
          future
          numpy
          protobuf

    libgflags2根据系统选择

    # 对于 Ubuntu 14.04
    sudo apt-get install -y --no-install-recommends libgflags2
    # 对于 Ubuntu 16.04
    sudo apt-get install -y --no-install-recommends libgflags-dev

    对于GPU的相关依赖我们已经在上面完成配置了,caffe2也给了官方GPU配置的说明,也可以作为一种参考。

    另外如opencv库也可以根据自己的需要进行安装

    完成准备工作后就可以下载源码进行编译。

    git clone --recursive https://github.com/caffe2/caffe2.git && cd caffe2
    make && cd build && sudo make install

    测试caffe2是否安装成功

    cd ~ && python -c 'from caffe2.python import core' 2>/dev/null && echo "Success" || echo "Failure"

    如果是failure,试着cd到caffe2/build的文件夹里,然后执行

    python -c 'from caffe2.python import core' 2>/dev/null

    如果successful,说明是环境变量的设置问题,如果还是失败,则会有具体的提示。

    配置环境变量,编辑~/.bashrc

    export PYTHONPATH=/usr/local:$PYTHONPATH
    export PYTHONPATH=$PYTHONPATH:/home/**/devapp/caffe2/build  (**为计算机名)
    export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

    5、Detectron配置

    还是那句话,最好的教程是官方的文档。

    https://github.com/facebookresearch/Detectron/blob/master/INSTALL.md


    找个合适的文件位置进行clone
    git clone https://github.com/facebookresearch/detectron

    编译python库
    cd DETECTRON/lib && make (DETECTRON表示你clone下来的文件夹)
    测试是否编译成功
    python2 $DETECTRON/tests/test_spatial_narrow_as_op.py (DETECTRON表示你clone下来的文件夹)

    如果遇到缺少库的问题,可以根据报错的信息把库加上

    另外的问题可以参见官方的Troubleshooting

    6、Detectron简单使用

    参考

    https://github.com/facebookresearch/Detectron/blob/master/GETTING_STARTED.md

    训练相关的我们放到之后去说,这里先说下利用已经训练好的模型和算法框架来进行目标的检测。

    根据不同的需求,对象检测可以分为几种,1)Bounding box,2)Mask,3)KeyPoints

    这里给出两个例子,用mask和

    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

    python2 tools/infer_simple.py
        --cfg configs/12_2017_baselines/e2e_keypoint_rcnn_R-101-FPN_s1x.yaml
        --output-dir /tmp/detectron-visualizations
        --image-ext jpg
        --wts https://s3-us-west-2.amazonaws.com/detectron/37698009/12_2017_baselines/e2e_keypoint_rcnn_R-101-FPN_s1x.yaml.08_45_57.YkrJgP6O/output/train/keypoints_coco_2014_train%3Akeypoints_coco_2014_valminusminival/generalized_rcnn/model_final.pkl
        demo

    下面第一和第二个图是Bounding box和Mask的效果,第三和第四个图是Bounding box和人体骨骼keypoints的效果。

  • 相关阅读:
    ACM-ICPC 2018 徐州赛区网络预赛 G题
    ACM-ICPC 2018 沈阳赛区网络预赛 K题
    ACM-ICPC 2018 沈阳赛区网络预赛 K题
    数据结构实验之栈与队列七:出栈序列判定
    数据结构实验之栈与队列七:出栈序列判定
    Python isspace()方法
    Python isnumeric()方法
    Python islower()方法
    Python isdigit()方法
    Python isdecimal()方法
  • 原文地址:https://www.cnblogs.com/zhencv/p/8384419.html
Copyright © 2020-2023  润新知