昨日の姿勢推定の話だけど、まじめに考えたら、姿勢推定しなくても、
事前に行動を予測して画面合成することは、できそうな気がしたので、
ちょっと書いておく。
■まずはじめに、(予測はナシで)画面合成にディープラーニングを使うということは、どういうことかを示す
Perfumeの3人と背景を合成することを考える。この合成結果の画像Xを構成するピクセル(画素)xは、
・Perfumeの3人の画像Aの当該画素aか
・背景画像Bの当該画素b
のいずれかの値をとるはずである(というか、とるものとする)
で、A,Bどちらの値をとるかだが、「クロマキー」という方法をとる場合、簡単にできる
例えば、「赤」なら抜くとして場合、
Aの画像の画素aが赤なら、Bの画素bを使う
それ以外なら、Aの画素aを使う
とすればいい。
しかし、この場合、特殊な色でないと抜けない。黒とかだと、ひとみの色と一緒になってしまい、
目の中に拝啓が移ってしまう。
これを避けるためには、輪郭線をもとめ、輪郭内だったらa,輪郭外なら背景のbを使えばよい
→切り抜きですね
この輪郭線の散りだし方は、行列を使ってうじゃうじゃしてもいいし、ディープラニングなどの機械学習を
使ってもいい。
機械学習を使う場合は、
入力を画像A(の全画素a)
出力は、合成画像Xの当該画素xがaの画像を使っていたら1、使っていなかったら0
とすると、入力画面(実際にはその一部分を使うと思うけど)と画素Xの結果1,0の対応関係ができる。
この対応関係を機械学習する
もし学習できれば、輪郭を経ずに、ディープラーニングで画像合成ができたことになる。
■しかし、動画ではこの方法は使えない
もし、動画で行うとなると、たとえば、1秒間に25フレーム(計算しやすくするため、この数字にした)だとすると、1フレーム当たり1/25=0.04秒=40ミリ秒で画面合成しないといけない。
いま、200X200の画素だったとすると(実際はもっともっと)1画面は200X200=4万画素なので、
1画素あたりに許される計算量は、40ミリ秒÷4万画素=1マイクロ秒になる。
A,Bどちらの画像を使うかは、クロマキーならAの画素が赤かだけを判断すればよいから、
(a & RGB(RED))の結果が分かればいい。つまり、AND1回路でできるが、秋葉原で売っている
AND回路を使っても(汎用の75系のチップ)1マイクロはかかる。
なので、並列処理させないといけない。
が、並列にも、限界がある
■事前に行動を予測して画面合成する方法
しかし、もし、5秒前の画像を入力し、現在の画像を出力させたらどうなるだろう。
入力 5秒前の画像A
出力 現在の画像 X
(ここで、Aの画素a、Xの画素xは32ビットで、α、R,G,Bを8ビットで構成しているものとする)
aは、5秒前の画像のRGBを保持し、
xは、現在の画像が、背景を使う場合はαが255、Aを使う場合はα=0で、RGBは現在の画像の値とする)
もし、これで学習が成立すると、このAIは、入力に対し、5秒後の出力を出すAIになる。
だから
入力 今取ったリアルタイム画像
出力 予測した5秒後の画像
ということができるこになり、事前に行動を予測していることになる。
これを画面合成するには背景色が多い場合(背景は事前に計算できるのであれば)
αが255のところは、5秒後の画像を5秒間かけて処理し
αが0のところは、 5秒後に今取った画像をそのまま流して
合成すれば、合成処理が完成する(背景が少ないと、間に合うかどうか疑問)。
このように、事前にX秒(分・時間・日)の状態を予測したかったら、
X秒(分・時間・日)前の状態を入力(説明変数)、
現在の状態を出力(教師信号、目的変数)として機械学習させるとできる
・・・姿勢推定つかわなかったね(^^;)
もちろん、これも入力にしていいけど・・・
事前に行動を予測して画面合成することは、できそうな気がしたので、
ちょっと書いておく。
■まずはじめに、(予測はナシで)画面合成にディープラーニングを使うということは、どういうことかを示す
Perfumeの3人と背景を合成することを考える。この合成結果の画像Xを構成するピクセル(画素)xは、
・Perfumeの3人の画像Aの当該画素aか
・背景画像Bの当該画素b
のいずれかの値をとるはずである(というか、とるものとする)
で、A,Bどちらの値をとるかだが、「クロマキー」という方法をとる場合、簡単にできる
例えば、「赤」なら抜くとして場合、
Aの画像の画素aが赤なら、Bの画素bを使う
それ以外なら、Aの画素aを使う
とすればいい。
しかし、この場合、特殊な色でないと抜けない。黒とかだと、ひとみの色と一緒になってしまい、
目の中に拝啓が移ってしまう。
これを避けるためには、輪郭線をもとめ、輪郭内だったらa,輪郭外なら背景のbを使えばよい
→切り抜きですね
この輪郭線の散りだし方は、行列を使ってうじゃうじゃしてもいいし、ディープラニングなどの機械学習を
使ってもいい。
機械学習を使う場合は、
入力を画像A(の全画素a)
出力は、合成画像Xの当該画素xがaの画像を使っていたら1、使っていなかったら0
とすると、入力画面(実際にはその一部分を使うと思うけど)と画素Xの結果1,0の対応関係ができる。
この対応関係を機械学習する
もし学習できれば、輪郭を経ずに、ディープラーニングで画像合成ができたことになる。
■しかし、動画ではこの方法は使えない
もし、動画で行うとなると、たとえば、1秒間に25フレーム(計算しやすくするため、この数字にした)だとすると、1フレーム当たり1/25=0.04秒=40ミリ秒で画面合成しないといけない。
いま、200X200の画素だったとすると(実際はもっともっと)1画面は200X200=4万画素なので、
1画素あたりに許される計算量は、40ミリ秒÷4万画素=1マイクロ秒になる。
A,Bどちらの画像を使うかは、クロマキーならAの画素が赤かだけを判断すればよいから、
(a & RGB(RED))の結果が分かればいい。つまり、AND1回路でできるが、秋葉原で売っている
AND回路を使っても(汎用の75系のチップ)1マイクロはかかる。
なので、並列処理させないといけない。
が、並列にも、限界がある
■事前に行動を予測して画面合成する方法
しかし、もし、5秒前の画像を入力し、現在の画像を出力させたらどうなるだろう。
入力 5秒前の画像A
出力 現在の画像 X
(ここで、Aの画素a、Xの画素xは32ビットで、α、R,G,Bを8ビットで構成しているものとする)
aは、5秒前の画像のRGBを保持し、
xは、現在の画像が、背景を使う場合はαが255、Aを使う場合はα=0で、RGBは現在の画像の値とする)
もし、これで学習が成立すると、このAIは、入力に対し、5秒後の出力を出すAIになる。
だから
入力 今取ったリアルタイム画像
出力 予測した5秒後の画像
ということができるこになり、事前に行動を予測していることになる。
これを画面合成するには背景色が多い場合(背景は事前に計算できるのであれば)
αが255のところは、5秒後の画像を5秒間かけて処理し
αが0のところは、 5秒後に今取った画像をそのまま流して
合成すれば、合成処理が完成する(背景が少ないと、間に合うかどうか疑問)。
このように、事前にX秒(分・時間・日)の状態を予測したかったら、
X秒(分・時間・日)前の状態を入力(説明変数)、
現在の状態を出力(教師信号、目的変数)として機械学習させるとできる
・・・姿勢推定つかわなかったね(^^;)
もちろん、これも入力にしていいけど・・・