
# 创建ModelArts数据增强任务
#### 前提条件
- 数据已准备完成：已经创建数据集或者已经将数据上传至OBS。
- 确保您使用的OBS与ModelArts在同一区域。
 
#### 创建数据处理任务
1. 登录[ModelArts控制台](https://console.huaweicloud.com/modelarts)，在左侧的导航栏中选择"数据准备\>数据处理"，进入"数据处理"页面。
2. 在"数据处理"页面，单击"创建"进入"创建数据处理"页面。
3. 在创建数据处理页面，填写相关算法参数。
   1. 填写基本信息。基本信息包括"名称"、"版本"和"描述"。其中"版本"信息由系统自动生成，按"V0001"、"V0002"规则命名，用户无法修改。 您可以根据实际情况填写"名称"和"描述"信息。
      
   
   2. 设置场景类别。场景类别当前支持"图像分类"和"物体检测"。
   
   3. 设置数据处理类型为"数据增强"，填写相应算子的设置参数，算子的详细参数参见[数据扩增算子说明]、[数据生成算子（StyleGan算子）]和[数据域迁移算子（CycleGan算子）]。
   
   4. 设置输入与输出。需根据实际数据情况选择"数据集"或"OBS目录"。设置为"数据集"时，需填写"数据集名称"和"数据集版本"；设置为"OBS目录"时，需填写正确的OBS路径。
      图1输入输出设置-数据集   
      ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002024387473.png "点击放大")
      图2输入输出设置-OBS目录   
      ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002024267965.png "点击放大") 
   
   5. 确认参数填写无误后，单击"创建"，完成数据处理任务的创建。
    
 
 #### 数据扩增算子说明
