「それホントにAI必要？？」現場で活きる画像解析ソリューションの選定方法とは

# 動機
普段お客様から案件の依頼を受ける際、当然のことながらお客様は弊社にAIによるソリューションを期待されるのですが（社名が社名[^1]ですからね）、そのうちのいくつかについては、AIによる解決が難しい、もしくは「そもそもこれAI使わなくてもよくない？」という類のものがあったりします。AIを使わないというのは、AIによる確率論・統計学的な処理でなく、ルール（ロジック）ベースのプログラムによってデータを解析することを指すのですが、システム専門家でない一般の方々にとっては区別がつかないであろうことも承知です。

というわけで、今回の記事では、画像の物体検知というトピックを中心に、AIを使ったアプローチとAIを使わないアプローチによって、それぞれの結果や精度にどのような違いが生まれるか、メリット・デメリットなど各観点から比較し、現場でのソリューション選定のヒントを提示することを目的として各種検証を行っています。最後までお楽しみいただければ幸いです。

[^1]: 株式会社 **AI** Dynamics Japan

# AIと画像処理技術
はじめに、用語の大まかな区分について確認しておく必要があります。

**AI**とは、機械学習に代表される、ヒトの知能を模倣することによってデータ解析を可能とする技術の総称であり、最近ではDeep Learningという言葉がAIと同義で扱われることが多いですが、実際はもっと広義の漠然とした概念です。

対して**画像処理技術**とは、主に画像データを加工・変換することによって情報を得る技術であり、簡単なものでは「ぼかし」「マスキング」「色相変換」、高度なものでは「輪郭抽出」「差分検知」などが含まれます [^2]。

開発やお客様への説明においては、AIソリューションと対比する形で画像処理技術という言葉を使うことがあったりしますが、論理的に考えれば、１枚の画像をラベルごとに分類したり、物体位置を検出したりするAI技術というのは、画像処理技術の一部と考えることができます。
そのため、本記事においては、「AI」VS「画像処理技術」でなく、「AIを使った画像解析」VS「AIを使わない画像解析（非AI）」という表現で話を進めます。

