神经网络与深度学习_哈工大课堂笔记3

目标检测问题

目标检测是在给定的图片中精确找到物体所在位置,并标注出物体的类别。物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,并且物体还可以是多个类别。

最常见的可视化结果就是,“锚框”,标注类别,如下图

数据集扩充

大型数据集是成功应用深度神经网络的先决条件。在已有数据集不够大时,可以做两种处理:图像增广、 微调。

图像增广是在对训练图像进行一系列的随机变化之后,生成相似但不同的训练样本,从而扩大了训练集的规模。

此外,图像增广可以减少模型对某些属性的依赖,从而提高模型的泛化能力。 例如,我们可以以不同的方式裁剪图像,使感兴趣的对象出现在不同的位置,减少模型对于对象出现位置的依赖。 我们还可以调整亮度、颜色等因素来降低模型对颜色的敏感度。 

常用的增广方式有:左右上下翻转图像;裁剪图像;改变图像颜色的四个方面即亮度、对比度、饱和度和色调。

微调是利用在学术界开源的常用数据集先学习网络参数,将此学习结果作为参数“初始值”,再利用我们的目标数据集去学习“修改”网络参数。

例如,我们想识别图片中不同类型的椅子,一种可能的方法是首先识别100把普通椅子,为每把椅子拍摄1000张不同角度的图像,然后在收集的图像数据集上训练一个分类模型。 尽管这个椅子数据集可能大于Fashion-MNIST数据集,但实例数量仍然不到ImageNet中的十分之一(ImageNet,它有超过1000万的图像和1000类的物体)。我们先用尽管ImageNet数据集进行学习,再用我们自己的椅子图像数据集学习。可以这样做的原因是:ImageNet数据集中的大多数图像与椅子无关,但在此数据集上训练的模型可能会提取更通用的图像特征,这有助于识别边缘、纹理、形状和对象组合。 这些类似的特征也可能有效地识别椅子。

这里要注意几点:

  • 除输出层外,目标模型从源模型中复制所有模型设计及其参数,并根据目标数据集对这些参数进行微调。但是,目标模型的输出层需要从头开始训练。

  • 通常,微调参数使用较小的学习率,而从头开始训练输出层可以使用更大的学习率。

算法评估

这里有两组名词:{TP,FP,FN,TN},{准确率(Precision),回召率(Recall)},下面通过一个例子来帮助理解

如果现在的任务是识别出图中的飞机,则

TP:把飞机图片作为识别输出,即此识别行为是正确的

FP:把大雁图片作为识别输出,即此识别行为是错误的

TN:没有把大雁图片作为识别输出,即此“不识别”行为是正确的

FN:没有把飞机图片作为识别输出,即此“不识别”行为是错误的

而准确率、回召率的计算公式如下:

P = 𝑇𝑃/(𝑇𝑃+𝐹𝑃)

R = 𝑇𝑃/(𝑇𝑃+𝐹𝑁)

YOLO算法系列之检测头(head)

YOLO v0

YOLO的检测器输出是什么?bb(Bounding Box)框

本质上是一个数据向量,表述bb在图片中的位置以及bb的长宽,在不同版本的YOLO中输出中“框的部分”可以如下:

x y w h c         

框的左上角点的坐标x,y,框的大小w,h,置信度c

由于输出向量中“框的部分”不再是one-hot vector,每一维都是一个具体的数字,所以可以粗略地说YOLO把图像分类问题转化成了回归问题

YOLO的基础思想就很好理解了,输入一幅图片,输出一个“框”的信息加上置信度

YOLO v1

很显然,YOLOv0只能输出一个框,那如果图片中含有多个待被检测的对象,即输出应该包含多个框的信息应该怎么办?

图1 YOLOv1多框输出

直接将输入图片分割成多个区域(grid),如图1,分割成4x4个区域,让每个区域输出一个“框”,此时输出变成3维张量,即YOLOv1里的每维变量都对应一张二维“图表”数据

此时,注意一下c置信度的标签:

看图1中葫芦娃的大脸,它跨了4个区域,此时数据集中的标签这样设置--他脸的中心落在哪个grid中,此grid对应的c值就设置为1,它跨越的其他区域中设置为0(如果没有其余待检测目标的话)

