やりたいこと
冬と言えばお雑煮、お雑煮といえばお餅ではないでしょうか。お餅にも様々なおとももちが存在します。みなさんはどんなお餅が好きでしょうか。
今回はDataRobotのVisual AIでお餅のおとももちを分類するモデルを作成してみます。また、転移学習で作成するモデルとの比較もしたいと思います。
画像データ
対象のお餅は以下とします。
- あんころ餅
- 五平餅
- 柏餅
- みたらし団子
- 桜餅
- よもぎ餅
- ずんだ餅
各画像20枚ずつの合計140枚で学習を行います。収集した画像はラベル毎にフォルダに入れておきます。
DataRobot
新しくプロジェクトを作成します。今回はローカルファイルを選択し、お餅画像のzipファイルをアップロードします。
ディレクトリをきちんとラベルとして認識してくれるので、今回の予測のターゲットとして指定します。
設定はそのまま実行してみます。
モデルの結果を確認します。指標は正解率とします。90%程度の正解率のようです。
アクティベーションマップを確認すると、五平餅やみたらし団子は串の部分が判断に使われているように思えます。全てうまくいっているわけではなさそうですね。
多クラスの混同行列です。五平餅とみたらし団子、よもぎ餅とずんだ餅が間違えやすいのではないかという思いで選定したんですが、あんころ餅と桜餅、五平餅とよもぎ餅で間違えているようですね。元画像の背景部分の影響もあるかもしれないです。
画像をアップロードしてからほぼ何もしていないですが、非常に簡単にモデルの作成とモデルの評価が確認できます。
訓練データに存在しない画像で予測をしてみます。
CSVをダウンロードできますが、以下のように正しく予測できているようです。
転移学習
MobileNetV2での転移学習と比較してみます。実装はpytorchで行いました。画像データが少ないためtorchvision.transforms
で学習時のデータを水増しします。
訓練時のaccuracyとlossが以下です。10epochぐらいで十分精度が出ているようです。精度が出ないようであればファインチューニングも試そうと思いましたが、必要なさそうです。
同様に追加画像での予測を試しましたが、正しく予測できていました。
比較
圧倒的にDataRobotは簡単でした。特に結果の確認が非常に簡単です。説明のために資料を用意する必要もないです。モデル作成の時間はCPUでの実行だったので、多少遅いのではないか、画像枚数を増やした時にどの程度遅くなるのかという点が気になりました。転移学習の場合はGPU環境で20epoch程度の学習で済むため学習は早いです。ただ、実装や結果の確認に費やす時間を考えればDataRobotは優れていると感じました。
おわりに
DataRobotというとAutoML、自動化のイメージが強くありましたが、情報共有の点でも非常に良いと思いました。自社でも機械学習、深層学習を案件で使っていますが、情報共有に課題があり属人化していると感じています。DataRobotではモデルに対する評価をすぐにグラフィカルに確認でき、誰でもできる点が非常に魅力的です。初めてDataRobotを使いましたが、他の回帰や分類についても試してみたいと思います。