数据扩增主要用于训练数据集不足或需要仿真的场景，能通过对已标注的数据集做变换操作来增加训练图片的数量，同时会生成相应的标签。在深度学习领域，增强有重要的意义，能提升模型的泛化能力，增加抗扰动的能力。数据扩增过程不会改动原始数据，扩增后的图片或xml文件保存在指定的输出路径下。
ModelArts提供以下数据扩增算子：
表1数据扩增算子介绍 
| 算子              | 算子说明                                           | 高级                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|
| AddNoise        | 添加噪声，模拟常见采集设备在采集图片过程中可能会产生的噪声。                 | - noise_type：添加噪声的分布类型，Gauss为高斯噪声，Laplace为拉普拉斯噪声，Poisson是泊松噪声，Impulse是脉冲噪声，SaltAndPepper为椒盐噪声。默认值为Gauss  - loc：噪声分布的均值，仅在Gauss和Laplace生效。默认值为0    - scale：噪声分布的标准差，仅在Gauss和Laplace生效。默认值为1  - lam：泊松分布的lambda系数，仅在Poisson有效。默认值为2    - p：对于每个像素点，出现脉冲噪声或椒盐噪声的概率，仅在Impulse和SaltAndPepper有效。默认值为0.01  - do_validation：数据扩增前是否进行数据校验。默认值为True。   |
| Blur            | 模糊，使用滤波器对图像进行滤波操作，有时用于模拟成像设备的成像。               | - blur_type：可选Gauss和Average两种模式，分别为高斯和均值滤波。默认值为Gauss  - do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Crop            | 图片裁剪，随机裁剪图片的一部分作为新的图片。                         | - crop_percent_min：各边裁剪占比的随机取值范围的最小值。默认值为0.0  - crop_percent_max：各边裁剪占比的随机取值范围的最大值。默认值为0.2  - do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| CutOut          | 随机擦除，在深度学习中常用的方法，用于模拟物体被障碍物遮挡。                 | do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Flip            | 翻转，沿图片水平轴或竖直轴做翻转，是非常常见的增强方法。                   | - lr_ud：选择翻转的方向，lr为水平翻转，ud为竖直翻转。默认值为lr  - flip_p：做翻转操作的概率。默认值为1。    - do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Grayscale       | 图片灰度化，将三通道的彩色图像转换到三通道的灰度图像。                    | do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| HistogramEqual  | 直方图均衡化，多半是使用于让图片的视觉效果更加好，在某些场景下会使用。            | do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| LightArithmetic | 亮度增强 ，对亮度空间做线性增强操作。                            | do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| LightContrast   | 亮度对比度增强，使用一定的非线性函数改变亮度空间的亮度值。                  | func：默认值为gamma - gamma为常见方法伽玛矫正，公式为255\*((v/255)\*\*gamma)')  - sigmoid函数为S型曲线，公式为255\*1/(1+exp(gain\*(cutoff-I_ij/255)))')  - log为对数函数，公式为255\*gain\*log2(1+v/255)  - linear为线性函数，公式为127 + alpha\*(v-127)')   do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                              |
| MotionBlur      | 运动模糊，模拟物体运动时产生的残影现象。                           | do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Padding         | 图片填充，在边缘添加黑色的边。                                | - px_top：图像顶端增加的像素行数。默认值为1  - px_right：图像右侧增加的像素行数。默认值为1  - px_left：图像左侧增加的像素行数。默认值为1  - px_bottom：图像底侧增加的像素行数。默认值为1  - do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                               |
| Resize          | 调整图片大小。                                        | - height：变换后的图片高度。默认值224  - width：变换后的图片宽度。默认值224  - do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Rotate          | 旋转，将图像围绕中心点旋转的操作，操作完成之后保持图片原本的形状不变，不足的部分用黑色填充。 | - angle_min：旋转角度随机取值范围的最小值，每张图片会从范围中随机取值作为自己的参数。默认值为90°  - angle_max：旋转角度随机取值范围的最大值，每张图片会从范围中随机取值作为自己的参数。默认值为-90°  - do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| Saturation      | 色度饱和度增强，对图片的HSV中的H和S空间做线性的变化，改变图片的色度和饱和度。      | do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Scale           | 图片缩放，将图片的长或宽随机缩放到一定倍数。                         | - scaleXY：缩放方向，X为水平，Y为垂直。默认值为X  - scale_min：缩放比例随机取值范围的最小值。默认为0.5  - scale_max：缩放比例随机取值范围的最大值。默认值为1.5  - do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Sharpen         | 图像锐化，用于将边缘清晰化，让物体边缘更加明显。                       | do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Shear           | 图片错切，一般用于图片的几何变换，通过线性函数将像素点进行映射。               | - shearXY：错切方向，X为水平，Y为竖直。默认值为X  - shear_min：错切角度随机取值范围的最小值。默认值为-30  - shear_max：错切角度随机取值范围的最大值。默认值为30  - do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Translate       | 图片平移，将图片整体向X轴或Y轴平移，超出原图部分舍弃，丢失部分用黑色填充。         | - translateXY：平移的方向，X为水平，Y为竖直。默认值为X  - do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| Weather         | 添加天气，模拟天气效果。                                   | weather_mode：添加天气的模式，默认值为Rain。 - Rain：下雨  - Fog：雾  - Snow：雪  - Clouds：云   do_validation：数据扩增前是否进行数据校验。默认值为True。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   
- 输入要求 算子输入分为两种，"数据集"或"OBS目录"。
  - 选择"数据集"，请从下拉框中选择ModelArts中管理的数据集及其版本。要求数据集类型与您在本任务中选择的场景类别一致。
  
  - 选择"OBS目录"，存放结构支持"包含图片和标注信息"模式。 "包含图片和标注信息"，根据不同场景类型，结构不同。
    图像分类场景，其目录结构如下所示。如下目录结构，仅支持单标签场景。
    ```
    input_path/
        --label1/
            ----1.jpg
        --label2/
            ----2.jpg
        --../
    ```
    物体检测场景，其目录结构如下所示。支持jpg、jpeg、png、bmp格式的图片，xml为标准的PACAL VOC格式标注文件。
    ```
    input_path/
        --1.jpg
        --1.xml
        --2.jpg
        --2.xml
        ...
    ```
    
   
- 输出说明 由于算法中有些操作将会舍弃一些数据，输出文件夹里可能不包含全量数据集。例如，"Rotate"会舍弃标注框超出原始图片边界的图片。
  输出目录结构如下所示。其中"Data"文件夹用于存放新生成的图片和标注信息，"manifest"文件存储文件夹中图片的结构，可直接导入到数据集中。
  ```
  |----data_url
      |----Data
          |----xxx.jpg
          |----xxx.xml(xxx.txt)
      |----output.manifest
  ```
  其中Manifest文件内容示例如下所示。
  ```
  {
  "id": "xss",
  "source": "obs://home/fc8e2688015d4a1784dcbda44d840307_14.jpg",
  "usage": "train", 
  "annotation": [
  {
  "name": "Cat", 
  "type": "modelarts/image_classification"
  }
  ]
  }
  ```
  
 
 #### 数据生成算子（StyleGan算子）
