《1小时上手MaskRCNN·Keras开源实战.docx》由会员分享,可在线阅读,更多相关《1小时上手MaskRCNN·Keras开源实战.docx(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1小时上手MaskRCNNKeras开源实战 | 小宋是呢 来源 | CSDNboke 0. 前言介绍 开源地址 s:/github /matterport/Mask_RCNN 个人主页 :/ MaskRCNN 是何恺明基于以往的 faster rcnn 架构提出的新的卷积网络 一举完成了 object instance segmentation。该方法在有效地目的的同时完成了高质量的语义分割。文章的主要思路就是把原有的 Faster-RCNN 进展扩展 添加一个分支使用现有的检测对目的进展并行预测。 此开源代码 这是在 Python 3 Keras 以及 TensorFlow 上实现 Mas
2、k R-CNN 。该模型为图像中对象的每个实例生成边界框以及分割蒙版。它基于特征金字塔网络 FPN 以及ResNet101骨干网。 存储库包括 Mask R-CNN的源代码 建立在FPN以及ResNet101之上。 MS COCO的培训代码 MS COCO的预训练重量 Jupyter笔记本可以在每一步都可视化检测管道 ParallelModel类用于多GPU培训 评估MS COCO指标 AP 您自己的数据集培训例如 代码记录在案 设计易于扩展。假如您在研究中使用它 请考虑引用此存储库 下面的bibtex 。假如您从事3D视觉 您可能会发现我们最近发布的Matterport3D数据集 s:/mp
3、.weixin.qq /s/Dt0jbw5Mg-NA_c1A4D_jhg 也很有用。该数据集是由我们的客户捕获的3D重建空间创立的 这些客户同意将其公开供学术使用。您可以在此链接 s:/matterport /gallery/ 查看更多例如。 1. MaskRCNN环境搭建 首先在工程源码地址下载源码到本机中 s:/github /matterport/Mask_RCNN 1.1 要求 Python 3.4 TensorFlow 1.3 Keras 2.0.8以及其他常见软件包requirements.txt。 亲测Python版本为3.6可以以 建议3.4及以上。 Python安装建议使用
4、mini conda 安装以及管理环境 TensorFlow Keras 也建议直接使用 conda install tensorflow keras 1.2 MS COCO要求 要在MS COCO上进展训练或者测试 还需要 pycocotools 下面的安装讲明 MS COCO数据集 下载5K迷你以及35K 验证- 减去迷你的子集。最初的快速R-CNN实现中的更多细节。 安装链接如下 MS COCO数据集: ( :/cocodataset.org/#home) 迷你 ( s:/dl.dropboxusercontent /s/o43o90bna78omob/instances_minival
5、2021.json.zip?dl 0) 验证- 减去迷你的 ( s:/dl.dropboxusercontent /s/s3tw5zcg7395368/instances_valminusminival2021.json.zip?dl 0) 快速R-CNN ( s:/github /rbgirshick/py-faster-rcnn/blob/master/data/README.md) 假如您使用Docker 那么已验证代码可以在 此Docker容器上运行 s:/hub.docker /r/waleedka/modern-deep-learning/ 。 为什么需要安装 pycocotool
6、s 经过看源码发现 训练 coco 数据集时用到了pycocotools 这个模块 假如不安装会报错无法正常运行。 1.3 安装 1. 克隆此存储库 s:/github /matterport/Mask_RCNN 2. 安装依赖项 CD 进入工程根目录 pip3 不行的话可以尝试用 pip pip3 install -r requirements.txt 在linux安装时 使用此方法一切正常 就是速度会有些慢 因为安装内容较多。 使用Windows安装时可能会遇到shapely 无法安装的情况 解决方法如下 conda install shapely -y 3. 从存储库根目录运行安装程序
7、python3 setup.py install 不报错的话就安装完成了 假如报错可以根据错误提示 网络搜索解决。 python3 不行的话就用 python 还要注意一点你使用哪个python环境安装 后面运行的时候也要用此python环境运行MaskRCNN。 4. 从发布页面下载预先训练的COCO权重 mask_rcnn_coco.h5 。 这里提供一个下载地址 可以直接下载使用 s:/github /matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_coco.h5 5. 可选 pycocotools从这些回购中的一个训练或者测试
8、MS COCO安装。 这里就是1.2 MS COCO要求 需要安装pycocotools Linux s /github /waleedka/coco Windows s /github /philferriere/cocoapi。您必须在途径上安装Visual C 2021构建工具 有关其他详细信息 请参阅存储库 经过本人安装测试 可以使用较为简单的方式来安装 Linux中直接使用 pip3 install pycocotools windows 中需要先安装 Visual C 2021 下载地址 s:/go.microsoft /fwlink/?LinkId 691126 然后执行 注意要
9、以及安装MaskRCNN同一Python环境 pip3 install git s:/github /philferriere/cocoapi.git#subdirectory PythonAPI 上述都执行完成的话 keras版本的MaskRCNN就安装完成了。下面我们动手试用一下。 2. 使用演示 用安装Mask RCNN的python环境翻开 jupyter notebook 命令行 或者shell运行 jupyter notebook 指定jupyter notebook默认途径 便于翻开工程工程可以参考这个boke s:/ cnblogs /awakenedy/p/9075712.h
10、tml 运行完成后 会自动翻开一个网页 假如不能就手动复制一下地址翻开。 进入下载的MaskRCNN的根目录 翻开 samples/demo.ipynb 文件。 代码如下 In 1:导入相关文件 设置参数 下载网络模型等 由于下载速度慢 建议直接下载 s:/github /matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_coco.h5 到根目录在运行下面代码 import os import sys import random import math import numpy as np import skimage.io impor
11、t matplotlib import matplotlib.pyplot as plt # Root directory of the project ROOT_DIR os.path.abspath( ./ ) # Import Mask RCNN sys.path.append(ROOT_DIR) # To find local version of the library from mrcnn import utils import mrcnn.model as modellib from mrcnn import visualize # Import COCO config sys.
12、path.append(os.path.join(ROOT_DIR, samples/coco/ ) # To find local version import coco %matplotlib inline # Directory to save logs and trained model MODEL_DIR os.path.join(ROOT_DIR, logs ) # Local path to trained weights file COCO_MODEL_PATH os.path.join(ROOT_DIR, mask_rcnn_coco.h5 ) # Download COCO
13、 trained weights from Releases if needed if not os.path.exists(COCO_MODEL_PATH): utils.download_trained_weights(COCO_MODEL_PATH) # Directory of images to run detection on IMAGE_DIR os.path.join(ROOT_DIR, images ) UsingTensorFlowbackend. In 2:进展一些参数设置 我们将使用一个经过 MS-COCO 数据集训练的模型。这个模型的配置在coco.py 中的 coc
14、oconfig 类中。 为了进展推断 请略微修改配置以合适任务。为此 对 cococonfig 类进展子类化 并重写需要更改的属性。 class InferenceConfig(coco.CocoConfig): # Set batch size to 1 since we ll be running inference on # one image at a time. Batch size GPU_COUNT * IMAGES_PER_GPU GPU_COUNT 1 IMAGES_PER_GPU 1 config InferenceConfig() config.display() Con
15、figurations: 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_G
16、PU 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
17、_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_ANC
18、HOR_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
19、.0001 In 3:建立网络模型 载入参数 # Create model object in inference mode. model modellib.MaskRCNN(mode inference , model_dir MODEL_DIR, config config) # Load weights trained on MS-COCO model.load_weights(COCO_MODEL_PATH, by_name True) WARNING:tensorflow:From c:datasappsrjminiconda3envstf_gpulibsite-packageste
20、nsorflowpythonframeworkop_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version. Instructions for updating: Colocations handled automatically by placer. WARNING:tensorflow:From c:datasappsrjminiconda3envstf_gpulibsite-packagesm
21、ask_rcnn-2.1-py3.6.eggmrcnnmodel.py:772: to_float (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version. Instructions for updating: Use tf.cast instead. 类名 模型对对象进展分类并返回类 ID 类 ID 是标识每个类的整数值。有些数据集将整数值赋给它们的类 而有些那么没有。例如 在 MS-COCO 数据集中 “Person类为 1 “Teddy Bear类为 88。ID
22、 通常是连续的 但并不总是连续的。例如 COCO 数据集具有与 ID70 以及 72 相关联的类 但没有与 71 相关联的类。 为了进步一致性与同时支持对来自多个源的数据的训练 我们的 DataSet 类为每个类分配了它自己的顺序整数 ID。例如 假如使用我们的数据集类加载 COCO 数据集 “Person类将获得类 ID 1 就像 COCO 一样 “Teddy Bear获得类 78 不同于 COCO 。在将类 ID 映射到类名时 请记住这一点。 要获取类名列表 你需要加载数据集 然后使用类名称属性 如下所示 # Load COCO dataset dataset coco.CocoDatas
23、et() dataset.load_coco(COCO_DIR, train ) dataset.prepare() # Print class names print(dataset.class_names) 我们不祈望你为了运行这个演示而下载 COCO 数据集 所以我们在下面列出了类名列表。列表中类名的索引表示其 ID 第一个类是 0 第二个类是 1 第三个类是 2 等等 。 In 4:配置类别名 # COCO Class names # Index of the class in the list is its ID. For example, to get ID of # the te
24、ddy bear class, use: class_names.index( teddy bear ) class_names BG , person , bicycle , car , motorcycle , airplane , bus , train , truck , boat , traffic light , fire hydrant , stop sign , parking meter , bench , bird , cat , dog , horse , sheep , cow , elephant , bear , zebra , giraffe , backpack
25、 , umbrella , handbag , tie , suitcase , frisbee , skis , snowboard , sports ball , kite , baseball bat , baseball glove , skateboard , surfboard , tennis racket , bottle , wine glass , cup , fork , knife , spoon , bowl , banana , apple , sandwich , orange , broccoli , carrot , hot dog , pizza , don
26、ut , cake , chair , couch , potted plant , bed , dining table , toilet , tv , laptop , mouse , remote , keyboard , cell phone , microwave , oven , toaster , sink , refrigerator , book , clock , vase , scissors , teddy bear , hair drier , toothbrush In 5:读入照片进展识别 原文中采用从 images 文件夹随机读取的方式。我这里注释掉了前两句 采
27、用读取自己准备的照片 这里是我的母校照片。 大众只需要将 image_file 改为自己准备照片地址即可。 # Load a random image from the images folder #file_names next(os.walk(IMAGE_DIR)2 #image skimage.io.imread(os.path.join(IMAGE_DIR, random.choice(file_names) image_file os.path.join(IMAGE_DIR, ahnu.jpg ) image skimage.io.imread(image_file) # Run d
28、etection results model.detect(image, verbose 1) # Visualize results r results0 visualize.display_instances(image, r rois , r masks , r class_ids , class_names, r scores ) Processing 1 images image shape: (768, 1024, 3) min: 0.00000 max: 255.00000 uint8 molded_images shape: (1, 1024, 1024, 3) min: -1
29、23.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 3. 训练模型 我训练了samples/shapes/train_shapes.ipynb例子 并成功调用了多GPU 假如大众遇到问题可以看我下面的解决方法。 3.1 MS COCO 培训 我们为 MS COCO 提供预先训练的砝码 使其更容易入手。你可以使用这些权重作为起点来
30、训练您自己在网络上的变化。培训以及评估代码在samples/coco/coco.py。你可以在 Jupyter 笔记本中导入此模块 请参阅提供的笔记本中的例如 或你可以直接从命令行运行它 # Train a new model starting from pre-trained COCO weights python3 samples/coco/coco.py train -dataset /path/to/coco/ -model coco # Train a new model starting from ImageNet weights python3 samples/coco/coco
31、.py train -dataset /path/to/coco/ -model imagenet # Continue training a model that you had trained earlier python3 samples/coco/coco.py train -dataset /path/to/coco/ -model /path/to/weights.h5 # Continue training the last model you trained. This will find # the last trained weights in the model dire
32、ctory. python3 samples/coco/coco.py train -dataset /path/to/coco/ -model last 你还可以使用以下命令运行 COCO 评估代码 # Run COCO evaluation on the last trained model python3 samples/coco/coco.py evaluate -dataset /path/to/coco/ -model last 应设置培训方案 学习率以及其他参数 samples/coco/coco.py。 3.2 对您自己的数据集进展培训 首先浏览关于气球颜色飞溅样本的boke文
33、章。 s:/engineering.matterport /splash-of-color-instance-segmentation-with-mask-r-cnn-and-tensorflow-7c761e238b46 它涵盖了从注释图像到培训再到在例如应用程序中使用结果的经过。 总之 要在您自己的数据集上训练模型 您需要扩展两个类 Config 该类包含默认配置。对其进展子类化并修改您需要更改的属性。 Dataset 此类提供了一种使用任何数据集的一致方法。它允许您使用新数据集进展培训 而无需更改模型的代码。它还支持同时加载多个数据集 假如要检测的对象在一个数据集中并非全部可用 那么此选
34、项非常有用。 见例子samples/shapes/train_shapes.ipynb samples/coco/coco.py samples/balloon/balloon.py 以及samples/nucleus/nucleus.py。 本人测试了 samples/shapes/train_shapes.ipynb 单 GPU 训练根本都没有问题 使用多 GPU 运行时可能会出现这个问题 Keras object has no attribute _is_graph_network 解决方法 降级Keras到2.1.6可以解决这个问题 pip install keras 2.1.6 加速
35、安装 3.3 与官方文件的不同之处 这个实现大局部都遵循 Mask RCNN 文章 但在一些情况下我们偏向于代码简单性以及泛化。这些是我们意识到的一些差异。假如您遇到其他差异 请告诉我们。 图像大小调整 为了支持每批训练多个图像 我们将所有图像调整为一样大小。例如 MS COCO上的 1024x1024px 。我们保存纵横比 因此假如图像不是正方形 我们用零填充它。在论文中 调整大小使得最小边为 800px 最大边为 1000px。 边界框 一些数据集提供边界框 一些仅提供蒙版。为了支持对多个数据集的训练 我们选择忽略数据集附带的边界框 而是动态生成它们。我们选择封装掩码所有像素的最小盒子作为
36、边界框。这简化了实现 并且还使得应用图像增强变得容易 否那么图像增强将更难以应用于边界框 例如图像旋转。为了验证这种方法 我们将计算出的边界框与 COCO 数据集提供的边界框进展了比拟。我们发现 2 的边界框相差 1px 或者更多 0.05 相差 5px 或者更多 仅 0.01 相差 10px 或者更多。 学习率 本文使用 0.02 的学习率 但我们发现它太高 并且经常导致重量爆炸 十分是当使用小批量时。这可能与 Caffe 以及 TensorFlow 怎样计算梯度 总以及与批次以及 GPU 之间的平均值之间的差异 有关。或 也许官方模型使用渐变剪辑来防止这个问题。我们使用渐变剪辑 但不要过于激进。我们发现较小的学习率无论怎样都会更快收敛 所以我们继续这样做。 4. 总结 花了数个小时完成了这个上手教程 祈望能对 MaskRCNN 感兴趣朋友提供帮助。 福利时刻 入群介入每周抽奖 扫码添加小助手 回复 大会 参加福利群 介入抽奖送礼 9大技术论坛、60 主题共享 百余家企业、千余名开发者共同相约 2019 AI ProCon 技术驱动产业 聚焦技术理论 倾听大牛共享 以及万千开发者共成长。5折优惠票倒计时6天抢购中 推荐浏览 每天超50亿推广流量、3亿商品展现 阿里妈妈的推荐技术有多牛 你点的每个“在看 我都认真当成了喜欢