卷积神经网络课程笔记-实际应用(第三、四周)

所插入的图片仍然来源于吴恩达老师的课件。

第三周 目标检测

1. 对象的分类与定位,在输出层不仅输出类别,还应输出包含物体的边界框(bx,by,bh,bw),从而达到定位的目的。注意网络的输出(例如下图的输出就有是否为目标,边界框的参数,以及是哪类的判断)和损失函数的定义(针对不同的输出元素应用不同的损失,例如可以对pc应用sigmoid,边界应用平方差,分类类别应用绝对值等等)

                                                

 2.特征点的检测:还是利用上文输出边界框的思路,首先标记诸多个特征点,作为标签,同样,输出层输出相应个数的特征点。注意输出层的第一项,仍然为前景与背景的判别标志。 

3. 对象检测:一种思路为基于滑动窗口的目标检测,假设进行车辆检测,以固定窗口(每次遍历完图片,都可改变窗口大小,进行新一次的检测)滑动整个图像,利用训练好的网络判断当前滑动的窗口是否包含检测对象。这里注意训练的样本应是适度剪切过的数据,即汽车基本占据整个图片且位于中心位置。这种方法作为作为传统的计算机视觉内的目标检测方法,存在的劣势显而易见,一是计算成本高且运行慢;二是检测到物体的范围实际上边界框的范围,并不能很好的检测出物体具体的边界范围。

解决第一个问题:上节课提到,利用滑动窗口进行目标检测时,速度又慢且成本又高,其中的一个解决方案便是利用卷积层代替全连接层。

也就是说在网络后半部分,利用卷积层来代替全连接层,为什么能够这么做,因为卷积操作实则也就是对于filter中的元素进行全连接,仔细思考,3*3*3的filter不就是对于其包含的27元素进行加权求和,不就是将1维的全连接扩展为3维的全连接,我只是这样理解的,至于全连接的具体数学意义并没有深究。看第一行的5*5*16利用5*5*400的过滤器得到1*1*400的卷积层,以此代替全连接层(400)。其实,这种手段,真正省去的计算步骤在于前面的卷积层的计算,由此省去了占了较大比例的重复计算,后面的本应是全连接层操作的计算保留,只不过换了一种形式。既保证了结果不变,同时也省去了大量的计算步骤。

具体在滑动窗口检测中,滑动窗口之间很容易有共享的地方,因此如若单个窗口进行输入计算,会进行许多重复的计算,看上面图片中的第2行与第3行,以第3行为例。此时,输入的对象不再是一个窗口,而是整个图像28*28*3,而输出为8*8*4,其中每一个i*j*4(i,j为行列号),就是原有的滑动窗口在原图像上移动的结果。

记得在对象检测中仍然存在着待检测目标边界框不准确的问题。通过上述步骤能够增强滑动窗口的方法的计算效率,但是仍然不能很好的解决探测目标的边界框的问题。YOLO(You only look once)算法便可用来解决这问题。Yolo算法首先将原图像划分为若干个框,以目标的中心点作为判断目标落入哪个框的标志,注意边界框的长度和宽度可能大于1,这个1是相对于图像划分的框的长度与宽度而言。这种做法从检测物体的角度出发来进行训练。

在Yolo算法中,存在着以下几个概念:

(1)交并比(intercection over union)-loU。 评价提取出来的边界框是否好的一个指标。通过计算提取的边界框和实际的边界框的交集和并集之比,显然取值范围0-1,越高越好。一般约定0.5为阈值,大于0.5就认为结果可以接受。当然这个值作为超参数可根据实际情况来设置。

(2)非最大值抑制(No-max Suppression):确保算法对每个对象只检测一次。思路很清晰, 利用交并比,将与最大可能边界框相似的边界框去除。这是为了解决一个物体可能检测出多个边界框的问题。

(3)Anchorbox 解决一个框有多个对象的问题。一个对象不仅分配到一个格网之中,还分配到一个anchorbox之中,因此,设置的标签y的元素个数就扩大为原来的两倍(观看上图的例子,若采用anchorbox方式,标签个数即由8扩大为16)。

4. 候选区域(region proposals)

