MultiprocessIterator
が有能な件

自己紹介

  • 仕事

    • ECサイト、ニュース、ポータルなどの全文検索
    • 画像や文章からの自動タグ付けにchainerを使用
    • Supership Advent Calendarの17日目に書きます
       
  • 趣味

    • Raspberry Piでなんか作る
    • Raspberry Piでの画像処理にchainerを使用

Chainer使用例1: 図書館司書

図書館司書の中身

OSSを駆使して全部Raspberry Pi上で処理

例2: WebDNNで物体検出

赤=乗り物, 緑=動物, 青=人
  • 極小リソースでCNNを動かしたい
  • モデル自体を小さく軽く作る
  • 軽量モデルの学習時に起きること。それは

前処理がボトルネックになる問題

前処理?

教師データとして画像を扱う際、わざとノイズを加えてモデルの汎化性能向上を狙うの、よくやりますよね

左右反転

ランダム切り抜き

ランダム回転

ざらざらノイズ

色のバランス変更

重ねがけ

前処理ボトルネック

  1. 前処理を重ねるとCPU処理に時間がかる
  2. GPUはスカスカなのに学習が進まない状態に

前処理ボトルネック

Pascal VOC学習中のGPU
Urban Object Detection学習中のGPU

この問題を解決するのが

MultiprocessIterator

MultiprocessIterator

  • ChainerのMNISTチュートリアルに登場するSerialIteratorと差し替えて使える
  • n_jobsで指定した数だけworkerプロセスを起動し、並列でデータを準備してくれる

効果: GPU使用率up

Pascal VOC学習中(n_jobs=5)
Urban Object Detection学習中(n_jobs=8)

効果: 学習速度up

注意点

当然CPUのCore数が要求されます

注意点

データを逐次ディスクから読み出す場合、
ディスクの読み出し速度も要求されます

ご清聴ありがとうございました