1.1 简介

深层神经网络一般都需要大量的训练数据才能获得比较理想的结果。在数据量有限的情况下,可以通过数据增强(Data Augmentation)来增加训练样本的多样性, 提高模型鲁棒性,避免过拟合。

在计算机视觉中,典型的数据增强方法有翻转(Flip),旋转(Rotat ),缩放(Scale),随机裁剪或补零(Random Crop or Pad),色彩抖动(Color jittering),加噪声(Noise)

笔者在跟进视频及图像中的人体姿态检测和关键点追踪(Human Pose Estimatiion and Tracking in videos)的项目。因此本文的数据增强仅使用——翻转(Flip),旋转(Rotate ),缩放以及缩放(Scale)

2.1 裁剪(Crop)

image.shape--([3, width, height])一个视频序列中的一帧图片,裁剪前大小不统一
bbox.shape--([4,])人体检测框,用于裁剪
x.shape--([1,13]) 人体13个关键点的所有x坐标值
y.shape--([1,13])人体13个关键点的所有y坐标值 
     def crop(image, bbox, x, y, length):
x, y, bbox = x.astype(np.int), y.astype(np.int), bbox.astype(np.int) x_min, y_min, x_max, y_max = bbox
w, h = x_max - x_min, y_max - y_min # Crop image to bbox
image = image[y_min:y_min + h, x_min:x_min + w, :] # Crop joints and bbox
x -= x_min
y -= y_min
bbox = np.array([0, 0, x_max - x_min, y_max - y_min]) # Scale to desired size
side_length = max(w, h)
f_xy = float(length) / float(side_length)
image, bbox, x, y = Transformer.scale(image, bbox, x, y, f_xy) # Pad
new_w, new_h = image.shape[1], image.shape[0]
cropped = np.zeros((length, length, image.shape[2])) dx = length - new_w
dy = length - new_h
x_min, y_min = int(dx / 2.), int(dy / 2.)
x_max, y_max = x_min + new_w, y_min + new_h cropped[y_min:y_max, x_min:x_max, :] = image
x += x_min
y += y_min x = np.clip(x, x_min, x_max)
y = np.clip(y, y_min, y_max) bbox += np.array([x_min, y_min, x_min, y_min])
return cropped, bbox, x.astype(np.int), y.astype(np.int) 

2.2 缩放(Scale)

image.shape--([3, 256, 256])一个视频序列中的一帧图片,裁剪后输入网络为256*256
bbox.shape--([4,])人体检测框,用于裁剪
x.shape--([1,13]) 人体13个关键点的所有x坐标值
y.shape--([1,13])人体13个关键点的所有y坐标值
f_xy--缩放倍数
     def scale(image, bbox, x, y, f_xy):
(h, w, _) = image.shape
h, w = int(h * f_xy), int(w * f_xy)
image = resize(image, (h, w), preserve_range=True, anti_aliasing=True, mode='constant').astype(np.uint8) x = x * f_xy
y = y * f_xy
bbox = bbox * f_xy x = np.clip(x, 0, w)
y = np.clip(y, 0, h) return image, bbox, x, y

2.3 翻转(fillip)

这里是将图片围绕对称轴进行左右翻转(因为人体是左右对称的,在关键点检测中有助于防止模型过拟合)

     def flip(image, bbox, x, y):
image = np.fliplr(image).copy()
w = image.shape[1]
x_min, y_min, x_max, y_max = bbox
bbox = np.array([w - x_max, y_min, w - x_min, y_max])
x = w - x
x, y = Transformer.swap_joints(x, y)
return image, bbox, x, y

翻转前:

翻转后:

2.4 旋转(rotate)

angle--旋转角度

     def rotate(image, bbox, x, y, angle):
# image - -(256, 256, 3)
# bbox - -(4,)
# x - -[126 129 124 117 107 99 128 107 108 105 137 155 122 99]
# y - -[209 176 136 123 178 225 65 47 46 24 44 64 49 54]
# angle - --8.165648811999333
# center of image [128,128]
o_x, o_y = (np.array(image.shape[:2][::-1]) - 1) / 2.
width,height = image.shape[0],image.shape[1]
x1 = x
y1 = height - y
o_x = o_x
o_y = height - o_y
image = rotate(image, angle, preserve_range=True).astype(np.uint8)
r_x, r_y = o_x, o_y
angle_rad = (np.pi * angle) /180.0
x = r_x + np.cos(angle_rad) * (x1 - o_x) - np.sin(angle_rad) * (y1 - o_y)
y = r_y + np.sin(angle_rad) * (x1 - o_x) + np.cos(angle_rad) * (y1 - o_y)
x = x
y = height - y
bbox[0] = r_x + np.cos(angle_rad) * (bbox[0] - o_x) + np.sin(angle_rad) * (bbox[1] - o_y)
bbox[1] = r_y + -np.sin(angle_rad) * (bbox[0] - o_x) + np.cos(angle_rad) * (bbox[1] - o_y)
bbox[2] = r_x + np.cos(angle_rad) * (bbox[2] - o_x) + np.sin(angle_rad) * (bbox[3] - o_y)
bbox[3] = r_y + -np.sin(angle_rad) * (bbox[2] - o_x) + np.cos(angle_rad) * (bbox[3] - o_y)
return image, bbox, x.astype(np.int), y.astype(np.int)