R-CNN (Region-CNN,带区域的卷积网络):利用图像分割算法,尝试选择一些区域作为候选区域,进行卷积网络的分析。

Fast R-CNN:在R-CNN基础上,利用滑动窗口的进行卷积实现。

Faster R-CNN:在R-CNN基础上,利用卷积神经网络来进行候选区域的选取。 

5. 看完这周的内容,做一个小小的总结:

利用深度学习进行目标检测和定位,最开始的方法是借用滑动窗口的思想,将训练好的网络根据滑动窗口一次又一次的判断,找出判断的物体所在的窗口。不仅慢,而且边界框无法确定。

一个改进是利用卷积的方式,代替滑动窗口,将整个图像作为一个输入单元,这样做省略了大量的计算。

进一步改进,利用Yolo的思路,将图像划分为n*n规则的区域(常用19*19),每个区域的标签不仅包含待检测的样本,更应包含检测样本的外包矩形框。这样不仅是对于图像进行卷积操作,更能够得到较为精准的边界区域。

再一步改进,在此基础上,利用Anchorbox解决一个框中出现多个目标的情况。最后对于提取出来的结果,可能有一些边界框包含的是同一个目标,因此采用非最大抑制的方式,通过交并比的判断原则,舍弃多余的边界框。

第四周 人脸识别与神经风格迁移

第一个应用为人脸识别。

1. 一次学习问题(one shot learning):只能通过一个样本来学习并进行识别。解决此问题的方式是设置一个差异函数d,输入两张图片。输出两张图片的差异值。

2. Siamese 网络:对于输入的两张待比较的图片,输入到同一参数的神经网络,分别输出两个向量,并利用向量范数来比较他们的差异。

其中有两种思路进行训练。

(1)第一种是利用三元组损失函数(Triple Loss),同时关注于三张图片,(anchor,positive,negative)-(A,P,N)。每次训练的输入都为样本,与样本相近的正例子,与样本不相近的反例子。目标是使成本函数最小化,有一个超参数\alpha,可理解为间隔。

 

(2)另一种思路是将人脸识别当做一个二分类问题来解决。注意上下两个网络同样应使用相同的参数。

第二个应用为神经风格迁移。

3. 要理解神经风格迁移,前提是要初步理解神经网络中到底在做什么。理解浅层网络和深层网络在做什么。直观上看,浅层网络检测一些简单的特征,深层网络检测复杂的特征。由浅层逐渐加深向深层过度,也可理解为由像素级别不断向上抽象。深层网络可以理解为浅层网络的组合,因此检测由简单特征所组合得到的复杂特征,也不难理解。有一篇利用可视分析进行卷积网络分析的开山论文。

在神经风格迁移中,有内容图像(C),风格图像(S)和生成图像(G),如何定义损失函数判断生成图像好不好。生成图像G初始化随机生成,进行的是像素级别上的更新。代价函数由两部分组成,前一部分衡量与内容图像的差异,后一部分衡量与风格图像的差异。两个超参数可看做权重。内容代价函数的定义看做是每层激活函数的输出值的差异。而风格代价函数则定义为激活函数的相关系数的差异。

                                               J(G) = \alpha J_{Content}(C,G) + \beta J_{Style}(S,G)

 

对这一门课程做一个小小总结。卷积神经网络的理论,实在是挺庞大的。现在的我只是刚刚踏入,连入门都还算不上。但是我觉得要理解卷积神经网络,首先要理解为什么卷积神经网络在图像中应用广泛,卷积网络的网络节点究竟承担着什么样的任务。从神经网络的角度出发,卷积神经网络中的每层做的也是上一层输入单元的线性组合后来进行非线性映射,而每一层做的也是在不断的提取特征,组合特征。随着网络深度的增加,由低维特征组合到高维特征。在图像上面来看,即是由像素级别的特征不断的组合到范围内部的更高级特征。具体为什么是这样也不清楚,这真是个黑匣子,至少现在我也只能这么理解。我觉得这也是神经网络的基本思想:由基本特征的线性组合加之非线性映射,随着网络的深入,通过不断的线性组合和非线性映射,由原本的简单特征学习到高级的特征。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值