害虫画像が少なくてもAIは作れる?少量データで始める転移学習・データ拡張・人手併用

産業インサイト・課題解決///

害虫の画像認識AIを検討し始めると、早い段階で「害虫の画像が集まらない」という壁に当たります。発生頻度の低い害虫ほど撮影の機会が少なく、手元には数十枚から100枚程度の害虫画像しかない一方で、害虫のいない正常な画像は数千枚たまっている、という状況は珍しくありません。

この状況で「画像が足りないのでAIは難しい」と考えるのは自然な判断です。枚数が少ないことは、たしかに制約になります。ただし、枚数の不足だけでAI活用の可否が決まるわけではありません。むしろ見落とされやすいのは、試作モデルの正解率が高く出ていても、肝心の害虫を見逃しているケースがあることです。

最初に決めたいのは「何枚集めるか」ではなく、「AIにどこまで任せ、人がどこを確認するか」と「どのような見逃しを許容できないか」です。この2点が決まると、使うべき評価指標も、データの増やし方も、自然に絞られていきます。

本記事では、害虫画像100枚・正常画像5000枚という架空の不均衡データを例に、転移学習(Transfer learning:別の画像で学習済みの特徴を再利用する方法)、データ拡張(Data augmentation:既存画像に小さな変化を加えて学習のばらつきを補う方法)、人手併用(Human-in-the-Loop:処理の途中に人の判断を組み込む仕組み)を組み合わせ、AIが一次スクリーニングを行い人が最終確認する仕組みを段階的に作る考え方を整理します。

結論:害虫画像が少なくてもAIは作れるのか

結論から述べると、害虫画像が100枚程度でも、AIによる一次スクリーニングの仕組みを作れる可能性は十分にあります。ただし、これは「100枚で高精度のAIができる」という意味ではありません。AIだけで最終判定まで行う完全自動化を目指す話でもありません。成立の前提は次の2点です。

  • 評価指標の選び方:正解率ではなく、見逃しと誤検知の両方で性能を見ること
  • 人との分担設計:AIが一次スクリーニングを行い、人が最終確認を担うこと

なお、必要な枚数は対象とする害虫、撮影条件、許容できる見逃しの水準によって変わるため、一律の枚数は示せません。枚数を先に決めるよりも、少ない枚数でも成立する評価と運用を先に設計する方が、判断を誤りにくくなります。

害虫画像が少ないと、何が起こるのか

たとえば害虫画像が100枚、正常画像が5000枚の場合、枚数比は約1:50になります(いずれも本記事用の架空の数値です)。

データ構成の模式図 正常画像と害虫画像の枚数比
正常画像
5,000枚
害虫画像
100枚

約 1 : 50架空の数値による模式図です。実際の比率は対象や施設によって異なります。

このように偏ったデータでは、モデルが数の多い正常側に合わせて学習しやすくなり、少数の害虫を取りこぼしやすくなることが知られています(Buda et al., 2018)。

対策として「正常画像を減らして枚数をそろえる」方法が思い浮かびますが、一律に有効とは言えません。正常画像には、照明の違い、汚れ、影、トラップシートの状態など、現場で実際に起こる「害虫ではない見え方」が含まれています。減らしすぎると、これらを害虫と取り違える誤検知が増える可能性があります。枚数をそろえることよりも、偏りを前提に評価と運用を設計することが先です。

正解率が高いのに見逃す?評価指標の罠

試作モデルの正解率は高いのに、現場では見逃しが多い。この現象は、不均衡データでは珍しくありません。次の架空の例で確認します。テスト用データは、害虫20枚・正常1,000枚の合計1,020枚とします。

  • モデルA:すべての画像を「正常」と判定する
  • モデルB:害虫を拾うよう調整し、疑わしい画像を「害虫の疑いあり」と判定する

結果を混同行列(Confusion matrix:判定と実際の組み合わせを数えた表)で整理すると、次のとおりです。なお、これは説明用の架空の数値であり、実際の性能を示すものではありません。

項目(架空の数値)モデルA(すべて正常と判定)モデルB(害虫を拾うよう調整)
TP(害虫を害虫と判定)016
FN(害虫を見逃し)204
FP(正常を害虫と誤検知)050
TN(正常を正常と判定)1,000950
正解率98.0%約94.7%
再現率0%80%
適合率算出不能(害虫と判定した件数が0)約24%

正解率だけを見ると、モデルAの方が上です。しかしモデルAは害虫20件をすべて見逃しており、害虫検知としての価値はありません。業務上の価値があるのはモデルBです。AIが「要確認」とした画像は66枚(TP 16+FP 50、全体の約6.5%)で、人がこの66枚を確認すれば、1,020枚すべてを目視するより負担を大きく減らせる可能性があります。一方で4件の見逃しが残るため、閾値(しきいち:害虫と判定する基準)の調整や、目視巡回との併用といった運用上の補完が必要です。この例だけで結論を断定せず、自社の許容水準に照らして考えてください。

