1.数据增强简介

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

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

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

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

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

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

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 R2019b。

图像翻转操作可将已有数据集图片数量扩充为原有数量的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倍

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

  1. 基于深度学习的目标检测综述

    基于深度学习的目标检测算法归类和总结 整体框架 目标检测算法 主要包括:[两阶段]目标检测算法.[多阶段]目标检测算法.[单阶段]目标检测算法 什么是两阶段目标检测算法,与单阶段目标检测有什么区别? ...

  2. 综述 | 基于深度学习的目标检测算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:计算机视觉life 导读:目标检测(Object Det ...

  3. 基于深度学习的目标检测算法综述(一)

    基于深度学习的目标检测算法综述(一) 基于深度学习的目标检测算法综述(二) 基于深度学习的目标检测算法综述(三) 本文内容原创,作者:美图云视觉技术部 检测团队,转载请注明出处 目标检测(Object ...

  4. 基于深度学习的目标检测算法综述(二)

    转自:https://zhuanlan.zhihu.com/p/40020809 基于深度学习的目标检测算法综述(一) 基于深度学习的目标检测算法综述(二) 基于深度学习的目标检测算法综述(三) 本文 ...

  5. 学习笔记之——基于深度学习的目标检测算法

    国庆假期闲来无事~又正好打算入门基于深度学习的视觉检测领域,就利用这个时间来写一份学习的博文~本博文主要是本人的学习笔记与调研报告(不涉及商业用途),博文的部分来自我团队的几位成员的调研报告(由于隐私 ...

  6. 基于深度学习的目标检测综述(单阶段、多阶段、FPN变体、旋转目标检测等)

    随着深度学习的发展,基于深度学习的目标检测方法因其优异的性能已经得到广泛的使用.目前经典的目标检测方法主要包括单阶段(YOLO.SSD.RetinaNet,还有基于关键点的检测方法等)和多阶段方法(F ...

  7. 基于深度学习的目标检测研究综述

    基于深度学习的目标检测研究综述 摘要:深度学习是机器学习的一个研究领域,近年来受到越来越多的关注.最近几年,深度学习在目标检测领域取得了不少突破性的进展,已经运用到具体的目标检测任务上.本文首先详细介 ...

  8. 基于深度学习的目标检测及场景文字检测研究

    基于深度学习的目标检测及场景文字检测研究 转载自:https://blog.csdn.net/u013250416/article/details/79591263 一.目标检测与场景文字检测定义 目 ...

  9. 病虫害模型算法_基于深度学习的目标检测算法综述

    sigai 基于深度学习的目标检测算法综述 导言 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一.由于各类物体有不同的外观,形状,姿态,加上成像 ...

最新文章

  1. 现实世界充满了bug_为啥程序会有bug?
  2. 博士大佬为机器学习总结的人工智能入门指南!
  3. 查看字符集 oracle
  4. 实践自定义UI-ViewGroup
  5. linux内核微妙时,Linux内核模块时间同步函数汇总
  6. gradle web_简单的Gradle Web应用程序
  7. POJ 3608 旋转卡壳
  8. 如何更改服务器上的数据库文件夹,如何设置数据库文件位置
  9. 【OpenCV】OpenCV函数精讲之 -- copyTo()函数及Mask详解(附代码详解)
  10. mysql redis geo_利用Redis的Geo功能实现查找附近的位置
  11. 计算机小键盘的基本知识,电脑入门——第2章_计算机键盘操作基础概述.doc
  12. linux查看内存条pn,内存条,详细教您怎么查看内存条的型号
  13. 数据集介绍 - Matting and Segmentation
  14. RAM的 Parity 与 ECC
  15. SAP BDC的应用
  16. 挑战程序设计竞赛:反转法
  17. Swift上写百度地图记录
  18. java 这么获取农历_用JAVA查询中国农历年
  19. 亚马逊asin关键词排名追踪_善用亚马逊ABA数据,3步就能将关键词排名冲到首页...
  20. 仲辛醇/水体系的界面现象——Lammps与Gromacs计算结果对比

热门文章

  1. Java的对象监视器和Condition监视器概念以及对比
  2. 图算法(二十五):子图匹配(Subgraph Matching)【基本的图查询操作,意在发掘图重要的子结构】【适用场景:社交网络分析、群体发现、异常检测】【在一个给定的大图里找到与给定小图同构的子图】
  3. db2 随机数函数_db2产生随机数
  4. 【S0018】【素材】工笔画免扣PNG素材强悍!黑金系企业展板+招聘海报大集合
  5. java 排水管网 系统_排水管网系统的排水有哪些分类?
  6. 基于Android的驾照(驾校)考试系统的设计与实现
  7. Java中的isEmpty方法、null以及““的区别
  8. android adt安装配置,Android SDK环境变量配置ADT安装
  9. MongoDB 之 Capped Collection
  10. 农民工傻二听说林妹妹出家之后