radioc@?

レディオキャットハテナ

【勉強会メモ】オオサカプログラミングスクール「Javaerだらけのディープラーニング研究会 第5章」

osaka-prg-school.connpass.com

Deep Learning Javaプログラミング 深層学習の理論と実装 」の読書会を兼ねたAI関連技術の情報共有の場として約半年続いた勉強会の最終回。今回はなんとDL4J/ND4JのコントリビューターであるGonzalezさんに参加して頂き、実際にDL4J/ND4Jを使った開発のデモを交えながら、実開発での活用事例や開発の裏話など様々なお話を聞かせてもらえた。

なお、書籍の内容とDL4J/ND4Jの使い方についてはまだ自分の中で消化しきれておらず、もう少しおさらいしてから改めてまとめたい。

Deep Learning Javaプログラミング 深層学習の理論と実装 (impress top gear)

Deep Learning Javaプログラミング 深層学習の理論と実装 (impress top gear)

DL4J/ND4J

deeplearning4j.org

  • DL4J:Java向けのディープラーニングのライブラリ
  • ND4J:行列操作などに使う科学的計算ライブラリ。 NumpyJava版というほうがわかりやすいかもしれない。

Skymind社とGonzalezさん

DL4Jは Skymind 社が中心となって開発をしている。Gonzalezさんはもともと日本のSIerで働いていたが、現在はSkymind社にJoinしてDL4Jの開発に関わっている。DL4Jの公式サイトではGitterを介してサポートが受けられるが、その対応は主にGonzalezさんが行っている。

github.com

Skymind社は基本的に全員フルリモートで働いているが、DL4Jを使った特定の企業向けの実開発も請け負っているようで、ロボットに特定の物体を認識し操作させるためにその物体の画像を学習させるような仕組みをDL4Jを使って開発しているとのこと。その仕組みがどのように構築されているかを実コードを使ってデモしてもらって非常に興味深かったが、理解が追いついておらずここでの説明は割愛。

ML/DL系でよく聞く話だが、学習するための画像を集める苦労話も聞けた。Transfer Learning(転移学習)であれば1,000件集めれば何とかなることもあるらしいが、基本的には1万件ぐらいは集めたいとのこと。データを用意するための工夫としてOpenGLを使って角度を変化させた対象物の画像を作成し、全然関係のない画像の上に貼り付けることで自前でデータを準備する事例が紹介された。

JavaとDeepLearning

Gonzalezさん曰く、現在多数のDLのライブラリがある中でJava製のDL4Jはエンタープライズ向けに適したライブラリであるとのこと。確かに、既存のエンタープライズ領域に広く普及しているJavaのシステムからすれば、DLを利用するためにプラットフォームを捨てるよりもJava製のDLライブラリで実装するほうがメリットが大きい場合もありそうだ。現状のDLライブラリはPythonをはじめとした数学的な演算処理とデータの抽出加工などが得意な言語が先行してビジネスへの活用が進んでいるが、ある程度技術がこなれてくると言語による差異は徐々に減ってくるはずなので、エンタープライズにおけるDL4Jというのは有力な選択肢となりうると感じた。

今後について

TensorFlowなどのメジャーな他のライブラリは全て評価しており、それらの動向を抑えつつDL4Jも追従していきたいとのこと。ver.1.0ではYOLOが実装される予定らしい。

参考情報

Transfer Learning(転移学習)

ある領域で学習させたモデルを、別の領域に適応させる手法。学習済みのモデルを利用することで少ないデータでも学習ができ、計算時間も短縮できる。

qiita.com

YOLO

速度に特化した物体検出アルゴリズムで、一度に物体の座標位置とクラス確率を推論することで、候補領域ごとに何度も推論する従来の手法よりもやや精度が落ちるものの速度を上げることに成功している。YOLOとはYou Only Look Onceの略らしい。

pjreddie.com

DeepLearning4J

GonzalezさんがQiitaに書いたDL4Jの紹介記事。まだDLの開発のことを十分に理解できていないが、多くのことがDL4Jでもできるようなので、Javaだけでモデルの開発、評価を行い、本番にデプロイまでできるというのは確かに魅力を感じる。Scalaを使う選択肢もあるかもしれない。

qiita.com