图像生成利用Gan网络依据已知的数据集生成新的数据集。Gan是一个包含生成器和判别器的网络，生成器从潜在空间中随机取样作为输入，其输出结果需要尽量模仿训练集中的真实样本。判别器的输入则为真实样本或生成网络的输出，其目的是将生成网络的输出从真实样本中尽可能分辨出来。而生成网络则要尽可能地欺骗判别网络。两个网络相互对抗、不断调整参数，最终目的是使判别网络无法判断生成网络的输出结果是否真实。训练中获得的生成器网络可用于生成与输入图片相似的图片，用作新的数据集参与训练。基于Gan网络生成新的数据集不会生成相应的标签。图像生成过程不会改动原始数据，新生成的图片或xml文件保存在指定的输出路径下。
基于StyleGan2用于在数据集较小的情形下，随机生成相似图像。StyleGAN提出了一个新的生成器结构，能够控制所生成图像的高层级属性(high-level attributes)，如发型、雀斑等；并且生成的图像在一些评价标准上得分更好。而本算法又增加了数据增强算法，可以在较少样本的情况下也能生成较好的新样本，但是样本数尽量在70张以上，样本太少生成出来的新图像不会有太多的样式。
图3StyleGan算子   
![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001987708182.png "点击放大")
表2StyleGan算子高级参数 
| 参数名           | 默认值   | 参数说明                                                                                                                                          |
|:---|:---|:---|
| resolution    | 256   | 生成正方形图像的高宽，大小需要是2的次方。                                                                                                                         |
| batch-size    | 8     | 批量训练样本个数。                                                                                                                                     |
| total-kimg    | 300   | 总共训练的图像数量为total_kimg\*1000。                                                                                                                   |
| generate_num  | 300   | 生成的图像数量，如果是多个类的，则为每类生成的数量。                                                                                                                    |
| predict       | False | 是否进行推理预测，默认为False。如果设置True，需要在resume参数设置已经训练完成的模型的obs路径。                                                                                      |
| resume        | empty | 如果predict设置为True，需要填写Tensorflow模型文件的obs路径用于推理预测。当前仅支持".pb"格式的模型。示例：obs://xxx/xxxx.pb。 默认值为empty。 |
| do_validation | True  | 是否做数据校验，默认为True，表示数据生成前需要进行数据校验，否则只进行数据生成。                                                                                                    |
   
- 输入要求 算子输入分为两种，"数据集"或"OBS目录"。
  - 选择"数据集"，请从下拉框中选择ModelArts中管理的数据集及其版本。要求数据集类型与您在本任务中选择的场景类别一致。
  
  - 选择"OBS目录"，图像生成算子不需要标注信息，输入支持单层级或双层级目录，存放结构支持"单层级"或"双层级"模式。
  
  
  单层级目录结构如下所示：
  ```
  image_folder----0001.jpg           
              ----0002.jpg            
              ----0003.jpg            
              ...            
              ----1000.jpg
  ```
  双层级目录结构如下所示：
  ```
  image_folder----sub_folder_1----0001.jpg                            
                              ----0002.jpg                            
                              ----0003.jpg                            
                              ...                            
                              ----0500.jpg            
              ----sub_folder_2----0001.jpg                            
                              ----0002.jpg                           
                              ----0003.jpg                            
                              ...                            
                              ----0500.jpg
                              ...            
              ----sub_folder_100----0001.jpg                            
                                ----0002.jpg                            
                                ----0003.jpg                            
                                ...                            
                                ----0500.jpg
  ```
  
- 输出说明 输出目录的结构如下所示。其中"model"文件夹存放用于推理的"frozen pb"模型，"samples"文件夹存放训练过程中输出图像，"Data"文件夹存放训练模型生成的图像。
  ```
  train_url----model----CYcleGan_epoch_10.pb                  
                    ----CYcleGan_epoch_20.pb                  
                    ...                 
                    ----CYcleGan_epoch_1000.pb         
           ----samples----0000_0.jpg                   
                     ----0000_1.jpg                  
                     ...                   
                     ----0100_15.jpg         
           ----Data----CYcleGan_0_0.jpg                 
                   ----CYcleGan_0_1.jpg                 
                   ...                 
                   ----CYcleGan_16_8.jpg         
           ----output_0.manifest
  ```
  其中Manifest文件内容示例如下所示。
  ```
  {
  "id": "xss",
  "source": "obs://home/fc8e2688015d4a1784dcbda44d840307_14.jpg",
  "usage": "train", 
  "annotation": [
  {
  "name": "Cat", 
  "type": "modelarts/image_classification"
  }
  ]
  }
  ```
  
 
 #### 数据域迁移算子（CycleGan算子）
