百度飞桨PaddlePaddle-21天零基础实践深度学习-目标检测

概念

边界框

<1> x y x y xyxy xyxy,即 ( x 1 , y 1 , x 2 , y 2 ) (x_1, y_1, x_2, y_2) (x1,y1,x2,y2)。其中 ( x 1 , y 1 ) (x_1, y_1) (x1,y1)是矩形框左上角的坐标, ( x 2 , y 2 ) (x_2, y_2) (x2,y2)是矩形框右下角的坐标。

<2> x y w h xywh xywh,即 ( x , y , w , h ) (x, y, w, h) (x,y,w,h),其中 ( x , y ) (x,y) (x,y)是矩形框中心点的坐标, w w w是矩形框的宽度, h h h是矩形框的高度。

训练数据集的标签里会给出目标物体真实边界框所对应的 ( x 1 , y 1 , x 2 , y 2 ) (x_1, y_1, x_2, y_2) (x1,y1,x2,y2),被称为真实框

模型会对目标物体可能出现的位置进行预测,由模型预测出的边界框则称为预测框

锚框

锚框——假象框——候选区域
先设定好锚框的大小和形状,再以图像上某一个点为中心画出矩形框。
锚框 微调 变成预测框

在训练过程中,模型通过学习不断的调整参数,最终能学会如何判别出锚框所代表的候选区域是否包含物体,如果包含物体的话,物体属于哪个类别,以及物体边界框相对于锚框位置需要调整的幅度。

交并比(衡量指标)

I o U = A ⋂ B A ⋃ B IoU=\frac{A\bigcap B}{A\bigcup{B}} IoU=ABAB

数据读取和预处理

批量数据读取与加速——多线程读取数据

预处理主要作用是扩大训练数据集,拥有更多的图像特征,抑制过拟合,提升模型的泛化能力。

方法:
随机改变亮暗、对比度、饱和度和颜色等 随机填充 随机裁剪 随机缩放 随机翻转 随机打乱真实框排列顺序 Mixup…

模型YOLOv3

需要先产生候选区域,再对候选区域做分类和位置坐标的预测,这类算法被称为两阶段目标检测算法

YOLO-V3使用单个网络结构,在产生候选区域的同时即可预测出物体类别和位置,使得YOLO-V3算法具有更快的速度,能到达实时响应的水平。

YOLO-V3基本思想

<1> 产生候选区域——生成锚框——生成预测框——对候选区域标注

<2> 卷积神经网络提取特征——根据输出特征图计算预测框位置和类别——建立输出特征图与预测框之间的关联

<3> 建立损失函数
在这里插入图片描述

x y w h xywh xywh格式:

左上角的位置坐标 ( c x , c y ) (c_{x},c_{y}) (cx,cy),预测框的中心坐标:
b x = c x + σ ( t x ) b_{x}=c_{x}+\sigma (t_{x}) bx=cx+σ(tx) b y = c y + σ ( t y ) b_{y}=c_{y}+\sigma (t_{y}) by=cy+σ(ty)
σ ( x ) \sigma(x) σ(x)即Sigmoid函数。

锚框的大小在模型中可以当作是超参数。
锚框尺寸 ( p h , p w ) (p_{h},p_{w}) ph,pw,生成预测框的大小:
b h = p h e t h b_{h}=p_{h}e^{t_{h}} bh=pheth b w = p w e t w b_{w}=p_{w}e^{t_{w}} bw=pwetw

预测框能够跟真实框重合——求解 t t t的值

将预测框坐标中的 b x , b y , b h , b w b_{x},b_{y},b_{h},b_{w} bx,by,bh,bw 设置为真实框的位置,即可求解出 t t t的数值。

对候选区域进行标注

  1. 锚框是否包含物体,这可以看成是一个二分类问题,使用标签objectness来表示。当锚框包含了物体时,objectness=1,表示预测框属于正类;当锚框不包含物体时,设置objectness=0,表示锚框属于负类。

  2. 如果锚框包含了物体,那么它对应的预测框的中心位置和大小应该是?, t x , t y , t w , t h t_{x}, t_{y}, t_{w}, t_{h} tx,ty,tw,th应该是?,使用location标签。

