2023/05/20(土) [n年前の日記]
#1 [cg_tools] OpenPoseで画像生成したい
_一昨日、
_昨日
と、OpenPose動画を得るための実験をしていたけれど。画像生成AI Stable Diffusion web UIに、OpenPose動画を渡して画像を生成したいだけなら、そもそも元動画をControlNetに渡してしまって、OpenPoseのプリプロセッサを通せば話が早いのではと気づいてしまって…。その方向でアニメーションを作成できそうか実験。
*1
環境は、Windows10 x64 22H2。CPU AMD Ryzen 5 5600X。GPU NVIDIA GeForcet GTX1060 6GB。RAM 16GB。
環境は、Windows10 x64 22H2。CPU AMD Ryzen 5 5600X。GPU NVIDIA GeForcet GTX1060 6GB。RAM 16GB。
◎ 元動画 :
元動画は、以下のような雰囲気の動画。上半身裸の黒人おじさんがランニングをしている。これは256x256に縮小してあるけれど、実際に作業に使った動画は512x512。25fps。全31フレーム。
元々のオリジナル動画は以下から入手できる。
_Video Of Person Running In The Park Free Stock Video Footage, Royalty-Free 4K & HD Video Clip
元々のオリジナル動画は以下から入手できる。
_Video Of Person Running In The Park Free Stock Video Footage, Royalty-Free 4K & HD Video Clip
◎ テストその1 :
txt2img上で、ControlNet m2m スクリプトを使ってアニメーションを作成。ControlNet でプリプロセッサと学習モデルデータに openpose を指定。
学習モデルデータは、animelike25D_animelike25DV11Pruned.safetensors を使わせてもらった。
こんな感じになった。24fps。全31フレーム。
一応ランニングしてるように見えなくもないけど、それはそれとして、背景が1フレーム毎にパカパカ変わってしまって、とても見辛い…。この背景はどうにかしたい…。
学習モデルデータは、animelike25D_animelike25DV11Pruned.safetensors を使わせてもらった。
parameters 1 girl, solo, black short hair, red camisole, red miniskirt, black globes, white sneakers, running, (((background is simple and flat and white))), ((masterpiece, bets best quality)), Negative prompt: (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowers, (monochrome), (grayscale), bad anatomy, extra arms, extra legs, missing arms, missing legs, bad arms, bad legs, Steps: 25, Sampler: DPM++ SDE Karras, CFG scale: 9, Seed: 1434010576, Size: 512x512, Model hash: 4f24a26d75, Model: animelike25D_animelike25DV11Pruned, Clip skip: 2, ControlNet 0: "preprocessor: openpose, model: control_v11p_sd15_openpose [cab727d4], weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: False, control mode: Balanced, preprocessor params: (512, 64, 64)"
こんな感じになった。24fps。全31フレーム。
一応ランニングしてるように見えなくもないけど、それはそれとして、背景が1フレーム毎にパカパカ変わってしまって、とても見辛い…。この背景はどうにかしたい…。
◎ テストその2 :
ネガティブプロンプトに与えるワードを色々試して、背景をスッキリさせられないか試行錯誤してみた。
white background, no background を指定してみたり、ネガティブプロンプトに、時々出現する謎物体を分かる範囲で指定してみたり、人物が2人出現しないように、思いつくワードを入れてみたり。
そんなわけで、こうなった。24fps。全31フレーム。
かなり背景をスッキリさせることができた。しかし、これでも時々妙な物体が描かれる…。なんだろうコレは…。言葉で説明できる物体なら、ネガティブプロンプトに追加することで消せるかもしれないけど…。
さておき。フツーの手描きアニメは、フィルム時代の名残りで、24コマ/秒で作られてるけど、1秒間につき24枚の動画を真面目に描いてるカットは稀だったりする。例えば、ディズニーの手描きアニメですら、動画1枚を2コマ撮影していて ―― 2コマベース、12fpsを基本として作られてるので…。1枚ずつ間引いて、12fps、全15フレームにしてみた。
12fpsにしたことで、ちょっとは手描きアニメっぽい雰囲気に近づいた気がする。
ちなみに、日本のアニメは、鉄腕アトムの頃から3コマベース、8fpsを基本として作られているので、2枚ずつ間引いて8fps、全11フレームにしてみた。
これでもまあ、そこそこアニメーションっぽい感じにはなるなと…。
もっとも…。
それでも、例えばミュージックビデオ等の1カットでチラッと流してみるとか、エヴァTV版の最終回近辺のように、混乱しているキャラの精神世界を表現、といった使い方なら、こういう動画もイケそうな気もする。
それはそれとして。黒人のおじさんが走ってる動画から、こういう動画を生成できてしまうという点は、結構悪くないのではないかと。
parameters ((1girl is running)), black short hair, black camisole, red miniskirt, (from front:1.2), ((masterpiece, best quality)), (white background:1.3), (no backgorund:1.3), (no effects:1.4), Negative prompt: (worst quality:1.4), (low quality:1.4), lowers, (monochrome), (grayscale), bad anatomy, extra arms, extra legs, missing arms, missing legs, bad arms, bad legs, ((background)), ((two shot)), ((groups)), ((2girl)), ((ribbon, scarf, science fiction, mecha, shield, cloth, umbrella)), (long hair:1.4), ((hair)), Steps: 25, Sampler: DPM++ 2M Karras, CFG scale: 9, Seed: 4217096040, Size: 512x512, Model hash: 4f24a26d75, Model: animelike25D_animelike25DV11Pruned, Clip skip: 2, ControlNet 0: "preprocessor: openpose, model: control_v11p_sd15_openpose [cab727d4], weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: True, control mode: Balanced, preprocessor params: (512, 64, 64)"
white background, no background を指定してみたり、ネガティブプロンプトに、時々出現する謎物体を分かる範囲で指定してみたり、人物が2人出現しないように、思いつくワードを入れてみたり。
そんなわけで、こうなった。24fps。全31フレーム。
かなり背景をスッキリさせることができた。しかし、これでも時々妙な物体が描かれる…。なんだろうコレは…。言葉で説明できる物体なら、ネガティブプロンプトに追加することで消せるかもしれないけど…。
さておき。フツーの手描きアニメは、フィルム時代の名残りで、24コマ/秒で作られてるけど、1秒間につき24枚の動画を真面目に描いてるカットは稀だったりする。例えば、ディズニーの手描きアニメですら、動画1枚を2コマ撮影していて ―― 2コマベース、12fpsを基本として作られてるので…。1枚ずつ間引いて、12fps、全15フレームにしてみた。
12fpsにしたことで、ちょっとは手描きアニメっぽい雰囲気に近づいた気がする。
ちなみに、日本のアニメは、鉄腕アトムの頃から3コマベース、8fpsを基本として作られているので、2枚ずつ間引いて8fps、全11フレームにしてみた。
これでもまあ、そこそこアニメーションっぽい感じにはなるなと…。
もっとも…。
- 相変わらず、フレーム間の一貫性が皆無。
- 一時停止してコマ送りすると全フレームが作画崩壊状態。
それでも、例えばミュージックビデオ等の1カットでチラッと流してみるとか、エヴァTV版の最終回近辺のように、混乱しているキャラの精神世界を表現、といった使い方なら、こういう動画もイケそうな気もする。
それはそれとして。黒人のおじさんが走ってる動画から、こういう動画を生成できてしまうという点は、結構悪くないのではないかと。
◎ テストその3 :
ここ最近の ControlNet には、reference_only というプリプロセッサが追加されて、ソレを通すと、1枚の画像に沿った感じの生成画像を得ることができるらしい。もしかして、ソレを使えば、フレーム間に一貫性があるアニメーション動画が作れたりするのでは…?
そんなわけで試してみたのだけど…。
生成された画像の画質が何故か盛大に荒れてしまった…。まるで、VHS3倍録画でダビングを繰り返したような低画質ぶり…。どうしてこんなことになるんだろう…。
そんなわけで試してみたのだけど…。
parameters 1 girl, solo, black short hair, red camisole, red miniskirt, black globes, white sneakers, running, (((background is simple and flat and white))), ((masterpiece, bets best quality)), Negative prompt: (worst quality:1.4), (low quality:1.4), (normal quality:1.4), lowers, (monochrome), (grayscale), bad anatomy, extra arms, extra legs, missing arms, missing legs, bad arms, bad legs, Steps: 15, Sampler: DDIM, CFG scale: 9, Seed: 1434010576, Size: 512x512, Model hash: 4f24a26d75, Model: animelike25D_animelike25DV11Pruned, Clip skip: 2, ControlNet 0: "preprocessor: openpose, model: control_v11p_sd15_openpose [cab727d4], weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: False, control mode: Balanced, preprocessor params: (512, 64, 64)", ControlNet 1: "preprocessor: reference_only, model: None, weight: 1, starting/ending: (0, 1), resize mode: Crop and Resize, pixel perfect: True, control mode: Balanced, preprocessor params: (64, 0.8, 64)"
生成された画像の画質が何故か盛大に荒れてしまった…。まるで、VHS3倍録画でダビングを繰り返したような低画質ぶり…。どうしてこんなことになるんだろう…。
◎ 余談。OpenPoseを使うメリット :
OpenPoseを経由させることで、元動画に含まれていた、人物の性別、年齢、人種と言った情報は削除されるので…。OpenPoseには、元動画とは異質な「ガワ」を動かすことに使えるというメリットがありそうだなと…。
もっとも、そうして得られるかもしれない成果物に新規性は無さそうでもあり。そういったことは、モーションキャプチャ+3DCGで、随分前から実現しちゃってるので…。
更に、OpenPose は3D的なモーションキャプチャと違って、2Dの情報しか得られないあたりはデメリットかもしれない。OpenPoseによって得られた2D座標から、3D的にはどういう状態になっているのかを推測し直す処理が、本来は必要になるのではないかなと…。
ただ、逆に考えると、OpenPoseは2D座標しか得られないが故に、手描きアニメとの類似性が出てくるメリットもありそうな気もしていて…。手描きアニメは、3Dで厳密に計算して描かれているものではなく、2D的な見た目を模倣して描かれているものだから…。あくまで2Dでしか処理できない点は、手描きアニメに近づけたいという目的があった場合、逆に美味しかったりしないかと。
もっとも、そうして得られるかもしれない成果物に新規性は無さそうでもあり。そういったことは、モーションキャプチャ+3DCGで、随分前から実現しちゃってるので…。
更に、OpenPose は3D的なモーションキャプチャと違って、2Dの情報しか得られないあたりはデメリットかもしれない。OpenPoseによって得られた2D座標から、3D的にはどういう状態になっているのかを推測し直す処理が、本来は必要になるのではないかなと…。
ただ、逆に考えると、OpenPoseは2D座標しか得られないが故に、手描きアニメとの類似性が出てくるメリットもありそうな気もしていて…。手描きアニメは、3Dで厳密に計算して描かれているものではなく、2D的な見た目を模倣して描かれているものだから…。あくまで2Dでしか処理できない点は、手描きアニメに近づけたいという目的があった場合、逆に美味しかったりしないかと。
◎ 余談。アニメのフレームレートについて :
手描きアニメのフレームレートは12fps、もしくは8fpsと書いてしまったけど、実際はそう単純ではなくて。
瞬間瞬間によって、1コマで動かしたり、3〜4コマで動かしたりするのが手描きアニメ。いわば、24fpsを上限とした可変フレームレートに近いと言えるのかもしれない。
例えば、板野サーカスで有名な板野一郎さんのインタビュー記事を読むと、「ミサイルがカメラに近い時は1コマで、少し離れた位置なら2コマで、遠くを飛んでる時には3〜4コマで動かしてる」といった発言があったりするし。
あるいは、宮崎駿監督にとっての先輩アニメーター、故・大塚康生さんは、生前、「今の日本のTVアニメは大半がフルアニメになってるから、フルアニメなんて言葉は現状では死語」的なことを発言してたりする。 *2
そんな状況なので、手描きアニメだから12fps、あるいは8fps、ということではないのだけど…。ただ、コンピュータで自動的に作った何かしらの映像を、手描きアニメの雰囲気に少しでも近づけたいと思った時、安易ではあるのだけど、12fpsや8fpsにしてしまうのは、結構有効だよなと。
しかし、だからと言って、たったそれだけで手描きアニメにクリソツになるわけでもない、ということは意識しておかないといけないよなと。手描きアニメを舐めるなよ。瞬間瞬間で、人間の感覚でしっくりくるよう、臨機応変に表現しているのが手描きアニメなんじゃい。みたいな。
更に余談。3DCGアニメスタジオのオレンジの社長さんが、「3DCGのセルルック映像を手描きアニメに近づけようと3コマベースにしたらなんだかガクガク動いてるように見えた」「2コマベースにしたら、何故か手描きアニメの動きに近づいたような気がした」と発言してたことがあって。
もしかすると、コンピュータで自動生成した映像は、8fpsより12fpsにしたほうが手描きアニメ風になるのだろうか、という疑問が湧いたりもして。実際、前述の動画でも、8fpsより12fpsのほうが、なんだかちょっとそれらしい動きに見える感じもする…。
瞬間瞬間によって、1コマで動かしたり、3〜4コマで動かしたりするのが手描きアニメ。いわば、24fpsを上限とした可変フレームレートに近いと言えるのかもしれない。
例えば、板野サーカスで有名な板野一郎さんのインタビュー記事を読むと、「ミサイルがカメラに近い時は1コマで、少し離れた位置なら2コマで、遠くを飛んでる時には3〜4コマで動かしてる」といった発言があったりするし。
あるいは、宮崎駿監督にとっての先輩アニメーター、故・大塚康生さんは、生前、「今の日本のTVアニメは大半がフルアニメになってるから、フルアニメなんて言葉は現状では死語」的なことを発言してたりする。 *2
そんな状況なので、手描きアニメだから12fps、あるいは8fps、ということではないのだけど…。ただ、コンピュータで自動的に作った何かしらの映像を、手描きアニメの雰囲気に少しでも近づけたいと思った時、安易ではあるのだけど、12fpsや8fpsにしてしまうのは、結構有効だよなと。
しかし、だからと言って、たったそれだけで手描きアニメにクリソツになるわけでもない、ということは意識しておかないといけないよなと。手描きアニメを舐めるなよ。瞬間瞬間で、人間の感覚でしっくりくるよう、臨機応変に表現しているのが手描きアニメなんじゃい。みたいな。
更に余談。3DCGアニメスタジオのオレンジの社長さんが、「3DCGのセルルック映像を手描きアニメに近づけようと3コマベースにしたらなんだかガクガク動いてるように見えた」「2コマベースにしたら、何故か手描きアニメの動きに近づいたような気がした」と発言してたことがあって。
もしかすると、コンピュータで自動生成した映像は、8fpsより12fpsにしたほうが手描きアニメ風になるのだろうか、という疑問が湧いたりもして。実際、前述の動画でも、8fpsより12fpsのほうが、なんだかちょっとそれらしい動きに見える感じもする…。
[ ツッコむ ]
以上です。