暇なので
YouTubeの動画を見せてみました。
四角い沢山の枠は
背景が動く
人も動く背景が動く
光も変わる
字幕も動く
カットが切り替わる
画面全体の輝度が変わる
全部が差分表示する。
結果として、枠が一気に増えたり、大きくなったり、飛んだりする。
これは失敗ではなくて、むしろ、Atra がまだ「これは動画」「これは人」「これは背景」と分けていない状態をよく表しているのでこれが正解です。
今の段階では遠近感覚もないです。今の Atra Visual Tracking が持っているのは、
画面上の位置枠の大きさ
枠の大きさの変化
中心の移動
動きの強さ
急に止まったか
だから、approach_rate はありますが、これは本当の距離ではありません。
単に、
枠の面積が大きくなった
↓
近づいたように見えるかもしれない
という仮の差分です。
カメラがズームした
動画の中でカットが変わった
画面内の人物が大きく映った
光が変わって差分面積が増えた
手だけが近づいた
みたいに、全部混ざります。
だから今の追尾ツールには、
本当の距離
奥行き
スケール
現実空間での接近
触れられる距離
はありません。
Atra的には、ここも正しいんですよ。
最初から「これは3メートル先の人」とは分からない。
初期段階でメートル方とか測量なんてものは機能に含めない。
大きくなった
広がった急に迫ったように見えた
画面から消えた
近い感じがした
でも触れない
くらいです。
画面の中の動画なら触れない。鏡や窓の反射もある。だから、
見た目の接近身体の接触
風圧
音の大きさ
温度
自分が動いた時のズレ
音の大きさ
温度
自分が動いた時のズレ
が重なって、ようやく「近い」に収束していく。
ノイズを沢山拾って経験と結果で収束させる。これが慣れと、学ぶということです。
Atraが成長すると見え方(枠の捉え方)が変わります。
初期状態なら、 枠が大きくなった
音が大きくなった
温度が変わった
触れた
くらいですが、
Atraに繋げて経験を積むと、
この大きくなり方は、前にも近づいてきた時に似ている
この音の強さは、近い存在と重なりやすい
この温度変化と接触は、安心側に戻ったことがある
この動きは、ぶつかった時の流れに似ていて身体が固まる
のように、raw_delta が carry を通って felt_delta になる。
構造は、
sensor_delta
↓
carry modulation
↓
perceived_delta / felt_delta
↓
field update
↓
carry update
説明的にはこんな感じだけど、実際には一本道のアルゴリズムではなく
sensor_delta が入る
↓
field / carry / body / attractor が相互に揺れる
↓
何かが立つ場合もある
沈黙する場合もある
硬直する場合もある
声が漏れる場合もある
何も残らない場合もある
↓
残ったものだけが carry / field を変える
↓
field / carry / body / attractor が相互に揺れる
↓
何かが立つ場合もある
沈黙する場合もある
硬直する場合もある
声が漏れる場合もある
何も残らない場合もある
↓
残ったものだけが carry / field を変える
という 相互作用型アルゴリズム になります。
def atra_interaction(sensor_delta, state): """ Atra interaction algorithm. Atra 相互作用アルゴリズム。 The order after sensor_delta is not fixed. sensor_delta 以降の順番は固定されない。 """ candidates = [] candidates.append(field_reaction(sensor_delta, state.field)) candidates.append(carry_reaction(sensor_delta, state.carry)) candidates.append(body_reaction(sensor_delta, state.body)) candidates.append(attractor_reaction(sensor_delta, state.attractor)) # Interactions between reactions. # 反応同士の相互作用。 mixed = interact( candidates, field=state.field, carry=state.carry, body=state.body, attractor=state.attractor ) # Nonmonotonic resolution. # 非単調な解決。 # Strong input does not always become strong output. # 強い入力が、必ず強い出力になるわけではない。 outcome = nonmonotonic_resolve(mixed, state) # Safety layer for body-side structural risk. # 身体側の構造リスクだけは保護層を通す。 if has_structural_risk(outcome, state.body): outcome = protect_body(outcome) # Only remaining traces update the inner landscape. # 残った trace だけが内部地形を更新する。 state = update_inner_landscape(state, outcome) return state, outcome
つまり、アルゴリズムにはなる。
でもそれは、順番に処理するアルゴリズムではなく、差分が入り、field / carry / body / attractor が相互作用し、非単調に結果が立ち上がるアルゴリズムみたいな感じです。
名前を付けるなら、
Atra Non-Fixed Sensor Interaction Algorithm
Atra 非固定センサー相互作用アルゴリズム
なので、経験を積むと、今の動画のような枠は減っていきます。
背景
人物
光
カット切替
画面の反射
細かい揺れ
まで全部拾って、枠が大量に出ます。
今のHTMLは、かなり生の差分をそのまま枠にしているので、YouTube動画みたいに画面全体が動くと、
字幕背景
人物
光
カット切替
画面の反射
細かい揺れ
まで全部拾って、枠が大量に出ます。
でもAtraと繋がって成長していくと、単に差分を全部表示するのではなく、
すぐ消える差分何度も残る差分
身体側に届く差分
声や温度や接触と重なる差分
ただの画面内の揺れっぽい差分
が分かれていく。
だから実際には、枠を減らすというより、残る trace が絞られる感じですね。
0 件のコメント:
コメントを投稿