はじめに
本プロジェクトでは、Raspberry Pi カメラを用いて昆虫を自動認識し、Node-RED 経由で Obniz を動かして「殺虫剤を自動封鎖する」システムの実装を進めています。
しかし、簡易的に作れる機械学習プラットフォームである Teachable Machine を使ったモデルにおいて、正解(虫)と不正解(それ以外)を正しく判別できないという課題が発生しました。
この記事では、チームで行った議論内容とハッカソンで得た知見を整理し、
「Teachable Machine の精度向上に必要なデータ構成」
「本番環境を想定した学習方法」
の2軸から、実際の解決策と実践方法をまとめます。
問題点:正解データ偏重による“100%誤認識”問題
議論の中で明確になった最も大きな課題は次の点です。
1. 不正解データ(ELSE)が不足している
- 現在、虫の写真約400枚のみで学習していた
- その結果、虫ではないものが映っても 信頼度100% と判定されてしまう事象が発生
- モデルが「虫しか存在しない世界」で学習してしまっていた
2. 本番環境(背景・アングル)と学習環境が異なる
- 本番は “角・壁・白背景” が中心だが、学習データの環境がバラバラ
- 遠くのランプ・黒い基板・模様のある背景が誤認識を誘発
3. 不正解データの種類を考慮していなかった
特に昆虫認識では以下が誤認の原因になりやすい:
- 黒いコード(細長い・色が似ている)
- スマホなど黒い物体(色が似ている)
- ロボットの顔・仮面ライダーなど(昆虫に形が近い)
これらを学習データに入れていないため、モデルは「知らないものを虫と判定」してしまう状態になっていました。
解決策:ELSEクラスの追加 + 本番環境特化の学習データ戦略
議論を通じて、以下の改善方針が決定しました。
1. 不正解データ(ELSE)を学習に追加
- 学習データの 1/3〜1/2 を不正解データにするのが理想
- Teachable Machine は100枚でも動作するが、より多い方が安定
- 可能であれば 正解400枚 + 不正解400〜600枚 を目指す
不正解データの優先度
- 色が似ているもの(黒いスマホ、黒いコードなど)
- 形が似ているもの(細いケーブル、基板など)
- 遠目だと虫っぽく見えるもの(ロボットの顔、仮面ライダー)
→ 「赤ちゃんが見間違えそうなもの」を集めるイメージが効果的。
2. Teachable Machine に “ELSE” クラスを追加
- すべての不正解データを “ELSE” として学習
- モデルは「虫か、それ以外か」の2段階で判断可能になる
- 理想は ELSE が最も確率が高くなる状態
3. 本番環境を再現して学習データを作成
- 虫が出る“角”を段ボールで作って撮影
- 背景は 白 or 段ボール色(黒は誤認の原因)
- 模様や基板などの背景は避ける
特化型モデルにするメリット
- 色々な景色に対応する万能型より
本番環境にカリカリに特化させた方が精度が高い - デモ当日の角度・設置場所・距離を固定して撮影し学習させる
4. 実装面の確認
-
現在の Node-RED → Obniz → Raspberry Pi の実装は変更不要
-
クラス名に
INSECT1INSECT2-
ELSE
を入れるだけで済む
-
認識は0.5秒ごとに行い、99%を超えた時にキャプチャ処理を行う仕組みも変更不要
結論:ELSE の導入と環境最適化が精度向上の鍵
今回の議論を通じて、Teachable Machine の精度向上には
① 不正解データの導入(ELSEクラス)
② 本番環境に合わせた撮影と学習データ作成
の2つが最も重要であることが明確になりました。
- 正解データだけで学習するのは危険
- 不正解データを増やすことで、モデルが「虫ではないもの」を正しく理解できる
- 背景・環境・アングルを本番に合わせた方が圧倒的に精度が安定する
- 実装部分はほぼそのまま利用でき、学習データの改善だけで性能は大きく向上する
今後は、不正解データの収集と本番環境での撮影を進め、
より安定した虫認識モデルを目指して改善していきます。