Mask R-CNN用于目标检测和分割代码实现
Mask R-CNN用于目标检测和分割代码实现
Mask R-CNN for object detection and instance segmentation on Keras and TensorFlow
代码链接:https://github.com/matterport/Mask_RCNN
这是基于Python 3,Keras和TensorFlow 的Mask R-CNN的实现。该模型为图像中对象的每个实例生成边界框和分割masks。基于功能金字塔网络Feature Pyramid Network(FPN)和ResNet101主干网。
该存储库包括:
- 基于FPN和ResNet101构建的Mask R-CNN的源代码。
- MS COCO的训练代码
- MS COCO的预训练权重
- Jupyter说明文件电脑可在每个步骤可视化检测管线
- 用于多GPU训练的Parallel Model类
- 评估MS COCO指标(AP)
- 自主数据集训练示例
该代码已记录并设计为易于扩展。如果在研究中使用,请考虑引用该存储库(下面的bibtex)。如果从事3D视觉工作,可能会发现最近发布的Matterport3D数据集也很有用。该数据集是由客户捕获的3D重构空间创建的,这些客户同意将其公开提供给学术用途。可以在此处看到更多示例。
开始启动
- demo.ipynb是最简单的启动方法。显示了一个示例,该示例使用在MS COCO上进行预训练的模型来分割自己的图像中的对象。包括在任意图像上运行对象检测和实例分割的代码。
- train_shapes.ipynb显示了如何在自己的数据集上训练Mask R-CNN。本说明文件介绍了玩具数据集(形状),以演示对新数据集的训练。
- (model.py,utils.py,config.py):这些文件包含主要Mask RCNN实现。
- inspect_data.ipynb。该说明文件可视化了准备训练数据的不同预处理步骤。
- inspect_model.ipynb本说明文件深入介绍了检测和分割对象所执行的步骤。提供了管道中每个步骤的可视化。
- inspect_weights.ipynb 此说明文件检查经过训练的模型的权重,并查找异常和奇数模式。
逐步检测
为了帮助调试和理解模型,共有3个说明文件(inspect_data.ipynb,inspect_model.ipynb, inspect_weights.ipynb)提供了很多可视化效果,并允许逐步运行模型以检查每个点的输出。这里有一些例子:
1.锚点排序和过滤
可视化第一阶段区域提议网络的每个步骤,并显示正锚和负锚以及锚框的细化。
2.边界框优化
这是最终检测框(虚线)的示例,在第二阶段对其进行了改进(实线)。
3.遮罩生成
生成的masks示例。然后将缩放并放置在正确位置的图像上。
4,分层激活
通常,检查不同层的激活以查找故障迹象(全零或随机噪声)通常很有用。
5.重量直方图
另一个有用的调试工具是检查重量直方图。这些都包含在inspect_weights.ipynb说明文件中。
6.登录到TensorBoard
TensorBoard是另一个出色的调试和可视化工具。该模型配置为记录损失并在每个时期结束时节省权重。
7.将不同的部分组合成最终结果
MS COCO训练
正在为MS COCO提供预训练的权重,以使其易于启动。可以将这些权重用作在网络上训练自己的变体的起点。训练和评估代码在中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.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 directory.
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。
训练自己的数据集
首先阅读有关气球颜色飞溅示例的博客文章。涵盖了从注释图像到训练再到在示例应用程序中使用结果的过程。
总之,要在自己的数据集上训练模型,需要扩展两个类:
Config 此类包含默认配置。对其进行子类化,然后修改需要更改的属性。
Dataset 此类提供了使用任何数据集的一致方式。允许使用新的数据集进行训练,而无需更改模型的代码。还支持同时加载多个数据集,如果要检测的对象在一个数据集中并非全部可用,这将很有用。
见例子samples/shapes/train_shapes.ipynb,samples/coco/coco.py,samples/balloon/balloon.py,和samples/nucleus/nucleus.py。
与官方文件的差异
此实现大部分遵循Mask RCNN论文,但是在少数情况下,偏向于代码简单和通用化。这些是知道的一些差异。如果遇到其差异,请告诉。
- 图像调整大小:为了支持每批训练多幅图像,将所有图像调整为相同大小。例如,在MS COCO上为1024x1024px。保留宽高比,因此,如果图像不是正方形,则将其填充为零。在本文中,进行了调整大小,以使最小的一面为800像素,最大的一面为1000像素。
- 边界框:某些数据集提供边界框,而某些数据集仅提供masks。为了支持对多个数据集的训练,选择忽略数据集随附的边界框,而是动态生成。选择封装masks所有像素的最小框作为边界框。这简化了实现,并且还使图像增强很容易应用,否则图像增强将很难应用于边界框,例如图像旋转。
为了验证这种方法,将计算出的边界框与COCO数据集提供的边界框进行了比较。发现〜2%的边界框相差1px或更多,〜0.05%的边界相差5px或更多,只有0.01%的相差10px或更多。
- 学习率:本文使用的学习率是0.02,但发现该值太高,通常会导致权重爆炸,尤其是在使用小批量时。这可能与Caffe和TensorFlow计算梯度之间的差异(批次与GPU之间的总和与均值)之间的差异有关。或者,也许官方模型使用渐变修剪来避免此问题。确实使用了梯度裁剪,但不要设置得太过激。发现,较小的学习率无论如何都会收敛得更快,因此继续这样做。
引文
使用以下bibtex引用此存储库:
@misc{matterport_maskrcnn_2017,
title={Mask R-CNN for object detection and instance segmentation on Keras and TensorFlow},
author={Waleed Abdulla},
year={2017},
publisher={Github},
journal={GitHub repository},
howpublished={\url{https://github.com/matterport/Mask_RCNN}},
}
贡献
欢迎对该存储库做出贡献。可以做出贡献的示例:
- 速度改进。就像在TensorFlow或Cython中重写一些Python代码一样。
- 训练其数据集。
- 精度提高。
- 可视化和示例。
也可以加入团队,并帮助建立更多像这样的项目。
要求
列出了Python 3.4,TensorFlow 1.3,Keras 2.0.8和其常见软件包requirements.txt。
MS COCO要求:
要对MS COCO进行训练或测试,还需要:
- pycocotools(下面的安装说明)
- MS COCO数据集
- 下载5K minival 和35K 验证减去最小值 子集。更多详细信息,请参见原始的Faster R-CNN实现。
如果使用Docker,则代码已通过验证可在此Docker容器上工作 。
安装
- copy此存储库
- 安装依赖
pip3 install -r requirements.txt
- 从存储库根目录运行安装程序
python3 setup.py安装
- 从发布页面下载预训练的COCO权重(mask_rcnn_coco.h5)。
- (可选)pycocotools从这些存储库之一中进行MS COCO安装的训练或测试。是原始pycocotools的分支,具有针对Python3和Windows的修复(官方仓库似乎不再处于活动状态)。
- Linux:https://github.com/waleedka/coco
- Windows:https://github.com/philferriere/cocoapi。路径上必须具有Visual C ++ 2015生成工具(有关更多详细信息,请参见repo)
Mask R-CNN用于目标检测和分割代码实现的更多相关文章
- 带你读AI论文丨用于目标检测的高斯检测框与ProbIoU
摘要:本文解读了<Gaussian Bounding Boxes and Probabilistic Intersection-over-Union for Object Detection&g ...
- 【神经网络与深度学习】【计算机视觉】RCNN- 将CNN引入目标检测的开山之作
转自:https://zhuanlan.zhihu.com/p/23006190?refer=xiaoleimlnote 前面一直在写传统机器学习.从本篇开始写一写 深度学习的内容. 可能需要一定的神 ...
- 使用Faster R-CNN做目标检测 - 学习luminoth代码
像玩乐高一样拆解Faster R-CNN:详解目标检测的实现过程 https://mp.weixin.qq.com/s/M_i38L2brq69BYzmaPeJ9w 直接参考开源目标检测代码lumin ...
- Histograms of Sparse Codes for Object Detection用于目标检测的稀疏码直方图
AbstractObject detection has seen huge progress in recent years, much thanks to the heavily-engineer ...
- OpenVINO 目标检测底层C++代码改写实现(待优化)
System: Centos7.4 I:OpenVINO 的安装 refer:https://docs.openvinotoolkit.org/latest/_docs_install_guides_ ...
- tensorflow C++接口调用目标检测pb模型代码
#include <iostream> #include "tensorflow/cc/ops/const_op.h" #include "tensorflo ...
- 关于目标检测 Object detection
NO1.目标检测 (分类+定位) 目标检测(Object Detection)是图像分类的延伸,除了分类任务,还要给定多个检测目标的坐标位置. NO2.目标检测的发展 R-CNN是最早基于C ...
- CVPR2020:三维实例分割与目标检测
CVPR2020:三维实例分割与目标检测 Joint 3D Instance Segmentation and Object Detection for Autonomous Driving 论文地址 ...
- 目标检测网络之 Mask R-CNN
Mask R-CNN 论文Mask R-CNN(ICCV 2017, Kaiming He,Georgia Gkioxari,Piotr Dollár,Ross Girshick, arXiv:170 ...
随机推荐
- Python字体颜色设置
Python字体颜色设置 平时学习工作中,我们经常会接触到一些大佬写的Python工具,运行起来总会显示出五颜六色的字体,比如红色代表Error , 黄色代表Warning , 绿色代表Success ...
- hdu4908 中位数子串
题意: 给你N个数字组成的数列,然后问你这里面有多少个是以M为中位数的子序列. 思路: 首先分四中简单的情况求 (1) 就是只有他自己的那种情况 那么sum+1 ...
- Python中shodan模块的使用
关于shodan的安装和使用,传送门--> 渗透测试之Shodan的安装和使用 常用 Shodan 库函数 shodan.Shodan(key) :初始化连接API Shodan.count(q ...
- Flask 实现分页
pager.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- Andrew Ng机器学习算法入门(十):过拟合问题解决方法
在使用机器学习对训练数据进行学习和分类的时候,会出现欠拟合和过拟合的问题.那么什么是欠拟合和过拟合问题呢?
- Day008 三种初始化及内存分析
三种初始化和内存分析 Java内存分析: 堆: 存放new的对象和数组. 可以被所有的线程共享,不会存放别的对象引用. 栈: 存放基本变量类型(会包含这个基本类型的具体数值). 引用对象的变量(会存放 ...
- 简单说几个MySQL高频面试题
前言: 在各类技术岗位面试中,似乎 MySQL 相关问题经常被问到.无论你面试开发岗位或运维岗位,总会问几道数据库问题.经常有小伙伴私信我,询问如何应对 MySQL 面试题.其实很多面试题都是大同小异 ...
- MySQL分区表最佳实践
前言: 分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表.但是对于应用程序来讲,分区的表和没有分区的表是一样的.换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理 ...
- [BUAA2021软工]结对第一阶段博客作业小结
作业链接 结对项目-第一阶段 优秀作业推荐 本次博客作业虽然是简单总结,但是以下作业中都不乏有思考.有亮点的精彩内容,推荐给同学们阅读学习. 山鸣谷应,相得益彰--杰对项目-第一阶段总结 该组对于可能 ...
- CF1444A Division 求质因数的方法
2020.12.20 求质因数的方法 CF1444A Division #include<bits/stdc++.h> #define ll long long #define fp(i, ...