Chainer x Azure ML Hackathon CV編に参加してきた
はじめに
に参加した。振り返りが推奨されるとのことだったので、自分のやったことをまとめておく。
参加目的
- Chainerの使い方を学ぶ(Chainer使ったことなし)
- DNNのモデルを転移学習1するときの勘所を学ぶ※未達
振り返り
- Chainerの使い方はChainer v4 ビギナー向けチュートリアルにほとんどすべて書いてあった
- ChainerCVというComputer Vision向けのライブラリを使うと、訓練済みの画像認識モデルがすぐ使える
以下、やったことメモ(雑文)
1. Azure Machine Learningチュートリアル by Microsoft畠山さま(@dahatake)資料
- VoTTというアノテーションツールを使うと画像とVideoのタグ付けが楽ちんになるらしい(未使用)
- Azure Machine Learning Workbenchは複数人でMLプロジェクトやるときに便利(バージョン管理とか)
- NC6インスタンスを使う際のおすすめリージョンは「米国西部2」(GPUインスタンスがたくさんある)
2. Chainerチュートリアル by PFN齋藤さま(@mitmul)資料
- Chainerはdefine-by-run2のNNフレームワークのパイオニア(最近はPyTorchやTensorFlow Eager Executionでもできる)
- Chainerの強みは、分散深層学習やCuPy連携による高速学習
- 最近のアップデートはSequentialクラス。(Kerasと同じように書ける)
- DNNモデル作るとき、Optimizerは重要。基本的にはAdamで良い(精度を求めるときはMomentum SGDを使って学習率を変えて、とかやんないといけない)
- Chainerではパラメトリックな関数をLink (chainer.links)、ノンパラメトリックな関数をFunction (chainer.functions)として区別している
- Function(chainer.functions.max_pooling_2dとか)に対してパラメータを部分適用するときは、Pythonのpartialを使う3
- 独自Datasetを定義するときはchainer.dataset.DatasetMixinを継承する(呼び出し時にメモリロードするようになる)
3. ハッカソン
- Azure、Chainerを使って自由にどうぞという感じ
- Azureのインスタンス立ち上げとか、Azure Data Science Virtual Machine (Ubuntu)にデフォルトで入ってるChainerのバージョンアップとか、前段の部分で苦戦している人が多かった
- サンプルデータとしてKaggleのCats and Dogsとanimeface-character-dataset、CelebA Datasetなどが紹介された
- とりあえず自分はChainerのYOLOv3を使ってCats and Dogsの物体検出と分類をやってみた(ひねりがない)
- chainercv/examples/yolo at master · chainer/chainercv · GitHubこのサンプルを動かしただけ(2,3枚確認した限り、きれいに犬猫の検出と分類ができていた)
- ほんとはここ(Tips using Links — ChainerCV 0.10.0 documentation)を参考にしながらCats and Dogsのデータでfine-tuningまでやりたかったけど、時間切れでできなかった
- yolo_v3.pyの153行目あたりでchainer.ChainList()を定義しているから、このあたりのネットワークの中間出力をうまいこと使うとfine-tuningできるらしい
- ChainerのTrainerを使うとモデルの訓練やデバッグがやりやすそう(デバッグはTensorFlow一強かと思っていたので、この辺は収穫だった)
- ChainerUIを使うと、TensorBoardのようにLearning Curveをブラウザ上にリアルタイム描画できる