HuggingFace ブログ : AI WebTV の構築

HuggingFace ブログ : AI WebTV の構築 (翻訳/解説)

翻訳 : クラスキャット セールスインフォメーション
作成日時 : 10/10/2023

* 本ページは、HuggingFace Blog の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • sales-info@classcat.com  ;  Web: www.classcat.com  ;   ClassCatJP

 

 

 

HuggingFace ブログ : AI WebTV の構築

AI WebTV は動画と音楽の自動合成の最新の進歩を示す実験的なデモです。

👉 AI WebTV スペース にアクセスしてストリームを今すぐ視聴してください。

モバイルデバイスを使用している場合には、Twitch ミラー からストリームを見ることができます。

 

コンセプト

AI WebTV の動機づけは、Zeroscope や MusicGen のようなオープンソースの テキスト-to-動画モデル で生成された動画を面白いアクセス可能な方法で実演することです。

それらのオープンソースモデルを Hugging Face ハブで見つけることができます :

個々の動画シークエンスは意図的に短く作られていて、つまり WebTV は (アートディレクションやプログラミングによる) 実際のショーではなく、技術的なデモ/紹介ビデオ (showreel) として見られるべきです。

 

アーキテクチャ

AI WebTV は、動画ショット プロンプトのシークエンスを受け取り、テイク のシークエンスを生成するためにそれらを テキスト-to-動画モデル に渡すことにより動作します。

さらに、各動画クリップ用に多様な個別のプロンプトを生成するために、(人間により書かれた) 基本テーマとアイデアが LLM (この場合、ChatGPT) に渡されます。

ここに AI WebTV の現在のアーキテクチャの図があります :

 

パイプラインの実装

WebTV は NodeJS と TypeScript で実装されていて、Hugging Face にホストされている様々なサービスを使用しています。

 

テキスト-to-動画モデル

中心的な動画モデルは Zeroscope V2 で、ModelScope に基づくモデルです。

Zeroscope は一緒に連鎖できる 2 つのパートから構成されます :

  • zeroscope_v2_576 による最初のパス、576×320 動画クリップを生成します。

  • zeroscope_v2_XL によるオプションのパスは動画を 1024×576 にアップスケールします。

👉 生成とアップスケーリングの両方のために同じプロンプトを使用する必要があります。

 

動画チェインの呼び出し

素早くプロトタイプを作成するため、WebTV は @gradio/client NPM パッケージを使用して呼び出される、Gradio を実行する 2 つの複製された Hugging Face スペースから Zeroscope を実行します。元のスペースはここで見つけることができます :

ハブで Zeroscope を検索する とコミュニティにより配備された他のスペースも見つかります。

👉 公開スペースはいつも混雑していて一時的に停止しているかもしれません。貴方自身のシステムを配備する予定があるなら、それらのスペースを複製して貴方自身のアカウントで実行してください。

 

スペースにホストされたモデルの使用

Gradio を使用したスペースは REST API を公開する 機能があり、これは @gradio/client モジュールを使用して Node から呼び出すことができます。

ここに例があります :

import { client } from "@gradio/client"

export const generateVideo = async (prompt: string) => {
  const api = await client("*** URL OF THE SPACE ***")

  // call the "run()" function with an array of parameters
  const { data } = await api.predict("/run", [		
    prompt,
    42,	// seed	
    24, // nbFrames
    35 // nbSteps
  ])
  
  const { orig_name } = data[0][0]

  const remoteUrl = `${instance}/file=${orig_name}`

  // the file can then be downloaded and stored locally
}

 

後処理

個々のテイク (動画クリップ) がアップスケールされると、FILM (Frame Interpolation for Large Motion) に渡されます、フレーム補完アルゴリズムです :

後処理の間に、MusicGen で生成された音楽も追加します :

 

ストリームのブロードキャスト

Note : 動画ストリームを作成するために使用できる複数のツールがあります。AI WebTV は現在 FFmpeg を使用して mp4 動画ファイルと m4a 音声ファイルから構成されるプレイリストを読みます。

ここにそのようなプレイリストを作成する例があります :

import { promises as fs } from "fs"
import path from "path"

const allFiles = await fs.readdir("** PATH TO VIDEO FOLDER **")
const allVideos = allFiles
  .map(file => path.join(dir, file))
  .filter(filePath => filePath.endsWith('.mp4'))

let playlist = 'ffconcat version 1.0\n'
allFilePaths.forEach(filePath => {
  playlist += `file '${filePath}'\n`
})
await fs.promises.writeFile("playlist.txt", playlist)

これは以下のプレイリストコンテンツを生成します :

ffconcat version 1.0
file 'video1.mp4'
file 'video2.mp4'
...

次にこのプレイリストを読むために FFmpeg が再度使用され、FLV ストリームRTMP サーバ に送信します。FLV は古い形式ですが、依然としてリアルタイム・ストリーミングの世界ではその低遅延によりポピュラーです。

ffmpeg -y -nostdin \
  -re \
  -f concat \
  -safe 0 -i channel_random.txt -stream_loop -1 \
  -loglevel error \
  -c:v libx264 -preset veryfast -tune zerolatency \
  -shortest \
  -f flv rtmp://<SERVER>

FFmpeg については多くの様々な設定オプションがありますので、詳細は 公式ドキュメント をご覧ください。

RTMP サーバについては、NGINX-RTMP モジュール のような、GitHub のオープンソース実装 を見つけることができます。

AI WebTV 自体は node-media-server を使用しています。

💡 Twitch RTMP エントリポイントの一つ に直接ストリームすることもできます。詳細は Twitch ドキュメントを確認してください。

 

観察とサンプル

ここに生成されたコンテンツの幾つかのサンプルがあります。

最初に気付くことは、Zeroscope XL のセカンドパスの適用は画像の品質を大幅に向上させることです。フレーム補間のインパクトも明確に見て取れます。

 

キャラクターとシーン構成

Prompt: Photorealistic movie of a llama acting as a programmer, wearing glasses and a hoodie, intensely staring at a screen with lines of code, in a cozy, dimly lit room, Canon EOS, ambient lighting, high details, cinematic, trending on artstation

Prompt: 3D rendered animation showing a group of food characters forming a pyramid, with a banana standing triumphantly on top. In a city with cotton candy clouds and chocolate road, Pixar’s style, CGI, ambient lighting, direct sunlight, rich color scheme, ultra realistic, cinematic, photorealistic.

Prompt: Intimate close-up of a red fox, gazing into the camera with sharp eyes, ambient lighting creating a high contrast silhouette, IMAX camera, high detail, cinematic effect, golden hour, film grain.

 

動的シーンのシミュレーション

(訳注: 以下省略、原文 参照)

 

以上