今さらながらMXNetでの画像の扱い方

  • 直接numpy ndarrayへ
from PIL import Image
import numpy as np

filename = 'sample.jpg'

img = np.array(Image.open(filename))
  • バイナリデータとして読み込んだ後、numpy ndarrayに変換
from PIL import Image
from io import BytesIO 
import numpy as np

filename = 'sample.jpg'

with open(filename, 'rb') as f:
    binary = f.read()
img = np.array(Image.open(BytesIO(binary)))
  • 直接mxnet NDArrayへ
from mxnet import image

filename = 'sample.jpg'

img = image.imread(filename)
  • バイナリデータとして読み込んだ後、mxnet NDArrayに変換
from mxnet import image

filename = 'sample.jpg'

with open(filename, 'rb') as f:
    binary = f.read()
img = image.imdecode(binary)

画像をバイナリーデータとして読み込むことでメモリの節約になる。
mxnet NDArrayはデータをマージするなどの処理がnumpy ndarrayより遅いらしいので、そういった事が必要な場合にはnumpy ndarrayを使用するのがよい。必要でない場合にはバイナリデータ→mxnet NDArrayの変更を行えばよい。