この比較を手元で再現するコードを示します。scikit-learn(Pythonの機械学習ライブラリ)の評価関数で、上の表と同じ値を確認できます。混同行列は「[[TN, FP], [FN, TP]]」の順に表示されます。

import numpy as np
from sklearn.metrics import (accuracy_score, confusion_matrix,
                             precision_score, recall_score)

# 架空のテストデータ:害虫(1)が20件、正常(0)が1000件
y_true = np.array([1] * 20 + [0] * 1000)

# モデルA:すべて正常と予測
y_pred_a = np.zeros_like(y_true)

# モデルB:害虫16件を検出、4件を見逃し、正常のうち50件を誤検知
y_pred_b = np.array([1] * 16 + [0] * 4 + [1] * 50 + [0] * 950)

for name, y_pred in [("A", y_pred_a), ("B", y_pred_b)]:
    print("モデル", name, confusion_matrix(y_true, y_pred).tolist())
    print("  正解率", accuracy_score(y_true, y_pred))
    print("  再現率", recall_score(y_true, y_pred))
    print("  適合率", precision_score(y_true, y_pred, zero_division=0))
Python

非エンジニアの方は、コードの中身ではなく「正解率はモデルAが高いが、再現率はモデルBだけが意味のある値を持つ」という出力の読み方を押さえておけば十分です。

どの評価指標で判断すればよいのか

再現率(Recall:実際の害虫のうち、見つけられた割合)と適合率(Precision:害虫と判定したもののうち、本当に害虫だった割合)は、役割が異なります。少数クラスが重要な不均衡データでは、適合率と再現率の関係で性能を見る方が、状況を把握しやすいことが示されています(Saito and Rehmsmeier, 2015)。

指標現場での意味重視する場面注意点
正解率全体のうち正しく判定できた割合クラス比率が近いとき不均衡データでは、害虫を1件も拾えなくても高く出る
再現率実際の害虫を見つけられた割合見逃しの影響が大きいとき高めるほど誤検知が増える傾向がある
適合率害虫と判定した画像の的中度確認の人手に限りがあるとき高めるほど見逃しが増える傾向がある

ここで重要なのは、再現率と適合率が一方を上げると他方が下がりやすい関係にあることです。ただし、再現率だけを追えばよいという意味ではありません。例のモデルBのように適合率が低い場合は、確認の件数が増えるため、人の負担とのバランスを見る必要があります。どこで折り合いをつけるかは、AIの性能ではなく業務側の許容度で決まります。

転移学習・データ拡張・人手併用は何を補えるのか

3つの方法は、補えることと補えないことが異なります。混同して期待すると、PoCで想定外の結果になりやすくなります。

方法補えること補えないこと
転移学習学習済みの特徴を再利用でき、少ない画像でも学習を始めやすい対象害虫に固有の見え方の違い、撮影条件のばらつき、評価用データの不足
データ拡張撮影条件の小さな変化への頑健さ、過学習(学習画像に偏った覚え方)の抑制実際には見ていない種類・姿勢・状態の情報、評価の信頼性
人手併用見逃しの最終確認、ラベルの追加、運用中の誤りの発見確認の手間そのもの、判定基準が曖昧なままでのラベル品質

転移学習。一般的な画像で学習済みのモデルは、輪郭や模様といった汎用的な特徴を備えており、その一部は別の課題でも再利用できます(Yosinski et al., 2014)。害虫画像が少ない場合の出発点として有効です。ただし、再利用できる範囲は課題の近さに左右されるため、効果は自社の画像で検証する必要があります。

データ拡張。反転や明るさの変更など、既存画像への変換で学習のばらつきを補う方法は、画像認識で広く使われています(Shorten and Khoshgoftaar, 2019)。ただし、枚数が増えても、元の画像にない情報が増えるわけではありません。現場で起こりうる範囲の変化に限ることが要点です。

区分変化の例考え方
入れる変化反転、小さな回転、明るさの変化、軽いぼかし現場で実際に起こるばらつきの範囲に限る
避ける変化形状を歪める変形、強い色変換判別の手がかりを壊し、実在しない見た目を学ばせる恐れがある

設定のイメージを、フレームワークに依存しない形で示します。重要なのは、拡張を学習データだけに適用し、検証・テストには適用しないことです。

