本文档描述了 TensorFlow Models 中使用的视觉数据处理组件,重点介绍了图像数据如何为目标检测、图像分类和分割等计算机视觉任务进行加载、预处理和增强。有关模型特定细节,请参阅计算机视觉模型,有关训练循环和评估处理,请参阅核心框架。
视觉数据处理将原始图像和注释转换为模型就绪的张量。在 TensorFlow Models 代码库中,此过程通常包括
代码库包含两种主要实现
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 等序列化数据格式转换为张量字典供模型使用。
TFExamples 是模型代码库中最常见的数据格式。解码过程使用特征配置提取图像数据和注释。
TFExampleDecoder 支持多种特征,包括:
来源: research/object_detection/data_decoders/tf_example_decoder.py131-150 research/object_detection/data_decoders/tf_example_decoder_test.py29-30
代码库提供了多种解码器实现
| 解码器 | 路径 | 目的 |
|---|---|---|
| TfExampleDecoder | research/object_detection/data_decoders | 基本的 TFExample 解码 |
| TfExampleDecoderLabelMap | official/vision/dataloaders | 带标签映射的 TFExample 解码 |
| SequenceExampleDecoder | research/object_detection/dataset_tools | 视频数据解码 |
来源: research/object_detection/data_decoders/tf_example_decoder.py131-148 research/object_detection/protos/input_reader.proto34-62
解码后,图像和注释通过标准化操作进行预处理。
关键预处理操作包括:
归一化:
normalize_image():使用均值和标准差对像素值进行归一化尺寸调整:
resize_and_crop_image():在保持纵横比的同时调整大小resize_and_crop_image_v2():Faster R-CNN 样式的替代实现compute_padded_size():计算网络需求所需的填充大小裁剪:
center_crop_image():裁剪图像的中心部分random_crop_image():为数据增强随机裁剪图像边界框变换:
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
代码库实现了基于策略的增强方法
AutoAugment:学习到的增强策略
RandAugment:简化的随机增强
SSD Random Crop:专为目标检测而设计
来源: official/vision/ops/augment.py15-34 official/vision/ops/augment_test.py108-120 official/vision/dataloaders/retinanet_input.py151-176
最后一步是构建结合所有处理元素的有效输入管道。
关键输入管道组件
解析器配置:
数据管道优化:
训练与评估:
来源: official/vision/tasks/retinanet.py98-152 official/vision/dataloaders/retinanet_input.py35-143 official/vision/dataloaders/retinanet_input.py216-390
对象检测API采用一种不同但概念上相似的方法
与官方实现的关键区别
inputs.py 模块来构建输入函数transform_input_data() 进行预处理和增强来源: 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
配置对象控制数据处理的各个方面
来源: 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 代码库中视觉数据处理的关键组件和工作流程,重点介绍了图像和标注如何为模型训练和评估做好准备。