用自己的数据训练Mask R-CNN目标检测/分割模型

简介: 本文讲述了如何使用Mask-CNN对图像中的大量数据进行目标识别与目标分割。

rcnn_shapes-1024x289.png

计算机非常擅长数字运算,但对分析图像中的大量数据束手无策。直到最近找到了解决方法,即创建图像处理单元库,利用数千个内核的原始动力解锁图片背后的含义。

使用自己的数据

我们将使用一个示例数据集,它在随机色彩背景上由不同大小和颜色的圆圈、正方形和三角形组成。我已经创建了一个COCO-style版本,如果你想学习如何将图片转换成自己的数据集,请参阅前面的文章

这一次我们的重点是自动标记图像中的所有形状,并标出每个图像精确到像素的位置。这类的任务称为“目标分割”。在计算机视觉中,有很多听起来类似的的术语,比如“物体识别(object recognition)”、“类分割(class segmentation)”、“目标检测(object detection)”,我们需要通过看它们做了什么来区分。下图展示了我们从这四个类型中所能获得的信息,从左到右,任务依次变得困难。

compter_vision_problems-2-1024x341.png

不同类型的图像处理

目标识别告诉我们图像中有什么,而不是在什么地方或者有多少。类分割对图像中不同类型的对象添加位置信息。目标检测将图像中的每个对象通过边界框分割开。最后,这四个当中最难也是我们要训练的是——目标分割。它赋予每个对象一个清晰的边界,也能用来创建前三个的结果。

对于这种简单数据集,我们可以使用老式计算机视觉思路,例如Hough圈和线条检测或模板匹配来获得好的结果。但是通过深度学习,我们可以使用相同方法在几乎所有类型的图像数据集上获得相同类型的结果,而且无需考虑要找的是什么特征,这简直太神奇了。

Mask R-CNN是什么?

在训练自己的Mask R-CNN之前,让我们快速从右向左讲解一下名字的含义。

“NN”是神经网络,它的灵感来自于生物神经元的工作原理,神经网络是连接的神经元集合,每个神经元根据输入和内部参数输出信号。当训练神经网络时,我们要不断调整神经元的内部参数来获得期望的输出。

neural_net2-768x377.jpeg

神经网络

“C”代表“卷积”。CNNs是专门为图像学习而设计的,但在某些方面上与神经网络相似。它们的过滤器是通过在某个时间段在图像上某小块横向和纵向滑动进行的,而不是一次向穿过整个图像。CNN比常规的神经网络使用更少的参数和内存,这使得它们能够处理比传统神经网络更大的图像。

padding_strides.gif

卷积

普通的CNNs擅长目标识别,但是如果我们想要做目标检测,需要知道位置。这就是“R”“区域”。R-CNNs能够围绕对象画出边框。随着时间的推移,发展出了Fast R-CNN和Faster R-CNN。Faster R-CNN在CNN最后提出了Proposal生成网络,即如果在区域内发现对象,则这些区域就会被用作边框。

最后,“Mask”添加了像素级的分割,并创建了目标分割模型。它为网络添加了一个额外的分支来创建二进制掩码,这与我们在注释图像时所做的类似。

准备好电脑配置

要运行这些例子,你需要用最新nvidia显卡的Ubuntu 16.04系统。我可以使用只有2GB内存的GeForce 940M对一小部分网络进行训练,但是你最好使用11GB内存以上的nvidia卡。如果没有,你可以开始使用Amazon Web Services或谷歌云。

我们将使用Docker上运行来确保在同一页面。Docker通过脚本创建系统的副本,所以不必安装所有的小程序。但是在此之前需要准备好主机系统。

安装Ubuntu 16.4之后,我们需要安装NVIDIA图形驱动和CUDA(并行计算平台)。首先打开一个终端并运行以下命令来安装图形驱动程序。

31cc196d6dc5d07eec2f1eecaff3df871a841198

然后安装CUDA

3dd9d8c4e893672c4272d22c3685b977f7d23b62

现在安装Docker、Docker- compose和Nvidia-Docker。

e0eda58aeb2fa47a5b8f69e22905867a6ac2bedb

全部安装好后,重启电脑就可以运行我们的Mask C-RNN系统了。

开始实践

下载并提取deep-learning-explorer。里面包含mask-rcnn文件夹和一个数据文件夹。Data/shapes文件夹中包含数据测试集的压缩文件。提取出shapes.zip文件,并将annotationsshapes_train2018shapes_test2018shapes_validate2018移动到data/shapes文件夹中。

回到终端界面,cd进入到mask-rcnn/docker目录下,并运行docker-compose up。首次运行这个命令时,Docker需要几分钟准备从头开始构建系统。准备就绪时会显示如下:

Screenshot-from-2018-04-28-13-20-18.png

Docker系统准备就绪

