使用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的网络输出:
版权声明:本文为IEEE_FELLOW原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。