我使用 openmmlab 训练了一个用于图像分类的高效 netv2-b0 模型。此外,我使用 mmdeploy 创建并推断相应的 onnx 模型(在 cpu 上),它给出了正确的结果。但是,我现在尝试使用 TensorRT 在 C++ 中实现模型,但我不明白在将图像加载到 GPU 内存中进行模型推理之前必须如何预处理图像。
我目前正在使用双线性插值将图像从原始尺寸 256x256 缩放到模型预期格式 224x224。在训练期间,使用双三次插值来缩放图像,但我认为差异可以忽略不计。
据我了解,像素需要通过减去平均值并除以标准差来转换为[1.0,-1.0]范围内的浮点值(keras的模型信息)。我使用的是我在 openmmlab 训练期间使用的模型的 config_file 中给出的平均值和标准差 (config_file)。
mean[103.53, 116.28, 123.675], std[57.375, 57.12, 58.395]
如何正确处理图像的rgb值([255,0]范围内)以将其转换为所需的[1.0,-1.0]范围?
我做了更多研究。
方便的是,与使用双三次调整大小的 v1 相比,efficientnet 的 v2 使用双线性调整大小。
8位图像通过执行
从[255,0]标准化到范围[1.0,-1.0](n - 128)/ 128
所有价值观。不减去平均值或除以标准差。
这些是我的来源:
https://github.com/google/automl/blob/master/efficientnetv2/preprocessing.py
https://github.com/NVIDIA/TensorRT/blob/master/samples/python/efficientnet/README.md