Pillow-SIMDを使った画像処理やディープラーニングの高速化の紹介


Pillow-SIMDを使ってマルチプロセス化なしで画像処理を高速化する方法を紹介します。PyTorchが対応している高速化方法ですが、実はKerasでも動かせました。簡単ながら痒いところに手が届くのでおすすめです。
きっかけ
Pillow(PIL)を使って画像処理や前処理をすることが多いのですが、Python特有の悩みとして
デフォルトだとCPUに対してマルチコアの処理をしてくれない
というのがあります。特にディープラーニングでは、JPEGの読み込みが速度のボトルネックとなることが多いので、画像の読み込みや前処理の高速化ができるととても嬉しいのです。
PillowやOpenCVをmultiprocessingで並列化して高速化するという方法もありますが、マルチプロセス化はデバッグが面倒になるので、ライブラリ一個で完結してくれるとすごいありがたいのです。
そんなときにおすすめなのが、Pillow-SIMDというライブラリです。
https://github.com/uploadcare/pillow-simd
PyTorchの情報探したときに見つけたものです。中身はPILフォークなので、純粋にPillowの代替品として使えますし、前処理でPillowを使っているKerasでも使えたりします(末尾のColabノートブックを参考にしてください)。
インストール方法
たった2行でOK。従来のPillowをPillow-SIMDで置き換えます。
pip uninstall -y pillow
pip install pillow-simd
実験
Cats and Dogsデータセット
犬猫画像を25000枚ほど集めた「Cats and Dogsデータセット」を実験台として用います。画像分類の初歩として有名なデータセット。中身は全てJPEG画像です。
https://www.microsoft.com/en-us/download/details.aspx?id=54765
通常のPillowの場合
「LANCZOS法でリサイズ→画像のシャープ化」という若干重めの処理を行います。
import time
import glob
from PIL import Image, ImageEnhance
from tqdm import tqdm
def nor

サイト名: Qiita

無料メールマガジン登録

週1回、注目のAIニュースやイベント情報を
編集部がピックアップしてお届けしています。

こちらの規約にご同意のうえチェックしてください。

規約に同意する