友利奈緒の「他人に認知されない能力」をコンピュータビジョンは実現できるか?
こちらの10日目の記事でございます。
はじめに
友利奈緒には魅力があふれているが、あえて!!今回は消す方向で考える。 すなわち、友利奈緒の特殊能力である「任意の一人の視覚から消える能力」を、コンピュータビジョンによって疑似的に再現できるのかどうか、を考察してみる。
画像入力、画像処理、画像出力、ここまでを30fpsで動かすためには、全部で33msで行う必要がある。そして画像の入出力に10msかかると仮定すると画像処理自体には13msしかかけられない。oh,my goddess!!
友利奈緒領域の特定
Step 1は「画像中の友利奈緒になっている画像領域を特定する」工程である。もうちょっと厳密にいうと
- 人体検出(画像中の人体が存在しうる領域の特定)
- 個人照合(画像中の人体が誰かの特定・照合)
を組み合わせて、友利奈緒領域を特定する必要がある。個人照合は友利奈緒以外の対象を消さないための処置である。
友利奈緒マスクの生成
Step 2は、友利奈緒領域をもとにマスクを生成する。これは普通の事なので、そこまで処理時間もかからないはず、と見込んでいる。
友利奈緒レス画像の生成
Step 3は、友利奈緒領域を、友利奈緒外領域によって補完してつぶす作業である。すなわち対象となって人間が「知覚できない」あるいは「視覚できない」ということを実現する。
大体下のような画像処理になります(念のためモザイクモザイク)
元画像
マスク画像
出力結果(ちょっと悲しい)
消えきれてない、という悲しみがありますが。
inpaint処理に要する時間検証
さて、今回はこのStep3がどれくらいの時間を要するのかについて検証を行う。環境は、i7 4770 。OpenCV 2.4.11。Ubuntu 15.10 on VMWareのお試しでの測定。
理想的には1920x1080(FullHD)で処理したい。だが、さすがに物体検出・個人特定を含めてリアルタイム処理するのは計算量がかなり厳しい。まずは、画素数とinpaintの処理時間をグラフにしてみる。
縦軸が時間(秒)、横軸が処理した画素数(pixel)である。この結果からinpaint処理に10msを割くとするならば、最大で384x216画素まで処理ができる。これでは圧倒的に性能が不足していると言わざるを得ない。現状のHMDの解像度は、5120x1440なんてものまで存在しているというのに、これじゃあ……
なお、人間の視覚は 800万画素程度……。これにもはるかに及ばない程度となってしまっているわけで。
この結果から考えるに、コンピュータビジョンのように視覚情報を改変することで現実を誤認識させることは非常にコストの大きい作業となる。すなわちコンピュータビジョンを活用して、特定人物を認知から除外することは現在のマシンパワーではかなり厳しい。例えばGPU、FPGAなどによるアクセラレーション活用などを考えた方が無難である、というのが今回の検討結果となる。
さて、ここから、友利奈緒の能力はどのように実現されているのかについても考えてみる。
視覚的な情報を受け取る部分に対して誤認識を与えるのではなく、受け取った情報を認知する部分に関与している可能性が高い。すなわち「見えているが、認知できていない」。例えば、友利奈緒を見たという情報は意図的に「どうでもよい背景画像」と同じように扱わせるように脳に働きかける。それにより、非常に低いコストで最大の誤認識を産ませているものと推定される。