菜单

视觉数据处理

相关源文件

本文档描述了 TensorFlow Models 中使用的视觉数据处理组件,重点介绍了图像数据如何为目标检测、图像分类和分割等计算机视觉任务进行加载、预处理和增强。有关模型特定细节,请参阅计算机视觉模型,有关训练循环和评估处理,请参阅核心框架

视觉数据处理概述

视觉数据处理将原始图像和注释转换为模型就绪的张量。在 TensorFlow Models 代码库中,此过程通常包括

  1. 数据解码 - 将序列化格式(TFRecords 等)转换为张量
  2. 预处理 - 调整大小、归一化和格式化图像数据
  3. 增强 - 通过转换增强图像多样性
  4. 批处理 - 将数据分批以提高训练效率

代码库包含两种主要实现

  • official/vision/ 目录,包含侧重于 TF2 的新实现
  • research/object_detection/ 目录,包含对象检测 API

它们共享类似的概念,但为不同的用例有独立的实现。

视觉数据处理架构

高级数据流

来源: official/vision/dataloaders/retinanet_input.py16-19 research/object_detection/inputs.py15-16

详细组件架构

来源: official/vision/ops/preprocess_ops.py15-16 official/vision/ops/augment.py15-34 research/object_detection/data_decoders/tf_example_decoder.py15-19

数据解码

数据解码过程将 TFRecords 等序列化数据格式转换为张量字典供模型使用。

TFExample 解码

TFExamples 是模型代码库中最常见的数据格式。解码过程使用特征配置提取图像数据和注释。

TFExampleDecoder 支持多种特征,包括:

  • 图像数据(编码的 JPEG/PNG)
  • 边界框
  • 对象类别
  • 实例掩码
  • 关键点
  • DensePose 数据
  • 实例分割
  • 附加通道

来源: research/object_detection/data_decoders/tf_example_decoder.py131-150 research/object_detection/data_decoders/tf_example_decoder_test.py29-30

不同的解码器实现

代码库提供了多种解码器实现

解码器路径目的
TfExampleDecoderresearch/object_detection/data_decoders基本的 TFExample 解码
TfExampleDecoderLabelMapofficial/vision/dataloaders带标签映射的 TFExample 解码
SequenceExampleDecoderresearch/object_detection/dataset_tools视频数据解码

来源: research/object_detection/data_decoders/tf_example_decoder.py131-148 research/object_detection/protos/input_reader.proto34-62

预处理操作

解码后,图像和注释通过标准化操作进行预处理。

图像预处理

关键预处理操作包括:

  1. 归一化:

    • normalize_image():使用均值和标准差对像素值进行归一化
    • 支持不同的归一化参数(ImageNet 标准等)
  2. 尺寸调整:

    • resize_and_crop_image():在保持纵横比的同时调整大小
    • resize_and_crop_image_v2():Faster R-CNN 样式的替代实现
    • compute_padded_size():计算网络需求所需的填充大小
  3. 裁剪:

    • center_crop_image():裁剪图像的中心部分
    • random_crop_image():为数据增强随机裁剪图像
  4. 边界框变换:

    • resize_and_crop_boxes():转换边界框坐标以匹配图像变换
    • horizontal_flip_boxes():水平翻转边界框坐标

来源: official/vision/ops/preprocess_ops.py15-16 official/vision/ops/preprocess_ops.py77-146 official/vision/ops/preprocess_ops.py177-308

边界框坐标处理

边界框坐标与图像一起处理,以保持一致性

来源: official/vision/ops/preprocess_ops.py694-708 official/vision/dataloaders/retinanet_input.py210-215

数据增强

数据增强通过应用随机变换来增加训练数据的多样性。

常见增强技术

关键增强函数

功能目的参数控制
rotate()按指定角度旋转图像旋转角度
translate()水平/垂直移动图像平移向量
color()调整颜色饱和度颜色因子
contrast()调整图像对比度对比度因子
brightness()调整图像亮度亮度因子
cutout()应用随机裁剪掩码掩码大小
gaussian_noise()添加高斯噪声噪声水平

来源: official/vision/ops/augment.py50-92 official/vision/ops/augment.py449-534 official/vision/ops/augment.py580-618

高级增强策略

代码库实现了基于策略的增强方法

  1. AutoAugment:学习到的增强策略

    • 用于分类和目标检测任务
    • 根据预定义的策略应用操作序列
  2. RandAugment:简化的随机增强

    • 控制操作的幅度和数量
    • 比 AutoAugment 在计算上更有效
  3. SSD Random Crop:专为目标检测而设计

    • 随机裁剪图像,具有不同的约束条件
    • 在训练数据中保留感兴趣的对象

来源: official/vision/ops/augment.py15-34 official/vision/ops/augment_test.py108-120 official/vision/dataloaders/retinanet_input.py151-176

输入管道构建

最后一步是构建结合所有处理元素的有效输入管道。

RetinaNet 输入管道示例

关键输入管道组件

  1. 解析器配置:

    • 配置预处理参数(尺寸调整、填充、归一化)
    • 设置增强策略
    • 处理边界框编码和目标生成
  2. 数据管道优化:

    • 有效的预处理顺序(优先尺寸调整)
    • 适当的批处理和预取
    • 训练的随机打乱
  3. 训练与评估:

    • 训练和评估的不同管道
    • 增强仅在训练期间应用
    • 通常使用全精度进行评估

来源: official/vision/tasks/retinanet.py98-152 official/vision/dataloaders/retinanet_input.py35-143 official/vision/dataloaders/retinanet_input.py216-390

对象检测API输入管道

对象检测API采用一种不同但概念上相似的方法

与官方实现的关键区别

  • 使用 inputs.py 模块来构建输入函数
  • 应用 transform_input_data() 进行预处理和增强
  • 支持更专业的数据类型(实例掩码、DensePose 等)

来源: research/object_detection/inputs.py151-210 research/object_detection/model_lib_v2.py58-70 research/object_detection/model_lib.py234-407

与训练循环集成

处理后的数据直接输入模型训练

训练框架妥善处理数据管道输出

  • 包含预处理图像和元数据的 features 字典
  • 包含地面真实标注的 labels 字典
  • 结构化以支持分布式训练

来源: research/object_detection/model_lib_v2.py55-70 official/vision/tasks/retinanet.py288-323

通用数据处理配置

配置对象控制数据处理的各个方面

RetinaNet 解析器配置

来源: official/vision/configs/retinanet.py51-67 official/vision/dataloaders/retinanet_input.py35-143

增强配置

来源: official/vision/ops/augment.py1919-1962 official/vision/configs/retinanet.py238-255

本文档涵盖了 TensorFlow Models 代码库中视觉数据处理的关键组件和工作流程,重点介绍了图像和标注如何为模型训练和评估做好准备。