目标定位
使用算法判断图片中是不是目标物体,如果是还要再图片中标出其位置并使用边框标记出来
图片分类的思想可以帮助学习分类定位,而分类定位的思想又可以帮助学习对象检测
a.分类定位问题,通常有一个较大的对象位于图片中间位置。
b.对象检测问题,图片可以含有多个对象,或一张图片中会有多个不同分类的对象。
图片分类对分类定位的帮助:
对于普通的图片分类网络:
分类定位是在图片分类网络上加入了全连接层的输出bx,by,bh,bw和一个分类标签(c1,c2,c3)
定义目标标签y
元素含义:
a. 元素Pc:表示被检测对象某一分类的概率(是否含有关心的要检测的对象)。对于视频提到的列子而言,要检验车、摩托车、行人、景物。但是前三个检测对象是我们关心的,那么如果出现则Pc为1;图片为景物或者其他的则Pc为0。
b. 元素bx,by:为标记边框的中心位置坐标,一般要(bx,by)表示。图片左上角标记为(0,0),右下角标记为(1,1)。
c. 元素bh,bw:为标记边框的长高。bw为长,bh为高。
d. 元素c1,c2,c3.....cn:为分类标签,n对应自己实际的分类标签个数。但是在c1,c2,c3.....cn中只有一个为1。视频中关心的分类标签只有车,摩托车和行人,所以n只到3.
损失函数:
Pc为1时,损失值等于每个元素相应差值的平方
Pc为0时,只需关注神经网络输出Pc的准确性,y1即为Pc
特征点检测
神经网络可以通过输出图片上的特征点(x,y)坐标,来实现对目标特征的识别。
为了构建这样的网络,你需要选定特征点的个数,并生成包含这些特征点的标签训练集图片X和标签Y(这些特征都是人为辛苦标记出来的),然后利用神经网络训练,输出图片中特征点的位置
目标检测
基于滑动窗口构目标检测算法
第一步:创建一个标签训练集,训练集为适当剪切过的图片样本,使检测对象位于中心位置,并且基本占据整张图片
第二步:开始训练神经网络,接下来使用这个网络实现滑动窗口检测
第三步:滑动窗口检测
先选择特定大小的窗口,以固定步幅滑动窗口,遍历截取图像的每一个区域,把截取的小图片输入到上面训练过的卷积网络中,对每个位置按0或1进行分类(判断截取图片中是否存在待检测对象)。选取更大的窗口重复以上操作。
以上的滑动窗口算法,当窗口太大或太小时都不好,计算成本大,效率低。只有使用极细粒度或极小步幅时,才能正确检测出物体。--改进:用卷积实现滑动窗口算法。
1.把全连接层转化为卷积层:
原理:从数学角度来看转换的卷积层与全连接层一样,400个节点中每一个节点都有一个5x5x16维度的过滤器,这些值都是上一层这些5X5X16激活值经过某个任意线性函数的输出结果。
全连接模型:
改为卷积层:把FC全连接层转化为使用16个5x5过滤器实现,之后的FC层使用400个1x1过滤器实现(最后一个1x1过滤器处理如同FC的softmax函数)。
通过卷积实现滑动窗口对象检测算法:
对于单个卷积实现过程:
卷积滑动窗口实现过程:卷积滑动其实可以把窗口看成卷积神经网络的过滤器,滑动的步长即为过滤器的步长。这样我们就不需要把输入图片进行分割了而是把其当成一整张图片输入卷积网络进行计算,其中公共区域可以共享很多计算。
YOLO算法思想
基本的滑动窗口对象检测算法并不能精准描绘边框,所以我们要学习一个能够得到准确边框的算法YOLO(You Only Look Ones)算法。
算法思想:在图片上放置n*n的网格,并将图像分类和定位算法运用到每个网格上面去。
与滑动窗口对象检测算法的区别:
a.窗口滑动由放置网格取代,YOLO算法会对每个网格使用图像分类和图像定位算法,相比滑动窗口会大大的减少了运算量。
b.一个对象可能在多个网格中,YOLO算法会找到该对象的中心点,并把对象分给包含中心的网格。(bh,bw是可以大于网格大小,实践中会使用更精细的网格去分割,所以对象可能会横跨多个网格)
c.显示的输出边界框架,让神经网络输出的框架可以具有任意的宽高比,并且能输出更精确的坐标。
YOLO算法的输出
由于YOLO算法是对每个网格进行运行,在视频给出的例子中输出结果3*3*8
3*3是图片的分割的网格数量
8是输出图片预测和边框位置等信息,其实就等于给出的标签y的具体信息:
网友评论