[AIフレーム補間]Dain-Appでドット絵のヌルヌルアニメーションに挑戦!

アプリ
[AIフレーム補間]Dain-Appでドット絵のヌルヌルアニメーションに挑戦!

2020年のゴールデンウィークは時間がたっぷりあったので…

アクションゲームでも作ろうかと思ってドット絵でモーションを描き始め…

最終的にAIによるフレーム補間のための環境構築まで興味がいったのでそれをまとめます。

あまりにもやる事がなかったんですね

趣味でやってるミュージカルの公演も延期になってしまったので今までできなかったやりたかった事をやろう。というわけで2Dのアクションゲームを作ろう!と思ったんですね。

しかし2DアクションといえばToにもKakuにも素材がneed。お前にそれが務まるのか…という確認も含め、まずドット絵でキャラクターのモーションを描こうと思ったんですよ。

5人日かけて出来上がったものがこちらです。
立ちモーション走りモーション

AIでどうにかなんないかなぁ

ドット絵って打つのめっちゃ工数かかる…!(塗りすら終わってない…)

エンジニア的にはもっと楽したいところですよね。

AIが自分好みの”Waifu”を自動生成してくれる世の中なんだから、なんかないのかなぁと。ちょっと調べたらあるじゃないですか良さそうなのが。

Dain-App

AIを駆使してアニメや映画をヌルヌル動かしてくれるフレーム補間ソフト「Dain-App」

深層学習、ディープラーニングの力でドット絵に限らず動画のフレームを補間してヌルヌルにしてくれるソフトだそうな。

おぉ、これでストリートファイター3ばりにヌルヌルのドット絵が作れたりすんじゃね?とか思っちゃうじゃないですか。

作成のコストが下がればドット絵の復権もアリアリですよ、とテンションが上がる…。

オープンソースによる開発で、技術内容については論文まであるとの事。

アメリカ語なのでちんぷんかんぷんだ。せっかくなので最近登場したGoogle翻訳を越えたと言われる機械学習による翻訳ソフト、DeepLで訳してみる。

本研究では、奥行き情報を探索することでオクルージョンを明示的に検出するビデオフレーム補間手法を提案する。具体的には,奥行きを考慮したフロー投影層を開発し,遠方の物体よりも近距離の物体を好んでサンプリングする中間フローを合成する.さらに,隣接する画素から文脈情報を収集するための階層的特徴量を学習する.提案モデルは、出力フレームを合成するために、光学フローと局所補間カーネルに基づいて、入力フレーム、深度マップ、および文脈的特徴をワープする。このモデルはコンパクトで効率的であり、完全に微分可能である。定量的および定性的な結果は、提案モデルが多種多様なデータセットにおいて、最先端のフレーム補間手法に対して有利に機能することを示している。

あーそーゆーことね完全に理解した

しかし動かない…!

さっそく開発中のバージョン0.37を落として使ってみたところ、下記エラーが。
エラー
no kernel image is available for execution on the device

ちょっと調べたところ、このエラーメッセージが出ている人はかなり多い様子。しかし情報があまりにも錯綜している。

理由は「新しいグラフィックボードが積まれていないから」

結局の結論から言うと「新しいグラフィックボードが積まれていないから」でした。

いや、新しいって何って思うかもですが、本当にそうとしか言えなくて…。強いて言うならCompute Capabilityが5.0以上じゃないと動かないかもです。

なんではっきりしないかって言うと、公式サイトに書いてないからです。

前提条件の解釈に悪戦苦闘

