本ブログはアフィリエイト広告を利用しています。

Microsoft Lobeで作成したモデルで推論するとconfidenceが0 or 1にしかならない

lobe-icon プログラミング

画像分類を行いたかったのでノーコードで機械学習できるLobeを使用しましたが、confidenceが0、または1にしかならなくて使い物になりませんでした。その際に試行錯誤した記録を残します。
なお、機械学習関連は全くの素人です。

実行環境

Lobeでモデル作成して推論してみた

写真の振り分けを行うために、ラベルを人間と風景とLegoの3種類としてモデルを作成しました。各画像はgoogleの画像検索から100枚ちょっとずつ拝借し使用しました。
“100% correct”になるように調整し、Optimize Modelで最適化も実行しました。
Useで画像を取り込んでテスト用の画像で推論し、結果も良好そうだったのでLobe Connectでも試しました。すると確かに分類はできていましたがconfidenceが偏り過ぎていて全く関係ない画像でもconfidence:1や0等、期待するような値ではありませんでした。
期待する値としては関係ない画像は confidence が0.3以下とかそれくらいです。そうすれば分類に失敗したとして判断できるのですが0 or 1という極端な値になるとそれもできません。

{"predictions":[{"label":"lego","confidence":1},{"label":"landscape","confidence":8.4482831847134e-25},{"label":"human","confidence":0}]}

画像を増やしたり減らしたりと試行錯誤した結果、以下のようにしたところ多少改善しました。

  • 構図的にほぼ同じ画像は省く
  • incorrectが多少ある状態にする
  • Optimize Modelは実行しない

これらで極端な値を取ることはなくなりましたが精度が悪すぎてダメでした。

そこでMNIST(手書き数字の画像判別)も試してみたところこちらは0,1という値は取らず、0.XXXとなったのでLobe自体に問題はなさそうです。
何が違うかと言えば、やはりモデル作成に使用した画像しかあり得ないのですが初心者にはどういった画像が機械学習に最適なのかわかりません。困りました。

Teachable Machineも試してみた

Lobeでは失敗したので別のツールでもやってみました。自分でコードを書いて学習させるという選択肢はありません!
画像のようにLobeと同じようなプロジェクトを作成しモデルを作成します。

tm

モデルを作成後、プレビューでテスト画像を判別してみたところこちらでも偏りがでました・・・。
いえ、こちらも判別自体はできているので確かに問題はなさそうなのですが100%ってやっぱりちょっとおかしくない?と。もうちょっと謙虚に大体これくらいかなー?くらいの緩い感じでいて欲しい。

tm-result

ということで結果としてはLobeと同様に使えないなということになりました。ただ、Teachable Machineのトップページに使用例の動画が流れていてそちらでも100%が出ているので私が気にし過ぎなのかもしれません。

Teachable Machineのパラメータを変えてみた

Lobeはモデルの作成を全自動でやってくれますがTeachable Machineは変更できるパラメータがあります。これらのパラメータを変更して調整してみました。

  • エポック

1 エポックとは、トレーニング データセット内のすべてのサンプルをトレーニング モデルに少なくとも 1 回供給したことを意味します。たとえば、エポックが 50 に設定されている場合、トレーニングしているモデルはトレーニング データセット全体を 50 回学習することを意味します。一般に、数が多いほど、モデルはデータを予測するために適切に学習することになります。

  • バッチサイズ

バッチとは、トレーニングの 1 回の反復で使用するサンプルのセットです。たとえば、画像が 80 件ある場合に、16 というバッチサイズを選択したとします。この場合、80 ÷ 16 = 5 で、データは 5 つのバッチに分割されます。モデルに対し 5 つのバッチをすべて供給すると、1 エポックを完了したことになります。

  • 学習率

この数値を調整する場合はご注意ください。わずかな違いでも、モデルの学習パフォーマンスに大きく影響する可能性があります。

最初はヘルプ通りにエポックの数値を上げてみました。学習率についてはデフォルトのまま。そうすると余計に0%と100%に偏り始めたので今度は エポック、 学習率を下げてみてとパラメータを調整してみました。
結局以下のようにするとそこそこ良い感じになりました。

tm-params

正直エポックと学習率が何を意味しているのかよくわかりませんが、何となく数値を上げるとより厳密に、下げると緩めになるんじゃないかなというのがいじってみた感想です。

Lobeは?

LobeではTeachable Machineのようにパラメータを調整するような所は見当たりませんでした。知らないだけかもしれないけど。
きっとTeachable Machineのエポックや学習率のような値がLobe内部で自動的に選択され、それらがより厳密な推論を行うような設定になっているんじゃないかと想像しています。調整できないならこのconfidenceの0,1問題は今のところ解決できそうにありません。もちろんMNISTでは問題なく判別可能であるため画像を厳選していけば期待するようなconfidenceを取得できるはずです。
ただそこまで頑張りたいかというとそうでもないので今回はLobeの使用を諦め、 Teachable Machine で作成したモデルを使っていきたいと思います。

まとめると

  • Lobeでモデル作成するには使用する画像がとても大事(そう)
  • confidenceが0、1にしかならないなら使用する画像を見直した方が良い
  • それでもダメなら別のツール(Teachable Machineなど)を使ってみる

初心者にはこれが限界でした。

以上です。

コメント

タイトルとURLをコピーしました