为什么 PIL 如此频繁地与 Pytorch 一起使用?

6 python opencv python-imaging-library pytorch

我注意到很多数据加载器使用 PIL 来加载和转换图像,例如 torchvision.datasets.folder 中的数据集构建器。

我的问题是:为什么要使用 PIL?在将其转换为张量之前,您需要执行 np.asarray 操作。OpenCV 似乎直接将它加载为一个 numpy 数组,而且速度也更快。

我能想到的一个原因是因为 PIL 有一个丰富的转换库,但我觉得其中几个转换可以快速实现。

Szy*_*zke 9

有一个关于在 torchvision PR 中添加 OpenCV 作为可能的后端之一的讨论

总之,提供了一些原因:

  • OpenCV2 以 BGR 格式加载图像,这将需要包装器类来处理内部更改为 RGB 或后端依赖的加载图像格式
  • 这反过来会导致functional转换中的代码重复torchvision,其中许多使用 PIL 操作(因为支持多个后端的转换会非常复杂)
  • OpenCV 将图像加载为np.array,在数组上进行转换并不容易
  • 不同的表示可能会导致用户难以捕捉错误
  • PyTorch 的模型动物园也依赖于 RGB 格式,他们希望能够轻松支持它
  • 不能很好地与 Python 的多处理配合使用(但这不是问题,因为它是 Python 2 的问题)

说实话,我没有看到太多的运动朝着这个想法存在albumentations它使用了OpenCV,可与PyTorch而平滑集成。

有点题外话,但可以通过torchvision.set_image_backend英特尔的accimage. 此外枕SIMD可以作为一个下拉更换为PIL(它理应更快,建议fastai项目)。

当谈到性能基准时,它们似乎不太可靠,而且告诉 AFAIK 并不容易。