# データ拡張の方針メモ(学習データのみに適用。検証・テストには適用しない)
augmentation_policy = {
    "入れる変化": {
        "左右反転": "撮影の向きが一定でない場合のみ",
        "小さな回転": "数度程度。トラップの設置ずれの範囲内",
        "明るさの変化": "照明のばらつきの範囲内",
        "軽いぼかし": "ピントのずれの範囲内",
    },
    "避ける変化": {
        "形状を歪める変形": "体の形が判断の手がかりになるため",
        "強い色変換": "色が判断の手がかりになる場合があるため",
    },
}
Python

合成画像の扱い。生成AIなどで害虫画像を作る方法もありますが、補助にとどめ、評価は必ず実際に撮影した画像で行ってください。合成画像で評価すると、実際の現場での性能を判断できなくなります。

AIが一次スクリーニング、人が最終確認する流れ

少量データでの現実的な運用は、AIに最終判定を任せるのではなく、人の確認を前提に組み立てる形です。流れを図にまとめます。

人手併用のフロー 一次スクリーニングから再学習までの流れ
  1. 現場撮影トラップシートなどを、決めた手順で撮影する
  2. AIAI判定害虫の疑いと、その確信度を出力する
  3. AI確信度で振り分け陽性判定と確信度の低い画像を「要確認」に回す
  4. 人人が確認要確認の画像を、定めた基準で最終判定する
  5. 人教師データに還元確認結果をラベルとして蓄積する
  6. AI再学習と定期評価害虫画像を徐々に増やしながら、モデルを更新する

概念図であり、すべての現場に同じ手順が当てはまることを意味しません。

この仕組みで押さえたい点は4つあります。

  • 判定基準の文書化:何を害虫とし、迷う画像をどう扱うかを事前に決め、確認者の間でそろえる
  • 確認結果の還元:人の確認結果を教師データとして蓄積し、害虫画像を少しずつ増やす
  • 評価用データの固定:再学習の前後で性能を比べられるよう、評価用の画像は入れ替えずに保持する
  • 陰性側の抜き取り確認:AIが「問題なし」とした画像も、一部を定期的に目視して見逃しの有無を確かめる

評価でつまずきやすい点

データリーク。データリーク(Data leakage:評価用データの情報が学習側に漏れる現象)は、少量データの評価を最も歪めやすい要因の一つです。同じトラップシートを時間を置いて撮った画像、連続撮影した画像、同一個体を別角度で撮った画像は、互いによく似ています。これらが学習用とテスト用にまたがると、モデルは「似た画像を覚えただけ」でも高い成績を出し、実際の性能より良く見えてしまいます。分割は、画像単位ではなく、トラップシート・撮影日・個体といったまとまり単位で行ってください。

テスト害虫が少ないことによるばらつき。テスト用の害虫画像が20枚の場合、見逃しが1件増減するだけで再現率は5ポイント動きます(例では80%が75%になります)。1回の評価結果を絶対的な数値として扱わず、分割を変えた繰り返し評価などで、ばらつきの幅も併せて確認してください。

クラス比率を保った層化分割(Stratified split)と、クラス重み(少数クラスの誤りを重く扱う係数)の算出例を示します。例では、学習は害虫60/正常3000、検証は害虫20/正常1000、テストは害虫20/正常1000に分かれます。

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.utils.class_weight import compute_class_weight

# 架空のデータ構成:害虫(1)が100枚、正常(0)が5000枚
labels = np.array([1] * 100 + [0] * 5000)
indices = np.arange(len(labels))

# 注意:実データでは、同一トラップシート・同一個体・連続撮影の画像が
# 学習とテストにまたがらないよう、まとまり単位で分割すること
idx_train, idx_rest, y_train, y_rest = train_test_split(
    indices, labels, test_size=0.4, stratify=labels, random_state=0)
idx_val, idx_test, y_val, y_test = train_test_split(
    idx_rest, y_rest, test_size=0.5, stratify=y_rest, random_state=0)

# 学習データからクラス重みを算出(少数クラスほど大きな重みになる)
weights = compute_class_weight(
    class_weight="balanced", classes=np.array([0, 1]), y=y_train)
print(dict(zip([0, 1], weights)))  # 正常は約0.51、害虫は約25.5
Python

クラス重みは「害虫の見逃しを重く扱う」ための設定で、害虫の情報量を増やすものではありません。重みの大きさと閾値の設定は、評価結果を見ながら調整していきます。

少量データで始める導入ステップ

データが十分に整うのを待ってから始める必要はありません。小さい範囲で確認しながら、段階的に進める方が現実的です。

導入ステップ 少量データでAIを導入する6つの段階
  1. 準備データ棚卸し画像の枚数、撮影条件、ラベルの有無を確認する
  2. 準備要件定義許容できる見逃しと誤検知の水準を決める
  3. 検証小規模PoC限定した対象・範囲で試作し、動作を確認する
  4. 検証評価再現率・適合率で、要件に照らして判断する
  5. 運用人手併用運用要確認の画像を人が確認する体制で稼働する
  6. 運用段階的改善確認結果を還元し、再学習と再評価を繰り返す

