searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

目标检测常用优化技巧

2023-06-27 07:34:06
19
0

目标检测模型的优化相比于分类模型更加复杂、困难。本文将从数据维度及训练策略维度介绍目标检测算法的一些常用优化技巧。

 

数据维度

数据集平衡扩增

干净且均衡的数据,从来都是解决问题最有力的办法。通常数据集中的各个类别的样本呈“长尾”分布,直接用来训练检测器容易导致对样本少的类别出现漏检。这时可以考虑对样本少的类别,进行样本扩增。可以通过以下随机扰乱图片的空间特征的方法来进行数据增强,提高模型的准确率、避免过拟合。

  • 随机几何变换:随机抠图、随机膨胀、随机水平翻转和随机resize。
  • 随机颜色抖动:亮度、色调、饱和度、对比度。

 

Mixup

mixup是图片分类任务中的一个常用的trick, 具体流程如下图所示:

简单来讲就是将两张图片通过不同的比例进行融合,同时图片对应的one-hot编码也以相同的比例相乘,从而构造出新的数据集。 本质上,mixup在成对样本及其标签的凸组合(convex combinations)上训练神经网络,可以规范神经网络,增强训练样本之间的线性表达。 其优点是:

  • 改善了网络模型的泛化能力
  • 减少对错误标签的记忆
  • 增加对抗样本的鲁棒性
  • 稳定训练过程

 

Mosaic

Mosaic是YOLOV4中提出的新方法,适用于目标检测,主要思想是将四张图片进行拼接到一张图上作为训练样本。由于Mosaic用于目标检测,进行拼接时目标框的坐标也要做相应的变化。Mosaic的主要操作如下:

  • 对每一张图进行随机裁剪得到A;crop的目标是选择原图的某一块区域,而不是全图进行后续的拼接;
  • 将A进行resize到输出图大小得到B;目标是统一坐标系尺寸,方便后续拼接;坐标框会进行相应的缩放
  • 将B随机裁剪一块指定大小的区域C;
  • 将C粘贴到输出图相应的位置;此时只需要坐标平移就可以调整坐标框

Mosaic效果图如上图所示,这样做有以下几个优点:

  • 增加了数据的多样性,丰富了图片的背景
  • 增加了目标个数
  • 四张图片拼接在一起变相地提高了batch_size,在进行BN操作时的时候可以更好的统计均值和方差

 

训练策略维度

多尺度训练

多尺度训练对全卷积网络有效,在训练时,每隔一定的 iterations,在一定尺寸范围内,随机选取一种 img_size 进行训练。YOLOv3就采用了多尺度训练的方式进行训练。从{320,352,384,416,448,480,512,544,576,608 }中选择一个尺度进行训练。随机尺度训练是指在模型训练阶段采用随机大小的数据进行训练,比如当前批次或epoch采用320×320大小的输入,但是在下一个批次或epoch则采用416×416。这种做法来自YOLO算法,尺寸一般在固定的几个数值中随机选择,比如{320, 352, 284, 416, 448, 480, 512, 544, 576, 608},相邻数值相差32,表示stride。

多尺度训练具有以下优点:

  • 通过对不同尺度的图像进行训练,在一定程度上提高检测模型对物体大小的鲁棒性。
  • 使用尺度小的图片测试速度快些,但准确度低,用尺度大的图片测试速度慢,但准确度高。

 

Label Smoothing

深度模型训练中一般伴随着过拟合问题,常用的预防过拟合的方法包括l1/l2 正则,dropout等,这些方式作用于网络隐层权重,而label smooth作用于网络输出。分类网络一般采用one-hot编码,图片所属类别编码为1,其余类别位置编码为0,这种方式存在over-confident的问题。

假设我们的分类只有两个,一个是猫一个不是猫,分别用1和0表示。Label Smoothing的工作原理是对原来的[0 1]这种标注做一个改动,假设我们给定Label Smoothing的平滑参数为0.1:[0,1]×(1−0.1)+0.1/2=[0.05,0.95]