基于CycleGAN用于生成域迁移的图像，即将一类图片转换成另一类图片，把X空间中的样本转换成Y空间中的样本。CycleGAN可以利用非成对数据进行训练。模型训练时运行支持两个输入，分别代表数据的原域和目标域，在训练结束时会生成所有原域向目标域迁移的图像。
图4CycleGan算子   
![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001987867946.png "点击放大")
表3CycleGan算子高级参数 
| 参数名             | 默认值    | 参数说明                                                                                                                                           |
|:---|:---|:---|
| do_validation   | True   | 是否进行数据校验，默认为True，表示数据生成前需要进行数据校验，否则只进行数据生成。                                                                                                    |
| image_channel   | 3      | 生成图像的通道数。                                                                                                                                      |
| image_height    | 256    | 图像相关参数：生成图像的高，大小需要是2的次方。                                                                                                                       |
| image_width     | 256    | 图像相关参数：生成图像的宽，大小需要是2的次方                                                                                                                        |
| batch_size      | 1      | 训练相关参数：批量训练样本个数。                                                                                                                               |
| max_epoch       | 100    | 训练相关参数：训练遍历数据集次数。                                                                                                                              |
| g_learning_rate | 0.0001 | 训练相关参数：生成器训练学习率。                                                                                                                               |
| d_learning_rate | 0.0001 | 训练相关参数：判别器训练学习率。                                                                                                                               |
| log_frequency   | 5      | 训练相关参数：日志打印频率（按step计数）。                                                                                                                        |
| save_frequency  | 5      | 训练相关参数：模型保存频率（按epoch计数）。                                                                                                                       |
| predict         | False  | 是否进行推理预测，默认为False。如果设置True，需要在resume参数设置已经训练完成的模型的obs路径。                                                                                       |
| resume          | empty  | 如果predict设置为True，需要填写Tensorflow模型文件的obs路径用于推理预测。当前仅支持".pb"格式的模型。示例：obs://xxx/xxxx.pb。 默认值为empty。 |
   
- 输入说明 算子输入分为两种，"数据集"或"OBS目录"。
  - 选择"数据集"，请从下拉框中选择ModelArts中管理的数据集及其版本。要求数据集类型与您在本任务中选择的场景类别一致。
  
  - 选择"OBS目录"，图像生成算子不需要标注信息，输入支持单层级或双层级目录，存放结构支持"单层级"或"双层级"模式。
  
  
  单层级目录结构如下所示：
  ```
  image_folder----0001.jpg           
              ----0002.jpg            
              ----0003.jpg            
              ...            
              ----1000.jpg
  ```
  双层级目录结构如下所示：
  ```
  image_folder----sub_folder_1----0001.jpg                            
                              ----0002.jpg                            
                              ----0003.jpg                            
                              ...                            
                              ----0500.jpg            
              ----sub_folder_2----0001.jpg                            
                              ----0002.jpg                           
                              ----0003.jpg                            
                              ...                            
                              ----0500.jpg
                              ...            
              ----sub_folder_100----0001.jpg                            
                                ----0002.jpg                            
                                ----0003.jpg                            
                                ...                            
                                ----0500.jpg
  ```
  
- 输出说明 输出目录的结构如下所示。其中"model"文件夹存放用于推理的"frozen pb"模型，"samples"文件夹存放训练过程中输出图像，"Data"文件夹存放训练模型生成的图像。
  ```
  train_url----model----CYcleGan_epoch_10.pb                  
                    ----CYcleGan_epoch_20.pb                  
                    ...                 
                    ----CYcleGan_epoch_1000.pb         
           ----samples----0000_0.jpg                   
                     ----0000_1.jpg                  
                     ...                   
                     ----0100_15.jpg         
           ----Data----CYcleGan_0_0.jpg                 
                   ----CYcleGan_0_1.jpg                 
                   ...                 
                   ----CYcleGan_16_8.jpg         
           ----output_0.manifest
  ```
  其中Manifest文件内容示例如下所示。
  ```
  {
  "id": "xss",
  "source": "obs://home/fc8e2688015d4a1784dcbda44d840307_14.jpg",
  "usage": "train", 
  "annotation": [
  {
  "name": "Cat", 
  "type": "modelarts/image_classification"
  }
  ]
  }
  ```
  
 
