オンデバイス物体検出の仕組み
このツールができること
AI物体検出は写真を走査し、認識した対象すべて(人、車、犬、ノートパソコン、椅子など)に対してラベル付きの枠を描きます。裏側ではTensorFlow.js上でCOCO-SSDモデルが動作します。これはCOCOデータセットで学習され、日常的な80クラスの物体を認識するニューラルネットワークです。各検出からは、クラス名、対象の位置を示すバウンディングボックス、そしてモデルの確からしさを表す0〜100%の信頼度スコアという3つの情報が得られます。
検出は画像を読み込んだ瞬間に始まり、解析はすべてデバイス上で完結します。モデルファイル(約10MB)は初回だけダウンロードされ、以降はキャッシュに保持されます。
こんなときに使う
写真フォルダの自動タグ付け、自前のモデルを学習させる前にデータセットの中身を確認する作業、シーンに写った人物や車両の数を数える用途などに向いています。画像の簡単なテキスト説明を生成するアクセシビリティ対応にも便利で、Python環境を構築せずにコンピュータービジョンのアイデアを試作したい人にも役立ちます。
座標付きの構造化JSONを書き出せるため、より大きなパイプラインにも組み込めます。検出を実行し、得られた枠を切り抜き・ぼかし・注釈付けのスクリプトへ渡す、といった流れです。
具体例
街の写真を読み込ませてみましょう。モデルは人を92%、車を88%、信号機を71%というように、それぞれ色分けされた枠に収めて返すことがあります。最小信頼度を80%に上げると信号機は結果から消え、確度の高い2つの検出だけが残ります。40%まで下げると、薄く写ったものや部分的に隠れた物体が現れ始めますが、ときおり誤検出も混じります。注釈付き画像をダウンロードすれば重ね表示を保持でき、JSONを書き出せばクラス名・スコア・枠の座標を生データで取得できます。
注意点と限界
COCO-SSDが知っているのは80クラスなので、その一覧に含まれないもの(特定の犬種、ブランドのロゴ、文字など)はラベル付けされません。重なり合った物体や非常に小さい物体は最も難しいケースで、しきい値を下回りがちです。信頼度スライダーが主な制御手段で、値を高くすると再現率を犠牲に適合率を上げ、低くするとその逆になります。写真から何も返ってこない場合は、しきい値を下げると、モデルには見えていたものの確信を持てなかった物体が現れることがよくあります。