[^2]: オープンソースソフトウェアである[OpenCV](https://opencv.org/)により、あらゆる画像処理の機能を簡単に利用できます。

# 検証環境
OS: Windows(WSL)、CPU：Intel® Core™-i5、メモリ：8 GB、GPU：なし
言語：Python
ライブラリ：Tensorflow、OpenCV

# 物体検知（AIを使用した場合）
画像（動画）の中から物体の位置を推定する物体検知タスクについて、AIを使ったアプローチと、その結果得られる出力の特徴についてご紹介します。

今回使用したAIモデルは、 [SSD MobileNet V2](https://arxiv.org/abs/1801.04381) という、物体検知モデルの中では一般的によく使用されるモデルを採用しています。
解析方法は、サンプル動画をフレーム毎にAIモデルに入力し、検出結果を反映したフレームを再度動画にするという手順で行います。

こちらが、サンプル動画をAIモデルで処理した結果となります。
<iframe width="560" height="315" src="https://www.youtube.com/embed/mh1Hj6U6HA8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

物体検知AIの出力形式は、物体名（ラベル）、物体位置（四角形の頂点座標）、確率（信頼度）の配列としてあらわされます。

動画全体を通して、２人の人物は90%以上の信頼度をもって高精度で検出できていることがわかります。

ノートPCは「Laptop」というラベルとして検出されていますが、動画の途中で検出できていない箇所もあります。検出されない物体については、信頼度による検出判定ライン（閾値）を下げることによって検出されやすくすることは可能ですが、反対に検出すべきでない物体が誤検出される可能性が高くなります。一般的に閾値を下げるほど、画像内の小さな物体でも検知しやすくなります。今回の検証では、信頼度閾値を40%に設定してあります。

動画途中でヘッドホンを外した際に物体として検出されないのは、AIモデルが「ヘッドホン」を検出するように「学習」されていないからです。「ヘッドホン」も検出できるようにするには、AIモデルを「再学習」する必要がありますが、ヘッドホンの画像を大量に収集し、学習データセットを作成した後、AIモデルの学習（転移学習）をプログラミングにより行う必要があるため、AIを専門としない一般的な技術者にとっては非常にハードルが高くなります。

# 物体検知（AIを使用しない場合）
AIを使わない物体検知の代表例として、今回は**差分検知**、特に**背景差分法**と呼ばれる手法について検証します。
動画解析の前に、あらかじめ背景のみを撮影した画像をプログラムに登録します（ある意味AIの学習に近いですが、画像は１枚からでも適用可能です）。
![scene_back.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/927556/d5fe3717-8cef-876a-16df-31b8ec9fd8ce.jpeg)

以後、動画のフレーム毎に、背景画像との差分を計算し、差分の大きいピクセルの集合を一つの物体として抽出するというステップで処理を行います。差分の計算方法は、RGB値の差やグレースケール値の差を基準とするなどいくつかパターンがあります。

以下、基準となる背景画像と差分検知により解析した結果です。
<iframe width="560" height="315" src="https://www.youtube.com/embed/wR6CtJ8TZrc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

AIの場合と同様、物体と思われる箇所が四角枠で検出できています。机を物体と認識しないのはもちろん、背景画像に机が含まれていたからですね。

AIの結果と比較して気が付く点としては、AIで検知できなかったヘッドホンが差分検知では正確に検出できていることがわかります。このように、AI的な学習を伴わない手法は、物体の種類によらず物体を検知することに向いていると言えます。

さらに、動画の結果だけではわかりにくいですが、左上に出力しているFPS（１秒当たりの処理フレーム数）という数値はプログラムの処理速度を表しており、一般的にはAI処理を伴わない画像処理手法のほうが高速に処理できます。動画は通常30FPS程度の速度で撮影されるため、差分検知の処理パフォーマンスであれば、リアルタイム処理も十分可能でしょう。AIの場合、リアルタイム処理にはGPUと呼ばれる高価なリソースが必要となるため、処理速度の観点では非AI手法に大きなアドバンテージがあります。

差分検知の欠点としては、人と人が重なった際に一つの物体として認識してしまう点があります。AIの場合も、近接した物体を正確に分離して検出することは難しいですが、差分検知の場合と比較するとある程度物体の重なりによる未検知・誤検知は少なくなります。

# で、結局どっちがいいの？
実際現場導入にあたって、AIと非AIでどちらが有利かというとケースバイケースということになります。評価基準ごとに対応表を作成しましたので、ご参考にしていただければ幸いです。

|  | AI | 非AI画像処理 |
|:-:|:-:|:-:|
| 検知対象物体 | AIに学習させた物体のみ<br>（例）[COCOデータセット](https://cocodataset.org/#explore)<br>転移学習によりカスタマイズ可能 | 開発者が作成するフィルタにより変化<br>差分検知（動いている物体を検知）、色抽出（赤色物体のみ抽出する）など |
| パラメータ調整の難易度 | 簡単<br>外部環境の変化（昼夜、カメラの移動）に強い | 難しい<br>外部環境の変化を受けやすい<br>撮影環境（照明）を固定するなど工夫が必要 |
| 処理速度 | 遅い<br>GPUの導入により性能向上可能 | 画像サイズ解像度により変化<br>普通AIより速い |
| 導入コスト | 高い（GPUを導入する場合）<br>[TFLite](https://www.tensorflow.org/lite/guide?hl=ja)の使用によりRaspberry Piでも動作可能だが、精度は落ちる | 安い<br>Raspberry Pi上でも容易に動作可能 |
| 導入スピード | 学習済みモデルを使用する場合、早い<br>対象の物体を検知できる学習済みモデルがない場合、再学習に大きな時間と手間がかかる | 早い |

# まとめ
AIと非AIでは、それぞれできること・できないことの違いがある他に、処理パフォーマンスやコストの観点でも向き・不向きがあるため、現場導入における経験（特に失敗経験...）がないと選定の判断が難しいところとなります。今回の記事で、それぞれのソリューションの違いについて具体的なイメージを持っていただけたのではないかと自負しています。今後の問題解決のヒントとして役立てていただければ幸いです。

最後まで読んでいただき、ありがとうございました！