ローカルでsmollmで動画の内容に関する推論を行う

初めに

昨日以下のLLMを動かしました。

ayousanz.hatenadiary.jp

昨日のPRで動画の推論コードがマージされたので、触ってみます

github.com

開発環境

  • Windows
  • uv
  • python 3.11
  • smollm[85a4eb2dd5dd0eb4e116264f1853ae259846a957]

セットアップ

ライブラリをインストールします

uv pip install transformers
uv pip install torch --index-url https://download.pytorch.org/whl/cu121
uv pip install pillow opencv-python

動画推論

動画は以下を使います

結果は以下になります

Question: Describe the video
Response: User: Answer briefly.<image>Describe the video
Assistant: A green and white airplane is parked on a runway. A group of people are walking towards the airplane. A person is walking away from the airplane. The airplane is parked on a runway. The airplane is parked on a runway. The airplane is parked on a runway. The airplane is parked on a runway. The airplane is parked on a runway. The airplane is parked on a runway. The airplane is parked on a runway. The airplane is parked on a runway. The airplane is parked on a

ローカルでsmollmを動かす

初めに

小さくて精度が高いモデルが出たので、触っていきます。TRL CLIを使ってチャットもできるみたいなのでこちらも触ってみます

github.com

開発環境

  • smollm[1e43f0dcd76261d4317cc2ee7258fe67d151d082]
  • Window
  • uv

セットアップ

まずはuvで環境を作ります

uv venv -p 3.11
.venv\Scripts\activate 

ライブラリをインストールします

uv pip install transformers
uv pip install torch --index-url https://download.pytorch.org/whl/cu121

デフォルトの質問

以下の公式のコードで動かしてみます

from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "HuggingFaceTB/SmolLM2-1.7B-Instruct"

device = "cuda" # for GPU usage or "cpu" for CPU usage
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
# for multiple GPUs install accelerate and do `model = AutoModelForCausalLM.from_pretrained(checkpoint, device_map="auto")`
model = AutoModelForCausalLM.from_pretrained(checkpoint).to(device)

messages = [{"role": "user", "content": "Write a 100-word article on 'Benefits of Open-Source in AI research"}]
input_text=tokenizer.apply_chat_template(messages, tokenize=False)
inputs = tokenizer.encode(input_text, return_tensors="pt").to(device)
outputs = model.generate(inputs, max_new_tokens=50, temperature=0.2, top_p=0.9, do_sample=True)
print(tokenizer.decode(outputs[0]))

結果は以下です

