
【LINNE LENS】お魚好きとしても、エンジニアとしても心惹かれるアプリ(その2)
精度を数値として出すと、その実力を的確に判断できて楽しい。
先日、「LINNE LENS」という生き物判別アプリを紹介した。
魚などの生き物を読み込むと、その種類を教えてくれる「LINNE LENS」。
非常に興味深いアプリで、魚オタ、、、お魚好きとしても、エンジニアとしても、とても楽しんでいる。
「LINNE LENS」の精度は非常に高く、同じ青い魚である「ソラスズメダイ」と「ナガサキスズメダイ」を見分けることも可能だ。
(慣れてないと見分けるのは難しい魚)

そんな高い認識精度をもつ「LINNE LENS」だが、その精度の高さを数値にして示すことはできないだろうか??
今回は「LINNE LENS」の精度の高さを数値で示す方法について、取り組んだ。
1. 精度評価にAIの評価指標を活用
「LINNE LENS」の精度の高さはどのように示すべきか?
これは、「LINNE LENS」がどのようなプログラムで動いているかに注目する必要がある。
「LINNE LENS」の内部で動くプログラムは、「物体検出」と呼ばれるAIの分類アルゴリズムを活用している。
エンジニア視点でみると、分類アルゴリズムの精度には決まった評価指標が存在しているのだ。
上のリンク内でも説明されているが、分類アルゴリズムの精度は以下のようなマトリクスで評価される。

アプリが生き物を正しく認識できた場合はTP(True Positive)と呼び、アプリが生き物を正しく認識できなかった場合をFN(False Negative)、生き物とは違うものを生き物と認識してしまった場合をTN(True Negative)と呼ぶ。
今回のこのアプリの精度評価においては、TN(True Negative)の項目は使用しない。
次はTP, FN, TNの例を定義する。
2. 正解・不正解指標の定義
アプリの精度を評価するために、正解・不正解判定の定義を決めていく。
2-1. 正解(TP)の場合
アプリの生き物判定が正解となる場合、以下の3パターンが考えられる。
1つめは「完全一致」。生き物の検知も種類の分類も完璧にできている場合だ。
2つめは「同種で一致」。生き物の検知はできているが、種類の分類が異なる。ただ、その種類が同じ仲間の場合を正解とする。
最後の3つめは「部類が一致」。生き物の種類は分類できないが、部類が正しい場合も正解とする。

これら、3つの例を正解(TP)として正解カウントを行った。
2-2. 不正解(FN, TF)の場合
次に、不正解の場合を定義する。不正解はFNとTFの2つがあるため、それぞれの定義をそれぞれ以下とした。
① FN:False Negativeの場合
FN(False Negative)は「実測値が正なのに、誤って負と予測したもの」となる。
LINNE LENSにおけるFNは以下のように定義した。

FNは「名前が違う」と「検出漏れ」の2パターンに分けることができる。
「名前が違う」場合は、生き物が検出できているものの、生き物の種類が異なる場合をさし、「検出漏れ」は生き物をアプリが認識できなかった場合をさす。
FNはアプリが生き物を正しく認識できなかった回数をしめす。
② FP:False Positiveの場合
FP(False Positive)は「実測値が負なのに、誤って正と予測したもの」となる。
LINNE LENSにおけるFPは以下のように定義した。

FPは「違う生き物が認識」された場合をカウントする。
「違う生き物が認識」は、魚がいない場所で違う生き物が認識された場合とした。
3. LINNE LENSの精度比較表
ここまでの正解・不正解の定義で、LINNE LENSに生き物を読み込ませながら、精度比較表を作成した。
使用した生き物のサンプルは80体の海洋生物でテストを行った。
テストの結果は以下のようになる。

まず、分かることは、「精度がめちゃくちゃ良い!」ことだ。
80サンプル中、正しく生き物を認識できた数は69サンプル。
その精度は86.25%となる。
また以下のような、RecallとPrecisionといった指標を活用してみよう。
Recallは「実際に正であったもののうち、どれだけ正と予測できたか」を示す指標であり、Precisionは「正と予測したものが、どれだけ正しかったか」を示す指標だ。(詳細はリンク参照)


RecallとPrecisionの指標をそれぞれ算出してみると、
Recallは88.46%、Precisionは97.18%といった、こちらも高い値を示す。
RecallやPrecisionの解釈はここで詳細に述べることはしないが、LINNE LENSというアプリが非常に高い精度で、生き物を認識できることは数値の面からよくわかった。
実際に数値で算出すると、このアプリの精度の高さがよく分かるね〜