2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 基于深度学习的目标检测:数据增强(一)图像翻转 图像旋转 图像放缩

基于深度学习的目标检测:数据增强(一)图像翻转 图像旋转 图像放缩

时间:2021-06-23 12:25:24

相关推荐

基于深度学习的目标检测:数据增强(一)图像翻转 图像旋转 图像放缩

1.数据增强简介

数据增强(data augmentation),又名数据增广或数据扩充,其本质是通过使用图像处理方法,基于有限的数据产生更多的数据,以此增加训练样本的数量以及多样性,进而提升模型的泛化能力和鲁棒性。

本篇主要涉及到的知识点有:

数据增强的定义:明晰数据增强技术的原理及其在深度学习中的意义。

数据增强的方法:学会使用图像处理方法实现对于数据集中的样本扩充。

图像源扩充方法:学会通过与训练或扩充图像源的方式实现训练数据增强。

说明:数据增强的对象是已有的训练样本,而图像源扩充的对象是新增的训练样本。

2.为什么需要数据增强?

基于深度学习的目标检测,是通过训练模型在当前定义的网络结构下(此时模型中权重参数的种类与个数已确定)对训练集中的训练样本进行目标检测形式(包含定位信息和分类信息)的推断,并通过当前定义的损失函数(Loss Function)计算推断结果与样本标注(Label)的差异,进而通过反向传播(Back Propagation)算法更新模型中的权重参数(Weight Parameter)。

然而,深度学习系统中的神经网络模型需要大量的参数,大部分都是数以百万计甚至更多,使得这些参数可以正确工作则需要大量的数据进行训练。因此,深度学习模型需要足够的数据支撑才能进行更好地训练。训练样本数量越多,模型的拟合程度将越高,模型的泛化能力将越强。所以,尽可能获得更多的高质量训练数据是必要且重要的。

但是,实际中,样本数量不足或者样本质量不够好(即存在标注缺失或标注不准确等问题)是一种常见情况。开发者往往无法获取大量的数据,尤其是较为特殊的卫星遥感图像或飞行器航拍图像。

为了解决这一问题,数据增强技术应运而生,其概述图如图 1所示。

图 1 数据增强技术

注意:数据量过少容易会导致过拟合问题,即模型在训练数据上表现很好,但在测试数据上表现很差。

3.什么是数据增强?

数据增强的本质是人工增大训练集样本的个数,从而获得充足的训练数据,降低模型对某些属性的依赖,提高模型的泛化能力。

在具体应用中,常使用以下三种方式实现数据增强:

(1)制作新数据集:首先收集无标注的原始图片数据(如Google Earth),而后通过数据标注软件(如labelImg等)进行人工手动标注,或者采用专业的数据采集和标注公司提供的数据服务。此种方法成本较高。

(2)扩充已有训练样本:利用图像处理方法对数据进行增强,即利用传统数学形式对对已有的数据进行处理加工(包括翻转、旋转、缩放、剪裁、平移等变换操作)或者调整亮度、对比度、饱和度和色调,创造出更多的数据,达到提升训练样本数量的目的。

(3)图像源增强:基于开源的不同于已有数据集的有标签数据集,使用其优化训练过程中的模型拟合,包括在其上进行模型的预训练或将其中符合要求的有标签样本作为训练样本扩充当前的训练集。

说明:数据增强分为离线增强和在线增强,前者直接对数据集进行处理,得到扩充后的新数据集用以训练,后者在网络模型内部实现对于输入的一个批次训练数据的实时变换和训练,可以使用GPU优化计算。

4.训练样本扩充

扩充训练样本的思路是通过图像处理方法,获取到信息更丰富的基于已有训练样本的变体,为网络模型提供更多特征信息。本节将介绍扩充训练样本的几类常用的扩充训练样本的图像处理方法,包括几何变换(翻转、旋转、缩放)、图像增强(灰度变换、直方图增强、空间域滤波、频率域滤波)、图像加云等。

说明:可用于扩充图像样本的处理方法包括但不仅限于上述提到的几种典型方法。

4.1几何变换

几何变换是最基础、最直接一种扩充样本的方法,包括翻转、旋转、缩放、剪裁、平移等等。我们着重介绍翻转、旋转、缩放这三种方法,这是考虑到遥感图像目标检测任务中的关键问题是目标多角度和目标多尺度问题。