旋转前:

旋转后:

3 结果(output)

数据增强前的原图:

数据增强后:

图像数据增强 (Data Augmentation in Computer Vision)的更多相关文章

  1. Python数据增强(data augmentation)库--Augmentor 使用介绍

    Augmentor 使用介绍 原图 random_distortion(probability, grid_height, grid_width, magnitude) 最终选择参数为 p.rando ...

  2. 【Tool】Augmentor和imgaug——python图像数据增强库

    Augmentor和imgaug--python图像数据增强库 Tags: ComputerVision Python 介绍两个图像增强库:Augmentor和imgaug,Augmentor使用比较 ...

  3. [DeeplearningAI笔记]卷积神经网络2.9-2.10迁移学习与数据增强

    4.2深度卷积网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.9迁移学习 迁移学习的基础知识已经介绍过,本篇博文将介绍提高的部分. 提高迁移学习的速度 可以将迁移学习模型冻结的部分看 ...

  4. Python库 - Albumentations 图片数据增强库

    Python图像处理库 - Albumentations,可用于深度学习中网络训练时的图片数据增强. Albumentations 图像数据增强库特点: 基于高度优化的 OpenCV 库实现图像快速数 ...

  5. OpenCV中IplImage图像格式与BYTE图像数据的转换

    最近在将Karlsruhe Institute of Technology的Andreas Geiger发表在ACCV2010上的Efficent Large-Scale Stereo Matchin ...

  6. Javascript高级编程学习笔记(93)—— Canvas(10) 模式及图像数据

    模式 模式其实就是重复的图像,用来填充或描边图形 要创建一个新模式,可以调用 createPattern()并传入两个参数 一个HTML img元素 用于表示如何重复的字符串 "repeat ...

  7. keras对图像数据进行增强 | keras data augmentation

    本文首发于个人博客https://kezunlin.me/post/8db507ff/,欢迎阅读最新内容! keras data augmentation Guide code # import th ...

  8. 【48】数据扩充(Data augmentation)

    数据扩充(Data augmentation) 大部分的计算机视觉任务使用很多的数据,所以数据扩充是经常使用的一种技巧来提高计算机视觉系统的表现.我认为计算机视觉是一个相当复杂的工作,你需要输入图像的 ...

  9. Computer Vision 学习 -- 图像存储格式

    本文把自己理解的图像存储格式总结一下. 计算机中的数据,都是二进制的,所以图片也不例外. 这是opencv文档的描述,具体在代码里面,使用矩阵来进行存储. 类似下图是(BGR格式): 图片的最小单位是 ...

随机推荐

  1. [20170904]11Gr2 查询光标为什么不共享脚本.txt

    [20170904]11Gr2 查询光标为什么不共享脚本.txt --//参考链接下面的注解脚本:https://carlos-sierra.net/2017/09/01/poors-man-scri ...

  2. c#事务处理(sqlTransaction)

    事务: /// <summary> /// 删除考勤 /// </summary> /// <param name="dto">Id</p ...

  3. sql server 2008R2无人值守批处理脚本自动化安装

    ▲版权声明:本文为博主原创文章,未经博主允许不得转载. Microsoft SQL Server 2008 R2是一款软件,提供完整的企业级技术与工具,帮助您以最低的总拥有成本获得最有价值的信息.您可 ...

  4. 11LaTeX学习系列之---LaTeX的特殊字符

    目录 目录 前言 (一)源代码 (二)输出效果 目录 本系列是有关LaTeX的学习系列,共计19篇,本章节是第11篇. 前一篇:10LaTeX学习系列之---Latex的文档结构 后一篇:12LaTe ...

  5. js实现Mac触摸板双指事件(上/下/左/右/放大/缩小)

    前言 这几天在修复一个web问题时,需要捕获Mac触摸板双指事件(上.下.左.右.放大.缩小),但发现并没有现成的轮子,还是要自己造. 例如:jquery.mousewheel.js(添加跨浏览器的鼠 ...

  6. 类的反射_reflex

    JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为j ...

  7. CRM项目之stark组件(2)

    那么从今天开始呢,我们就要开始设计属于我们自己的admin组件,起个名字就叫stark吧(当然你愿意叫什么都可以). stark组件之四步走 仿照admin组件实现流程,stark组件要实现四件事情: ...

  8. React学习笔记_01

    使用Facebook的create-react-app快速构建React开发环境 前言: create-react-app:来自Facebook官方的零配置命令行工具 create-react-app ...

  9. Hadoop 基本概念

    一.Hadoop 简介 Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构,它可以使用户在不了解分布式底层细节的情況下开发分布式程序,充分利用集群的威力进行高速运算和存储. 从其定 ...

  10. 2018-2019-2 网络对抗技术 20165318 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165318 Exp4 恶意代码分析 原理与实践说明 实践目标 实践内容概述 基础问题回答 实践过程记录 1.使用schtasks指令监控系统 2.使用sys ...