` to obtain reliable results.
<|im_start|>system
You are a helpful AI assistant named SmolLM, trained by Hugging Face<|im_end|>
<|im_start|>user
Write a 100-word article on 'Benefits of Open-Source in AI research<|im_end|>
<|im_start|>assistant
Open-source in AI research offers numerous benefits. Firstly, it fosters collaboration and community engagement, accelerating the development of AI technologies. Secondly, it promotes transparency and accountability, as open-source projects are subject to peer review and scrutiny

日本語での質問および回答は以下です

<|im_start|>system
You are a helpful AI assistant named SmolLM, trained by Hugging Face<|im_end|>
<|im_start|>user
まどマギで一番可愛いキャラクターは誰ですか?<|im_end|>
<|im_start|>assistant
私は日本語ではありませんが、この問題を解くためには、マギで一番可愛いキャラクターは誰ですか?という問題を解くためには、英語で書かれた文章が必要です。これは、「What is the most beautiful character in Magi?」という問題です。これは、アニメ、アニメゲーム、アニメアニメなどのゲームにおけるキャラクターという役割を担っている人物が、最も可愛いキャラクターとして見てもらえる

日本語はだめそうです

WindowsでsamuraiでZero-Shot Visual TrackingをCustom Videoで行う

初めに

モーション認識メモリを使用したゼロショット視覚追跡をローカルで触っていきます

github.com

開発環境

  • Windows11
  • uv
  • pyhton 3.10

セットアップ

まずは環境を作っていきます

uv venv -p 3.10
.venv\Scripts\activate

ライブラリを ReadMeに従って入れていきます

uv pip install -e .
uv pip install -e ".[notebooks]"
uv pip install matplotlib==3.7 tikzplotlib jpeg4py opencv-python lmdb pandas scipy
uv pip install loguru

torchのcuda版を入れます

uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 --force-reinstall

一部ダウンロードを自動で行うための処理を実行します

cd .\sam2\
cd .\checkpoints\
.\download_ckpts.sh

データの準備

現時点では、Custom Videoでの推論をするためのサンプルのデータがなかったので以下のデータセットを使っていきます

huggingface.co

airplane をダウンロードして、以下の airplane-1 を使っていきます

データが画像の連番になっているので、画像の連番から動画を作ります

ffmpegを使って以下のように変換をします

ffmpeg -framerate 24 -i %08d.jpg -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4

変換することで以下のような動画できます

xywh formatになっているテキストは groundtruth.txt を使っていきます

Custom Videoでの推論

以下で推論をします

python scripts/demo.py --video_path .\sam2\output.mp4 --txt_path .\sam2\groundtruth.txt

以下のようなようになります

youtu.be

FFmpegで連番の画像から動画を作成する

開発環境

  • Windows11
  • FFmpeg N-113785-gfe340c3244-20240223

連番画像から動画作成

連番の画像があるフォルダで以下を実行

ffmpeg -framerate 30 -i %08d.jpg -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4

オプションについて

  • -framerate 30:入力する画像のフレームレートを30fpsに設定します。必要に応じて数値を変更
  • -i %08d.jpg:8桁のゼロパディングされた連番画像を入力 %08dは8桁の整数を表します。ファイル名の数字部分の桁数に合わせて変更
  • -c:v libx264:動画のエンコーダーとしてH.264を使用
  • -r 30:出力する動画のフレームレートを30fpsに設定
  • -pix_fmt yuv420p:ピクセルフォーマットをyuv420pに設定
  • output.mp4:出力される動画ファイルの名前

以下のl-lt/LaSOT-extの airplane/airplane-1 の画像を動画にすると以下になります

先頭の画像は以下です

huggingface.co

WSL2 + dockerの容量削減方法

初めに

Windowsでdockerを使った開発を行っていると容量がどんどん増えていきます。定期的に掃除をする必要があるので、やり方のメモです

開発環境

  • Windows11
  • wsl

方法

以下の記事を参考にして、既存のdocker imageを削除

docker system prune -a --volumes

qiita.com

また以下を参考にして仮想ディスクのサイズ最適化

www.curict.com

  1. Dockerの起動を終了
  2. powershellを管理者で起動
  3. cd C:\Users\ユーザー名\AppData\Local\Docker\wsl\data に移動
  4. Optimize-VHD -Path .\ext4.vhdx -Mode full でイメージの最適化

WindowsでAudioLDM-training-finetuningでAudioLDMのfinetuningを行う

初めに

以前にtext to audioを AudioLDMを使って行いました。

ayousanz.hatenadiary.jp

今回はこの AudioLDMを事前学習モデル + データセットを使って追加学習をしていきます。

以下のRepositoryを参考に追加学習を行います。

github.com

またライブラリ等の調節をして現時点で動くようにしたものを以下に公開しています。

github.com

開発環境

セットアップ

今回は、forkしたリポジトリを前提に話を進めていきます (fork元からだと細かいライブラリの調節が必要なため)

環境を作ります

uv venv -p 3.10
.venv/Script/actiavte

まずは pyproject.toml からライブラリのインストールを行います

uv sync

torch周りのGPU(cuda)版をインストールします

uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 --force-reinstall

モデル・データセットの配置

事前学習モデルとデータセットを以下のように配置します

データセットおよびモデルは以下にも公開しているので、こちらもご使用ください

以下でダウンロードすることができます(git cloneよりディスク容量の観点でおすすめです)

huggingface-cli download ayousanz/AudioLDM-training-finetuning --local-dir .

huggingface.co

├── .gitkeep
├── checkpoints
│   ├── .gitkeep
│   ├── audioldm-s-full.ckpt
│   ├── audiomae_16k_128bins.ckpt
│   ├── clap_htsat_tiny.pt
│   ├── clap_music_speech_audioset_epoch_15_esc_89.98.pt
│   ├── hifigan_16k_64bins.ckpt
│   ├── hifigan_16k_64bins.json
│   ├── hifigan_48k_256bins.ckpt
│   ├── hifigan_48k_256bins.json
│   └── vae_mel_16k_64bins.ckpt
└── dataset
├── .gitkeep
├── audioset
└── metadata\

追加学習の実行

以下で追加学習を実行します

python audioldm_train/train/latent_diffusion.py -c audioldm_train/config/2023_08_23_reproduce_audioldm/audioldm_original.yaml --reload_from_ckpt data/checkpoints/audioldm-s-full.ckpt

AudioLDMでtext to audioを行う

初めに

text to audioがいろいろある中で出てきた AudioLDMというCLAPを使って音声を生成するモデルを触ってみます

github.com

開発環境

セットアップ

まずは公式がconda 3.8を指定しているので、uv でpython=3.8の環境を作ります。

uv venv -p 3.8
.venv\Scripts\activate

ライブラリを入れていきます

uv pip install audioldm

そのままだと実行するとエラーになるので、setuptoolsをアップデートします

エラー文

    from pkg_resources import resource_filename
ModuleNotFoundError: No module named 'pkg_resources'
uv pip install --upgrade setuptools

gradioが4.x.x以上だと動かないので、gradioを3系でインストールします

4系で実行すると以下のエラーが出ます

Traceback (most recent call last):
  File ".\app.py", line 225, in <module>
    with gr.Box():
AttributeError: module 'gradio' has no attribute 'Box'

github.com

uv pip install gradio==3.50.2

torchがcpuになっているので、CUDA版をインストールします

uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 --force-reinstall

一部ライブラリでエラーになるので、アップデートします

uv pip install --upgrade typing_extensions

推論

以下でgradioのGUI推論画面を開きます

python .\app.py

初回のsubmitはモデルのダウンロードが走ります

Load AudioLDM: %s audioldm-m-full
Downloading the main structure of audioldm-m-full into C:\Users\user\.cache/audioldm
 41% |############################# 

以下のように音が生成されます

requirements.txt

requirements.txt は以下です

aiofiles==23.2.1
altair==5.4.1
annotated-types==0.7.0
anyio==4.5.2
attrs==24.2.0
audioldm==0.1.1
audioread==3.0.1
certifi==2024.8.30
cffi==1.17.1
chardet==5.2.0
charset-normalizer==3.4.0
click==8.1.7
colorama==0.4.6
contourpy==1.1.1
cycler==0.12.1
decorator==5.1.1
einops==0.8.0
exceptiongroup==1.2.2
fastapi==0.115.5
ffmpy==0.4.0
filelock==3.13.1
fonttools==4.55.0
fsspec==2024.2.0
ftfy==6.2.3
gradio==3.50.2
gradio-client==0.6.1
h11==0.14.0
httpcore==1.0.7
httpx==0.27.2
huggingface-hub==0.26.2
idna==3.10
importlib-metadata==8.5.0
importlib-resources==6.4.5
jinja2==3.1.3
joblib==1.4.2
jsonschema==4.23.0
jsonschema-specifications==2023.12.1
kiwisolver==1.4.7
librosa==0.9.2
llvmlite==0.41.1
markdown-it-py==3.0.0
markupsafe==2.1.5
matplotlib==3.7.5
mdurl==0.1.2
mpmath==1.3.0
narwhals==1.14.1
networkx==3.2.1
numba==0.58.1
numpy==1.24.1
orjson==3.10.11
packaging==24.2
pandas==2.0.3
pillow==10.2.0
pkgutil-resolve-name==1.3.10
platformdirs==4.3.6
pooch==1.8.2
progressbar==2.5
pycparser==2.22
pydantic==2.10.1
pydantic-core==2.27.1
pydub==0.25.1
pygments==2.18.0
pyparsing==3.1.4
python-dateutil==2.9.0.post0
python-multipart==0.0.17
pytz==2024.2
pyyaml==6.0.2
referencing==0.35.1
regex==2024.11.6
requests==2.32.3
resampy==0.4.3
rich==13.9.4
rpds-py==0.20.1
ruff==0.8.0
safetensors==0.4.5
scikit-learn==1.3.2
scipy==1.10.1
semantic-version==2.10.0
setuptools==75.3.0
shellingham==1.5.4
six==1.16.0
sniffio==1.3.1
soundfile==0.12.1
starlette==0.41.3
sympy==1.13.1
threadpoolctl==3.5.0
tokenizers==0.20.3
tomlkit==0.12.0
torch==2.4.1+cu121
torchaudio==2.4.1+cu121
torchlibrosa==0.0.9
torchvision==0.19.1+cu121
tqdm==4.67.0
transformers==4.46.3
typer==0.13.1
typing-extensions==4.12.2
tzdata==2024.2
urllib3==2.2.3
uvicorn==0.32.1
wcwidth==0.2.13
websockets==11.0.3
zipp==3.20.2

以下でリポジトリにもアップロードしています

github.com