3.如果锚框包含了物体,那么具体类别是?,这里使用变量label来表示其所属类别的标签。
在这里插入图片描述

卷积神经网络提取特征

YOLO-V3算法使用的骨干网络是Darknet53。在检测任务中,保留从输入到C0部分的网络结构,作为检测模型的基础网络结构,也称为骨干网络。YOLO-V3模型会在骨干网络的基础上,再添加检测相关的网络模块。
在这里插入图片描述

根据输出特征图计算预测框位置和类别

  1. 预测框是否包含物体。 o b j e c t n e s s = 1 objectness=1 objectness=1的概率是?,可以用网络输出一个实数 x x x,可以用 S i g m o i d ( x ) Sigmoid(x) Sigmoid(x)表示objectness为正的概率 P o b j P_{obj} Pobj

  2. 预测物体位置和形状。物体位置和形状 t x , t y , t w , t h t_{x}, t_{y}, t_{w}, t_{h} tx,ty,tw,th, 可以用网络输出4个实数来表示 t x , t y , t w , t h t_{x}, t_{y}, t_{w}, t_{h} tx,ty,tw,th

  3. 预测物体类别。预测图像中物体的具体类别。总的类别数为C,需要预测物体属于每个类别的概率 ( P 1 , P 2 , . . . , P C ) (P_{1}, P_{2}, ..., P_{C}) (P1,P2,...,PC),可以用网络输出C个实数 ( x 1 , x 2 , . . . , x C ) (x_{1}, x_{2}, ..., x_{C}) (x1,x2,...,xC),对每个实数分别求Sigmoid函数,让 P i = S i g m o i d ( x i ) P_{i}=Sigmoid(x_{i}) Pi=Sigmoid(xi),则可以表示出物体属于每个类别的概率。

建立输出特征图与预测框之间的关联

i i i行第 j j j列的小方块区域跟特征图上的像素点 ( i , j ) (i,j) (i,j)对应起来,解决了空间位置的对应关系。

对于一个预测框,网络需要输出 ( 5 + C ) (5+C) (5+C)个实数来表征它是否包含物体、位置和形状尺寸以及属于每个类别的概率。

每个小方块区域产生K个预测框,每个预测框需要 ( 5 + C ) (5 + C) (5+C)个实数预测值,则每个像素点相对应的要有 K ( 5 + C ) K(5+C) K(5+C)个实数。

对特征图进行多次卷积,并将最终的输出通道数设置为 K ( 5 + C ) K(5+C) K(5+C),即可将生成的特征图与每个预测框所需要的预测值巧妙的对应起来。

损失函数

对于每个预测框,YOLO-V3模型会建立三种类型的损失函数。

表征是否包含目标物体的损失函数,通过pred_objectness和label_objectness计算

表征物体位置的损失函数,通过pred_location和label_location计算

表征物体类别的损失函数,通过pred_classification和label_classification计算

多尺度检测

将高层级的特征图尺寸放大之后跟低层级的特征图进行融合,得到的新特征图既能包含丰富的语义信息,又具有较多的像素点,能够描述更加精细的结构。

开启端到端训练

将三个层级的特征图与对应锚框之间的标签关联起来,并建立损失函数,总的损失函数等于三个层级的损失函数相加。通过极小化损失函数,可以开启端到端的训练过程。
在这里插入图片描述

预测

预测过程可以分为两步:

1.通过网络输出计算出预测框位置和所属类别的得分。
2.使用非极大值抑制来消除重叠较大的预测框。

模型效果及可视化

1.创建数据读取器以读取单张图片的数据

2.定义绘制预测框的画图函数

3.读取指定的图片,输入网络并计算出预测框和得分,然后使用多分类非极大值抑制消除冗余的框。将最终结果可视化。

优化

防止梯度消失和梯度爆炸

更换激活函数
ResNet block
batch normalization
梯度截断 设置阈值
预训练+微调

防止过拟合

数据增强
提前停止
权重正则化 L1 L2…
dropout

参数调优

学习率
训练轮数
优化函数
在线难例挖掘

后处理

模型融合
测试结果融合
根据实际任务改进

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值