Почему PIL так часто используется с Pytorch - PullRequest
4 голосов
/ 21 апреля 2020

Я заметил, что многие загрузчики данных используют PIL для загрузки и преобразования изображений, например, сборщики наборов данных в torchvision.datasets.folder.

Мой вопрос: зачем использовать PIL? Вам нужно будет выполнить операцию np.asarray, прежде чем превратить ее в тензор. OpenCV, кажется, загружает его напрямую как массив numpy и работает быстрее.

Одна из причин, по которой я могу думать, состоит в том, что PIL имеет богатую библиотеку преобразований, но я чувствую, что некоторые из этих преобразований могут быть быстрыми реализован.

Ответы [ 2 ]

4 голосов
/ 22 апреля 2020

Обсуждается добавление OpenCV в качестве одного из возможных бэкэндов в torchvision PR .

Вкратце приводятся некоторые причины:

  • OpenCV2 загружает изображения в формате BGR, который потребовал бы, чтобы класс-оболочка обрабатывал внутреннее изменение RGB или зависел от формата загруженных изображений
  • Это, в свою очередь, привело бы к дублированию кода в functional преобразованиях в torchvision, многие из которых используют операции PIL (поскольку преобразования для поддержки нескольких бэкэндов были бы довольно запутанными)
  • OpenCV загружает изображения как np.array, на самом деле преобразования в массивах не очень просты
  • Различное представление может привести к тому, что трудно поймать ошибки пользователей
  • ModelZoo PyTorch также зависит от формата RGB, и они хотели бы, чтобы он легко поддерживал
  • Не очень хорошо работает с многопроцессорной обработкой Python (но это не проблема как это было проблемой для Python 2)

Если честно, я не вижу большого движения к этой идее поскольку существует альбуминаций , которые используют OpenCV и могут довольно плавно интегрироваться с PyTorch.

Немного вне топики c, но можно выбрать более быстрый бэкэнд с помощью torchvision.set_image_backend в Intel accimage. Также Pillow-SIMD можно использовать в качестве замены для PIL (предположительно, это быстрее и рекомендуется для проекта fastai ).

Когда дело касается производительности тесты не кажутся слишком надежными, и это не так просто сказать AFAIK.

2 голосов
/ 21 апреля 2020

Здесь есть некоторые элементы ответа здесь и здесь .

TL, DR: по историческим причинам, некоторые тесты (хотя никогда не доверяйте bencharcks) и потому что PIL легче и проще в установке, чем OpenCV.

...