Pytorch预处理和OpenCV预处理差别——transforms.Resize的坑

使用Pytorch训练通常使用Torchvision的transforms进行预处理,transforms提供了丰富的数据增强手段,但是transforms.Resize和OpenCV的resize会有一定差异,这会导致我们使用C++去部署pytorch训练的model时候可能会有一定差距,源码里面也提到过:

because PIL applies antialiasing. This may lead to significant differences in the performance of a network (https://github.com/pytorch/vision/blob/3a278d701d3a0bba25ad52891653330ece2cb472/torchvision/transforms/functional.py#L350)

因为transforms.Resize当输入为PIL图像时,默认使用的PIL的resize进行处理,除了默认的双线性插值,还会进行antialiasing,对比了OpenCV不同的resize发现,差距还是挺大的:

对于一些分类检测任务还好,如果是embedding等,可能会存在较大的误差,所以训练时,尽量不要用到transforms.Resize.

这里替换掉transforms.Resize后,发现Opencv可以复现出pytorch的网络输出:

 

Guess you like

Origin blog.csdn.net/IEEE_FELLOW/article/details/115536987