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;
}