zoukankan      html  css  js  c++  java
  • 使用colab运行深度学习gpu应用(Mask R-CNN)实践

    1,目的

    Google Colaboratory(https://colab.research.google.com)是谷歌开放的一款研究工具,主要用于机器学习的开发和研究。这款工具现在可以免费使用,但是不是永久免费暂时还不确定。Google Colab最大的好处是给广大的AI开发者提供了免费的GPU使用!GPU型号是Tesla K80!你可以在上面轻松地跑例如:Keras、Tensorflow、Pytorch等框架。

     

    Mask R-CNN(https://github.com/matterport/Mask_RCNN),Mask R-CNN for object detection and instance segmentation on Keras and TensorFlow,是一款物体检测与分割的开源软件。Mask R-CNN是ICCV 2017的best paper,彰显了机器学习计算机视觉领域在2017年的最新成果。在机器学习2017年的最新发展中,单任务的网络结构已经逐渐不再引人瞩目,取而代之的是集成,复杂,一石多鸟的多任务网络模型。Mask R-CNN就是典型的代表。本篇大作的一作是何凯明。

    本文目的在于尝试在colab上使用其GPU运行环境,运行Mask R-CNN的demo,看看实际运行的速度和效果究竟如何。

    2,运行环境准备

    参考文件:Google Colab——用谷歌免费GPU跑你的深度学习代码

    https://www.jianshu.com/p/000d2a9d36a0

    为使mrcnn的demo代码能在colab中跑起来,需先安装运行环境。步骤如下:

    è       将github项目代码复制到google云端硬盘中。

    è       在云端notebook中启动demo代码。

    è       设置notebook代码运行环境

    è       安装软件并挂载Google Drive

    è       安装requirements包

    è       安装mrcnn包

    2.1复制代码

    将Mask R-CNN代码从github下载,然后上传到google云端硬盘中。具体步骤略过。

     

    2.2,打开代码

    在google drive目录中找到 samples目录下的demo.ipynb文件,点击鼠标右键,选择“打开方式”,选择“Colaboratory”

     

    2.3,设置代码环境

     

    依次选择菜单项:修改—笔记本设置,在设置界面选择GPU加速器。

     

    2.4,安装必要的包和软件

    点击“+代码”按钮,在其中输入以下代码,按ctrl+enter运行

    !apt-get install -y -qq software-properties-common python-software-properties module-init-tools
    !add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null
    !apt-get update -qq 2>&1 > /dev/null
    !apt-get -y install -qq google-drive-ocamlfuse fuse
    from google.colab import auth
    auth.authenticate_user()
    from oauth2client.client import GoogleCredentials
    creds = GoogleCredentials.get_application_default()
    import getpass
    !google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL
    vcode = getpass.getpass()
    !echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}

    运行代码,运行中会提示输入验证码,点击程序给出的网址进行验证即可。

    注意:本人使用时进行了2次验证。

     

    2.5,挂载Google Drive

    点击“+代码”按钮,在其中输入以下代码,按ctrl+enter运行

    !mkdir -p drive
    !google-drive-ocamlfuse drive

    然后输入“!ls drive”查看挂载的文件。

     

    2.6,安装依赖包

    运行以下命令:

    !pip3 install -r drive/mrcnn/Mask_RCNN-master/requirements.txt

     

    2.7,安装mrcnn包

    首先发出以下命令,更改当前目录为mrcnn主目录:

    import os
    
    os.chdir("drive/mrcnn/Mask_RCNN-master")

    然后运行安装程序:

    !python3 setup.py install

    过程如下(有节选):

    WARNING:root:Fail load requirements file, so using default ones.
    
    running install
    
    running bdist_egg
    
    running egg_info
    
    creating mask_rcnn.egg-info
    
    writing mask_rcnn.egg-info/PKG-INFO
    
    …
    
    installing library code to build/bdist.linux-x86_64/egg
    
    running install_lib
    
    running build_py
    
    creating build
    
    creating build/lib
    
    creating build/lib/mrcnn
    
    copying mrcnn/parallel_model.py -> build/lib/mrcnn
    
    …
    
    Adding mask-rcnn 2.1 to easy-install.pth file
    
     
    
    Installed /usr/local/lib/python3.6/dist-packages/mask_rcnn-2.1-py3.6.egg
    
    Processing dependencies for mask-rcnn==2.1
    
    Finished processing dependencies for mask-rcnn==2.1

    3,运行demo

    先将当前目录变更到samples下:

    import os
    
    os.chdir("/content/drive/mrcnn/Mask_RCNN-master/samples")

    3.1 下载预训练模型

     

    3.2 模型配置

     


    运行结果如下,可以看到使用了1块gpu加速:

    Configurations:
    
    BACKBONE                       resnet101
    
    BACKBONE_STRIDES               [4, 8, 16, 32, 64]
    
    BATCH_SIZE                     1
    
    BBOX_STD_DEV                   [0.1 0.1 0.2 0.2]
    
    COMPUTE_BACKBONE_SHAPE         None
    
    DETECTION_MAX_INSTANCES        100
    
    DETECTION_MIN_CONFIDENCE       0.7
    
    DETECTION_NMS_THRESHOLD        0.3
    
    FPN_CLASSIF_FC_LAYERS_SIZE     1024
    
    GPU_COUNT                      1
    
    GRADIENT_CLIP_NORM             5.0
    
    IMAGES_PER_GPU                 1
    
    IMAGE_CHANNEL_COUNT            3
    
    IMAGE_MAX_DIM                  1024
    
    IMAGE_META_SIZE                93
    
    IMAGE_MIN_DIM                  800
    
    IMAGE_MIN_SCALE                0
    
    IMAGE_RESIZE_MODE              square
    
    IMAGE_SHAPE                    [1024 1024    3]
    
    LEARNING_MOMENTUM              0.9
    
    LEARNING_RATE                  0.001
    
    LOSS_WEIGHTS                   {'rpn_class_loss': 1.0, 'rpn_bbox_loss': 1.0, 'mrcnn_class_loss': 1.0, 'mrcnn_bbox_loss': 1.0, 'mrcnn_mask_loss': 1.0}
    
    MASK_POOL_SIZE                 14
    
    MASK_SHAPE                     [28, 28]
    
    MAX_GT_INSTANCES               100
    
    MEAN_PIXEL                     [123.7 116.8 103.9]
    
    MINI_MASK_SHAPE                (56, 56)
    
    NAME                           coco
    
    NUM_CLASSES                    81
    
    POOL_SIZE                      7
    
    POST_NMS_ROIS_INFERENCE        1000
    
    POST_NMS_ROIS_TRAINING         2000
    
    PRE_NMS_LIMIT                  6000
    
    ROI_POSITIVE_RATIO             0.33
    
    RPN_ANCHOR_RATIOS              [0.5, 1, 2]
    
    RPN_ANCHOR_SCALES              (32, 64, 128, 256, 512)
    
    RPN_ANCHOR_STRIDE              1
    
    RPN_BBOX_STD_DEV               [0.1 0.1 0.2 0.2]
    
    RPN_NMS_THRESHOLD              0.7
    
    RPN_TRAIN_ANCHORS_PER_IMAGE    256
    
    STEPS_PER_EPOCH                1000
    
    TOP_DOWN_PYRAMID_SIZE          256
    
    TRAIN_BN                       False
    
    TRAIN_ROIS_PER_IMAGE           200
    
    USE_MINI_MASK                  True
    
    USE_RPN_ROIS                   True
    
    VALIDATION_STEPS               50
    
    WEIGHT_DECAY                   0.0001

     

    3.3 建立模型并装载权重文件

     

    3.4 设置识别类型

    此处设置的检测类别(即关注类型)不算多,涵盖了81种物体。

     

    3.5 执行物体检测

    总算要执行物体检测了,运行以下代码:

     

     经过不到10秒的时间,检测完毕,输出如下:

    Processing 1 images
    
    image                    shape: (480, 640, 3)         min:    0.00000  max:  255.00000  uint8
    
    molded_images            shape: (1, 1024, 1024, 3)    min: -123.70000  max:  151.10000  float64
    
    image_metas              shape: (1, 93)               min:    0.00000  max: 1024.00000  float64
    
    anchors                  shape: (1, 261888, 4)        min:   -0.35390  max:    1.29134  float32

     

     再多运行几次上述代码,不同的图片也都在10秒内完成了检测。可以看到,检测的效果很不错,无错检和漏检,物体轮廓标记准确。

     

    4,总结

    以下总结来源于作者:Caria_W
    链接:https://www.jianshu.com/p/000d2a9d36a0
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    1. 可以把Colab看成是一台带有GPU的Ubuntu虚拟机,只不过我们只能用命令行的方式操作它。你可以选择执行系统命令,亦或是直接编写运行python代码。
    2. 挂载完Google Drive,会在虚拟机里生成一个drive文件夹,直接将Google Drive当成是一块硬盘即可。访问drive文件夹里的文件,就是在访问你的Google Drive里的文件。
    3. Colab最多连续使用12小时,超过时间系统会强制掐断正在运行的程序并收回占用的虚拟机。(好像再次连接到虚拟机后,虚拟机是被清空的状态,需要重新配置和安装库等等)
    4. 请使用科学上网方式。

    总体来说,对于很多无力购置独立gpu显卡的深度学习开发者来说,在colab中使用google提供的配置好的运行环境以及免费的显卡,是一个不错的选择。但比较遗憾的是上述第3条,本人实际验证发现,一旦关闭自主安装好的软件环境(比如重新打开notebook,无论python文件新旧),以前配置的包都没有了,连google drive的驱动也要重装一遍,才能再次访问云盘文件。总之,繁琐是有点,但提供了一个免费撸代码的舞台,确实是AI开发者的福音。

  • 相关阅读:
    Kafka科普系列 | Kafka中的事务是什么样子的?
    RabbitMQ和Kafka,更加便捷高效的消息队列使用方式,请放心食用
    艰涩难懂,不存在的,消息队列其实很简单
    这七个关于分布式消息服务的常见问题,你知道吗?
    别再犯低级错误,带你了解更新缓存的四种Desigh Pattern
    详细介绍redis的集群功能,带你了解真正意义上的分布式
    教你简单理解分布式与传统单体架构的区别
    新手向:从不同的角度来详细分析Redis
    Java多线程Runnable与Callable区别与拓展
    项目中是用eCharts
  • 原文地址:https://www.cnblogs.com/jackkwok/p/10404804.html
Copyright © 2011-2022 走看看