那么,如果应该输出多种类别的物体对应的框,且每种类别可能在图中不止出现一次,怎么办呢?

图2 YOLOv1多类别输出

答:输出时增加每个框的类别信息即可。如图2,红色的部分即对应 one-hot 向量,用来指出每个区域输出的框是哪个类别的,由于图2中例子只输出2类,所以红色部分只有2张。

再者,如果除了类别标签和出现次数都有多个,每一类物体它对应的尺度大小不同,怎么办呢?

比如要同时检测葫芦娃的脸和葫芦娃头上的葫芦,两类物体的尺度大小差距很大,如果用同一组主干网络去预测,会影响精确度。

图3 YOLOv1多大小输出

答:使用另一组“xywhc”去存储不同大小的物体的结果。如图3,有2组蓝黄部分,一组是存储葫芦的结果,另一组是存储脸的结果。

这里再看一下 loss function,由于是“回归”问题,所以主题框架采用平方误差。细看 loss function时,可以从关注了哪些输出量,以及求和符号的范围。这里给出v1的loss function,而不具体分析

这时又有问题了,训练得到的输出结果中每个区域的c值都不为0,这意味着你将输出16个框,但显然在图1中,本应该输出7个框(因为只有7个葫芦娃的脸),如何对16个框的初步结果做“筛选”呢?

采用NMS(非极大值抑制

上述算法流程中的重合度loU计算方式如下图,即两个边界框相交面积与相并面积之比

此处,我想指出,NMS是在网络输出结果后进行的处理。

未能解决的问题

1.一个区域出现多个目标,比如第三行第三列的grid中既有水娃又有隐身娃,可是此处的标签只能为1或者0,取1后只表示有对象,但不能区分有几个

2.两个待识别物体相距很近,将只能识别出一个。这是因为,在NMS处理过程中,置信度高的框附近的框将被抛弃抑制掉,只留下置信度高的一个框。

YOLO v2

v1预测的框并不准确,考虑到v1输出量是框的直接中心坐标、宽和高,考虑到这些量的可取范围都比较大,可以将其变换一下,变成稍微小一点的值,来增加准确度,这涉及到对xywh的处理和c的计算。此外,v2还对 loss function 进行细节进化。

xywh的处理

先使用偏移量去表示框的信息

偏移量 = 目标位置-参照物位置

在YOLO v2的输出中,是“位置采用基于grid的偏移量和大小采用基于anchor的偏移量”,举例如下:

“位置采用基于grid的偏移量”

此时的参考grid的值是(149,149),中心点的值是(220,190),所以与位置有关的量x=220-149y=190-149

再将数据归一化,x=(220-149)/149=0.48y=(190-149)/149=0.28

“大小采用基于anchor的偏移量”

此时的参考anchor选为448x448整幅图区域,则归一化后有关大小的量w=224/448h=143/448

置信度c的计算

loss function 进化

观看第2,3行,可发现前12800步我们计算这个损失,后面不计算了。

这意味着,前12800步我们会优化预测的(x,y,w,h)与anchor的(x,y,w,h)的距离+预测的(x,y,w,h)与GT的(x,y,w,h)的距离,12800步之后就只优化预测的(x,y,w,h)与GT的(x,y,w,h)的距离,为啥?因为这时的预测结果已经较为准确了,anchor已经满足我了我们了,而在⼀开始预测不准的时候,用上anchor可以加速训练。

YOLO v3

针对尺度大小不同的物体,v3不仅仅是增加其它组“xywhc”去存储,它干脆修改了图片划分产生的区域的大小,如下图,32倍下采样意味着图被划分成13x13个区域,16倍下采样意味着图被划分成26x26个区域。这样做是因为“专⼈专事”,即32倍下采样每个点感受野更大,所以去预测大目标,8倍下采样每个点感受野最小,所以去预测小目标。

YOLO算法系列之骨干网络(backbone)

可以发现,YOLO⼀代比⼀代检测头更加复杂,这是为什么呢?答案是:因为它们的特征提取网络更强大了,能够支撑起检测头做更加复杂的操作。这里因作者学术水平一般,只总结了YOLO v3的部分内容。

本小节图片均摘抄于哈尔滨工业大学屈桢深老师的ppt。

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值