
截至 mediapipe model maker v0.10.9,官方不支持直接配置特定增强操作(如仅保留水平翻转、曝光调整和模糊),其 `do_data_augmentation` 仅为开关式布尔参数,内置增强逻辑固定且不可定制。
MediaPipe Model Maker 的 image_classifier 模块为快速部署提供了便捷封装,但在数据增强(Data Augmentation)层面高度抽象化。当前版本中,HParams(do_data_augmentation=True/False) 仅控制是否启用预设的默认增强流水线,该流水线由底层 ImagePreprocessor 实现,包含且仅包含两项操作:
- ✅ 随机水平翻转(tf.image.random_flip_left_right)
- ✅ 随机扭曲裁剪(tf.image.sample_distorted_bounding_box,会破坏原始宽高比,后续缩放可能导致形变)
⚠️ 重要限制说明:
- ❌ 不支持单独启用/禁用某类增强(例如“只开翻转、关裁剪”);
- ❌ 官方未实现曝光(exposure)、高斯模糊(blur)、色彩抖动、对比度调整等常见增强;
- ❌ 无公开 API 或配置项允许传入自定义 tf.keras.layers 或 tf.image 函数链。
替代方案(推荐实践)
若需精确控制增强策略(如仅应用 random_flip_left_right + adjust_exposure + gaussian_blur),有以下两种可行路径:
✅ 方案一:预处理数据集(推荐,简洁安全)
在调用 ImageClassifier.create() 前,对原始训练数据进行离线增强,并将结果保存为新数据集:
import tensorflow as tf
import numpy as np
def custom_augment(image, label):
# 1. 随机水平翻转
image = tf.image.random_flip_left_right(image)
# 2. 调整曝光(模拟 gamma 校正)
image = tf.image.adjust_gamma(image, gamma=0.8 + tf.random.uniform([]) * 0.4)
# 3. 添加轻微高斯模糊(需自定义核)
blur_kernel = tf.constant([
[1, 2, 1],
[2, 4, 2],
[1, 2, 1]
], dtype=tf.float32) / 16.0
blur_kernel = blur_kernel[:, :, tf.newaxis, tf.newaxis]
image = tf.nn.conv2d(
tf.expand_dims(image, 0),
blur_kernel,
strides=1,
padding='SAME'
)[0]
return tf.clip_by_value(image, 0.0, 255.0), label
# 应用于 tf.data.Dataset
train_data = train_data.map(custom_augment, num_parallel_calls=tf.data.AUTOTUNE)
train_data = train_data.cache().shuffle(1000).batch(32).prefetch(tf.data.AUTOTUNE)
# 创建模型时关闭内置增强
hparams = image_classifier.HParams(
epochs=100,
export_dir="exported_model_2",
do_data_augmentation=False # ← 关键:避免重复增强
)⚙️ 方案二:继承并重写核心类(高级,需维护)
通过继承 ImageClassifier 并覆盖 _create_preprocessing_layer() 或修改 ImagePreprocessor 行为实现深度定制。但需注意:
- 需 fork MediaPipe 仓库并修改源码(如 mediapipe/model_maker/python/vision/core/image_preprocessing.py);
- 后续升级 Model Maker 时需手动同步变更,维护成本高;
- 不适用于生产环境快速迭代场景。
总结建议
对于绝大多数项目,预处理数据集(方案一)是更鲁棒、可复现且符合工程最佳实践的选择。它完全绕过框架限制,赋予你对每一步增强的绝对控制权,同时保持与 MediaPipe Model Maker 训练流程的兼容性。务必在增强后关闭 do_data_augmentation,防止双重增强导致分布偏移。未来若 MediaPipe 开放 augmentation_fn 参数或 CustomAugmentationOptions,可再平滑迁移。










