ChatGPTやGeminiなどのクローズドなモデルを使用したサービスが普及する中で、現在はオープンなモデルでも高い精度を出すことができます。今回はオープンソースのVLM(Vision Language Model)であるInternVL-3.5-Flashを使用して動画の説明文を生成する方法を紹介します。
VLM(Vision Language Model)とは
名前の通り、Vision(動画や画像)とLanguage(テキスト)を扱うことができるマルチモーダルと言われるモデルの種類です。VLMを使用することで「この画像について説明してください。」など、画像や動画を含めた会話が可能です。
InternVL-3.5-Flashの紹介
オープンなVLMの中で精度が高く人気なInternVLシリーズの2025年11月20日時点で最も新しいモデルです。
説明文の生成
以下、説明文を生成するコードです。
# 以下リンク先のクイックスタートに記載されている関数と定数を定義し、ライブラリをインポート
# https://huggingface.co/OpenGVLab/InternVL3_5-2B-Flash#quick-start
# モデルのパスの読み込み
path = "OpenGVLab/InternVL3_5-1B-Flash"
# モデルのインスタンス作成
model = AutoModel.from_pretrained(
path,
torch_dtype=torch.bfloat16,
low_cpu_mem_usage=True,
use_flash_attn=True,
trust_remote_code=True).eval().cuda()
# 任意の動画のパスを指定(今回は https://github.com/OpenGVLab/InternVideo/tree/main/Data/InternVid 内の example1.mp4 を使用)
video_path = './examples/red-panda.mp4'
# 動画をモデルに入力するための変換処理
pixel_values, num_patches_list = load_video(video_path, num_segments=8, max_num=1)
pixel_values = pixel_values.to(torch.bfloat16).cuda()
# 入力するプロンプトの作成
video_prefix = ''.join([f'Frame{i+1}: \n' for i in range(len(num_patches_list))])
question = video_prefix + 'Please describe this video in one sentence.'
# 説明文の生成
response = model.chat(tokenizer, pixel_values, question, generation_config, num_patches_list=num_patches_list)
# 結果の表示
print(f'{response}')
出力結果
A man plays with a dog in his backyard. The man gets snow in his face and then buries and digs with his dog with a camera.
説明文を生成することができました。
最後に
オープンなモデルは学習させた自分だけのモデルを作ることやオフライン環境での推論など、クローズドなモデルにはない魅力が多くあります。ぜひ、活用してみてください。

