首页 > 最新资讯 > NVIDIA Jetson Nano 2GB 系列文章(59):视觉类的数据增强
NVIDIA Jetson Nano 2GB 系列文章(59):视觉类的数据增强

NVIDIA Jetson Nano 2GB 系列文章(59):视觉类的数据增强

2022-04-17 15:27

#人工智能 #深度学习


“优质数据”是训练出好模型的前提,如同食材对于料理的重要性,是一样的道理。通用类数据集能应付大部分实验用途的需求,但面对很多特定场景时就不是那么管用了,例如在工业上的 PCB 板瑕疵检测、物流分拣功能、农业蔬果采摘、医学肿瘤分享等应用,就需要在实际场景中采集现场数据。

 
但是能够呈现我们所要特征的数据量通常是很有限的,所以显得特别珍贵。虽然我们可以在这些图形上进行非常精密的标注,但碍于数量的限制,在最终训练出来的模型效果还是会大打折扣。
 
数据增强 (augment) 技术能非常有效地解决数据量不足的问题,透过多种图像处理的技巧,例如空间转换、颜色调整、模糊度等方式,将这些珍贵而且有限的图像数据进行极大化的扩充,白话地说就是把一张图像当 10 张用,如果我们手上只有 100 张优质图像,就能扩充到上千张,然后合并到训练用途的数据集中,这样就能解决数据量不足的问题。
 
TAO 启动器提供的 augment 指令,就是负责处理离线图像增强的功能,目前具备以下三类图像处理的方式:
 

空间增强:包括旋转 (Rotate)、翻转 (Flip)、平移 (Translate)、错切- (Shear) 等处理;

颜色增强:包括色调旋转与饱和度 (Hue Rotation and Saturation)、亮度偏移 (Brightnessoffset) 与对比度偏移 (Contrastshift) 等处理;

图像模糊:使用高斯模糊 (blur) 增强

 
下图是一个简单的例子,将左边原始数据透过不同图像处理技巧,就能获得更多的变种图像(中间与右边),然后将增强过的图像与标注,纳入训练用的数据集中。
 
 
图像增强过程中比较复杂的部分,只要牵涉到“空间增强”的处理,例如将图像做 90 度旋转处理或改变图像尺寸等,就得将标注文件中所有对象的标框坐标也跟着做转换,存放到新图像所对应的标注文件中,这是增强过程中最关键的处理。
 
执行这项任务还需要一个配置文件的辅助,将要处理的效果写入配置文件中,然后使用 “ tao augment -a <配置文件> -d<原始数据路径> -o <输出路径>” 指令格式,就能执行数据增强的任务。
 
配置文件里面主要分为以下四个组别:
 

1、空间增强配置:“spatial_config{...}” 进行隔离,包含以下功能与配置

 

rotation_config{...}:配置旋转的角度以及单位(角度或弧度)

flip_config{...}:配置垂直翻转与水平翻转的开关

translation_config{...}:配置x轴与/或y轴的平移数量,以像素为单位

shear_config{...}:配置x轴与/或y轴的错切比例

2、颜色增强配置:“color_config{...}” 进行隔离,包含以下功能与配置内容

hue_saturation_config{...}:配置色调旋转角度与饱和度位移的数量

contrast_config{...}:配置对比度的缩放量与中心点

brightness_config{...}:配置亮度的x轴与/或y轴平移量,以像素为单位

 
3、模糊增强配置:“blur_config{...}” 进行隔离,配置要卷积的内核的大(size)与高斯滤波器的模糊标准差(std)的值
 
4、图像尺度与格式配置:包括以下

output_image_width:输出图像宽度,以像素为单位

output_image_height:输出图像高度,以图像为单位

output_image_channel:输出的图像通道数,可选1或3

image_extension:输出图像格式,有 ".png"、".jpeg"、".jpg" 可选项

 
关于各项参数的详细配置细节,请访问 https://docs.nvidia.com/tao/tao-toolkit里面 CV Applications 下的 “Offline Data Augmentation” 部分。
 
现在就开始执行TAO提供的augment范例,请在Jupyter进入 cv_samples/augment 目录中,里面有 augment.ipynb 脚本以及 specs 目录中有一个 default_spec.txt 配置文件。
 
点击 augment.ipynb 开启执行脚本,按照以下步骤执行:
 
0. 配置环境变量:
脚本中 “0_Set up env variables” 步骤中,第一个执行块就是配置环境变量。最简单的配置就是将 “LOCAL_PROJECT_DIR” 设为目前执行位置。
请执行以下修改:
      os.environ["LOCAL_PROJECT_DIR"] =FIXME
改成   os.environ["LOCAL_PROJECT_DIR"] = os.getcwd()
然后执行这个步骤的三个指令块。
 
1. 安装TAO启动器:这个安装步骤在前面已经执行过,因此这里直接跳过去
 
2. 准备数据集:
因为 augment 功能只支持 KITTI 格式,因此必须准备这种格式的数据集,如果使用其他格式数据集,请先做好格式转换。
 
执行脚本在这里指引大家去 KITTI 官方网站下载数据集,但整个过程相当繁琐,而且从境外下载的网速也个问题,因此请跳过整个 “A. Download the dataset” 所有执行块,以及 “B.Verify downloaded dataset” 前三个执行块。
 
我们在 https://pan.baidu.com/s/1WcRt9ONqsYhLRmL8Rg8_YQ(密码855n)百度网盘上存放了 data_object_image_2.zip与data_object_label_2.zip 两个压缩文件,直接在这里下载到 augment 目录下比较方便。
 
下载完后,请在 Jupyter 开启一个终端,执行以下指令:
 
cd ~/tao/cv_samples/augment  # 请根据您实际路径unzip -u data_object_image_2.zip -d dataunzip -u data_object_label_2.zip -d data
 
然后就会形成以下的目录结构:
 
 

现在执行 “B.Verify downloaded dataset” 的最后两个指令块 “# verify”“ SampleKitti label”,能如下图般正常执行就表示数据环境都已经调试完成。

 
 

3. 执行数据增强的工作:

在执行以下指令块之前,先打开 specs/dafault_spec.txt 文件,里面的设置组在前面已经讲解过,请自行添加或删除设置组的参数,存档后执行下面指令块:

正确执行时,会在最下面出现下图的信息,表示正在根据配置文件的参数,进行数据增强的作业。

可以比对一下原始数据的标签与增强后的同名标签,看看里面的不同之处,并且试着多修改配置文件里面的各项参数,比对一下不同参数所产生的效果。

4. 增强结果的可视化:这个步骤主要是在 Jupyter 上查看增强后的图片,请自行处理。

由于增强后的数据集文件名与原始数据相同,因此最后还需要再做一个“批量改名”的工作,在 Ubuntu 操作系统可以用以下指令来执行:

sudo apt install rename# 在文件名开头添加字符,例如‘a’。注意,图像与标签的文件名必须对应上cd <增强后的图像路径> && rename \'s/^/a/\' *.pngcd <增强后的标签路径> && rename \'s/^/a/\' *.txt

然后将修改过文件名的图像与标签文件,全部移到原始数据集中,这样就能让数据集的内容快速扩充,即便原本的优质数据量只有 100 张的数量,也可以轻松透过这个 TAO 的数据增强工具,迅速扩充到好几倍的数据量,提高模型训练的结果。

相关新闻