图像处理和机器学习有什么关系?
图像处理有很多不同的方面,诸如图像增强、图像同质化、图像分割等等。模式识别有时候也归入图像处理里面。机器学习的主要内容是归纳(Generalization),是根据特征把两个或多个不同的东西区分开来。
在图像处理中,经常有工作是可以人工标记,但难以写出一个完整的规则来实现自动处理。有时候有一整套算法,但是参数太多,人工去调节、寻找合适的参数就太过繁琐。那么就可以利用机器学习的方法,提取一定数量的特征,人工标记一批结果,然后用机器学习的方法算出一套自动判断的准则。机器学习的方法在开发这类软件时就显得比较有效。
比如做图像分割时,我们要把大脑的MRI图像和骨骼分开,虽然一般时候这两者是比较清晰的,但总有那么一些时候有些部分不容易简单判别。如果人工来做,实在太耗时耗力。那么究竟一个部分是属于大脑还是属于骨骼,就可以通过机器学习来进行。
再比如说,有一些工作需要把眼球的图像中的血管全部提取出来,然后通过血管的密集程度、粗细来分析病情。照片中血管未必是完全相连的,有的地方可能略微模糊,孤立地看不见得能确定是不是相连的。这时候也可以用机器学习的方法来判定这个部分是不是相连的血管。 图像处理有很多不同的方面,诸如图像增强、图像同质化、图像分割等等。模式识别有时候也归入图像处理里面。
机器学习的主要内容是归纳(Generalization),是根据特征把两个或多个不同的东西区分开来。
在图像处理中,经常有工作是可以人工标记,但难以写出一个完整的规则来实现自动处理。有时候有一整套算法,但是参数太多,人工去调节、寻找合适的参数就太过繁琐。那么就可以利用机器学习的方法,提取一定数量的特征,人工标记一批结果,然后用机器学习的方法算出一套自动判断的准则。机器学习的方法在开发这类软件时就显得比较有效。
比如做图像分割时,我们要把大脑的MRI图像和骨骼分开,虽然一般时候这两者是比较清晰的,但总有那么一些时候有些部分不容易简单判别。如果人工来做,实在太耗时耗力。那么究竟一个部分是属于大脑还是属于骨骼,就可以通过机器学习来进行。
再比如说,有一些工作需要把眼球的图像中的血管全部提取出来,然后通过血管的密集程度、粗细来分析病情。照片中血管未必是完全相连的,有的地方可能略微模糊,孤立地看不见得能确定是不是相连的。这时候也可以用机器学习的方法来判定这个部分是不是相连的血管。 RAISR算法利用机器学习压缩图片,提高分辨率,对于一个低分辨率图片,我们想要得到对应的高分辨率图片,这个问题在学术界叫做Single Image Super-Resolution(SISR)问题。处理这种问题的一个基本思路是,给定大量的有对应关系的低清和高清图像训练数据,用算法去学习两者之间的对应关系(可以认为是一种滤波器)。本文即从这种思路出发,提出了一种快速生成高分辨率图像的方法,从多个角度对学习这种映射的过程进行加速。
考虑简单的线性SISR,可以用下式表示:
其中,z是m*n维的输入低清图像,x是Ms*Ns维的待求的高清图像,H是作用在x上的MsNs*MsNs维的线性算子,Ds是MN*MsNs维的衰减矩阵,在两个维度上分别进行尺度为s的衰减。在这样一个模型下,求解高分辨率图像就是通过已知的测量z去恢复未知的x的过程。
常见的从低清到高清的线性算法包括双线性差值或最近邻差值等,这些简单的线性差值算法简单易用,但是这些算法和图像本身的内容无关,因此很难处理复杂精细的图像区域,往往会有失真或过于平滑的现象。因此,近年来有许多基于数据的算法,常见的做法是,将高清图像下采样为低清图像,生成一对对低清-高清图像组合,通过大量这样的数据,去学习从低清到高清图像的映射。比较典型的有SRCNN,通过卷积神经网络去学习这个映射,取得了非常好的高分辨率恢复效果。当然,使用卷积神经网络往往会需要非常大的计算量。
在RAISR这篇文章中,作者的目标就是把高清恢复做快,快到可以用到当前主流的移动设备上。RAISR的思路是,将低分辨率图像首先进行双线性差值;然后,在双线性差值的基础上,将预训练好的滤波器作用于小图像块;为了提升图像恢复效果,有进一步使用哈希的方法将图像块聚类进行训练。
1.学习滤波器
学习滤波器的过程和学习高清映射的思路一致。给定一些图像对,用最小化恢复出来的图像和高清图像质检的误差的方法,学习预设的滤波器。常用的least-square损失函数可写为:
其中,h是我们要求的滤波器,A是从高清图像中扣取的小图像块,b是这个小图像块对用的低清像素块。这个流程可以用下图来直观表示。
2.图像分块
RAISR是以双线性差值为基础的。在双线性差值中,假设上采样比率为2,那么每个像素会被上采样为4个像素点(参见上图中的P1-P4)。所以作者想要先学习四种滤波器,在P1-P4的位置分别使用。相应地,在训练的过程中,训练数据也分成四个块分别训练,如下图:
3.聚类图像块
然而,采用上述方法进行高清恢复,只在四个预训练好的小滤波器中有少量参数,并不能很好的适应图像内容。因此,RAISR又进一步对训练数据中的图像块进行聚类,每一类分别使用不同的滤波器。在聚类的方法的选择上,作者也选用了相对快速的哈希算法。
4.低分辨到高分辨图像预测流程
综合以上步骤,RAISR的流程可以概括为下图:
首先,对低清图像进行简单的双线性差值;然后,使用哈希算法快速将图像块分到不同的类别(bucket)中;对于每个类别,分别使用四个预先训练好的滤波器进行线性滤波;将不同的图像块的结果融合起来,得到最终的恢复结果。
从这篇文章中我们可以看到,移动端应用需求会催生各种加速的方法。对于高分辨率恢复的问题,本文作者采用了多种机智的方法累加的方式,如分块计算、哈希加速等。然而我们认为,做应用算法的加速,不仅可以考虑本类似文中的多种机智方法的融合,也可以考虑在一个方法上“死磕”优化。比如,针对卷积神经网络如何小型化快速化,可以从硬件、底层代码、网络结构等多个角度进行优化。对于这些更多的优化技巧,我们以后见。
该文为Momenta Paper Reading 第一季第五期回顾,始发于2017年3月27日。
PPT下载链接:https://pan.baidu.com/s/1D2GPd5TpI-pmokbTKhLRdQ 密码: 8has------------------------------------------------
知乎机构号:Momenta,打造自动驾驶大脑。
基于深度学习的环境感知、高精度地图、驾驶决策技术,让无人驾驶成为可能。
Momenta知乎专栏:Paper Reading,集聚自动驾驶知名大咖的前沿知识分享平台,欢迎申请加入或直接投稿。
Paper Reading
用深度学习玩图像的七重关卡
许铁-巡洋舰科技2 天前
第一个重境界: 图像识别
如果你开始了解深度学习的图像处理, 你接触的第一个任务一定是图像识别 :
比如把你的爱猫输入到一个普通的CNN网络里, 看看它是喵咪还是狗狗。
一个最普通的CNN, 比如像这样几层的CNN鼻祖Lenet, 如果你有不错的数据集(比如kaggle猫狗大战)都可以给出一个还差强人意的分类结果(80%多准确率), 虽然不是太高。
当然,如果你再加上对特定问题的一些知识, 也可以顺便识别个人脸啥的,开个startup叫face 减减什么:
会玩的, 也可以顺别识别个猪脸什么哒(我觉得长得都一样哦), 这样搞出来每个猪的身份, 对于高质量猪肉的销售, 真是大有裨益的。
或者看看植物都有个什么病害什么的,像这样不同的病斑, 人都懒得看的, 它可以给你看出来。 植物保护的人可以拿着手机下田了。
Ronneberger, Olaf, Philipp Fischer, and Thomas Brox. "U-net: Convolutional networks for biomedical image segmentation." International Conference on Medical Image Computing and Computer-Assisted Intervention. Springer, Cham, 2015.
虽然植物保护真的很好用,分类问做就了还真是挺无聊的。
我们进化的方向,也就是用更高级的网络结构取得更好的准确率,比如像下图这样的残差网络(已经可以在猫狗数据集上达到99.5%以上准确率)。分类做好了你会有一种成为深度学习大师,拿着一把斧子眼镜里都是钉子的幻觉。 分类问题之所以简单, 一要归功于大量标记的图像, 二是分类是一个边界非常分明的问题, 即使机器不知道什么是猫什么是狗, 看出点区别还是挺容易的, 如果你给机器几千几万类区分, 机器的能力通过就下降了(再复杂的网络,在imagenet那样分1000个类的问题里,都很难搞到超过80%的准确率)。
He, Kaiming, et al. "Identity mappings in deep residual networks." European Conference on Computer Vision. Springer International Publishing, 2016.
第二重境界 : 物体检测
很快你发现,分类的技能在大部分的现实生活里并没有鸟用。因为现实中的任务啊, 往往是这样的:
或者这样的:
那么多东西在一起,你拿猫狗大头照训练的分类网络一下子就乱了阵脚。 即使是你一个图片里有一个猫还有一个狗,甚至给猫加点噪声,都可以使你的分类网络分寸大乱。
现实中, 哪有那么多图片, 一个图里就是一个猫或者美女的大图,更多的时候, 一张图片里的东西, 那是多多的, 乱乱的,没有什么章法可言的, 你需要自己做一个框, 把你所需要看的目标给框出来, 然后, 看看这些东西是什么 。
于是你来到机器视觉的下一层挑战 - 目标检测(从大图中框出目标物体并识别), 随之而来的是一个新的网络架构, 又被称为R - CNN, 图片检测网络 , 这个网络不仅可以告诉你分类,还可以告诉你目标物体的坐标, 即使图片里有很多目标物体, 也一一给你找出来。
Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal networks." Advances in neural information processing systems. 2015.
万军斩你首级那是杠杠的,在众多路人甲中识别嫌疑犯,也是轻而易举, 安防的人听着要按捺不住了。
今年出现的YOLO算法更是实现了快速实时的物体检测,你一路走过就告诉你视线里都有什么在哪里,要知道这在无人驾驶里是何等的利器。
YOLO快速检测法Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016.
当然, 到这里你依然最终会觉得无聊, 即使网络可以已经很复杂, 不过是一个CNN网络(推荐区域),在加上一层CNN网络做分类和回归。 能不能干点别的?
第三重境界 : 图像切割
啊哈, 这就来到了第三个关卡, 你不仅需要把图片中边边角角的物体给检测出来, 你还要做这么一个猛料的工作, 就是把它从图片中扣出来。 要知道, 刚出生的婴儿分不清物体的边界, 比如桌上有苹果这种事, 什么是桌子,什么是苹果,为什么苹果不是占在桌子上的? 所以, 网络能不能把物体从一个图里抠出来, 事关它是否真的像人一样把握了视觉的本质。 这也算是对它的某种“图灵测试” 。 而把这个问题简化,我们无非是在原先图片上生成出一个原图的“mask”, 面具,有点像phtoshop里的蒙版的东西。
所谓抠图
Drozdzal, Michal, et al. "The importance of skip connections in biomedical image segmentation." International Workshop on Large-Scale Annotation of Biomedical Data and Expert Label Synthesis. Springer International Publishing, 2016.
注意,这个任务里,我们是要从一个图片里得到另一个图片哦! 生成的面具是另一个图片, 这时候,所谓的U型网络粉墨登场,注意这是我们的第一个生成式的模型。 它的组成单元依然是卷积,但是却加入了maxpooling的反过程升维采样。
这个Segmentation任务, 作用不可小瞧哦, 尤其对于科研口的你, 比如现在私人卫星和无人机普及了,要不要去看看自己小区周围的地貌, 看是不是隐藏了个金库? 清清输入, 卫星图片一栏无余。 哪里有树, 哪里有水,哪里有军事基地,不需要人,全都给你抠出来。
如果你要数个细胞啥的 ,都是挺容易的,给它变成这样的轮廓不就你得了。
第四重境界:
我们开始fashion起来, 如果你是淘宝服装小店的老板 ,想让客户输入一张服装的图片,然后得到一组推荐的服装, 来个以图搜图的功能怎么搞呢? 注意啊,我可以从网络上爬一大堆图出来,但是这些数据是没有标注的。怎么办? 铁哥告你还是有的搞,这个搞法,就是聚类。
铁哥教你最简单的一招聚类哦,那就是, 把图片统统放进卷积网络,但是我们不提取分类,而只是提取一些网络中间层的特征, 这些特征有点像每个图片的视觉二维码,然后我们对这些二维码做一个k-means聚类, 也会得到意想不到的效果。 为什么要深度? 因为深度提取的特征,那是与众不同的。
然后以图搜图呢? 不过是找到同一聚类里的其它图片啊。
在聚类的基础上, 就可以做个搜索!
第五层境界 :
我们开始晋升为仰望星空的人, 之前那些分类赚钱的应用太无聊了。 机器视觉搞科学怎么港? 作为一群仰望星空后观察细胞的人,我们最常发现的是我们得到的天文或者细胞图片的噪声实在太大了, 这简直没法忍啊, 然后, 深度学习给了你一套降噪和恢复图像的方法。 一个叫auto-encoder的工具, 起到了很大的作用 , 刷的一下,图像就清楚了。
这还不是最酷炫的,那个应用了博弈理论的对抗学习, 也可以帮你谋杀噪点! 如果你会对抗所谓GAN, 也是一种图像生成的工具, 让网络去掉噪声的图片,与没有噪声的自然图片, 连卷积网络都判别不出来,对, 就是这样!
Schawinski, Kevin, et al. "Generative adversarial networks recover features in astrophysical images of galaxies beyond the deconvolution limit." Monthly Notices of the Royal Astronomical Society: Letters 467.1 (2017): L110-L114.
第六重境界 :
在工业界赚够了钱,科学也太nerd了, 我们来玩艺术思考哲学 ,第一招, 图像风格迁移,请见铁哥之前的文章:
然而真正能玩好这一事项的,还是那个刚刚提过的对抗学习GAN, 比如大名鼎鼎的CycleGAN, 几乎可以实现一种你自定义的“图像翻译” 功能,而且你不用做标注哦, 拿出冬天和夏天的两组图片, 它会自动的在两组图片中找出对应来。
Zhu, Jun-Yan, et al. "Unpaired image-to-image translation using cycle-consistent adversarial networks." arXiv preprint arXiv:1703.10593 (2017).
第七重境界:
图像翻译也懒的玩了, 你神经网络不是号称能够理解图像,看你来个无中生有,在噪声里生成图片来?
对,依然是GAN,而且是最基础的卷积GAN (DCGAN)就可以给你干出来。
看看GAN所幻想的宾馆情景, 你能想到是计算机做的图吗? 哈哈哈!
Goodfellow, Ian, et al. "Generative adversarial nets." Advances in neural information processing systems. 2014.
写到这里, 我自己都觉得GAN是非常有前途的,有前途的,有前途的,以前我还以为只是好玩呢。
这里展示的七级浮屠,也不过深度学习被人类discover的冰山一角, 醉卧沙场君莫笑, 古来征战几人回。
给你一个稍微清晰一些的大纲:
图像处理这个概念在工业界很泛泛:
从广义上可以分成,图像处理,图像分析,图像理解。
1.图像处理(Image processing):数字信号处理的分支领域,属于对图像的底层操作,诸如滤波,去噪,去马赛克去水印(恢复),压缩,边缘检测。其目的在于设计一种普世算法/滤波器对图像进行一系列预处理,以达到使图像更为美观或更利于后续处理的目的
2.图像分析:属于中层的图像工程,诸如图像分割,图像边缘提取,这个领域可以认为是在图像处理的基础上引入了部分图像的内容信息来进行研究。比图像处理更为智能一些,因为其已经涉及了从图像中抓取信息了,这点是图像处理所不具备的
3.图像理解(Image understanding):其实就是计算机视觉,主要是特征提取以及从图像中抓取深层次的语义信息,诸如人脸检测与识别,动作识别,视频的跟踪,行为识别,还有结合图形学的3D重建等。这个领域的目的在于抓取深层次的语义信息,其中识别相关的领域都属于模式识别领域。
对于机器学习,其是一种方法。可以用于上述三个图像领域的任何一个:
1.图像处理:图像增强,图像恢复都属于智能信息处理领域的研究点之一,除了基于传统的DSP方法外,机器学习在这个领域非常吃香,尤其是图像恢复。近几年图像水印也尝试用机器学习寻找水印的最优嵌入位置。
2.图像分析与理解:既然涉及了信息提取,机器学习自然会在这些领域大放异彩,例如图像分割,早年有基于数字信号处理的边缘检测和分水岭算法,但是近今年基于深度学习的图像语义分割无疑成为了分割的主流。图像理解作为根正苗红的模式识别行业,框架上就不可能摆脱机器学习。
总结就是,图像工程是领域。机器学习是方法,只是机器学习是图像领域比较热且work的方法 对于岗位要求来说,别理会机器学习就是了,呵呵。好多公司就是那么一写,基本用不上,至于是什么他们可能都不清楚。
当然如果是某些大公司里专门养着的搞前沿研究或者理论研究的,可能会有用到机器学习这些东西,什么神经网络啊,支持向量机啊,都算机器学习吧,主要用来分类 我做过三年的图像处理和机器学习。
图像处理只是手段,而机器学习是一套体系,目的产生可控的分类器,包含如何去采集样本,生成分类器,调整各种参数。
举例我做过的车牌识别。
实际上是一套ocr技术,现在已经都烂大街了。
图像处理部分,收集到的图像数据做各种加工,以满足机器学习各个部分的需要。例如做单通道处理降低信息量,二值化去除干扰噪点,膨胀腐蚀打通联通域等等。属于“器”层面。
机器学习部分,属于“术”层面了,拍摄了图像,用分类器去识别,实验室阶段要人工校对,对于漏识和误识,会有false positive和false nagitave两种情况,前者是没认出来,后者是认错了。这是两种完全不同的处理分支。对于完全由数据驱动的机器学习流程来说,不需要修改代码。而是将出现错误的样本手动调整到正确分类中,再讲调整后的样本集喂给训练程序,得到新的分类器。再去检验样本,如此反复迭代,提升分类器功力。 这个问题略大,可以分层次来理解这个问题。
图像处理更多的是完成low-level的处理任务,比如图像去噪、复原、增强、分割等等,这里会用到很多基本的图像处理技术,比如:小波变换,傅里叶变换,图模型等等。公司说的图像处理大概就是指这类的知识。
随着图像的不断普及,市场提出了更高的要求,比如图像识别,目标检测等high-level的任务,本质上还是图像处理任务,但是通常处理这类high-level的利器是机器学习。所以公司会要求机器学习这个条件。
总结:公司要求的即是:小到直线提取,大到人脸识别,你都能build from scratch。 很多图像处理的任务,可以用机器学习算法来完成。
其中,卷积神经网络是一类很常用的方法,有很多不同的网络结构,例如AlexNet、ResNet、残差收缩网络。
AlexNet
ResNet
深度残差收缩网络 图像处理不一定用机器学习的方法做。这个领域相当古老,100多年啦。最早的图像处理是用海底电缆把纽约的图片发去伦敦。当时根本没有ML。图像可以用信号处理的方法做。
而用机器学习处理图像被称为计算机视觉,俗称CV。CV是机器学习里的一个大派。
有一些图像处理的问题你是不可以用机器学习的。比如TEM图像处理里的一些问题就必须通过传统的信号处理技术。