Zveriki Zveriki
猫の視覚モデル

猫の視覚モデル

動画を読み込んでください。処理はクライアント側で、WebGLシェーダーを使って行います。

準備しています...

猫の目で世界を見てみる

猫の目で世界を見てみたいと思ったことはありませんか。比喩としてではなく、文字どおり——猫の色、猫の視野、猫が動きを際立たせるやり方で。ずいぶん前、およそ十七年前、私は人間の視覚や色の知覚、色覚異常のモデル化についてかなり書いていました。視覚のモデル化、知覚に合わせた画像の正規化、アイトラッキングモデルの働きについての記事です。当時はすべて人間のまわりを回っていました。目がどのように像を組み立てるか、色のチャネルがどのように壊れるか、それをコンピュータ上でどうモデル化してみられるか、という話です。

その意味で猫は、都合がよくて面白い次の一歩です。猫の視覚はよく研究されていて、人間の視覚とはかなり違いますが、それでも見分けがつきます。スマートフォンで撮った普通の動画を取り、同じ光景が猫にはおよそどう見えるかを示すことができます。

猫の視覚の仕組み

猫は二色型色覚(ダイクロマート)です。感度のピークがおよそ青の領域(約450–460 nm)と黄緑の領域(約550–560 nm)にある、二種類の錐体を持っています。赤と緑は、猫にとっては別々の色としては存在しません。一つの黄緑チャネルに畳み込まれます。これは、かつて私が第一色覚異常(プロタノピア)と第二色覚異常(デューテラノピア)のためにモデル化したことにかなり近く、ただしここでは赤と緑の区別の「喪失」は異常ではなく正常です。そのうえ黄色は、はっきりと彩度が落ちます。その結果、猫の世界は灰色ではありませんが、私たちの世界ほど色鮮やかでもありません。青は青のままで、私たちにとって赤や緑であるものは、黄みがかった、灰色がかった調子へ寄っていきます。

視野は人間より広いです。猫の水平方向の見通し角はかなり大きく、おおよそ200–270°で、私たちの180–220°に対して広がっています。目は互いにより離れてつき、完全には同一平面上にないため、両眼視の領域はまさに水平方向に伸びています。垂直方向では、この優位はさほどはっきりしません。さらに visual streak ——網膜の中央の水平帯にある、鋭敏さの高い帯——があります。上下の周辺は明らかに劣り、細部はそこでぼけます。加えて猫は近距離では相対的に遠視で、およそ80 cmまでは、正常な調節をもつ人間よりも像がやわらかくなります。

そして別に——動きについて。人間には色の知覚についての心理学的な特徴があります(かつて色の力についての記事がありました)。猫にも、知覚についての興味深い特徴があります。猫(とその視覚皮質)は、水平に動く対象をとりわけよく際立たせます。単に「動きが見える」のではありません。速度の水平成分のほうが、猫にとっては優先されます。速い水平方向の対象は、背景から文字どおり飛び出すように見えます。そのあいだ背景は、比較的穏やかなままであることもあります。

これらを合わせると、何をモデル化してみるべきかがかなりはっきりします。色、広がった水平視野、垂直方向の周辺、そして水平方向の動きへの特別な関わり方です。

色のモデル

かつて色覚異常をモデル化したとき(色覚異常と色知覚のモデル化、色覚異常の人には世界がどう見えるか)、基本の発想は単純でした。錐体の寄与がどう変わるかを見て、チャネルの一つが弱まるか欠ける空間で色を計算し直すことです。猫でも論理は似ています。ただしチャネルは最初から二つです。

プログラムでは、色補正が最初に行われ、あらゆるぼかしより前です。RGBは単純化した二色型の表現に変換されます。青チャネルと黄緑の混合(赤と緑が畳み込まれる)を取り、そのあと黄色の彩度を下げます。これは Govardovskii の曲線に基づく完全な分光測光モデルではありませんが、かつてのプロタノピア/デューテラノピアの実験と同じ原理です。絵を「黄色く塗る」のではなく、観察者の光受容体が違っていたらどう見えるかとして計算し直すのです。その結果、赤と緑の対象は色のうえで互いに近づき、青は相対的に独立したままで、全体の彩度は落ちます。

