zoukankan      html  css  js  c++  java
  • 检测(1)从0到1

    检测(1)跑通mmdetection

    二、安装教程

    本人的系统环境:

    • Ubuntu 16.04

    • Cuda 9.0 + Cudnn 7.0.5  (cuda8.0也可,亲测)

    • Python 3.6 mmdetection要求Python版本需要3.4+

    • Anaconda 3 (可选)

    这里推荐大家使用Anaconda,可以比较方便的创建Python虚拟环境,避免不同的Python库之间产生冲突。在安装mmdetection之前,需要安装以下几个依赖库:

    • PyTorch 1.0 (

    • Cython

    • mmcv

    下面是我的安装和测试步骤,以Anaconda 3为例。

    1. 使用conda创建Python虚拟环境(可选)

      conda create -n mmdetection python=3.6

      source activate mmdetection

      这样就创建了名为mmdetectionPython3.6环境,并且在terminal中激活。

    2. 安装Pytorch 1.0

      conda install pytorch=1.0 -c pytorch

      这样的速度会比较慢,我之后会贴一个百度云,里面贴了这些所需要的库,包括torch1.0-cp36等

      安装好以后,进入Python环境,输入以下代码测试是否安装成功,不报错则说明安装成功


    3. 安装Cython

      conda install cython

    4. 安装mmcv

      git clone https://github.com/open-mmlab/mmcv.git

      cd mmcv

      pip install .

    注意:这里会下载opencv,如果下载太慢,可以自己去下载,链接会运行时会显示

    注意pip install 后面有个点,别漏了

    5. 安装mmdetection

      git clone https://github.com/open-mmlab/mmdetection.git

      cd mmdetection

      ./compile.sh

      python setup.py install

     

      注意:这里编译必须要求gcc是5.4版本,如果不是,会出现错误:segmentation fault

    到此,我们就完成了mmdetection及其依赖库的安装

    6. 测试Demo

    将下方的代码写入py文件,并存放到mmdetection文件夹目录下,然后运行。该代码的功能是检测图片中的目标,测试模型是官方给出的Faster-RCNN-fpn-resnet50的模型,运行代码会自动下载模型。由于模型是存储在亚马逊云服务器上,速度可能会稍慢,如果下载失败可以通过我的网盘链接mmdetection(密码:dpyl)进行下载,存放到mmdetection文件夹目录下,然后修改下方代码的相关部分

    import mmcv

    from mmcv.runner import load_checkpoint

    from mmdet.models import build_detector

    from mmdet.apis import inference_detector, show_result

    cfg = mmcv.Config.fromfile('configs/faster_rcnn_r50_fpn_1x.py')

    cfg.model.pretrained = None


    # 构建网络,载入模型

    model = build_detector(cfg.model, test_cfg=cfg.test_cfg)


    _ = load_checkpoint(model, 'https://s3.ap-northeast-2.amazonaws.com/open-mmlab/mmdetection/models/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth')

    # 如果通过网盘下载,取消下一行代码的注释,并且注释掉上一行

    # _ = load_checkpoint(model, 'faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth')


    # 测试一张图片

    img = mmcv.imread('test.jpg')

    result = inference_detector(model, img, cfg)

    show_result(img, result)


    # 测试多张图片

    imgs = ['test1.jpg', 'test2.jpg']

    for i, result in enumerate(inference_detector(model, imgs, cfg, device='cuda:0')):

    print(i, imgs[i])

    show_result(imgs[i], result)

    7. 准备自己的数据

    mmdetection支持coco格式和voc格式的数据集,下面将分别介绍这两种数据集的使用方式

    • coco数据集
      官方推荐coco数据集按照以下的目录形式存储,以coco2017数据集为例

    mmdetection

    ├── mmdet

    ├── tools

    ├── configs

    ├── data

    │ ├── coco

    │ │ ├── annotations

    │ │ ├── train2017

    │ │ ├── val2017

    │ │ ├── test2017

    推荐以软连接的方式创建data文件夹,下面是创建软连接的步骤

    cd mmdetection

    mkdir data

    ln -s $COCO_ROOT data

    其中,$COCO_ROOT需改为你的coco数据集根目录

    • voc数据集
      coco数据集类似,将voc数据集按照以下的目录形式存储,以VOC2007为例

    mmdetection

    ├── mmdet

    ├── tools

    ├── configs

    ├── data

    │ ├── VOCdevkit

    │ │ ├── VOC2007

    │ │ │ ├── Annotations

    │ │ │ ├── JPEGImages

    │ │ │ ├── ImageSets

    │ │ │ │ ├── Main

    │ │ │ │ │ ├── test.txt

    │ │ │ │ │ ├── trainval.txt

    同样推荐以软连接的方式创建

    cd mmdetection

    mkdir data

    ln -s $VOC2007_ROOT data/VOCdevkit

    • 1

    • 2

    • 3

    其中,$VOC2007_ROOT需改为你的VOC2007数据集根目录
    然后,下载 pascal_voc_mod.py voc_classes.txt (上方的模型下载地址中有)存放到mmdetection根目录下,运行以下代码
    mmdetection
    官方代码已更新,不再需要自己生成

    如果需要标注自己的数据,推荐使用LabelImg工具标注
    然后在运行 pascal_voc_mod.py 之前,修改 voc_classes.txt 里的类别名为你自己设定的类别名,再运行py文件
    然后需要修改mmdet/datasets/voc.py文件中的CLASSES为你自己的类别

    8. 训练

    官方推荐使用分布式的训练方式,这样速度更快,如果是coco训练集,修改CONFIG_FILE中的pretrained参数,改为你的模型路径,然后运行下方代码

    ./tools/dist_train.sh <CONFIG_FILE> <GPU_NUM> [optional arguments]

    • 1

    如果是voc训练集,还需要修改config文件中的相关参数,可以参考 faster_rcnn_r50_mod.py (上方网盘地址中有),然后再运行上面的代码
    mmdetection
    官方代码已更新,目前已支持voc格式的数据集,不再需要自己修改

    如果不想采用分布式的训练方式,或者你只有一块显卡,则运行下方的代码

    python tools/train.py <CONFIG_FILE> --gpus <GPU_NUM> --work_dir <WORK_DIR>

    • 1

    至此,如果一切顺利的话,你的模型应该就开始训练了

    以上是转载的以为大神的博客,但是我中间遇到了很多问题

    注意:

    1 当一切都成功之后,我以为自己可以成功跑通,但是发生了这样的错误,

       segmentation fault

          出这个错的原因是我的gcc版本(4.8)偏低,导致编译错误,才会导致出现指针错误

          但是gcc高级版本死活安装不上去,apt-get update也更新了,但是总是卡在gbd 那里有问题

       问题显示:Ignoring Provides line with DepCompareOp for package gdb-minimal

       原因是因为我用了ubuntu14,没有听楼主的话,然后改成ubuntu16,这样gcc版本直接就是5.4,

       

    2 如果想正确安装gcc5.0以上,需要ubuntu16版本

    3 其中,python3.6在安装numpy scipy等包时,要注意:

    如果想省事,pip3 install numpy

     

    4 会出现编译不通:错误是:command '/usr/local/cuda/bin/nvcc' failed with exit status 1

    这个时候的解决方案是:

     添加环境变量

    vim ~/.bashrc

    export PATH=/usr/local/cuda/bin:$PATH

    5 cudnn 怎么安装?

     先下载cudnn  网上下载,然后解压tar -xzvf .....tar.gz

    注意,放到哪个cuda,要根据自己的cuda版本

    解压之后,得到一个 cudn 文件夹,该文件夹下include 和 lib64 两个文件夹,命令行进入 cudn/include 路径下,然后进行以下操作:

        cd cuda/include
        sudo cp cudnn.h /usr/local/cuda/include  #复制头文件

    再将进入lib64目录下的动态文件进行复制和链接:

        cd ..
        cd lib64
        sudo cp lib* /usr/local/cuda/lib64/    #复制动态链接库
        cd /usr/local/cuda/lib64/
        sudo rm -rf libcudnn.so libcudnn.so.5    #删除原有动态文件
        sudo ln -s libcudnn.so.5.0.5 libcudnn.so.5  #生成软衔接
        sudo ln -s libcudnn.so.5 libcudnn.so      #生成软链接

    安装完成后可用 nvcc -V 命令验证是否安装成功,若出现以下信息则表示安装成功:

    6

    E138: Can't write viminfo file /public/home/dgxu/.viminfo!

    Press ENTER or type command to continue

    1 切换到root用户(一定要)

    2 rm -f .viminf*.tmp

    7 fatal error:cublas_v2.h: No such file or directory

    cublas_v2.h是cuda里面非常重要的一个加速矩阵运算的库,所以必须安装

    如何安装:这个库在/usr/local/cuda/include里面,如果没有,则有问题,需要查看

    anaconda是不会安装cuda的,需要自己安装

    ll命令查看是否链接,且链接的是什么

    gcc版本,系统gcc版本不好更换,所以尽量使用ubuntu16

     8 ImportError: libSM.so.6: cannot open shared object file: No such file or directory

    再装opencv时会遇到这个问题,以下代码可以解决

    apt-get update

    apt-get upgrade

    apt-get install -y python-qt4

     

    9expected str, bytes or os.PathLike object, not numpy.ndarray

    有问题,一直没有解决

     

    10  cannot connect to X server

    由于是没有安装图形界面,所以会出现这个问题

    修改方案为:

    import cv2

    img=imread()

     counttt=0
        for i in bboxes:
            cv2.rectangle(img,(bboxes[counttt][1],bboxes[counttt][2]),(bboxes[counttt][3],bboxes[counttt][4]),(255, 0, 0), 2)
            counttt=counttt+1
        cv2.imwrite('/workspace/a.png',img)

    11 继续说明错误,这个错误是 batch_size=0,其实是因为你的gpu不能设置为0,如果把gpu设置为0,他会

    认为这里是null,所以,只有一个gpu,要把gpu的设置为1

     

     

  • 相关阅读:
    面向对象设计之------Is-A(继承关系)、Has-A(合成关系,组合关系)和Use-A(依赖关系)(转)
    内部类,匿名内部类
    Java的Date类与Calendar
    json-lib使用——JSONObject与JSONArray
    Java接口调用工具类
    mybatis逆向工程总结工具类
    sqljdbc.jar 和 sqljdbc4.jar
    Oracle驱动classes12.jar 与ojdbc14.jar的区别
    Java的commons包的简介
    EXCEL导出工具类及调用
  • 原文地址:https://www.cnblogs.com/lllcccddd/p/10510609.html
Copyright © 2011-2022 走看看