将最后一行复制粘贴到web浏览器中,就会打开Jupyter Notebook。进入home/keras/mask-rcnn/notebooks目录,点击mask_rcnn.ipynb。现在您可以浏览每个笔记本单元并训练您自己的Mask R-CNN模型。幕后Keras与Tensorflow正在GPU上训练神经网络。如果你没有11GB显存的话,你可能会在“微调”步骤中遇到问题,但你应该能够用最少2GB的内存卡来训练网络顶端。

我们之所以不必花费数天或数周时间训练模型以及数以千计的例子就能获得不错的结果,是因为复制了之前真实的COCO数据集上完成的训练的权重(内部神经元参数)。由于大多数图像数据集具有相似的基本特征,比如颜色和模式,所以通常可以用一种模型的训练数据来训练另一个模型。这种复制数据称为迁移学习。

如果你滚动到笔记本的底部,你会发现我们只预测了大约37%的正确形状。但是可以通过将STEPS_PER_EPOCH增加到750(培训样本的总数)并运行5个或更多的epochs,来改进模型。

在训练期间或之后,你可以通过一些图表来查看TensorBoard的使用情况。首先需要登录到Docker容器中,启动并运行TensorBoard,然后在web浏览器中访问。过程为在终端运行docker ps,将显示所有运行的容器,使用CONTAINER ID的前两个字符启动Docker容器bash shell来训练模型。例如,我们的ID是d5242f7ab1e3,我们将使用docker exec - d5 bash来登录。运行tensorboard --logdir ~/data/shapes/logs --host 0.0.0.0,现在可以通过访问http://localhost:8877进入TensorBoard了。

Screenshot-from-2018-04-28-19-41-36-1024

现在,你已经根据自己的数据准备好训练Mask R-CNN模型了。

引用和资源:

deep-learning-explorer

pycococreator - 转换数据

R-CNN (arxiv)

Fast R-CNN (arxiv)

Faster R-CNN (arxiv)

Mask R-CNN (arxiv)

Stanford CS class notes

 

数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《Train a Mask R-CNN model on your own data

作者:waspinator

译者:奥特曼,审校:袁虎。

文章为简译,更为详细的内容,请查看原文

相关文章
|
24天前
|
机器学习/深度学习
大模型开发:解释卷积神经网络(CNN)是如何在图像识别任务中工作的。
**CNN图像识别摘要:** CNN通过卷积层提取图像局部特征,池化层减小尺寸并保持关键信息,全连接层整合特征,最后用Softmax等分类器进行识别。自动学习与空间处理能力使其在图像识别中表现出色。
24 2
|
3月前
|
机器学习/深度学习 算法 TensorFlow
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
57 0
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
|
5月前
|
PyTorch 算法框架/工具
时间序列预测:CNN+LSTM+Attention模型实战
时间序列预测:CNN+LSTM+Attention模型实战
176 0
|
1月前
|
机器学习/深度学习 PyTorch TensorFlow
python实现深度学习模型(如:卷积神经网络)。
【2月更文挑战第14天】【2月更文挑战第38篇】实现深度学习模型(如:卷积神经网络)。
|
2月前
|
机器学习/深度学习 并行计算 算法
模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%
模型压缩部署神技 | CNN与Transformer通用,让ConvNeXt精度几乎无损,速度提升40%
50 0
|
2月前
|
机器学习/深度学习 编解码 算法
助力目标检测涨点 | 可以这样把Vision Transformer知识蒸馏到CNN模型之中
助力目标检测涨点 | 可以这样把Vision Transformer知识蒸馏到CNN模型之中
35 0
|
2月前
|
机器学习/深度学习 编解码 数据可视化
RecursiveDet | 超越Sparse RCNN,完全端到端目标检测的新曙光
RecursiveDet | 超越Sparse RCNN,完全端到端目标检测的新曙光
47 0
|
3月前
|
机器学习/深度学习 网络架构 计算机视觉
CNN经典网络模型之GoogleNet论文解读
GoogleNet,也被称为Inception-v1,是由Google团队在2014年提出的一种深度卷积神经网络架构,专门用于图像分类和特征提取任务。它在ILSVRC(ImageNet Large Scale Visual Recognition Challenge)比赛中取得了优异的成绩,引入了"Inception"模块,这是一种多尺度卷积核并行结构,可以增强网络对不同尺度特征的感知能力。
|
4月前
|
机器学习/深度学习 监控 算法
【Keras计算机视觉】Faster R-CNN神经网络实现目标检测实战(附源码和数据集 超详细)
【Keras计算机视觉】Faster R-CNN神经网络实现目标检测实战(附源码和数据集 超详细)
34 0
|
4月前
|
机器学习/深度学习 算法 固态存储
【计算机视觉】目标检测中Faster R-CNN、R-FCN、YOLO、SSD等算法的讲解(图文解释 超详细必看)
【计算机视觉】目标检测中Faster R-CNN、R-FCN、YOLO、SSD等算法的讲解(图文解释 超详细必看)
108 0

热门文章

最新文章