はじめに
Reflowable Readerというアプリを公開していますが、最近更新していません。
その理由は、Flutterで画像の読み込みが遅く、解決方法が分からないため、.NET MAUIでの作り直しを考えているためです。
そろそろ.NET MAUIの正式版が発表されそうなので、作り直しに備えて機械学習というものを試してみました。
画像分類を試した理由
Reflowable Readerは自炊した小説をリフロー(再配置)して読めるアプリです。
そのため、文章のページとそれ以外のページ(表紙や挿絵のページ)を区別する必要があります。
現状は「文章が並んでいる画像かどうか」を判定する条件を自分で考えて実装していますが、精度は悪いです。
そこで、機械学習を用いて画像の分類を行うことができるらしいので、画像分類を行った精度の向上を試みます。
やったこと
AI Academy様のDeep Learningで犬・猫を分類してみようという記事を参考にさせていただき、記事通りにPython、TensorFlow、Keras等を用いて画像分類を行いました。
Google Colabは使用せず、ローカルマシンでGPU(CUDA)を利用して処理しました。
スキャンされた小説の画像は傾き補正されているため、角度を振った画像の学習データは不要と考えて作成しませんでした。
他のパラメータ等は記事のままの値としています。分からないので…
結果(精度比較)
学習に用いたデータとは異なるデータをテスト用に準備して推論を行い、精度を確認してみました。
精度の計算式等あるのでしょうが、単純に「文章の画像を文章と判定した数/全数」及び「文章以外の画像を文章以外と判定した数/全数」が何パーセントかを求めました。
機械学習 | 自分で考えた判定条件 | |
文章 | 85% | 72% |
文章以外 | 99% | 98% |
学習させる画像データの調整や、機械学習のパラメータの調整を行えば、更に精度向上すると考えられます。
自分で考えた判定条件は…まだ本気を出していない(?)とはいえ低すぎですね…
課題
機械学習を使用することで、高い精度で画像分類できることが分かりました。
実際に機械学習をアプリで使用するには以下のような課題があるため、次はこれらを調べていきたいと思います。
・.NET MAUIで機械学習(推論)をどう行うか
・Android端末やiPhone上での動作速度はどの程度か
・学習して作成されたディープラーニングモデルのファイルサイズが大きいがどうしたら良いのか
コメント
[…] 機械学習というものを試してみましたの続きです。前回はサンプルをほぼそのまま使わせていただいたせいか、精度(文章の画像を文章と判定した数/全数)が85%と満足いくものではありませんでした。パラメータやアルゴリズム、トレーニングデータの変更などいろいろと精度を上げる方法はありますが、ML.NETを試すことにしました。 […]