可以看到,原来的[0,1]标签成了[ 0.05 , 0.95 ] 了,那么就是说,原来分类准确的时候,p = 1,不准确为p = 0。假设为Label Smoothing的平滑参数为ϵ,现在变成了: 分类准确的时候 p = 1 − 0.5 ∗ ϵ , 分类不准确时 p = 0.5 ∗ ϵ,也就是说对分类准确做了一点惩罚。

 

Warm-up

训练模型常规策略是初始使用较大的学习率,随着训练的逐渐进行学习率衰减(learning rate decay)。而Warm-up则是刚开始使用较小的学习率,然后增大到设定的学习率,最后又随着训练的进行慢慢减小学习率。这个类似我们跑步的速度一样,先提高速度,快到终点又降低速度。由于刚开始训练时,模型的权重(weights)是随机初始化的,谁都不知道落在哪,随意调整风险大,所以这个时候需要"谨慎而缓慢的试探"。

Warm-up的好处是:有助于减缓模型在初始阶段对mini-batch的提前过拟合现象,保持分布的平稳 有助于保持模型深层的稳定性。

 

学习率策略

学习率变化采用cosine函数且增加warm-up,如下图所示,图中(a)是常见的step修改策略和cosine修改策略+warm-up的学习率变化对比图,可以看到cosine在初始和结束阶段的变化都比较缓慢,在中间部分变化相对快一些,整体而言相比step方式变化会更加平稳一些,这种方式有利于训练过程的稳定

 

Synchronized Batch Normalization

跨卡BN层的计算(synchronized batch normalization),因为目标检测算法的单卡batch size一般不能设置得像分类算法那样大,但是较小的batch size对于单卡计算BN层参数而言并不是很有利,因此跨卡BN层相当于基于多卡数据计算BN层参数,这样计算得到的统计结果更加可靠。

 

参考:

https://zhuanlan.zhihu.com/p/115154110?from=singlemessage

https://zhuanlan.zhihu.com/p/516362032

https://blog.csdn.net/jq_98/article/details/123208912

https://blog.csdn.net/u014380165/article/details/88011833

0条评论
作者已关闭评论
StepByStep
3文章数
0粉丝数
StepByStep
3 文章 | 0 粉丝
StepByStep
3文章数
0粉丝数
StepByStep
3 文章 | 0 粉丝
原创

目标检测常用优化技巧

2023-06-27 07:34:06
19
0

目标检测模型的优化相比于分类模型更加复杂、困难。本文将从数据维度及训练策略维度介绍目标检测算法的一些常用优化技巧。

 

数据维度

数据集平衡扩增

干净且均衡的数据,从来都是解决问题最有力的办法。通常数据集中的各个类别的样本呈“长尾”分布,直接用来训练检测器容易导致对样本少的类别出现漏检。这时可以考虑对样本少的类别,进行样本扩增。可以通过以下随机扰乱图片的空间特征的方法来进行数据增强,提高模型的准确率、避免过拟合。

  • 随机几何变换:随机抠图、随机膨胀、随机水平翻转和随机resize。
  • 随机颜色抖动:亮度、色调、饱和度、对比度。

 

Mixup

mixup是图片分类任务中的一个常用的trick, 具体流程如下图所示:

简单来讲就是将两张图片通过不同的比例进行融合,同时图片对应的one-hot编码也以相同的比例相乘,从而构造出新的数据集。 本质上,mixup在成对样本及其标签的凸组合(convex combinations)上训练神经网络,可以规范神经网络,增强训练样本之间的线性表达。 其优点是:

  • 改善了网络模型的泛化能力
  • 减少对错误标签的记忆
  • 增加对抗样本的鲁棒性
  • 稳定训练过程

 

Mosaic

Mosaic是YOLOV4中提出的新方法,适用于目标检测,主要思想是将四张图片进行拼接到一张图上作为训练样本。由于Mosaic用于目标检测,进行拼接时目标框的坐标也要做相应的变化。Mosaic的主要操作如下:

  • 对每一张图进行随机裁剪得到A;crop的目标是选择原图的某一块区域,而不是全图进行后续的拼接;
  • 将A进行resize到输出图大小得到B;目标是统一坐标系尺寸,方便后续拼接;坐标框会进行相应的缩放
  • 将B随机裁剪一块指定大小的区域C;
  • 将C粘贴到输出图相应的位置;此时只需要坐标平移就可以调整坐标框

