YOLOv5学习笔记1——定位分类

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


1. 对象定位(Object Detection)

1.1 图片分类(Image classification)

了解目标定位之前先熟悉一下图片分类任务:

就是算法遍历图片,判断图片中的对象是不是汽车

image-20240225183133238

1.2 定位分类(Classification with localization)

在这之后,我们需要学习构建神经网络中的另一个问题:定位分类问题

也就是说,我们不仅要用算法判断图片中的对象是不是一辆汽车,还要在图片中标记处它的位置——用红色的边框将汽车圈起来

image-20240225183545194

这就是定位分类问题,“定位”的意思就是判断汽车在图片中的具体位置

1.3 (Detection)

后面我们会遇到,当图片中有多个对象时,应该如何检测它们,并确定出位置

image-20240225183818327

例如,你正在做一个自动驾驶程序,你不仅需要检测其他车辆,也需要检测其他对象比如行人,草木,摩托车等等

1.4 定位分类

这一节我们只需要研究定位分类问题,通常只有一个比较大的对象位于图片的中间位置,我们要对它进行识别和定位

image-20240225183545194

在图片分类问题中,你需要输入一张图片到多层卷积神经网络,它会输出一个特征向量,并反馈给softmax单元来预测图片类型

image-20240225184723814

假设你在正在构建汽车自动驾驶系统,那么对象可能包括一下几类:

  • pedestrian(行人)

  • car(汽车)

  • motorcycle(摩托车)

  • background(背景)——即图片中不含有行人、汽车、摩托车

这四种分类就是softmax函数可能输出的结果

这整个过程就是标准的分类流程(standard classification pipeline)

如果你还想定位图片中的汽车,该怎么做呢?

我们可以让神经网络多输出几个单元——多输出一个边界框

具体来说就是让神经网络再多输出4个数字,标记为bx,by,bh,bw

image-20240225185753141

这四个数字是被检测对象边界框(bounding box)的参数化表示

我们先约定,图片左上角标记为(0,0),右下角标记为(1,1)

image-20240225190032084

想要确定边界框(bounding box)的具体位置,需要指定红色方框的中心点

这个中心点的坐标表示为(bx,by),边界框的高度为bh,宽度为bw

image-20240225190300168

因此,训练集不仅包含神经网络要预测的对象分类标签,还要包含表示边界框的这四个数字

接着采用监督学习算法,输出一个分类标签,还有这四个参数,从而给出被检测对象的边界框位置

在此例中,bx的理想值是0.5,因此他表示汽车位于图片水平方向的中间位置

by大约是0.7,表示汽车位于距离图片底部 1 3 \frac{1}{3} 31的位置

bh大约为0.3,因为红色方框的高度是图片高度的0.3倍

bw大约为0.4,红色方框的宽度是图片宽度的0.4倍

下面,我们将具体讲一下如何为监督学习任务定义目标标签Y

请注意,目前有四个分类

最后,神经网络输出的是这四个数字(bx,by,bh,bw)和一个分类标签(label(1-4))或者是分类标签出现的概率

image-20240225191430849

目标标签Y的定义如下,它是一个向量:
y = [ P c b x b y b h b w C 1 C 2 C 3 ] y = \begin{bmatrix} P_c \\ b_x \\ b_y \\ b_h \\ b_w \\ C_1 \\ C_2 \\ C_3 \end{bmatrix} y= PcbxbybhbwC1C2C3

  1. 第一个组建Pc表示是否含有对象 ,如果对象属于前三类,则Pc=1;如果对象是第四类background,则表示图片中没有要检测的对象,则Pc=0;

我们可以这样理解Pc,它表示被检测对象属于某一类分类的概率。当然,background分类除外。

  1. 如果检测到对象,就输出被检测对象的边界参数bx,by,bh,bw

  2. 并且同时输出C1,C2,C3,表示该对象属于Class1-3中的哪一类,是行人、汽车、还是摩托车

鉴于我们要处理的问题,我们假设图片中只含有一个对象,所以针对这个定位分类问题,图片最多只会出现其中一个对象

下面,我们再来看几个样本

假如这是一张训练集图片,标记为x

image-20240225193936584

y中第一个元素Pc=1,因为图中有一辆车,bx,by,bh,bw会指明边界框的位置,所以训练集需要标签的边界框

图片中是一辆车,所以结果属于分类2,因此C1=0,C2=1,C3=0;C1,C2,C3中最多只有一个等于1
y = [ 1 b x b y b h b w 0 1 0 ] y = \begin{bmatrix} 1 \\ b_x \\ b_y \\ b_h \\ b_w \\ 0 \\ 1 \\ 0 \end{bmatrix} y= 1bxbybhbw010

这是图片中只有一个检测对象的情况,如果图片中没有检测对象呢?

如果训练样本是这样一张图片呢:

image-20240225194855830

在这种情况中,Pc=0,y的其他参数变的毫无意义,这里我全部写成 “?”——表示毫无意义的参数
y = [ 0 ? ? ? ? ? ? ? ] y = \begin{bmatrix} 0 \\ ? \\ ? \\ ? \\ ? \\ ? \\ ? \\ ? \end{bmatrix} y= 0
因为图片中不存在检测对象,所以不用考虑网络输出中边界框的大小,也不需要考虑图片中对象属于C1,C2,C3中的哪一类

针对给定的被标记的训练样本,不论图片中是否含有定位对象,构建输入图片x和分类标签y的具体过程都是如此

这些数据(x,y)最终定义了训练集

1.5 损失函数(loss function)

PS:损失函数又叫误差函数,用于定义单个训练样本预测值与真实值之间的误差

最后,我们介绍一下训练神经网络的损失函数,其参数为(,y),损失函数可表示为L(,y)

如果使用平方差策略,损失函数的计算公式为
L ( y ^ , y ) = ( y 1 ^ − y 1 ) 2 + ( y 2 ^ − y 2 ) 2 + . . . + ( y 8 ^ − y 8 ) 2 L(\hat{y},y) = (\hat{y_1}-y_1)^2+(\hat{y_2}-y_2)^2+...+(\hat{y_8}-y_8)^2 L(y^,y)=(y1^y1)2+(y2^y2)2+...+(y8^y8)2
因为,y含有8个元素(Pc、bx、by、bh、bw、C1、C2、C3),所以损失值等于每个元素相应差值的平方和

如果图片中存在定位对象,也就是y1(Pc)=1,损失值就是不同元素的平方和

如果图片中不存在定位对象,也就是y1(Pc)=0,这时y2-y8的值没有意义,只需要关注神经网络输出y1(Pc)值的准确度,所以损失值就是img

为了了解对象定位的细节,这里用平方差简化了描述过程

实际应用中,你可以不对C1,C2,C3应用损失函数,而只输出其中一个元素值

image-20240225203619306

通常的做法是对边界框坐标应用平方差或类似方法,对Pc应用逻辑回归函数或平方差

以上就是利用神经网络解决对象分类和定位问题的详细过程。结果证明,利用神经网络输出批量实数来识别图片中的对象,是非常有效的算法


总结

以上就是利用神经网络解决对象分类和定位问题的详细过程。结果证明,利用神经网络输出批量实数来识别图片中的对象,是非常有效的算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值