Pytorch测试正常,RT测试不一致,分析了一下,主要是数据的问题导致的差异,记录一下自己的踩坑

1:Pytorch数据:格式-NCHW, 通道顺序-RGB,数值范围-[0-1], 数据类型-float

"""
Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor.
    Converts a PIL Image or numpy.ndarray (H x W x C) in the range
    [0, 255] to a torch.FloatTensor of shape (C x H x W) in the range [0.0, 1.0].
"""

一般会碰到PIL或者cv2的使用接口:两者的差异

PIL :RGB, 0~1, CHW

numpy:BGR, 0~255,HWC

2:opencv数据格式-NCHW, 通道顺序-BGR,数值范围-[0-255], 数据类型-uchar

pytorch最终的输入是归一化到0-1,RT中我忘记转换自己的Mat图像了,菜的抠脚

# 三通道
if (1 == img.channels())
{
    cv::cvtColor(img, img, cv::COLOR_GRAY2BGR);
}

# uchar 转 float
img.convertTo(float_img, CV_32F);

# 归一化到 0-1
float_img = float_img*1.0 / 255;

# 减均值
cv::Mat mean_(img.size(), CV_32FC3, meanValue);
cv::subtract(float_img, mean_, float_img);

# 通道拆分
cv::split(float_img, splitchannles);

# 通道顺序转换
float *imgData = nullptr;
int shift_data = sizeof(float) * img.rows * img.cols;
for (size_t i = 0; i < inputchannels; i++)
{
	memcpy(imgData, splitchannles[i].data, shift_data);
	imgData += img.rows * img.cols;
}
09-02 10:13
查看更多