深度学习,图像+语义分类的实现

博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)来源:沈MM的小喇叭
原文链接:
本文经作者授权转载,禁止二次转载
大多数人接触“语义”都是在和文字相关的领域,或语音识别,期望机器能够识别你发出去的消息或简短的语音,然后给予你适当的反馈和回复。嗯,看到这里你应该已经猜到了,图像领域也是存在“语义”的。
今天是AI大热年,很多人都关注与机器人的语音交互,可是有没有想过,将来的机器人如果不能通过图像来识别主人,家里的物品、宠物,那该多没意思。说近一些,假如扫地机器人能够机智地绕开你丢在地上的臭袜子而扫走旁边的纸屑,一定能为你的生活解决不少麻烦。
没错,图像语义分割是AI领域中一个重要的分支,是机器视觉技术中关于图像理解的重要一环,是不是听上去即重要又牛X闪闪的。
近年的自动驾驶技术中,也需要用到这种技术。车载摄像头探查到图像,后台计算机可以自动将图像分割归类,以避让行人和车辆等障碍。
图像语义分割的意思就是机器自动分割并识别出图像中的内容,比如给出一个人骑摩托车的照片,机器判断后应当能够生成右侧图,红色标注为人,绿色是车(黑色表示back ground)。
所以图像分割对图像理解的意义,就好比读古书首先要断句一样。
在Deeplearning技术快速发展之前,就已经有了很多做图像分割的技术,其中比较著名的是一种叫做“Normalized cut”的图划分方法,简称“N-cut”。
N-cut的计算有一些连接权重的公式,这里就不提了,它的思想主要是通过像素和像素之间的关系权重来综合考虑,根据给出的阈值,将图像一分为二。
下图是将像素间的关系信息简单描述成为距离,根据距离差距来划分图像的示例:
在实际运用中,每运行一次N-cut,只能切割一次图片,为了分割出图像上的多个物体,需要多次运行,下图示例了对原图a进行7次N-cut后,每次分割出的结果。
但是可以很明显的看到这种简单粗暴的分割方式并不准确,趴在地上的运动员肢体在b图中分割出来,而他的手臂则在h图中被分割,显然是错误的。
N-cut技术的缺陷很明显,于是有了一种更新的优化方式,这种优化方式为了避免机器不能很好的分割类似上面例子中“衣服和肢体颜色反查太大导致分割错误”的情况,增加了人机交互,在分割过程中,需要人工干预参与完成。
这种需要人机交互的技术叫Grab Cut。
[敲黑板]~~ 注意,PS里就使用了这种技术。
这种技术其实是这样的,给定一张图片,然后人工在想要抠图(也就是我们说的分割)的区域画一个红框,然后机器会对略小于这个框的内容进行“主体计算”,嗯,这个“主体计算”是我起的名字,为了你们更好的理解背后复杂的设计和公式,因为机器会默认红框中部是用户期望得到的结果,所以将中部作为主体参考,然后剔除和主体差异较大的部分,留下结果。
此技术中,抠出来的部分叫“前景”,剔除的部分叫“背景”。
有时候还挺好用的,但是稍微复杂一点的时候问题就来了:比如要抠下面这个戴头盔的大兵,头盔颜色和背后岩石颜色很相近,结果机器就会把头盔部分剔除,同样脖子附近的山岩也被当做了前景而保留了进来。
此时又需要进行人工干预了,需要手动在图像上进行标注,画白色线表示是希望保留的前景,红色表示背景,指导辅助机器进行判断,再次运算后,得到了较好的期望结果。
虽然看上去Grab Cut给出的结果还不错,但缺点也很明显,首先,它同N-cut一样也只能做二类语义分割,说人话就是一次只能分割一类,非黑即白,多个目标图像就要多次运算。其次,它需要人工干预,这个弱点在将来批量化处理和智能时代简直就是死穴。
OK,人类的智慧是无止境的,DeepLearning(深度学习)终于开始大行其道了。
深度学习是机器学习的一个分支,主要指深度神经网络算法,深度神经网络比普通神经网络层次更多,能够更好地捕捉数据中的深层次关系,得到的模型较为准确,主要用来进行特征学习。
先别急着晕,我们先来看看神经网络是怎么工作的。
神经网络是模仿人的神经元而建立的人工神经元系统,多输入单输出,同时输出又作为下一个神经元的输入……(请自行脑补那张牙舞爪妖孽的神经元细胞~什么?没见过?文科生,拖出去~~)
下图表示的是一个单个神经元:
把这些单个神经元组织在一起,便形成了神经网络。下图便是一个三层神经网络结构:
上图中最左边的原始输入信息称之为输入层,最右边的神经元称之为输出层(上图中输出层只有一个神经元),中间的叫隐藏层。
深度神经网络系统中的层数比较多,达到8-10层(普通神经网络的层数通常3-4层)。
在此前使用的图像识别算法中,主流的技术是卷积神经网络算法(Convolutional Neural Networks),简称CNN。卷积神经网络就是一种深度神经网络。
但是在2015年的CVPR上发表了一篇很牛X的论文(路人甲:请问CVPR是神马?答:CVPR可以简单理解为这个领域的最重量级的会议:国际计算机视觉与模式识别会议),提出了FCN即 全卷积神经网络(Fully Convolutional Networks)。
为什么说这个FCN论文很牛叉呢?看起来只是多了一个字而已呀,有什么不得了的呢?
嗯,不得不说,真是“”啊。
我还是先来帮大家复习一下卷积。
我查了很多书,卷积有各种各样的公式,还有各种各样的推导算法,但是为了降低本文的难读指数,所以我直接跳到卷积的物理意义,不要太care那些公式,其实卷积的物理意义,就是“加权叠加”。
在对图像处理进行卷积时,根据卷积核的大小,输入和输出之间也会有规模上的差异。
来看一张动图(仅做示例)
上图左边5*5的方块视为图像输入,黄色移动的3*3以及里面的数字(*1/*0)是卷积核,该卷积核按照步长为1的顺序依次从原始输入的左上角一直移动计算叠加到右下角,卷积核一共移动9次。
九次的位置对应到右侧的3*3的相应格内,格中的数字便是卷积值,(此处是卷积核所覆盖的面积内元素相乘再累加的结果)。
9次移动计算完毕后,右侧3*3的新矩阵为此次卷积层的计算结果。
如果这么说还是不太好理解,没关系,我有更直观的办法^_^。
在实际计算过程中,输入是一张原始图片和滤波器filter(一组固定的权重,也就是上面我们说的卷积核对应的实际意义)做内积后得到新的二维数据。
不同的滤波器filter会得到不同的输出数据,比如轮廓、颜色深浅,如果想提取图像的不同特征,需要用不同的滤波器filter提取想要的关于图像的特定信息。
上图为一个卷积层中的卷积处理过程,注意上下两次卷积核内容是不同的,所以得到两种处理结果。
等号右边的新的二维信息在CNN网络中,会作为下一个卷积层的输入,即在下一个卷积层计算时,右边的图像会作为输入的原始图像。
在CNN网络中,一共会进行5次卷积层计算。
路人甲:那最后会得到一个什么鬼?
沈MM:咳咳,在连续的5个卷积层计算后,紧跟这的是3个全连接层。
路人甲:什么是全连接层?
沈MM:全连接层,并不是一个二维图像,而是—— 一个一维向量。
路人甲已哭晕在厕所。
这三个一维向量的前两个向量长度是4096,最后一个向量长度是1000.
为什么是1000?
因为在CNN网络中,有1000个分类,最后的这个向量中的1000个元素表达的信息是:这张原始输入图片中的东西可能是这1000个分类中的物体的概率。
是的,一张图,算了半天,最后给出的是,这张图是个什么玩意的答案。
右侧绿色箭头指向的表示最后一个全连接层的向量中,表示各种物体的概率,上图被识别为一辆车。
好了,上面说的是卷积神经网络CNN的处理过程(相信我我已经很简化了)。
那么全卷积神经网络呢?
大家应该注意到,CNN的输入是图像,输出是一个结果,或者说是一个值,一个概率值。
FCN提出所追求的是,输入是一张图片是,输出也是一张图片,学习像素到像素的映射。
上图上半部分是CNN网络,下半部分是CN网络
那么“全卷积”又体现在哪里呢?
CNN网络中的后三层,都是一维的向量,计算方式不再采用卷积,所以丢失了二维信息,而FCN网络中,将这三层全部转化为1*1的卷积核所对应等同向量长度的多通道卷积层,使后三层也全部采用卷积计算,整个模型中,全部都是卷积层,没有向量,所以称为“全卷积”。
FCN将第6层和7层分别从4096长度的向量转化为4096通道的卷积层,第8层则是21通道的卷积层。之所以第8层从1000缩减到21,是因为FCN使用的识别库是PASCAL VOC,在PASCAL VOC中有20种物体分类,另外一个background分类。(关于PASCAL VOC参见附录)
再多说一句,以下(甚至全文)所用到的分割图片中不同的颜色就表示不同的物体类别,一共有21种颜色:
CNN的识别是图像级的识别,也就是从图像到结果,而FCN的识别是像素级的识别,对输入图像的每一个像素在输出上都有对应的判断标注,标明这个像素最可能是属于一个什么物体/类别。
在此处特别要指出的是,在实际的图像语义分割测试时,输入是一个H*W*3的三通道彩色图像,而输出是一个H*W的矩阵。
这就可以简单看做每一个像素所携带的信息是多维的,比如颜色,就分为3层,分别对应R、G、B三个值。(不知道什么是RGB的,鉴定为文科生,请迅速撤离,谢谢)
所以在进行卷积的时候,每一个通道都是要独立计算的,计算完之后再叠加,得到最终卷积层结果。
如果卷积核移动的步长为1,那么卷积是按照像素排列去挨个计算的,计算量可想而知会有多么庞大。但是在实际中,相邻的像素往往都是一类,按照像素依次计算就显得冗余,所以在卷积之后会对输出进行一次池化(pooling)处理。
那么什么又是池化呢?
来,我们再来看一张动图:
池化简单来说就是将输入图像切块,大部分时候我们选择不重叠的区域,假如池化的分割块大小为 h*h,分割的步长为 j,那么一般 h=j,就像上图,如果需要重叠,只需要 h&j 即可。
对完整图像切分,再取切分区域中所有值的均值或最大值作为代表该区域的新值,放入池化后的二维信息图中。得到的新图就是池化结果。
在CNN和FCN的网络模型中,每一个卷积层,都包含了[卷积 池化]处理,这就是传说中的“下采样”,但这样处理之后的结果是:图像的像素信息变小了,每一层的像素信息都是前一层的1/2大小,到第五层的时候,图像大小为原始图像的1/32。
在CNN算法里,这并没有什么要紧的,因为CNN最终只输出一个结果:“这个图上是个啥”,但是FCN不同,FCN是像素级别的识别,也就是输入有多少像素,输出就要多少像素,像素之间完全映射,并且在输出图像上有信息标注,指明每一个像素可能是什么物体/类别。
所以就必须对这1/32的图像进行还原。
这里用到个纯数学技术,叫“反卷积”,对第5层进行反卷积,可以将图像扩充至原来的大小(严格说是近似原始大小,一般会大一点,但是会裁剪掉,为什么会大的原理略复杂,这里先不提,以后写进阶版再放进来)。
——这个“反卷积”称为“上采样”。(和下采样对应)
在技术上,我们可以对任一层卷积层做反卷积处理,得到最后的图像,比如用第三层(8s-8倍放大),第四层(16s-16倍放大),第五层(32s-32倍放大)得到的分割结果。
来看一张各层还原后的对比图,分别是:
通过对比可以很明显看到:在16倍还原和8倍还原时,能够看到更好的细节,32倍还原出来的图,在边缘分割和识别上,虽然大致的意思都出来了,但细节部分(边缘)真的很粗糙,甚至无法看出物体形状。
为什么会这样呢?
这里就涉及到一个感受域(receptive field)的概念。较浅的卷积层(靠前的)的感受域比较小,学习感知细节部分的能力强,较深的隐藏层(靠后的),感受域相对较大,适合学习较为整体的、相对更宏观一些的特征。
所以在较深的卷积层上进行反卷积还原,自然会丢失很多细节特征。
于是我们会在反卷积步骤时,考虑采用一部分较浅层的反卷积信息辅助叠加,更好的优化分割结果的精度:
尽管FCN的提出是一条很牛叉的路,但还是无法避免有很多问题,比如,精度问题,对细节不敏感,以及像素与像素之间的关系,忽略空间的一致性等问题。
于是更牛的大牛就出现了。
有牛人提出一种新的卷积计算方式,开始称为“带hole”的卷积,也就是使用一种“疏松的卷积核”来计算,以此来取代池化的处理。
上面已经讲过,池化操作能够减少计算量,同时也能防止计算结果过拟合,那么单纯取消池化操作又会使单层网络的感受域缩小,但如果使用“疏松的卷积核”来处理卷积,可以达到在不增加计算量的情况下增加感受域,弥补不进行池化处理后的精度问题。
括弧:这种带洞的卷积方式后来起了一个高雅的名字叫做:“Dilated Convolutions”。
这种方式人为加大了卷积核内部元素之间的距离,可参考下图:
红点表示卷积核的元素,绿色表示感受域,黑线框表示输入图像。
a为原始卷积核计算时覆盖的感受域,b为当卷积核覆盖的元素间距离增大的情况,不再在连续的空间内去做卷积,跳着做,当这个距离增加的越大时,单次计算覆盖的感受域面积越大。
上图不太好理解的话再来看一张图:(个人觉得下面这个图非常好理解)
上层绿色点表示输入层像素点,下层黄色是输出层(单次计算时的层级关系),当卷积核元素间距为0时(相邻),123对应输出A,234对应输出B,345对应输出C,那么输出ABC三个元素结果的感受域只覆盖了12345这几个原始像素点。
如果采用稀疏的卷积核,假设间距为1(相当于卷积计算时跳一个像素再取值计算),如图示,那么结果A对应的输入是135,结果B对应的输入是246,结果C对应的输入是357,同样输出ABC三个结果,在原始图像上取的像素点的长度就多了。
这是水平X轴方向上的扩展,在Y轴上也会有同样的扩展,感受域在没有增加计算(相对于池化操作后)的情况下增大了,并且保留了足够多的细节信息,对图像还原后的精度有明显的提升。
看一下对比图:
第一列是原始图像,最后一列是手工标注的训练输入图像,第二列为FCN在1/8倍数下的还原,第三列则是采用了新的卷积算法的还原图像,可以很明显看到,第三列对细节的分割明显优于第二列FCN 8倍的图像。
刚才还提到了第二个问题,即像素与像素之间的逻辑关系的问题,毕竟前面再牛叉的算法也只是单纯的计算没有根据物理意义进行判断在输出的标注里这些结果是否合法(符合现实逻辑)。
很多以深度学习为框架的图像语义分割系统都使用了一种叫做“条件随机场”( Conditional Random Field,简称CRF)的技术作为输出结果的优化后处理手段。其实类似技术种类较多,比如还有马尔科夫随机场(MRF)和高斯条件随机场(G-CRF)用的也比较多,但原理都较为类似。
简单来介绍一下“条件随机场”的概念。
FCN是像素到像素的影射,所以最终输出的图片上每一个像素都是标注了分类的,将这些分类简单地看成是不同的变量,每个像素都和其他像素之间建立一种连接,连接就是相互间的关系。
于是就会得到一个“完全图”:
上图是以4*6大小的图像像素阵列表示的简易版。
那么在全链接的 CRF 模型中,有一个对应的能量函数:
嗯,不要问我这个公式里各种符号是啥,我看不懂。但是我知道这个公式是干嘛滴:
其中等号右边第一个一元项,表示像素对应的语义类别,其类别可以由FCN或者其他语义分割模型的预测结果得到;而第二项为二元项,二元项可将像素之间的语义联系/关系考虑进去。
这么说太抽象,举个简单的例子,“天空”和“鸟”这样的像素在物理空间是相邻的概率,应该要比“天空”和“鱼”这样像素相邻的概率大,那么天空的边缘就更应该判断为鸟而不是鱼(从概率的角度)。
通过对这个能量函数优化求解,把明显不符合事实识别判断剔除,替换成合理的解释,得到对FCN的图像语义预测结果的优化,生成最终的语义分割结果。
优化后的对比图:
上图第二列是FCN网络8倍还原分割结果,第三列是将CRF植入FCN处理后的结果。
可以很明显的看到,第三列的物体识别无论是轮廓细节分割还是物体识别,都优于第二列,特别是第二行的沙发中有奇怪的红色东西的识别,在进行CRF优化之后,还原成了绿色的沙发。
OK,说了这么多,终于快要讲完了(好累)。
以上就是目前较为前沿的图像语义分割技术。
目前的这种机器学习方式还属于监督性学习,牛叉闪闪的科学家们还是希望将来可以实现半监督或弱监督式学习,这样更类似人类的学习认知方式。
在这条道路上,还有很多有趣的东西,比如示例级别(instance level)的图像语义分割问题也同样热门。
该类问题不仅需要对不同语义物体进行图像分割,同时还要求对同一语义的不同个体进行分割(例如需要对图中出现的九把椅子的像素用不同颜色分别标示出来)。
另外,在目前的计算技术水平下(硬件软件),使用FCN训练建模的时间大约需要三周,这也说明在这个领域里还有很多值得探索和需要解决的问题。
对此有兴趣的同学们自己去继续研究吧,哈哈。
曾有一个业界大牛说过这样一段话,送给大家:
“华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
AI的浪潮即将席卷而来,你,准备好了么?
——附录的分割线—–
PASCAL VOC(patternanalysis,statistical modelling and computational learning visual objectclasses)模式分析,统计建模,计算学习,视觉物体分类。
PASCAL VOC 挑战赛是视觉对象的分类识别和检测的一个基准测试,提供了检测算法和学习性能的标准图像注释数据集和标准的评估系统。从2005年至今,该组织每年都会提供一系列类别的、带标签的图片,挑战者通过设计各种精妙的算法,仅根据分析图片内容来将其分类,最终通过准确率、召回率、效率来一决高下。如今,挑战赛和其所使用的数据集已经成为了对象检测领域普遍接受的一种标准。
委员会所提供的图片集包括20个目录:人类;动物(鸟、猫、牛、狗、马、羊);交通工具(飞机、自行车、船、公共汽车、小轿车、摩托车、火车);室内(瓶子、椅子、餐桌、盆栽植物、沙发、电视)。都是一些日常中最常见的物体,为的就是能更好的体现算法的实用性。
欢迎加入我爱机器学习QQ14群:
微信扫一扫,关注我爱机器学习公众号
欢迎加入我爱机器学习QQ14群:
最新文章列表
NIPS 2016 — Day 1 Highlights NIPS 2016 — Day 2 Highlights:...
2018年四月 &(13)
2018年三月 &(21)
2018年二月 &(20)
2018年一月 &(21)
2017年十二月 &(19)
2017年十一月 &(20)
2017年十月 &(31)
2017年九月 &(47)
2017年八月 &(58)
2017年七月 &(60)
2017年六月 &(67)
2017年五月 &(66)
2017年四月 &(65)
2017年三月 &(54)
2017年二月 &(48)
2017年一月 &(54)
2016年十二月 &(62)
2016年十一月 &(97)
2016年十月 &(97)
2016年九月 &(124)
2016年八月 &(83)
2016年七月 &(13)
2016年六月 &(10)
2016年五月 &(7)
2016年四月 &(9)
2016年三月 &(7)
2016年二月 &(2)
2016年一月 &(3)
2015年十二月 &(5)
2015年十一月 &(4)
2015年十月 &(2)
2015年九月 &(2)
2015年八月 &(3)
2015年七月 &(6)
2015年六月 &(8)
2015年五月 &(4)
2015年四月 &(1)
2015年三月 &(3)
2015年二月 &(1)
2015年一月 &(2)
2014年十二月 &(4)
2014年十一月 &(2)
2014年十月 &(3)
2014年九月 &(4)
2014年八月 &(22)
2014年七月 &(40)
2014年六月 &(61)
2014年五月 &(63)
2014年四月 &(187)
2014年三月 &(4798)
2014年二月 &(764)
2014年一月 &(330)
2013年十二月 &(145)
2013年十一月 &(126)
2013年十月 &(216)
2013年九月 &(284)
2013年八月 &(327)
2013年七月 &(275)
2013年六月 &(315)
2013年五月 &(228)
2013年四月 &(175)
2013年三月 &(186)
2013年二月 &(118)
2013年一月 &(210)
2012年十二月 &(221)
2012年十一月 &(155)
2012年十月 &(143)
2012年九月 &(98)
2012年八月 &(99)
2012年七月 &(109)
2012年六月 &(75)
2012年五月 &(88)
2012年四月 &(78)
2012年三月 &(78)
2012年二月 &(50)
2012年一月 &(17)
2011年十二月 &(27)
2011年十一月 &(6)
2011年十月 &(11)
2011年九月 &(13)
2011年八月 &(13)
2011年七月 &(19)
2011年六月 &(18)
2011年五月 &(6)
2011年四月 &(12)
2011年三月 &(15)
2011年二月 &(6)
2011年一月 &(9)
2010年十二月 &(6)
2010年十一月 &(11)
2010年十月 &(5)
2010年九月 &(8)
2010年八月 &(5)
2010年七月 &(12)
2010年六月 &(4)
2010年五月 &(7)
2010年四月 &(6)
2010年三月 &(12)
2010年二月 &(7)
2010年一月 &(2)
2009年十二月 &(5)
2009年十一月 &(16)
2009年十月 &(6)
2009年九月 &(7)
2009年八月 &(7)
2009年七月 &(5)
2009年六月 &(6)
2009年五月 &(6)
2009年四月 &(4)
2009年三月 &(7)
2009年二月 &(6)
2009年一月 &(1)
2008年十二月 &(4)
2008年十一月 &(5)
2008年十月 &(1)
2008年八月 &(1)
2008年七月 &(3)
2008年六月 &(3)
2008年五月 &(3)
2008年三月 &(1)
2007年十二月 &(1)
2007年十月 &(1)
2007年八月 &(4)
2007年七月 &(1)苹果/安卓/wp
积分 15929, 距离下一级还需 2371 积分
权限: 自定义头衔, 签名中使用图片, 隐身, 设置帖子权限, 设置回复可见, 签名中使用代码
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡, 抢沙发, 提升卡, 沉默卡, 千斤顶, 变色卡下一级可获得
道具: 置顶卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
摘要:图像分类问题长久以来都是学术界研究的热点问题,也是图像检索、图像理解和分析等研究的基础。近年来随着网络上数字图像的增长,传统的图像分类方法已经不能满足现实应用的需要,基于语义的图像分类方法越来越受到关注。本文通过分析生物视觉、图像特征等方面的最新研究成果,提出了层次化语义特征必须具备的一些特点,根据深度学习模型学习数据的层次化特征的原理,提出使用深度学习模型学习图像的层次化语义特征,并在此基础上设计了两种深度学习模型来进行图像的语义分类。  本文主要研究了以下几个方面:  (1)介绍了图像语义分类的意义和常见思路,讨论了两类构造图像语义特征的方法,分析了这两类方法的缺点,介绍了深度学习的发展历程,并对本文的主要工作做了简要的介绍。  (2)对人类视觉皮层,特别是和一般视觉特征处理相关的视觉子区域,做了比较详细而深入的介绍。对常见的四类构造图像特征的思路做了详细介绍,分析了每种思路的优缺点。在前面两项工作的基础上,总结了图像语义特征必须具备的特点,提出了使用层次化学习模型来学习图像中的特征。  (3)对分布式表示做了介绍,从表示能力角度说明了层次化表示的必要性。对常见的深度学习模型的理论和学习过程做了简要的介绍。  (4)对图像语义分类问题作出了自己的定义。结合图像语义分类的实际问题,提出使用栈式去噪自动编码器和卷积深度玻尔兹曼机来提取图像的语义特征,然后进行图像分类。针对深度学习模型难优化的问题,总结了深度学习模型优化的常见技巧。  (5)在CIFAR-10和STL-10数据集上验证了本文提出的两种深度学习模型在图像语义分类任务上的效果。对分类结果做了分析,对本文的工作做了总结和展望。  原文链接:http://d.wanfangdata.com.cn/Thesis/Y2558606送人玫瑰,手留余香~如您已下载到该资源,可在回帖当中上传与大家共享,。(仅供学术交流用。)
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师1766人阅读
【深度学习 及 论文笔记】(163)
【Caffe技巧及有趣实验 】(161)
【 Python相关 】(62)
本文 转自:,主要论述了基于深度学习方法的图像语义分析,包括图片分类、图片搜索、图片标注(image2text、image2sentence),以及训练深度神经网络的一些tricks,最后还简要地提及语义分析方法在腾讯广点通上的实际应用。
文中没有复杂的公式、原理,但总结了图像语义分析一些state of the art的方法,值得一读。
3 图片语义分析
3.1 图片分类
图片分类是一个最基本的图片语义分析方法。
基于深度学习的图片分类
传统的图片分类如下图所示,首先需要先手工提取图片特征,譬如SIFT, GIST,再经由VQ coding和Spatial pooling,最后送入传统的分类模型(例如SVM等)。
图23. 传统图片分类流程图
传统方法里,人工特征提取是一个巨大的消耗性工作。而随着深度学习的进展,不再需要人工特征,通过深度学习自动提取特征成为一种可能。接下来主要讲述卷积神经网络在图片分类上的使用。
下图是一个经典的卷积神经网络模型图,由Hinton和他的学生Alex Krizhevsky在ILSVRC(Imagenet Large Scale Visual Recognition Competition) 2012中提出。 整个网络结构包括五层卷积层和三层全连接层,网络的最前端是输入图片的原始像素点,最后端是图片的分类结果。一个完整的卷积层可能包括一层convolution,一层Rectified Linear Units,一层max-pooling,一层normalization。
图24. 卷积神经网络结构图
对于每一层网络,具体的网络参数配置如下图所示。InputLayer就是输入图片层,每个输入图片都将被缩放成227*227大小,分rgb三个颜色维度输入。Layer1~ Layer5是卷积层,以Layer1为例,卷积滤波器的大小是11*11,卷积步幅为4,本层共有96个卷积滤波器,本层的输出则是96个55*55大小的图片。在Layer1,卷积滤波后,还接有ReLUs操作和max-pooling操作。Layer6~ Layer8是全连接层,相当于在五层卷积层的基础上再加上一个三层的全连接神经网络分类器。以Layer6为例,本层的神经元个数为4096个。Layer8的神经元个数为1000个,相当于训练目标的1000个图片类别。
图25. CNN网络参数配置图
基于Alex Krizhevsky提出的cnn模型,在13年末的时候,我们实现了用于广点通的图片分类和图片检索(可用于广告图片作弊判别),下面是一些示例图。
图片分类示例:
图26. 图片分类示例图
图片检索示例:
图27. 图片检索示例图
图片分类上的最新进展
在ILSVRC 2012中,Alex Krizhevsky基于GPU实现了上述介绍的,这个有60million参数的模型(简称为AlexNet),赢得了第一名。这个工作是开创性的,它引领了接下来ILSVRC的风潮。2013年,Clarifai通过cnn模型可视化技术调整网络,赢得了ILSVRC。2014年,google也加入进来,它通过增加模型的层数(总共22层),让深度更深[48],并且利用multi-scale
data training,取得第一名。baidu最近通过更加“粗暴”的模型[44],在GooLeNet的基础上,又提升了10%,top–5错误率降低至6%以下。具体结果如下图所示。
图28. ImageNet Classification Result
先简单分析一下“GoogLeNet”[48,51]所采用的方法:
大大增加的网络的深度,并且去掉了最顶层的全连接层:因为全连接层(Fully Connected)几乎占据了CNN大概90%的参数,但是同时又可能带来过拟合(overfitting)的效果。模型比以前AlexNet的模型大大缩小,并且减轻了过拟合带来的副作用。Alex模型参数是60M,GoogLeNet只有7M。对于google的模型,目前已有开源的实现,有兴趣请点击。
再分析一下“Deep Image by baidu[44]”所采用的方法:
Hardware/Software Co-design。baidu基于GPU,利用36个服务节点开发了一个专为深度学习运算的supercompter(名叫Minwa,敏娲)。这台supercomputer具备TB级的host memory,超强的数据交换能力,使能训练一个巨大的深层神经网络成为可能。而要训练如此巨大的神经网络,除了硬件强大外,还需要高效的并行计算框架。通常而言,都要从data-parallelism和model-data parallelism两方面考虑。
data-parallelism:训练数据被分成N份。每轮迭代里,各个GPU基于各自的训练数据计算梯度,最后累加所有梯度数据并广播到所有GPU。model-data parallelism:考虑到卷积层参数较少但消耗计算量,而全连接层参数相对比较多。所以卷积层参数以local copy的形式被每个GPU所持有,而全连接层的参数则被划分到各个CPU。每轮迭代里,卷积层计算可以由各个GPU独立完成,全连接层计算需要由所有GPU配合完成,具体方法请参考[46]。Data augmentation。训练一个如此巨大的神经网络(100billion个参数),如果没有充分的训练数据,模型将很大可能陷入过拟合,所以需要采用众多data augmentation方法增加训练数据,例如:剪裁,不同大小,调亮度,饱和度,对比度,偏色等(color casting, vignetting, lens distortion, rotation, flipping, cropping)。举个例子,一个彩色图片,增减某个颜色通道的intensity值,就可以生成多张图片,但这些图片和原图的类目是一致的,相当于增加了训练数据。Multi-scale training:训练不同输入图片尺度下(例如512*512,256*256)的多个模型,最后ensemble多个模型的输出结果。
3.2 Image2text,Image2sentence
上面讲述的图片分类对图片语义的理解比较粗粒度,那么我们会想,是否可以将图片直接转化为一堆词语或者一段文本来描述。转化到文本后,我们积累相对深的文本处理技术就都可以被利用起来。
Image2text
首先介绍一种朴素的基于卷积神经网络的image to text方法。
首先它利用深度卷积神经网络和深度自动编码器提取图片的多层特征,并据此提取图片的visual word,建立倒排索引,产生一种有效而准确的图片搜索方法。再充分利用大量的互联网资源,预先对大量种子图片做语义分析,然后利用相似图片搜索,根据相似种子图片的语义推导出新图片的语义。
其中种子图片,就是可以覆盖所有待研究图片的行业,但较容易分析语义的图片集。这种方法产生了更加丰富而细粒度的语义表征结果。虽说简单,但效果仍然不错,方法的关键在于种子图片。利用比较好的种子图片(例如paipai数据),简单的方法也可以work得不错。下图是该方法的效果图。
图29. 图片语义tag标注示例图
上面的baseline方法,在训练数据优质且充分的情况下,可以取得很不错的图片tag提取效果,而且应用也非常广泛。但上面的方法非常依赖于训练数据,且不善于发现训练数据之外的世界。
另一个直观的想法,是否可以通过word embedding建立image与text的联系[26]。例如,可以先利用CNN训练一个图片分类器。每个类目label可以通过word2vec映射到一个embedding表示。对于一个新图片,先进行分类,然后对top-n类目label所对应的embedding按照权重(这里指这个类目所属的概率)相加,得到这个图片的embedding描述,然后再在word embedding空间里寻找与图片embedding最相关的words。
Image detection
接下来再介绍下image detection。下图是一个image detection的示例,相比于图片分类,提取到信息将更加丰富。
图30. 图片detection示例
目前最先进的detection方法应该是Region-based CNN(简称R-CNN)[75],是由Jeff Donahue和Ross Girshick提出的。R-CNN的具体想法是,将detection分为寻找object和识别object两个过程。在第一步寻找object,可以利用很多region detection,譬如selective
search[76],CPMC,objectness等,利用很多底层特征,譬如图像中的色块,图像中的边界信息。第二步识别object,就可以利用“CNN+SVM”来做分类识别。
图31. Image detection系统框图
给定一张图片,利用selective search方法[76]来产生2000个候选窗口。然后利用CNN进行对每一个候选窗口提取特征(取全连接层的倒数第一层),特征长度为4096。最后用SVM分类器对这些特征进行分类(每一个目标类别一个SVM分类器),SVM的分类器的参数个数为:4096*N,其中N为目标的类别个数,所以比较容易扩展目标类别数。
这里有R-CNN的实现,请点击
Image2sentence
那能否通过深度学习方法,直接根据image产生sentence呢?我们先看一组实际效果,如下图所示(copy from 文献[43])。
图32. image2sentence示例图
关于这个方向,最近一年取得了比较大的突破,工业界(Baidu[77],Google[43],Microsoft[80,81]等)和学术界(Stanford[35],Borkeley[79],UML[19],Toronto[78]等)都发表了一系列论文。
简单归纳一下,对这个问题,主要有两种解决思路:
Pipeline方法。这个思路相对直观一点,先学习到image中visual object对应的word(如上一节image detection所述),再加上language model,就可以生成sentence。这种方法各个模块可以独立调试,相对来说,更灵活一点。如下图所示,这是microsoft的一个工作[81],它分为三步:(1)利用上一节提到的思路detect words;(2)基于language model(RNN or LSTM)产生句子;(3)利用相关性模型对句子打分排序。
图33. “pipeline” image captioning
End-to-end方法,即通过一个模型直接将image转换到sentence。google基于CNN+RNN开发了一个Image Caption Generator[43]。这个工作主要受到了基于RNN的机器翻译[27][42]的启发。在机器翻译中,“encoder” RNN读取源语言的句子,将其变换到一个固定长度的向量表示,然后“decoder” RNN将向量表示作为隐层初始值,产生目标语言的句子。那么一个直观的想法是,能否复用上面的框架,考虑到CNN在图片特征提取方面的成功应用,将encoder
RNN替换成CNN,先利用CNN将图片转换到一个向量表示,再利用RNN将其转换到sentence。可以通过图片分类提前训练好CNN模型,将CNN最后一个隐藏层作为encoder RNN的输入,从而产生句子描述。如下图所示。
图34. “CNN+LSTM” Image Caption Generator
Li-Feifei团队在文献[35]也提到一种image2sentence方法,如下图所示。与google的做法类似,图片的CNN特征作为RNN的输入。
图35. “CNN+RNN”生成图片描述
此方法有开源实现,有兴趣请参考:
3.3 训练深度神经网络的tricks
考虑到图片语义分析的方法大部分都是基于深度学习的,Hinton的学生Ilya Sutskever写了一篇深度学习的综述文章[47],其中提到了一些训练深度神经网络的tricks,整理如下:
保证训练数据的质量使训练数据各维度数值的均值为0,方差为一个比较小的值训练时使用minbatch,但不要设得过大,在合理有效的情况下,越小越好。梯度归一化,将梯度值除于minbatch size。设置一个正常的learning rate,validation无提升后,则将原learning rate除于5继续模型参数随机初始化。如果是深层神经网络,不要设置过小的random weights。如果是在训练RNN or LSTM,对梯度设置一个限值,不能超过15 or 5。注意检查梯度计算的正确性如果是训练LSTM,initialize the biases of the forget gates of the LSTMs to large valuesData augmentation很实用。Dropout在训练时很有效,不过记得测试时关掉Dropout。Ensembling。训练多个神经网络,最后计算它们的预测值的平均值。
4.1 语义分析方法在实际业务中的使用
前面讲述了很多语义分析方法,接下来我们看看如何利用这些方法帮忙我们的实际业务,这里举一个例子,用户广告的语义匹配。
在广点通系统中,用户与广告的关联是通过定向条件来匹配的,譬如某些广告定向到“北京+男性”,那么当“北京+男性”的用户来到时,所有符合定向的广告就将被检索出,再按照“ecpm*quality”排序,将得分最高的展示给用户。但是凭借一些人口属性,用户与广告之间的匹配并不精确,做不到“广告就是想用户所想”,所以用户和广告的语义分析就将派上用场了,可以从这样两方面来说明:
特征提取。基于上面介绍的方法,提取用户和广告的语义特征。
用户语义特征。可以从用户的搜索,购物,点击,阅读记录中发现用户兴趣。考虑到最终的用户描述都是文本,那么文本topic分析,文本分类,文本keyword提取,文本核心term提取都可以运用起来,分析出用户的语义属性,还可以利用矩阵分解和文本分类找到相似用户群。广告语义特征。在广点通里,广告可以从两个维度来描述,一方面是文本,包括广告title和landing page,另一方面是广告展示图片。利用文本和图片的语义分析方法,我们可以提取出广告的topic,类目,keyword,tag描述。语义匹配。提取到相应的语义特征之后,怎么用于改善匹配呢?
用户-广告的语义检索。基于keyword、类目以及topic,对广告建立相应的倒排索引,直接用于广告检索。用户-广告的语义特征。分别提取用户和广告的语义特征,用于计算用户-广告的relevance,pctr,pcvr,达到精确排序。
4.2 Future
对于文本和图片的语义分析,可以看到:最近几年,在某些任务上,基于深度学习的方法逐渐超过了传统方法的效果。但目前为止,对于深度学习的发掘才刚刚开始,比较惊艳的神经网络方法,也只有有限几种,譬如CNN,RNN,RBM等。
上文只是介绍了我们在工作中实践过的几个小点,还有更多方法需要我们去挖掘:
Video。Learn about 3D structure from motion。如文献[19]所示,研究将视频也转换到自然语言。Deep Learning + Structured Prediction,用于syntactic representation。
上文主要从文本、图片这两方面讲述了语义分析的一些方法,并结合个人经验做了一点总结。
原本想写得更全面一些,但写的时候才发现上面所述的只是沧海一粟,后面还有更多语义分析的内容之后再更新。另外为避免看到大篇理论就头痛,文中尽可能不出现复杂的公式和理论推导。如果有兴趣,可以进一步阅读参考文献,获得更深的理解。谢谢。
5 参考文献
Statistical Language Models based on Neural Networks,mikolov博士论文 Grammar as Foreign Language Oriol Vinyals, Lukasz Kaiser, Terry Koo, Slav Petrov, Ilya Sutskever, Geoffrey Hinton, arXiv 2014张家俊. DNN Applications in NLPdistributed_representation_nlpDeep Visual-Semantic Alignments for Generating Image DescriptionsKrizhevsky A, Sutskever I, Hinton G E. ImageNet Classification with Deep Convolutional Neural NetworksEffetive use of word order for text categorization with convolutional neural network,Rie JohnsonLarge-Scale High-Precision Topic Modeling on TwitterA. Krizhevsky. One weird trick for parallelizing convolutional neural networks. arXiv:, 2014Going deeper with convolutions. Christian Szegedy. Google Inc. Long Short-Term Memory Recurrent Neural Network Architectures for Large Scale Acoustic Modelinghttp://www.zhihu.com/question/Bengio, Y., Simard, P., Frasconi, P., “Learning long-term dependencies with gradient descent is difficult” IEEE Transactions on Neural Networks 5 (1994), pp. 157–166L. Yao, D. Mimno, and A. McCallum. Efficient methods for topic model inference on streaming document collections. In KDD, 2009.Yi Wang, Xuemin Zhao, Zhenlong Sun, Hao Yan, Lifeng Wang, Zhihui Jin, Liubin Wang, Yang Gao, Ching Law, and Jia Zeng. Peacock: Learning Long-Tail Topic Features for Industrial Applications. TIST’2015.;The FLDA model for aspect-based opinion mining: addressing the cold start problemJ. Uijlings, K. van de Sande, T. Gevers, and A. Smeulders. Selective search for object recognition. IJCV, 2013.

我要回帖

 

随机推荐