今天我们谈谈AI经典问题之一——
计算机视觉
。深度学习在计算机视觉上的运用主要是卷积神经网络,必须强调的是卷积神经网络的应用并不仅仅局限于图像,在音频、视频方面也有不少的应用,甚至NLP中也有使用卷积神经网络的例子,所以说对AI从业者来说学习这些还是很有好处的。在这篇文章中,我们以Mask-RCNN[1]的发展历史为线索探讨计算机视觉问题中的图像分割问题以及物体检测,并最后简单讲解一些我在医学图像领域使用Mask-RCNN的例子。
a.实例分割 (Instance Segmentation)
在图像领域,有比较多的分割类型,比如使用阈值来对图像的明暗,色差进行分割,但在人工智能与图像分割结合的部分人们主要探讨的是实例分割以及语义分割(semantic segmentation)。实例分割和语义分割都是对图像“像素点是什么”的问题的判断,区别点在于实例分割需要分开判断每一个实例而语义分割则只需要判断像素点属于什么类别。一个简单的例子来自于下图[2],其中中间的分割结果为语义分割:
两种分割尽管存在一些区别,但在实际中很多人并不会去区分他们。
b.物体检测 (object detection)
物体检测的目标相对要直白很多。我们都知道深度卷积神经网络在图像分类的效果非常出色,图像分类问题回答的是“图片是什么”的问题,那么物体检测则是在此基础上试图解决“物体在哪里”的问题。在深度学习时代之前,人们常使用的是HOG(Histogram ofGradient)+SVM的方法去解决,而现在普遍使用的方法是RCNN系列的模型或者是类似于SSD、YOLO的模型去解决。今天我们探讨的重点是RCNN系列中比较新的成果Mask-RCNN,在开始讨论之前,我们不妨看看Mask-RCNN[1]作者的实验效果。
这里我们顺着
RCNN
系列物体检测深度学习模型的发展顺序介绍他们的发展路程以及模型性能提升的核心点。
RCNN[4]是这个系列的开山之作。RCNN的整体思路很简单,即为将图片切分成小块,将每一个小块输入到图像识别的模型中。模型如下图[3]。
尽管整体思路简单,但是这里涉及到一个比较难的问题是:按怎么样的标准去切分小块?一个可能的思路是使用不同大小的滑动窗口,对每一个窗口进行预测,显然这个思路速度肯定很糟糕。RCNN的思路是对图片作一次Selective Search提取出候选区,将候选区调整大小(Warping)后输入到图像识别模型中。概括地说,Selective Search的做法是根据图像的像素颜色得到一些色彩比较一致的小色块,将小色块进行融合得到候选
区提取的这一过程。
Bounding Box提升RCNN表现的具体做法
RCNN使用Selective Search减少了输入图片窗口的数量,但速度仍然相当的慢。显然,在RCNN中候选区域之间存在很多重叠的部分,在卷积计算的时会导致对重叠部分的多次计算。SPPnet通过卷积一次性提取获得全图的Feature Maps然后在Feature Maps上对Selective Search的候选区使用SPP (Spatial Pyramid Pooling) 获得定长的特征向量,将其传入全连接神经网络 (fc) 进行Bounding Box Regression和SVMs的分类。具体如下图[3]:
如下图SPP使用了多尺度的Max Pooling,并将这些结果排列在定长的特征向量中,解决了图片Warping导致的误差,SPP在合理设置max pooling的核大小以及Stride的时候可以对几乎任意大小的图片获得定长输出。准确度几乎持平,而速度有极大的提升。
模型理论支持可变大小,但是深度学习框架不支持,对此作者实验解决方法
故在Fast-RCNN算法中,使用类似于SPPnet的卷积提取Feature Maps,从对原图的候选区域的裁剪变为在Feature Maps上裁剪。裁剪方式从RCNN的在原图上Warping变为在Feature Maps上的RoI Pooling。RoI Pooling可以理解为SPP的特例,因为只有一个Pyramid Level。对SPPnet的训练方式进行改进,变得简单,完全端到端(end-to-end)学习,避免了multi-stage训练方法。将SVM改用 Softmax 引入类间竞争(“introduces competition betweenclasses”)但获得了少量精度提升。总体来说,Fast RCNN在速度和精度上均得到了提升,其结构如下[3]:
DesignEvaluation部分对模型设计的探讨
Smooth L1 Loss Function的讨论
Fast RCNN实现了端到端学习并在模型上避免了重复计算,到现在为止速度的瓶颈主要落在了Selective Search上。Faster RCNN的做法是完全去除Selective Search而在以Feature Maps为输入设立一个RPN(Region Proposal Network)预测候选区再进行RoI Pooling。RPN预测模型属于前景还是背景,将前景的候选区作为代替Selective Search的结果。速度上达了“实时监测”。如下图,左边是模型整体结构,右图是RPN和Anchor的示意图。
Mask即为掩膜,即对图片分割的结果输出。Mask RCNN是实例分割与物体检测的统一,在姿态估计上也有运用。Mask RCNN结构上在Faster RCNN的基础上进行增加一个预测Mask的Head结构。总损失函数为盒回归、分类和Mask的损失函数之和,此外这个模型还有两个RPN的损失函数。Mask的Label在以类别数作为层数,即H*W*K,其中K为预测类别数。Inference的时候,按照Object Detection的预测结果对Mask对应层的结果进行取样,并把预测出来的浮点数值的Mask按照0.5的阈值进行二值化的Mask输出。Mask Head Architecture 部分的结构参照 FCN (FullyConvolutional Network)——一个语义分割模型的开山之作。此外,Mask-RCNN另一个贡献是改进了RoI Pooling,使用RoIAlign的方式进行Feature Maps的裁剪,具体运用到了双线性插值(图像缩放的经典算法),避免了RoI Pooling时量化取整的误差。
补充额外阅读FPN(Feature Pyramid Network)[9]和FCN的论文
Ablation Experiments部分对Mask Labeling的讨论
Mask-RCNN在人类姿态估计上的应用(Keypoint Detection)
在了解过RCNN的发展进程和一些技术要点后,
我们来谈谈对这个模型的实践。
目前一般来说,在解决Object Detection的问题时很少有人还会去实践Faster RCNN以前的模型,因为Faster RCNN一般来说在速度和精度上来说都更优,如果是追求比较高的FPS的话,很多时候是选择类似于YOLO或者SSD的模型,但精度一般不如Faster RCNN。而在图像分割中,我们大多数的做法是使用U-net、SegNet或者是FCN的方法来解决语义分割问题,而实例分割在Mask-RCNN之前可能比较多的人会选择FCIS(Fully ConvolutionalInstance Segmentation)。因为Mask-RCNN集成了Object Detection和Instance Segmentation,略加修改还能完成Keypoint Detection的任务,功能十分强大,引起了人们很大的关注。所以我们这里以它为例,讲解一个在医学图像上的分割的案例。
这是我在学校期间参加的一个比赛项目,项目的问题是在医学图像中准确提取膀胱边界以及对肿瘤块的识别。数据集由中国计算机大赛人工智能挑战赛提供。下图是数据集的案例,左图为原始医学图像,右图是人类医学图像专家所做的标注:
比赛评价标准 :
分割标准:DSC (Dice’s coefficient)
我们可以认为Mask-RCNN是一个算法框架而它的实现效果依赖于模型的具体设置。比如说,在Feature Maps的提取部分,我们可以探索不同的结构,以及对后续的卷积操作的参数设置等。
(a) RPN Bounding Box Loss (Anchor Box) : Smooth L1 Loss
(b) RPN Classification Loss (前景和背景的判断) :Cross-Entropy Loss
(c) Classification Loss (Bounding Box的类别) :Cross-Entropy Loss
(d) Bounding Box Regression Loss : Smooth L1 Loss
(e) Mask Loss (原文使用Binary Cross Entropy) : Dice Coefficient Loss
(2) Feature Maps 提取Backbone : resnet101,使用FPN
(3) Mask提取部分模仿FCN,4次卷积+batch normalization计算后一次反卷积之后再一次1*1卷积将Mask输出成H*W*K,K指分类类别
除了模型外的工作,我们还对图像数据进行了预处理,以及利用数字图像处理的一些方法进行结果提升,但这些工作由于篇幅原因省略。我讲我们模型输出结果制作了动图,具体如下,其中左边为我们挑选肿瘤面积较大的样本,右图为膀胱壁较清晰的样本,红色为膀胱壁而青色为膀胱肿瘤。
另外,应该提醒的是,尽管我使用了Mask-RCNN去解决这个问题,但这并不代表它是模型评价数值表现最优的模型,由于图像器官的唯一性,使用其他语义分割模型应该会得到更高的算法评分,而Mask-RCNN运用在实例分割的问题会更佳,此外这里分割部分模型参考的是FCN,它在我的实践经验中来看分割细腻程度不如U-net等模型。
当初选择它的原因,更多的是因为我们认为在实际应用中,由于BBox的区域划分和类别判断比较准确,Bounding Box输出类别概率对医护人员而言具有较高参考意义。
这里我们比较概括地讲解了
RCNN
系列方法以及提及了图像分割的一些概念,但仅仅了解知识对于真正实现这些算法是远远不够的,如果想要了解更多建议阅读原论文并思考我之前提出的几个阅读建议点,同时也阅读
Mask-RCNN
(它集成了前面几种模型的关键技术点)的开源代码。
如果仅仅是希望借助计算机视觉来更深入地理解深度学习,我更建议再学习一下YOLO和SSD,通过这些模型基本上可以感受到卷积神经网络的强大威力以及使用它的正确思路。
[1]He, Gkioxari, Dollár, Girshick. Mask R-CNN. In ICCV 2017
[2]lanyuxuan100 https://blog.csdn.net/lanyuxuan100/article/details/70800246
[3]Yang. CSC2541 intro to object detection
[4]Girshick, Donahue, Darrell, Malik. Rich Feature Hierarchies for Accurate ObjectDetection and Semantic Segmentation. In CVPR 2014
[4]Felzenszwalb, Huttenlocher. Efficient Graph-Based Image Segmentation IJCV 2004
[5]Uijlings, van de Sande, Gevers, Smeulders. Selective Search for ObjectRecognition. In IJCV 2013
[6] He, Zhang, Ren, Sun. SpatialPyramid Pooling in Deep Convolutional Network for Visual Recognition. In ECCV2014
[7]Girshick. Fast R-CNN. In ICCV 2015
[8]Ren et al. Faster R-CNN: Region Proposal Networks for Real-Time ObjectDetection. In NIPS 2015
[9]Lin et al. Feature Pyramid Networks for Object Detection. In CVPR 2017
作者:Linda
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
评论(0)