You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow中MobileNet的输入预处理具体执行流程是怎样的?

MobileNet预处理核心逻辑与PIL/OpenCV实现

TensorFlow 中tf.keras.applications.mobilenet.preprocess_input的具体操作步骤如下:

  • 输入要求为uint8格式的RGB图像,像素值范围0~255
  • 核心计算逻辑是将像素值从[0,255]线性映射到[-1,1],公式为像素值 = 像素值 / 127.5 - 1
  • 不需要额外做通道均值减法、标准差归一化操作,只要输入为RGB格式即可,无需调整通道顺序

PIL 实现代码

from PIL import Image
import numpy as np

def mobilenet_preprocess_pil(image_path, target_size=(224,224)):
    # 读取图像并转为RGB格式
    img = Image.open(image_path).convert('RGB')
    # 按双线性插值规则resize到模型要求的输入尺寸
    img = img.resize(target_size, Image.Resampling.BILINEAR) # 低版本PIL可替换为Image.BILINEAR
    # 转为float32类型的numpy数组
    img_arr = np.array(img, dtype=np.float32)
    # 归一化到[-1,1]区间
    img_arr = img_arr / 127.5 - 1.0
    # 如需适配模型batch输入格式,可添加batch维度:img_arr = np.expand_dims(img_arr, axis=0)
    return img_arr

OpenCV 实现代码

import cv2
import numpy as np

def mobilenet_preprocess_cv2(image_path, target_size=(224,224)):
    # 读取图像,OpenCV默认返回BGR格式
    img = cv2.imread(image_path)
    # BGR转RGB,匹配模型输入要求
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    # 按双线性插值规则resize到目标尺寸
    img = cv2.resize(img, target_size, interpolation=cv2.INTER_LINEAR)
    # 转为float32类型数组
    img_arr = np.array(img, dtype=np.float32)
    # 归一化到[-1,1]区间
    img_arr = img_arr / 127.5 - 1.0
    # 如需适配模型batch输入格式,可添加batch维度:img_arr = np.expand_dims(img_arr, axis=0)
    return img_arr

注意:如果输入已经是RGB格式的numpy数组,可跳过通道转换步骤,直接执行resize和归一化操作,输出结果和TensorFlow官方接口完全一致。

内容的提问来源于stack exchange,提问作者Mohammadreza Riahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:06:07