卷积神经网络&目标检测
一、Inception网络
一般来说,提升网络性能最保险的方法就是增加网络的宽度和深度,这样做同时也会伴随着副作用。首先,越来越深的网络有着巨大的参数量,数据量很少的时候会出现过拟合,并且当网络深度很深的时候,很容易造成梯度消失。Inception网络可以解决这两个问题。
1、Inception网络基本思想
有多个卷积层结构和Pooling结构,利用了padding的原理,让经过这些结构的最终结果大小不变。
多个Inception层组合在一起,就构成了Inception网络,但是这样计算量很大,所以下面使用1*1卷积核来降低计算量。
2、采用1×1卷积降低计算量
**包含11的卷积模块:**参数量为1125632+553264=59392个参数,连接数为((11256+1)32nn+(5532+1)64nn)=59488nn个
**不包含11的卷积模块:**参数量为5525664=409600个,连接数为(55256+1)64nn=409664nn个
3、Inception模块和Inception网络
Inception网络是由上面的Inception模块一环接一环构成。其中有时候还会包含输出端的全连接层,还有中间层引出多个输出,在连接softmax,这样可以减少过拟合。
二、迁移学习
可以从开源网站下载代码和权重,已经有许多训练好的模型可以利用,可以采用冻结前几个层的方法,将后面的层换位自己的隐藏层和softmax输出层。随着数据数据数目增多,可以训练更多的层次。也可以选取权重,作为自己的初始化权重。
三、数据扩充方法
1、镜像对称
2、随机修剪、旋转、局部扭曲
3、色彩转换
四、目标检测
在一张图片中,不仅仅要判断是否有目标物体,而且需要用框框选出。
利用神经网络进行对象定位,即通过输出四个参数值bx、by、bh和bw给出图片中对象的边界框。
概括地说,神经网络可以通过输出图片上特征点的(x,y)坐标来实现对目标特征的识别
1、特征点检测
构建一个人脸识别应用,希望算法可以给出眼角的具体位置,眼角坐标为(x,y),可以让神经网络的最后一层多输出两个数字 x和y,作为眼角的坐标值.
2、通过卷积网络进行对象检测
基于滑动窗口的目标检测算法
1、创建一个标签训练集,对于训练集的期望,一开始可以使用适当剪切的图片,让目标物体尽可能充满整个图片。
2、训练卷积网络。
3、可以用其来实现滑动窗口目标检测
具体步骤:
(1)选定一个特定大小的窗口,如下图。判断红色方框内是否有汽车。
(2)移动这个窗口,再次输入给卷积网络,输入给卷积网络的只有红色方框内的区域。重复操作。每个窗口位置按0或1进行分类。
缺点:计算成本过大,窗口一个一个进入卷积网络进行处理,计算数量巨大。
3、如何将全连接层转化为卷积层
全连接层:
卷积层:(优点:提高了算法的效率,缺点:边界框的位置可能不够准确)
可以不用连续的卷积操作来识别图片中的汽车,例如可以用大小为28*28的整张图片进行卷积操作,一次得到所有的预测值。
4、Yolo算法初步学习
判断对象是否在这个格子里面,是观察对象中点,将对象分配到中点所在的格子内。
优点:神经网络可以输出精确的边界框 ,不会受滑动框的步长限制。并且是卷积实现,没有将每个格子都跑一边程序。可以达到实时识别。
限制:每个格子的对象最多有一个
参数表示:
bx,by 目标对象相对于本格子左上角的坐标,[0,1]
bh,bw 红色框的长宽,可能>1
5、交并比(loU)——评价对象定位算法
loU(交并比)函数:
计算两个边界框交集和并集之比
评价标准:
一般情况,IoU >= 0.5 (人为规定)检测正确,反之错误。
6、非最大值抑制
算法可能对同一个对象作出多次检测,所以算法不是对某个对象检测出一次,而是检测出多次,非最大值抑制可以确保算法对于每个对象只检测一次
选取最高IoU值的矩阵,然后去掉其他IoU值较高(大于事先规定的IoU的界值)的矩阵
多个对象就要独立进行多次非最大值一直
7、Anchor Boxes
前面每个格子只能检测出一个对象,下面采用AnchorBox来处理一个格子多个对象的情况。
8、YOLO算法
非最大值抑制:
如果采用两个Anchor box 那么对于每一个都会有两个预测的边界框。其中一个P很低;下面抛弃概率低的预测,对于每个对象类别都要单独运行非最大值抑制。最终可以得到结果。
9、R-CNN算法 带区域的卷积网络
这个算法尝试选出一些区域,在这些区域上运行卷积网络分类器是有意义的,所以不再针对每一个滑动窗口跑检测算法,只是选择少数窗口上运行卷积网络分类器。
选择方法:
运行图像分割算法,在存在色块的地方运行卷积网络分类器
缺点:速度很慢