
# 创建ModelArts数据校验任务
#### 前提条件
- 数据已准备完成：已经创建数据集或者已经将数据上传至OBS。
- 确保您使用的OBS与ModelArts在同一区域。
 
#### 创建数据处理任务
1. 登录[ModelArts控制台](https://console.huaweicloud.com/modelarts)，在左侧的导航栏中选择"数据准备\>数据处理"，进入"数据处理"页面。
2. 在"数据处理"页面，单击"创建"进入"创建数据处理"页面。
3. 在创建数据处理页面，填写相关算法参数。
   1. 填写基本信息。基本信息包括"名称"、"版本"和"描述"。其中"版本"信息由系统自动生成，按"V0001"、"V0002"规则命名，用户无法修改。
      您可以根据实际情况填写"名称"和"描述"信息。
      图1创建数据处理基本信息   
      ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002024387565.png "点击放大") 
   
   2. 设置场景类别。场景类别当前支持"图像分类"和"物体检测"。
   
   3. 设置数据处理类型为"数据校验"，填写相应算子的设置参数，算子的详细参数参见[数据校验算子说明（MetaValidation算子）]。
   
   4. 设置输入与输出。需根据实际数据情况选择"数据集"或"OBS目录"。设置为"数据集"时，需填写"数据集名称"和"数据集版本"；设置为"OBS目录"时，需填写正确的OBS路径。
      图2输入输出设置-数据集   
      ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000002024268053.png "点击放大")
      图3输入输出设置-OBS目录   
      ![](https://support.huaweicloud.com/usermanual-standard-modelarts/figure/zh-cn_image_0000001987868038.png "点击放大") 
   
   5. 确认参数填写无误后，单击"创建"，完成数据处理任务的创建。
    
 
 #### 数据校验算子说明（MetaValidation算子）
ModelArts的数据校验通过MetaValidation算子实现。当前ModelArts支持jpg、jpeg、bmp、png四种图片格式。物体检测场景支持xml标注格式，不支持"非矩形框"标注。针对您提供的数据集，MetaValidation算子支持对图片和xml文件进行数据校验：
表1图片类数据校验 
| 异常情况                             | 处理方案            |
|:---|:---|
| 图片本身损坏无法解码                       | 过滤掉不能解码的图片      |
| 图片通道可能是1通道、2通道，不是常用的3通道          | 转换图片成RGB三通道     |
| 图片格式不在ModelArts支持的格式范围内          | 转换图片格式至jpg格式    |
| 图片后缀与实际格式不符，但格式在ModelArts支持的格式内  | 后缀转换成与实际格式一致    |
| 图片后缀与实际格式不符，且格式不在ModelArts支持的格式内 | 转换图片格式至jpg格式    |
| 图片分辨率过大                          | 宽、高按指定大小同比例进行裁剪 |
   
表2标注类文件数据校验 
| 异常情况                             | 处理方案                                |
|:---|:---|
| xml结构残缺，无法解析                     | 过滤xml文件                             |
| xml中没有标注"object"                 | 过滤xml文件                             |
| xml中没有矩形框"bndbox"                | 过滤xml文件                             |
| 某些标注"object"中没有矩形框"bndbox"       | 过滤标注"object"                        |
| 图片经过裁剪后，xml文件中宽高不符               | 修改错误宽高参数为图片真实宽高                     |
| xml中没有"width"、"height"字段         | 根据图片真实宽高补全xml中的"width"、"height"字段和值 |
| 图片经过裁剪后，xml中矩形框"bndbox"大小不符      | 按图片裁剪比例缩放xml文件中"bndbox"值            |
| xml中矩形框"bndbox"宽或高值过小，显示为一条线     | 矩形框宽或高差值小于2，移除当前"object"            |
| xml中矩形框"bndbox"最小值大于最大值          | 移除当前"object"                        |
| 矩形框"bndbox"超出图片边界，且超出部分占框面积50%以上 | 移除当前"object"                        |
| 矩形框"bndbox"超出图片边界，但超出部分小于框面积50%  | 矩形框"bndbox"拉回到图片边界                  |
   
![](https://support.huaweicloud.com/usermanual-standard-modelarts/public_sys-resources/note_3.0-zh-cn.png)
数据校验过程不会改动原始数据，通过校验的图片或xml文件保存在指定的输出路径下。
- 参数说明
  表3数据校验-MetaValidation算子参数说明 
  | 参数名              | 是否必选 | 默认值 | 参数说明                                                                                               |
  |:---|:---|:---|:---|
  | image_max_width  | 否    | -1  | 输入图片宽度最大值，如果输入图片宽度超过设定值则按比例裁剪。单位为px。 默认值 -1 表示不做裁剪。 |
  | image_max_height | 否    | -1  | 输入图片长度最大值，如果输入图片高度超过设定值则按比例裁剪。单位为px。 默认值 -1 表示不做裁剪。   |
     
  
- 输入要求 算子输入分为两种，"数据集"或"OBS目录"。
  - 选择"数据集"，请从下拉框中选择ModelArts中管理的数据集及其版本。要求数据集类型与您在本任务中选择的场景类别一致。
  
  - 选择"OBS目录"，存放结构又分两种情况，"仅包含图片"或"包含图片和标注信息"。
    - "仅包含图片"：当目录下全是图片时，支持jpg、jpeg、png、bmp格式，嵌套子目录的图片也将全部读入。
    
    - "包含图片和标注信息"：根据不同场景类型，结构不同。 图像分类场景，其目录结构如下所示。如下目录结构，仅支持单标签场景。
      ```
      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
          ...
      ```
      
     
   
- 输出说明
  - 图像分类 输出数据的目录结构如下所示。
    ```
    output_path/
        --Data/
            ----class1/  # 如果输入数据有标注信息会一并输出，class1为标注类别
                ------1.jpg
                ------2_checked.jpg
            ----class2/
                ------3.jpg
                ------4_checked.jpg
            ----5_checked.jpg
        --output.manifest
    ```
    其中Manifest文件内容示例如下所示。会给每一条数据加上一个校验属性"property":{"@modelarts:data_checked":true}
    ```
    {
      "id": "xss",
      "source": "obs://hard_example_path/Data/fc8e2688015d4a1784dcbda44d840307_14_checked.jpg",
      "property": {
        "@modelarts:data_checked": true
      },
      "usage": "train",
      "annotation": [
        {
          "name": "Cat",
          "type": "modelarts/image_classification"
        }
      ]
    }
    ```
    ![](https://support.huaweicloud.com/usermanual-standard-modelarts/public_sys-resources/note_3.0-zh-cn.png)
    数据输出的data文件夹中存放的是修改、更新过的图片，对于数据处理过程中没有修改过的图片，在data文件夹中不会展示，图片的位置信息显示该图片在输入目录中。
    output.manifest存放的是数据处理之后的图片信息（主要是指图片的位置和标注信息等），可以直接使用这个output.manifest文件创建数据集，或者把output.manifest文件导入到已经存在的数据集中。
    
  
  - 物体检测 在输出目录下，文件结构如下所示。
    ```
    output_path/
       --Data/
            ----1_checked.jpg
            ----1_checked.xml  # 如果输入数据在校验过程中经过了转换，文件名会加上'_checked'
            ----2.jpg          # 如果输入数据未经过转换，则以原来的名字保存
            ----2.xml
       --output.manifest
    ```
    其中Manifest文件内容示例如下所示。会给每一条数据加上一个校验属性"property":{"@modelarts:data_checked":true}
    ```
    {
      "source": "obs://hard_example_path/Data/be462ea9c5abc09f_checked.jpg",
      "property": {
        "@modelarts:data_checked": true
      },
      "annotation": [
        {
          "annotation-loc": "obs://hard_example_path/Data/be462ea9c5abc09f_checked.xml",
          "type": "modelarts/object_detection",
          "annotation-format": "PASCAL VOC",
          "annotated-by": "modelarts/hard_example_algo"
        }
      ]
    }
    ```
    
   
 