視野角と楕円

猫の広がった視野は、何よりまず水平方向の話です。平面の絵(動画のフレーム)を見るとき、私たちには本当の200度の見通しはありません。ですからここでの楕円体的な歪みは、より広い両眼視野を長方形のフレームに合わせるための手段です。

水平方向はより強く圧縮され、垂直方向は弱く圧縮されます。これは、半径がすべての方向で同じ球面的な魚眼ではありません。楕円になります。左右では、上下よりも画像がはっきりと「締め付け」られます。見た目としては、より広い視線の感覚が生まれますが、私たちは相変わらず普通の長方形を見ています。アプリでは、これはシェーダー内のUV座標の一つの変換で行われます。いくつもの異なる歪みを重ねることはしません。

動きと注意

いちばん面白いのは、おそらくここです。猫は単に「動きを見ている」のではありません。視覚系(そしてその先の脳)は、水平成分にとりわけよく反応します。それを示すために、モデルでは二つのことをしています。

第一に、背景に対する速い水平方向の動きが検出されると、再生が遅くなります。フレームの中で特に何も動いていないときは、動画は通常より少し速く進みます(およそ1.15×)。速い対象が現れると、速度は落ちます(およそ0.85×まで)。これは「美しさのためのスローモーション」ではなく、猫が受け取っているらしいのと同じ感覚を見る人に与えようとする試みです。速い水平方向の対象は、そのまわりの時間が引き伸ばされるように感じられることで、より目立つようになります。

第二に、対象そのものが鮮鋭さによって際立ちます。背景とより遅い対象はぼけ、水平方向にいちばん速いものがいちばんはっきり残ります。ぼかしはガウシアンで、強さはフレーム内でいちばん速い対象の速度に依存します。より遅く動くものは、中間の鮮明さを受け取ります。動きのマスクは一瞬では消えません。ロジスティック曲線に沿っておよそ150 msで減衰するので、対象がいきなり「切れ」たりはしません。

検出は、その際、背景に対して行われます。カメラは回転することがあり、背景はずれ、このずれはまず推定されて補正されます。補正のあとに残るものが、対象の動きとみなされます。この residual の水平成分から、スロー再生も鮮鋭マスクも作られます。

垂直方向の周辺も、少し強くぼけます(visual streak)。フレームの上下は、中央の帯よりやわらかいです。これは動きによる効果ほど強くはありませんが、存在します。

なぜニューラルネットワークを使わないのか

TensorFlow.js で動きと奥行きの推定を試みました。考えは魅力的でした。既製の深度モデルや optical flow を取り、より正確なマップを得ることです。実際には二つのことがわかりました。まずまずの結果を出す大きなモデルは、ウェブページには重すぎます。クライアントに持たせるのは不便で、処理もはっきり遅くなります。一方、まだ押し込める小さなモデルは、スマートフォンで撮った普通の動画ではノイズが多く不安定な結果になりました。結局、古典的な道が残りました。カメラの全体的なずれの推定、residual、マスクです。こちらのほうが単純で予測しやすく、何百メガバイトもの重みを読み込む必要もありません。

どのように組み立てているか

すべてはブラウザの中、クライアント側で動きます。動画が読み込まれ、正規化され、そのあとフレームごとに WebGL シェーダーへ送られます。シェーダーではまず色、次に楕円体的な歪み、背景と垂直方向のガウシアンぼかし、動きマスクによる合成です。結果は記録され、すでに動的な速度で再生されます。元の動画の音も、同じ速度で進みます。

魔法はありません。動きは古典的に計算されます。カメラの全体的なずれの推定、residual、マスクです。色はチャネルの単純化した再計算です。歪みは一つの幾何変換です。しかしそれらが揃うと、絵が世界を少し違うふうに見ている、という感覚はすでに生まれます。

科学的な文献

動画例と処理

元の映像と、猫の視覚モデルで処理した同じ映像です。

オリジナル
猫の視覚で処理

著者: ymik