ABEJA Platform用の機械学習サンプルを沢山作った

[ABEJA Platform Advent Calendar](https://qiita.com/advent-calendar/2018/abejaplatform) 2018の15日目です。

# 概要

ABEJA Platformは、データの蓄積・アノテーション・学習・デプロイ・再学習と機械学習に必要となる全ての面倒なプロセスを実行する基盤で、これらのインフラを用意する必要がないのが売りとなっています。学習した結果をWebAPIとしてデプロイすることで、様々な用途に利用できます。

さて、ABEJA Platformを実際に使いたい！となったとしても、やっぱりサンプルがないと大変ですよね。本記事では、ABEJA Platformを使いたくなった際に、素早くキャッチアップできるようにしたい！と言う個人的な想いから、様々なフレームワークでサンプルを作った話を書きます。本記事のコードは全て[ここ](https://github.com/abeja-inc/abeja-platform-samples)に置きました。

なお、2018年12月15日現在、Platformの仕様変更により動いておりません。月末までには修正予定です。実は以下は僕が一人で空き時間で趣味で取り組んでいたりするので、気が乗った時にしかアップデートされません。プルリクお待ちしてます！

# Chainerのサンプル

まずは、Chainerのサンプルです。ChainerはPFN社が開発した世の中で最初にDefine by Runの設計で作られたDeep Learningフレームワークです。日本ではかなり多く使われており、日本語の資料が充実しています。さらに、Chainercvなどの公式の周辺ツールが沢山あり、かつ非常に読みやすいコードになっています。個人的には、全フレームワークの中では一番好きです。

さて、現時点でリリースしているサンプルは

- [犬猫判定サンプル](https://github.com/abeja-inc/abeja-platform-samples/tree/master/chainer/cats_dogs)
- [CIFAR10サンプル](https://github.com/abeja-inc/abeja-platform-samples/tree/master/chainer/cifar)
- [Object detectionのモデルであるSingle Shot Multibox Detector (SSD)](https://github.com/abeja-inc/abeja-platform-samples/tree/master/chainer/ssd)
- [Semantic SegmentationのモデルであるSegNet](https://github.com/abeja-inc/abeja-platform-samples/tree/master/chainer/segnet)

の４つを公開しています。使い方はリンク先を見ていただければ、（場合によっては）ちゃんと書いてあります。正直、僕の体力が尽きてドキュメントが追いついていないのもありますが。直近の予定としては、最初に書いたバグの修正が終わり次第、自然言語処理のサンプルを作ろうと思っています。また画像生成も追加する予定です。

# Pytorchのサンプル

続いて、Pytorchのサンプルです。PytorchはFacebookが開発を主導したフレームワークで、元々はChainerをforkしてスタートしたらしく、かなりChainerと似たスタイルのフレームワークです。最近は世界で見ると最も勢いのあるフレームワークであり、github上の研究用のコードとしては最も多くのサンプルがあるフレームワークです。

さて、現時点でリリースしているサンプルは

- [犬猫判定サンプル](https://github.com/abeja-inc/abeja-platform-samples/tree/master/pytorch/cats_dogs)
- [CIFAR10サンプル](https://github.com/abeja-inc/abeja-platform-samples/tree/master/pytorch/cifar)
- [Object detectionのモデルであるSingle Shot Multibox Detector (SSD)](https://github.com/abeja-inc/abeja-platform-samples/tree/master/pytoch/ssd)
- [Semantic SegmentationのモデルであるSegNet](https://github.com/abeja-inc/abeja-platform-samples/tree/master/pytorch/segnet)

の４つを公開しています。今後の予定としては、Pytorchだからこそできる最新の手法を実装していこうかと思っています。

# Tensorflowのサンプル

TensorflowはGoogleが作っているフレームワークで、こちらもPytorchと同じくらいの勢いがあります。また、分散学習をするための仕組みが整っている、運用のための機能がある、kubeflowのような周辺ツールも充実している、など実運用を考えると非常に強力なフレームワークです。また、googleが出しているサンプル集も非常に強力で、多くの手法が試せます。

実はtensorflowのサンプルは現時点では作れておらず・・・。今後充実させていく予定です。

# その他のDeep learningフレームワーク

Kerasとmxnetもサンプルを作る予定です（短

# Non-deepなフレームワーク

実はABEJA PlatformはDeep learningの学習に留まらず、scikit-learnなどの機械学習フレームワークだって扱えます。実を言うと、pipインストールできるものであれば、なんでもOKなんですよね。

さて、現時点でリリースしているサンプルは、

- [scikit-learnによるirisデータの分類](https://github.com/abeja-inc/abeja-platform-samples/tree/master/non_deep/catboost/iris)
- [catboostによるirisデータの分類](https://github.com/abeja-inc/abeja-platform-samples/tree/master/non_deep/catboost/iris)
- [lightFMによるmovielendsの推薦ロジック](https://github.com/abeja-inc/abeja-platform-samples/tree/master/non_deep/lightfm/movielens)

の３つを公開しています。こちらも、まだまだ拡充予定です。クラスタリングなどデータ分析で必要になるテクニックなどを追加していく予定です。

# ベンチマークデータセットのサンプル

2018年12月現在、ABEJA Platformでは、学習済みデータをDatasetという形式で保存する必要があります。具体的には、画像などの生データをDatalakeと言うファイル置き場に保存し、アノテーション済みデータ（ラベルや矩形など）とDatalake上のファイルのID情報を紐付けたものをDatasetとして保存します。面倒ではあるものの、逆に特定のフォーマットにすることで、COCOでもVOCでも学習コードを使いまわせるのは強みです。サンプル作りの過程において、既存のベンチマークデータセットで学習できることも非常に重要ですので、色々なデータセットをPlatform向けに変換する取り組みも進めています。また、このような変換サンプルを作ることで、自身でこれまでに作ったサンプルを乗せる際の参考になればと思います。

この取り組みも鋭意進めている最中ですが、現時点では、

- [CIFAR10](https://github.com/abeja-inc/abeja-platform-samples/tree/master/dataset/cifar10)
- [PascalVOC Object Detection Dataset](https://github.com/abeja-inc/abeja-platform-samples/tree/master/dataset/voc)
- [CamVid](https://github.com/abeja-inc/abeja-platform-samples/tree/master/dataset/camvid)

の３つに関して、変換するサンプルを作っています。

# まとめ

本記事では、ABEJA Platformを使いたくなった際に、素早くキャッチアップできるようにしたい！と言う個人的な想いから、頑張って沢山サンプルを作りました。まだまだ全然足りてないですが、如何にかこうにか隙間時間を見つけて拡充していこうと思います。