Views
No views yet
1# git clone https://github.com/Vision-CAIR/LongVU
2import numpy as np
3import torch
4from longvu.builder import load_pretrained_model
5from longvu.constants import (
6 DEFAULT_IMAGE_TOKEN,
7 IMAGE_TOKEN_INDEX,
8)
9from longvu.conversation import conv_templates, SeparatorStyle
10from longvu.mm_datautils import (
11 KeywordsStoppingCriteria,
12 process_images,
13 tokenizer_image_token,
14)
15from decord import cpu, VideoReader
16
17tokenizer, model, image_processor, context_len = load_pretrained_model(
18 "./checkpoints/longvu_qwen", None, "cambrian_qwen",
19)
20
21model.eval()
22video_path = "./examples/video1.mp4"
23qs = "Describe this video in detail"
24
25vr = VideoReader(video_path, ctx=cpu(0), num_threads=1)
26fps = float(vr.get_avg_fps())
27frame_indices = np.array([i for i in range(0, len(vr), round(fps),)])
28video = []
29for frame_index in frame_indices:
30 img = vr[frame_index].asnumpy()
31 video.append(img)
32video = np.stack(video)
33image_sizes = [video[0].shape[:2]]
34video = process_images(video, image_processor, model.config)
35video = [item.unsqueeze(0) for item in video]
36
37qs = DEFAULT_IMAGE_TOKEN + "\n" + qs
38conv = conv_templates["qwen"].copy()
39conv.append_message(conv.roles[0], qs)
40conv.append_message(conv.roles[1], None)
41prompt = conv.get_prompt()
42
43input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors="pt").unsqueeze(0).to(model.device)
44stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2
45keywords = [stop_str]
46stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids)
47with torch.inference_mode():
48 output_ids = model.generate(
49 input_ids,
50 images=video,
51 image_sizes=image_sizes,
52 do_sample=False,
53 temperature=0.2,
54 max_new_tokens=128,
55 use_cache=True,
56 stopping_criteria=[stopping_criteria],
57 )
58pred = tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0].strip()@article{shen2024longvu,
title={LongVU: Spatiotemporal Adaptive Compression for Long Video-Language Understanding},
author={Shen, Xiaoqian and Xiong, Yunyang and Zhao, Changsheng and Wu, Lemeng and Chen, Jun and Zhu, Chenchen and Liu, Zechun and Xiao, Fanyi and Varadarajan, Balakrishnan and Bordes, Florian and Liu, Zhuang and Xu, Hu and J. Kim, Hyunwoo and Soran, Bilge and Krishnamoorthi, Raghuraman and Elhoseiny, Mohamed and Chandra, Vikas},
journal={arXiv:2410.17434},
year={2024}
}