【云驻共创】华为云AI实战营:图像分割
前言:
AI正在改变我们的生活,正在改变我们身边的各行各业,但是这条通往智能世界的路并不平坦,其中一个巨大鸿沟就是AI人才的稀缺。在中国庞大的IT从业群体,AI开发者缺口达百万级。
AI将成为全民普及性的技能,所以今天华为云EI为大家带来《2020华为云AI实战营》免费课程,大幅降低AI学习门槛,帮助庞大的软件开发者群体快速掌握AI技能,把AI用起来。
课程主要内容包括图像分类、物体检测、图像分割、人脸识别、OCR、视频分析、自然语言处理和语音识别这八大热门AI领域的基础知识、经典数据集和经典算法的介绍,每章课程都是实战案例,模型训练、测试、评估全流程覆盖,配合代码讲解和课后作业,帮助您掌握八大热门AI领域的模型开发能力。
2020年华为云AI实战营 第三章 图像分割
一、 图像分割介绍
1.1概述
图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像素赋予相同的编号。
1.2实例分割任务
• 分类任务(Classification and localization):检测出对象的位置和类别;不对同类型不同对象做出区别
• 目标检测(Object detection):将图片中的对象分别检测出来并检测其类别
• 语义分割(Semantic segmentation):将图片进行像素级分割;不对同类型的不同对象进行区分
• 实例分割(Instance segmentation):同样对图片进行像素级分割;将不同的对象分别识别出来
1.3实例分割应用场景
实例分割是计算机领域中非常重要的领域,实例分割是目标检测和语义分割的结合,在图像中将目标检测出来(目标检测),然后对每个像素打上标签(语义分割)。它在自动驾驶、医学影像、高精度GIS识别和3D建模等场景都有广泛的应用。
1.4 Mask RCNN完成过程
Mask R-CNN是大神何凯明的力作,将Object Detection与Semantic Segmentation合在了一起做。它的贡献主要是以下几点。
第一,神经网络有了多个分支输出。Mask R-CNN使用类似Faster R-CNN的框架,Faster R-CNN的输出是物体的bounding box和类别,而Mask R-CNN则多了一个分支,用来预测物体的语义分割图。也就是说神经网络同时学习两项任务,可以互相促进。
第二,在语义分割中使用Binary Mask。原来的语义分割预测类别需要使用0 1 2 3 4等数字代表各个类别。在Mask R-CNN中,检测分支会预测类别。这时候分割只需要用0 1预测这个物体的形状面具就行了。
第三,Mask R-CNN提出了RoiAlign用来替换Faster R-CNN中的RoiPooling。RoiPooling的思想是将输入图像中任意一块区域对应到神经网络特征图中的对应区域。RoiPooling使用了化整的近似来寻找对应区域,导致对应关系与实际情况有偏移。这个偏移在分类任务中可以容忍,但对于精细度更高的分割则影响较大。
1.5模型关键概念
Backbone网络、ResNet网络、FPN、RPN、Rol Align和 Head 网络
Mask R-CNN算法的主要步骤为:
首先,将输入图片送入到特征提取网络得到特征图。
然后对特征图的每一个像素位置设定固定个数的ROI(也可以叫Anchor),然后将ROI区域送入RPN网络进行二分类(前景和背景)以及坐标回归,以获得精炼后的ROI区域。
对上个步骤中获得的ROI区域执行论文提出的ROIAlign操作,即先将原图和feature map的pixel对应起来,然后将feature map和固定的feature对应起来。
最后对这些ROI区域进行多类别分类,候选框回归和引入FCN生成Mask,完成分割任务。
1.6 COCO数据集介绍
COCO数据集
COCO数据集,意为“Common Objects In Context”,是一组具有挑战性的、高质量的计算机视觉数据集,是最先进的神经网络,此名称还用于命名这些数据集使用的格式。
该数据集的格式可以被高级神经网络库自动理解,例如Facebook的Detectron2,甚至还有专门为处理 COCO 格式的数据集而构建的工具,例如COCO- annotator和COCOapi。了解此数据集的表示方式将有助于使用和修改现有数据集以及创建自定义数据集。
COCO 是一个大规模的对象检测、分割和字幕数据集。
COCO有几个特点:
大规模目标检测、分割以及图片描述数据集超像素
物体分割、对象分割、语义识别、超过330K张图像、80个分类类别、91个物体种类,每张图片提供5种描述,一共250,000个人体关键点标注
小结:
这次学习我们了解了实例分割的概念和应用场景,mask R-CNN的结构以及关键概念,介绍了COCO数据集。
二、 Mask R-CNN算法完成实例分割
动手实践
点击鼠标右键,在新标签页中打开此链接https://nbviewer.jupyter.orgl,打开新的网页再依次右键复制下面的实践案例地址、粘贴到新打开网页的搜索框中,按回车进行访问
·实例分割Mask R-CNN实践案例地址: https://github.com/huaweicloud/ModelArts-Lab/blob/master/notebook/DL_image_segmentation_mask/Mask%20R-CNN.ipynb
实例分割-Mask R-CNN 模型
这期我们将进行实例分割模型Mask R-CNN的训练和测试的学习。在计算机视觉领域,实例分割(Instance Segmentation)是指从图像中识别物体的各个实例,并逐个将实例进行像素级标注的任务。实例分割技术在自动驾驶、医学影像、高精度GIS识别、3D建模辅助等领域有广泛的应用。本示例将对实例分割领域经典的Mask R-CNN模型进行简单介绍,并使用Matterport开源Mask R-CNN实现 ,展示如何在华为云ModelArts上训练Mask R-CNN模型。
进入ModelArts
点击如下链接:https://www.huaweicloud.com/product/modelarts.html , 进入ModelArts主页。点击“进入控制台”按钮,输入用户名和密码登录,进入ModelArts使用页面
创建ModelArts notebook
下面,我们在ModelArts中创建一个notebook开发环境,ModelArts notebook提供网页版的Python开发环境,可以方便的编写、运行代码,并查看运行结果。
第一步:在ModelArts服务主界面依次点击“开发环境”、“创建”
第二步:填写notebook所需的参数:
项目 |
建议填写方式 |
|
名称 |
自定义环境名称 |
|
工作环境 |
Python3 |
|
资源池 |
选择\"公共资源池\"即可 |
|
类型 |
GPU |
|
规格 |
[限时免费]体验规格GPU版 |
|
存储配置 |
EVS |
|
磁盘规格 |
5GB |
第三步:配置好notebook参数后,点击下一步,进入notebook信息预览。确认无误后,点击“立即创建”
第四步:创建完成后,返回开发环境主界面,等待Notebook创建完毕后,打开Notebook,进行下一步操作
在ModelArts中创建开发环境
接下来,我们创建一个实际的开发环境,用于后续的实验步骤。
第一步:点击下图所示的“打开”按钮,进入刚刚创建的Notebook
第二步:创建一个Python3环境的的Notebook。点击右上角的\"New\",然后选择Tensorflow-1.13.1开发环境。 第三步:点击左上方的文件名\"Untitled\",并输入一个与本实验相关的名称
在Notebook中编写并执行代码
在Notebook中,我们输入一个简单的打印语句,然后点击上方的运行按钮,可以查看语句执行的结果:
开发环境准备好啦,接下来可以愉快地写代码啦!
Mask R-CNN模型训练部分
第一步:导入相应的Python库,准备预训练模型
首先进行包的安装与引用,对需要的代码和数据进行下载
Mask R-CNN模型训练部分
第一步:导入相应的Python库,准备预训练模型
第二步:生成相关配置项
我们定义Config类的子类MyTrainConfig,指定相关的参数,较为关键的参数有:
• NAME: Config的唯一名称
• NUM_CLASSES: 分类的数量,COCO中共有80种物体+背景
• IMAGE_MIN_DIM和IMAGE_MAX_DIM: 图片的最大和最小尺寸,我们生成固定的128x128的图片,因此都设置为128
• TRAIN_ROIS_PER_IMAGE: 每张图片上训练的RoI个数
• STEPS_PER_EPOCH和VALIDATION_STEPS: 训练和验证时,每轮的step数量,减少step的数量可以加速训练,但是检测精度降低
第三步:准备数据集
我们使用封装好的CocoDataset类,生成训练集和验证集。
创建模型
第一步:用"training"模式创建模型对象,用于形状数据集的训练
第二步:加载预训练模型的权重
接下来,我们使用预训练的模型,结合Shapes数据集,对模型进行训练
训练模型
Keras中的模型可以按照制定的层进行构建,在模型的train方法中,我们可以通过layers参数来指定特定的层进行训练。layers参数有以下几种预设值:
• heads:只训练head网络中的分类、mask和bbox回归
• all: 所有的layer
• 3+: 训练ResNet Stage3和后续Stage
• 4+: 训练ResNet Stage4和后续Stage
• 5+: 训练ResNet Stage5和后续Stage
此外,layers参数还支持正则表达式,按照匹配规则指定layer,可以调用model.keras_model.summary()查看各个层的名称,然后按照需要指定要训练的层。
使用Mask R-CNN 检测图片物体
第一步:定义InferenceConfig,并创建"Inference"模式的模型对象,将我们生成的模型权重信息加载进来
第二步:从验证数据集中随机选出一张图片进行预测,并显示结果
第三步:也可以通过上传自己的图片进行预测。
上传图片方式:点击网页的’upload‘按钮,将本地图片文件上传,上传后图片所在的路径存储为test_path。
评估模型
这一步我们对自己训练出的模型进行一个简单的评估。计算模型的平均精度mAP(mean Average Precision)
总结:
图像分割,顾名思义,这是将图像分割为多个部分的过程。在这个过程中,图像中的每个像素都与一个对象类型相关联。图像分割主要有两种类型:语义分割和实例分割。
在语义分割中,所有相同类型的对象都使用一个类标签进行标记,而在实例分割中,相似的对象使用各自的标签。
在Mask R-CNN这个架构中,使用边界框和语义分割将每个像素划分为一组类别,对对象进行分类和局部化。对每个感兴趣的区域得到一个分割掩码,生成一个类标签和一个边界框作为最终输出。该架构是Faster R-CNN的扩展。Faster R-CNN由regions proposer和深度卷积网络和利局部检测器组成。
注:本文整理自华为云社区内容共创活动之华为云AI实战营:图像分割
查看活动详情:https://bbs.huaweicloud.com/blogs/308924
- 点赞
- 收藏
- 关注作者
评论(0)