This application only work with NVIDIA graphic cards, AMD graphics card DOES NOT work in this application. Also the NVIDIA Hardware need to support CUDA 5.0 or bigger to work.
(このアプリケーションはNVIDIAグラフィックカードでのみ動作し、AMDグラフィックカードはこのアプリケーションでは動作しません。また、NVIDIAハードウェアはCUDA 5.0以上をサポートする必要があります。

そもそも実行には「グラフィックカード」が必要とのこと。こっちで言う、グラフィックボードの事ですね。家のパソコンでゲームがしたいって時に買わされる奴です。

グラフィックボードにはCPU(Central Processing Unit)ではなくGPU(Graphics Processing Unit)が搭載されています。GPUは簡単な計算を並列的に行う事に特化しているチップです。

NVIDIAというメーカーのCUDA5.0以上に対応したグラフィックボードがDain-Appの実行に必要、という話ですね。

自分のパソコンにはNVIDIAのグラフィックボードが積まれています。

なのに実行できなかったという事はCUDA5.0以上に対応してないから…と思ったのですが、よく調べると私のグラフィックボード、8年前の物ですが最新のCUDA10.2には対応してるんですよ。

CUDAのバージョンはドライバーのバージョンによって決定される

CUDAとは、NVIDIAが開発した並列コンピューティングのためのアーキテクチャの事です。

このCUDAは定期的にバージョンアップされており、実行できるCUDAのバージョンはNVIDIAのグラフィックボードのドライバーのバージョンによって決定されます。

CUDAに対応するドライバーのバージョンは下記URLをご確認ください。

下記URLで自分のパソコンに積まれているグラフィックボードの名前で検索すれば、提供されている最新のバージョンのドライバーのインストーラーをダウンロードする事ができます。

私が持っているGeforce GTX 660ちゃんはバージョン445.87のドライバーが提供されている…。

つまり私のグラフィックボード、8年前の物ですが最新のCUDA10.2には対応してるんですよ。(大事な事なので2回)

Compute Capabilityが5.0以上が必要と言っている?

公式の解答

コミュニティに寄せられていた質問とその回答内容に違和感を覚えた。GTX760でno kernel imageのエラーが出たけど古いですか?という質問に対し、公式アカウントは「GTX760のCUDAのバージョンは3.0なので残念ながら古すぎる」という旨を解答しています。

先に上げたURLでGTX760に提供されているドライバーを検索すると、自分と同じバージョンの最新のドライバーが提供されていた。つまり最新のCUDA10.2に対応しているのだ。これはおかしい。

ところで、グラフィックボードのスペックを表す指標の中にCompute Capabilityというものがある。グラフィックボードとCompute Capabilityは下記URLで確認できる。

偶然か、件のGTX760のCompute Capabilityは3.0なのだ。他にもコミュニティに同様のエラー報告があったGTX650、GTX770も3.0。私のGTX660も同じく3.0だ。
ユーザーからの質問

このユーザーも「CUDA3.5が搭載されているGT730」という言い方をしているが、GT730のCompute Capabilityも3.5だ。

このコミュニティではCompute Capabilityの事を指してCUDAと言っている…?

つまり公式が言っているCUDA 5.0以上をサポートする必要があるとはCompute Capabilityが5.0以上のグラフィックボードが搭載されている必要があると言い換えられるのではないか、と。

そうと決まれば換装してやろうじゃないか!

RTX2060
NVIDIA Geforce RTX 2060搭載グラフィックボード!Compute Capabilityは7.5!これなら文句なかろう!

最新のドライバーをインストールして、それに対応する最新のCUDAを下記URLからダウンロードしてインストール!

このURLは最新のCUDAですが、もし古いCUDAにしか対応できない人は欲しいバージョン名で検索すればすぐに出てきます。

動きました

動かなかったらホントどうしようかと思いました・・・無事に動いてよかったです。
入力はGIFでもいいのですが、出力は動画ファイルになります。

Dain-Appを動かした結果分かった事(というか当たり前な事)なんですが、解像度が低いほどヌルヌルの恩恵は得られにくいです。

私が書いた48×64ピクセル程度では解像度が低すぎてボケた感じの方が目立ってしまうんですね。背景色とも合わせてボケてしまうので素材としても使えないです。

立ちモーション

ではもっと解像度が高く、それも最初からヌルヌルの素材であればどうなるか。

ストリートファイター3の春麗の覇山蹴のGIFを用意し、入力しました。
覇山蹴

この程度のサイズ、尺でそこそこに時間がかかりました。こちらはかなりヌルヌルになったのですが、フレーム単位で見ると作画崩壊ってレベルのコマがありました。同じく背景色とも合わせてボケてしまうので素材としても使えません。

まとめ

背景と一緒にボケてしまう以上、Dain-Appを使ってドット絵の素材を作るというのは難しいです。

そもそもDainは素材から空間の奥行を把握する技術なので、背景がない素材の加工では本領が発揮できないかもしれません(それでもすごかったですが)。ドット絵を使った新しい表現ができる、と考えた方がよいですね。

なので素のドット絵は人類の脳みそ使って打ち込みましょう。

処理に時間がかかった事は逆に感動を覚えました。並列コンピューティングしてるぅ!という実感があります。並列処理の概念はまだまだ馴染みがなく、日常生活や仕事でも意識する事はほとんどありませんが、研究が進んで並列処理がもっともっと身近になれば自宅PCで並列処理をする事が当たり前になる時代が来るかもしれませんね。

せっかく並列処理ができるグラボを買ったので、他にも何かできることがないかアンテナ張ってみようと思います。

以上、ゴールデンウィークの自由研究でした。