要約
- random {vertical, holizontal} flip を使うべきかをOptunaで探索してみた
- 3層MLP+MNISTの場合、共に不要という直感にあう結果になった
- サンプルコードはgithubにて公開した
モチベーション
Optunaを使って何か作ってみたかった。
大体以上ですべてなのですが少しだけ補足します。
OptunaのMLPの層数を探索するサンプルを眺めていた時に、AutoAugmentのことを思い出しました。(AutoAugmentの解説はこちらが簡潔でわかりやすかったです。)
Optuna公開からしばらくたちましたが画像認識の前処理探索に使った話をきかない(Qiitaにはなさそう)ので自分で作ってみました。
実行と結果
サンプルを実行すると最終的に以下のような結果がでてきます。
$ python minimum_autoaugment.py
(途中の出力を省略)
$ python FrozenTrial(trial_id=4, state=<TrialState.COMPLETE: 1>,
value=0.02066851265822789, datetime_start=datetime.datetime(2019, 3, 20, 9,
54, 27, 523348), datetime_complete=datetime.datetime(2019, 3, 20, 9, 56, 6,
612511), params={'vertical flip': False, 'horizontal flip': False},
user_attrs={'main/loss': 0.03885125317600872, 'main/accuracy':
0.9896055437100213, 'validation/main/loss': 0.06722574303799038,
'validation/main/accuracy': 0.9793314873417721, 'epoch': 10, 'iteration':
4688, 'elapsed_time': 98.81312308297493}, system_attrs={},
intermediate_values={}, params_in_internal_repr={'vertical flip': 1,
'horizontal flip': 1})
params
は一番良かったときのパラメータ、user_attrs
は一番良かった時のログレポートです。
作成したもの
githubにて公開しています。
私が実装をさぼったコンセプト確認のためのプロトタイプですので、以下の点は要改善かなと思っています。この記事がうけたらやります。
- GPUを使っていない
- MNISTを使うようハードコードしてある
- MLPを使うようにハードコートしてある
- 探索できるaugmentationが少ない
まとめ
画像認識における前処理方法をOptunaで探索するサンプルアプリを作成しました。
random flipの要否を3層MLP+MNISTの場合で検証し、不要という直感にあう結果が得られました。
サンプルコードはgithubにて公開しています。