Mosaic效果图如上图所示,这样做有以下几个优点:

  • 增加了数据的多样性,丰富了图片的背景
  • 增加了目标个数
  • 四张图片拼接在一起变相地提高了batch_size,在进行BN操作时的时候可以更好的统计均值和方差

 

训练策略维度

多尺度训练

多尺度训练对全卷积网络有效,在训练时,每隔一定的 iterations,在一定尺寸范围内,随机选取一种 img_size 进行训练。YOLOv3就采用了多尺度训练的方式进行训练。从{320,352,384,416,448,480,512,544,576,608 }中选择一个尺度进行训练。随机尺度训练是指在模型训练阶段采用随机大小的数据进行训练,比如当前批次或epoch采用320×320大小的输入,但是在下一个批次或epoch则采用416×416。这种做法来自YOLO算法,尺寸一般在固定的几个数值中随机选择,比如{320, 352, 284, 416, 448, 480, 512, 544, 576, 608},相邻数值相差32,表示stride。

多尺度训练具有以下优点:

  • 通过对不同尺度的图像进行训练,在一定程度上提高检测模型对物体大小的鲁棒性。
  • 使用尺度小的图片测试速度快些,但准确度低,用尺度大的图片测试速度慢,但准确度高。

 

Label Smoothing

深度模型训练中一般伴随着过拟合问题,常用的预防过拟合的方法包括l1/l2 正则,dropout等,这些方式作用于网络隐层权重,而label smooth作用于网络输出。分类网络一般采用one-hot编码,图片所属类别编码为1,其余类别位置编码为0,这种方式存在over-confident的问题。

假设我们的分类只有两个,一个是猫一个不是猫,分别用1和0表示。Label Smoothing的工作原理是对原来的[0 1]这种标注做一个改动,假设我们给定Label Smoothing的平滑参数为0.1:[0,1]×(1−0.1)+0.1/2=[0.05,0.95]

可以看到,原来的[0,1]标签成了[ 0.05 , 0.95 ] 了,那么就是说,原来分类准确的时候,p = 1,不准确为p = 0。假设为Label Smoothing的平滑参数为ϵ,现在变成了: 分类准确的时候 p = 1 − 0.5 ∗ ϵ , 分类不准确时 p = 0.5 ∗ ϵ,也就是说对分类准确做了一点惩罚。

 

Warm-up

训练模型常规策略是初始使用较大的学习率,随着训练的逐渐进行学习率衰减(learning rate decay)。而Warm-up则是刚开始使用较小的学习率,然后增大到设定的学习率,最后又随着训练的进行慢慢减小学习率。这个类似我们跑步的速度一样,先提高速度,快到终点又降低速度。由于刚开始训练时,模型的权重(weights)是随机初始化的,谁都不知道落在哪,随意调整风险大,所以这个时候需要"谨慎而缓慢的试探"。

Warm-up的好处是:有助于减缓模型在初始阶段对mini-batch的提前过拟合现象,保持分布的平稳 有助于保持模型深层的稳定性。

 

学习率策略

学习率变化采用cosine函数且增加warm-up,如下图所示,图中(a)是常见的step修改策略和cosine修改策略+warm-up的学习率变化对比图,可以看到cosine在初始和结束阶段的变化都比较缓慢,在中间部分变化相对快一些,整体而言相比step方式变化会更加平稳一些,这种方式有利于训练过程的稳定

 

Synchronized Batch Normalization

跨卡BN层的计算(synchronized batch normalization),因为目标检测算法的单卡batch size一般不能设置得像分类算法那样大,但是较小的batch size对于单卡计算BN层参数而言并不是很有利,因此跨卡BN层相当于基于多卡数据计算BN层参数,这样计算得到的统计结果更加可靠。

 

参考:

https://zhuanlan.zhihu.com/p/115154110?from=singlemessage

https://zhuanlan.zhihu.com/p/516362032

https://blog.csdn.net/jq_98/article/details/123208912

https://blog.csdn.net/u014380165/article/details/88011833

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0