数据扩充与数据预处理
Contents
- 1 数据扩充
- 1.1 一般的数据扩充
- 1.2 特殊的数据扩充方式
- 1.2.1 Fancy PCA
- 1.2.2 监督式数据扩充
- 1.3 总结
- 2 数据预处理
- 2.1 参考资料
数据扩充
数据扩充是深度学习模型训练的第一步。在kaggle比赛中,我常用imgaug做图像在线增强以达到数据扩充的目的,实际项目中可能用numpy和imgaug库做离线增强较多。
一般的数据扩充
常用的数据扩充方式有:图像水平翻转(horizontally flipping)和随机扣取(random crops),随机抠取操作一般用较大(约 0.8 至 0.9 倍原图大小)的正方形
在原图的随机位置处抠取图像块(image patch/crop),每张图像随机抠取的次数决定了数据集扩充的倍数。其他的数据扩充方式还有尺度变换(scaling)、旋转(rotating)等,从而增加卷积神经网络对物体尺度和方向上的鲁棒性。
在此基础上,对原图或已变换的图像(或图像块)进行色彩抖动(color jittering)也是一种常用的数据扩充手段。色彩抖动是在 RGB 颜色空间对原有 RGB 色彩分布进行轻微的扰动,也可在 HSV 颜色空间尝试随机改变原有的饱和度和明度(即,改变 S 和 V 通道的值)或对色调进行微调(小范围改变该通道的值)。
在实际项目中,往往会将上述几种方式叠加使用,将图像数据扩充至原有数量的数倍甚至数十倍。
特殊的数据扩充方式
Fancy PCA
Alex-Net
作者提出的数据扩充方法。
监督式数据扩充
国内海康威视研究院提出了一种监督式-利用图像标记信息-的新型数据扩充方式。
区别于“以物体为中心”(object-centric)的图像分类任务,场景分类(scene-centric image classification)往往依靠图像整体所蕴含的高层语义(high-level semantic)进行图像分类。因此随机扣取的简单数据扩增方式,可能会得到与场景无关的扣取图像块结果。
对场景分类问题,可以尝试借助图像标记信息解决上述问题。首先根据原数据训练一个分类的初始模型。而后,利用该模型,对每张图生成对应的特征图(
activation map
)或热力图(heat map
) 。这张特征图可指示图像区域与场景标记间的相关概率。之后,可根据此概率映射回原图选择较强相关的图像区域作为扣取的图像块。上述过程如图 8Xj所示,图 8Xj#展示了对应该场景图像的热力图,按照此热力图指示,我们选取了两个强响应区域作为扣取的扩充图像块。由于一开始利用了图像标记训练了一个初始分类模型,因此这样的过程被称作“监督式数据扩充”。同样的数据扩充方式适用于高层语义图像分类任务,如场景分类和基于图像的节日分类等问题。
总结
- 数据扩充是深度学习模型训练前的必须一步,此操作可扩充训练数据集,增强数据多样性,防止模型过拟合
- 一些简单的数据扩充方法为:图像水平翻转、随即扣取、尺度变换、旋转变换、色彩抖动等
数据预处理
在计算机视觉和数据挖掘领域,着手处理数据前,首先要观察、分析数据并获取一些特性。在上一步的数据扩充后,进行数据预处理是模型训练前必不可少的一步。
机器学习中,对输入特征做归一化
(normalization
)预处理操作时常见的步骤,图像处理中,图像的每个像素信息可以看作是一种特征。
在实践中,对每个个特征减去平均值来中心化数据是非常重要的,这种归一化处理方式被称作“中心式归一化”(mean normalization
)。卷积神经网络中的数据预处理通常是计算训练集图像像素均值,之后在处理训练集、验证集和测试集图像时需要分别减去该均值。
减均值操作的原理是,我们默认自然图像是一类平稳的数据分布(即数据每一个维度的统计都服从相同分布),此时,在每个样本上减去数据的统计平均值(逐样本计算)可以移除共同部分,凸显个体差异
。代码如下:
import cv2
import numpy as np
target_size = (512,512,3)
img = cv.imread('xxx.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # cv2读取通道顺序为BGR,所以要转换成RGB
img = cv2.resize(img, target_size[:2])
# Normalize to zero mean and unit variance
img -= np.mean(img, keepdims=True)
img /= np.std(img, keepdims=True) + K.epsilon()
参考资料
魏秀参-CNN解析神经网络
数据扩充与数据预处理相关推荐
- 数据扩充和数据预处理
参考:<解析深度学习--卷积神经网络原理与视觉实践> 网址:http://lamda.nju.edu.cn/weixs/book/CNN_book.pdf 数据扩充 有效的数据扩 ...
- (论文加源码)基于DEAP脑电数据集的脑电情绪识别(利用生成对抗性网络进行特征提取和数据扩充)
本篇论文发表于2022年的顶级期刊,代码可以完整运行,详情见第八节或者个人主页 论文源码见个人主页:https://download.csdn.net/download/qq_45874683/876 ...
- Keras ImageDataGenerator用于数据扩充/增强的原理及方法
摘要 在这篇博客中,您将学习如何使用Keras的ImageDataGenerator类执行数据扩充/增强.另外将介绍什么是数据增强,数据增强的类型,为什么使用数据增强以及它能做什么/不能做什么. 有三 ...
- Data Augmentation for Deep Learning-based Radio ModulationClassification解读(基于深度学习的无线电调制分类数据扩充)
摘要:深度学习最近被应用于自动分类接收无线电信号的调制类别,而无需人工经验.然而,训练深度学习模型需要大量的数据.训练数据不足会导致严重的过度拟合问题,降低分类精度.为了处理小数据集,数据增强被广泛应 ...
- 第1章-数据探索(1)-数据预处理
简介 在我们了解了业务背景,确定了需求和分析目标以后,我们接下来要面对的,就是数据的探索了.不论数据的形式是直接连到数据库.还是导出的csv.txt.json等格式,当我们把数据加载到我们的分析利器( ...
- ICLR2021 | 利用数据扩充提高蛋白质序列模型的通用性
今天给大家介绍投稿在ICLR2021上的一项工作.由于蛋白质序列上的微小改变可能导致其功能上难以预测的变化,所以蛋白质序列往往无法使用类似于计算机视觉或自然语言处理中所使用的随机数据扩充方法.针对以上 ...
- 对图像数据最主要的预处理: Resize
简 介: 对于图像进行预处理,对于训练视觉深度网络非常重要.可以借助于OpenCV中的相关的函数,或者Paddle中的对于图像预处理的函数完成.本文验证了对于旋转数字进行Resize的方法. 关键词: ...
- 数据可视化与数据预处理
# -*- coding: utf-8 -*- """ Created on Fri Oct 4 20:41:20 2019@author: shenlong " ...
- python学习音频-Python 音频数据扩充的技巧
经典的深度学习网络AlexNet使用数据扩充(Data Augmentation)的方式扩大数据集,取得较好的分类效果.在深度学习的图像领域中,通过平移. 翻转.加噪等方法进行数据扩充.但是,在音频( ...
最新文章
- java maven mvn clean package 打包执行流程
- 《图解密码技术》分组密码(5) 输出反馈OFB模式
- python爬虫表格中清除空格_爬虫清洗:python strip()函数 去空格\n\r\t函数的用法
- 【经验分享】计算机专业如何自己增加项目经验?
- MobaXterm无法退格删除,出现^H
- 设置跳转到新的actvity之后不可返回
- python画猪头_使用Python画小猪佩奇 社会人标配
- 「LibreOJ#516」DP 一般看规律
- 织梦++高级搜索php,织梦模板功能进阶 高级搜索页面advancedsearch.php调用自定义字段...
- 国科大—矩阵分析与应用(李老师)—复习提纲—2.矩阵代数
- oracle没有网卡驱动,联想台式机网卡驱动,手把手教你联想台式机网卡驱动
- JavaScript中的面向对象编程
- mysql 创建连接报错_创建数据库连接报错 · Issue #IRK5Z · 一米一粟信息科技/kooteam - Gitee.com...
- axios小记之基本用法
- 【PPT】绘制表格和多样式圆圈
- iOS即时通讯进阶 - CocoaAsyncSocket源码解析(Connect篇)
- IP广播无法登陆服务器系统,数字IP广播系统操作指南
- Uncaught TypeError: Cannot read property ‘then‘ of undefined
- 程序员课外拓展013:桌面云涉及到的概念
- IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY(TCSVT) 投稿经验