概念図であり、すべてのプロジェクトで同じ順序・期間になることを意味しません。

PoC(Proof of Concept:概念実証)に入る前に、次の項目を確認しておくと手戻りを減らせます。まずは、自社の状況に当てはめて、各項目を埋めてみてください。

確認項目確認する内容未整備の場合の対応
画像枚数害虫・正常それぞれの枚数と、種類別・時期別の内訳内訳が不明なら棚卸しから始める
撮影条件の統一度カメラ位置、照明、背景、解像度のばらつき撮影手順を簡易的にそろえる
ラベル付けの担当者と基準誰が、どの基準で付け、迷う画像をどう扱うか基準を文書化し、複数人で突き合わせる
許容できる見逃し率見逃せない害虫の種類、許容できる誤検知の量業務側と合意してから評価に入る
確認体制要確認画像を、誰が、いつ確認するか確認件数を見積もり、頻度を決める

よくある質問(FAQ)

害虫画像が100枚しかなくてもAIは作れますか

一次スクリーニングを担うAIであれば、作れる可能性があります。ただし、高精度を保証するものではなく、評価指標の選び方と人による確認の設計が前提です。

害虫画像は最低何枚必要ですか

一律の枚数は示せません。対象の害虫、撮影条件、許容できる見逃しによって変わります。学習用とは別に、評価用の害虫画像を確保しておくことも必要です。

正常画像を減らして枚数をそろえればよいですか

一律には言えません。正常画像には現場の多様な見え方が含まれており、減らしすぎると誤検知が増える可能性があります。枚数の調整より、評価指標と閾値の設計を優先してください。

データ拡張で何がどこまで補えますか

撮影条件の小さなばらつきへの頑健さは補えます。一方で、元の画像にない種類や状態の情報は増やせません。評価には使わず、学習データだけに適用します。

生成AIで害虫画像を作れば解決しますか

解決にはなりません。合成画像は補助として使えても、実際の現場の見え方と異なる場合があります。性能の評価は、必ず実画像で行ってください。

AIだけで判定してよいですか

少量データの段階では、おすすめしません。AIが一次スクリーニングを行い、陽性判定や確信度の低い画像を人が確認する形が、現実的な出発点です。

正常画像だけで学習する方法はありますか

あります。正常な状態を学習し、「いつもと違う」画像を検出する異常検知型のアプローチです。ただし、見つかった異常が害虫かどうかは別の問題で、評価のためには害虫画像も必要になります。ここでは概要の紹介にとどめます。

まとめ

害虫画像が少ない状況は、AI活用を諦める理由ではなく、設計の前提条件です。ここまでの内容を、次に確認することとして整理します。

  • 評価は正解率ではなく、再現率と適合率で行う
  • 転移学習・データ拡張は、補えることと補えないことを区別して使う
  • 評価用データは実画像で確保し、データリークを避けて分割する
  • AIが一次スクリーニング、人が最終確認する分担を先に決める

まずは、前述のチェックリストを自社の状況で埋めるところから、小さく確認を始めてみてください。

自社データで実現できるかを確認する

害虫画像が少ないことは、AI活用を諦める理由ではなく、設計の前提条件です。自社の画像でどこまで実現できるかは、データの状態と、許容できる見逃しの水準によって変わります。状況に近いものを、相談の入口としてご利用ください。

  • 施設や圃場の害虫モニタリングに、データ活用を取り入れたい方
  • 少量データでのモデル検証・PoC設計を相談したい、研究開発部門の方
  • 何から始めるべきかを整理したい方

参考文献

  • Buda et al. 2018. A systematic study of the class imbalance problem in convolutional neural networks. Neural Networks. Vol. 106. pp. 249-259. https://doi.org/10.1016/j.neunet.2018.07.011
  • Saito and Rehmsmeier. 2015. The Precision-Recall Plot Is More Informative than the ROC Plot When Evaluating Binary Classifiers on Imbalanced Datasets. PLOS ONE. Vol. 10. Issue 3. pp. e0118432. https://doi.org/10.1371/journal.pone.0118432
  • Shorten and Khoshgoftaar. 2019. A survey on Image Data Augmentation for Deep Learning. Journal of Big Data. Vol. 6. Article 60. https://doi.org/10.1186/s40537-019-0197-0
  • Yosinski et al. 2014. How transferable are features in deep neural networks? Advances in Neural Information Processing Systems. Vol. 27. pp. 3320-3328. https://arxiv.org/abs/1411.1792