其中,前者是由于遥感图像的成像方式多为俯视视角拍摄,导致同一类型目标(比如飞机、汽车、舰船等)在图像中可能会以多种方向排布出现,后者是由于不同传感器的成像分辨率不同或者统一传感器在不同高度成像,导致同一类型目标在图像中会以不同空间分辨率的形式出现。

因此,在扩充训练样本时,图像翻转操作和图像旋转操作得到的扩充样本可以使得模型在训练过程中学习到具有旋转不变形的特征,而图像缩放操作得到的扩充样本可以更好地使得模型实现多尺度训练。

说明:本节测试代码所使用的标准图像为NWPU VHR-10 V2数据集中的一张遥感图像,测试使用的软件环境为MATLAB Rb。

图像翻转操作可将已有数据集图片数量扩充为原有数量的3倍,示例如下:

测试代码为:

%参数说明:% (1)% I:输入图像;% TFORM:空间变换结构TFORM指定了具体的变换类型;% method:选择插值方法,默认为双线性插值;% --‘bicubic’:双三次插值;% --‘bilinear’:双线性插值;% --‘nearest’:最近邻插值;%(2)%transformtype:指定变换类型,比如‘affine’:为二维或多维仿射变换;%Matrix:为相应的仿射变换矩阵;%读取图像:I=imread('1.jpg');[height,width,dim]=size(I);%水平翻转:tform1=maketform('affine',[-1,0,0;0,1,0;width,0,1]); %定义水平镜像变换矩阵;I1=imtransform(I,tform1,'nearest'); %实现镜像变换;%竖直翻转:tform2=maketform('affine',[1,0,0;0,-1,0;0,height,1]);I2=imtransform(I,tform2,'nearest');%显示结果:subplot(1,3,1); imshow(I);subplot(1,3,2); imshow(I1);subplot(1,3,3); imshow(I2);

输出效果如图2所示:

图 2 图像翻转效果

图像旋转操作可将已有数据集图片数量扩充为原有数量的任意倍数(由设置的旋转角度决定),示例如下(以5种角度旋转,可扩充为原有图片数量的6倍)

测试代码为:

%参数说明:% (1)% I:输入图像;% angle:逆时针旋转的角度(单位为度);% method:选择插值方法,默认为双线性插值;% --‘bicubic’:双三次插值;% --‘bilinear’:双线性插值;% --‘nearest’:最近邻插值;%读取图像:I=imread('1.jpg');%多角度旋转:I1=imrotate(I,45,'nearest','crop'); %逆时针旋转45度I2=imrotate(I,90,'nearest','crop'); %逆时针旋转90度I3=imrotate(I,135,'nearest','crop'); %逆时针旋转135度I4=imrotate(I,180,'nearest','crop'); %逆时针旋转180度I5=imrotate(I,225,'nearest','crop'); %逆时针旋转225度;%显示结果:subplot(2,3,1); imshow(I); subplot(2,3,2); imshow(I1);subplot(2,3,3); imshow(I2); subplot(2,3,3); imshow(I2);subplot(2,3,3); imshow(I2); subplot(2,3,3); imshow(I2);

输出效果如图3所示:

图 3 图像旋转效果

图像缩放操作可将已有数据集图片数量扩充为原有数量的任意倍数(由设置的缩放尺度的比例决定),示例如下(以2种尺度缩放时,可扩充为原有图片数量的3倍)

测试代码为:

%参数说明:% (1)% I:输入图像;% scale:为统一的缩放比例;% method:选择插值方法,默认为双线性插值;% --‘bicubic’:双三次插值;% --‘bilinear’:双线性插值;% --‘nearest’:最近邻插值;%读取图像:I=imread('1.jpg');%多角度旋转:I0=imresize(I,0.7,'nearest'); %缩小到原图的0.7倍;I1=imresize(I,1,'nearest'); %缩小到原图的1倍;I2=imresize(I,1.4,'nearest'); %缩小到原图的1.4倍;%显示结果:figure; imshow(I0); figure; imshow(I1); figure; imshow(I2);

输出效果如图4~图6所示:

图 4 图像放缩0.7倍

图 5 图像放缩1倍

图 6 图像放缩1.4倍

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。