Views
No views yet
1pip install -e .
2pip install flash-attn --no-build-isolation1import torch
2from transformers import AutoModelForCausalLM
3from apollo.mm_utils import (
4 KeywordsStoppingCriteria,
5 tokenizer_mm_token,
6 ApolloMMLoader
7)
8from apollo.conversations import conv_templates, SeparatorStyle
9from huggingface_hub import snapshot_download
10
11model_url = "Apollo-LMMs/Apollo-3B-t32"
12model_path = snapshot_download(model_url, repo_type="model")
13
14device = "cuda" if torch.cuda.is_available() else "cpu"
15model = AutoModelForCausalLM.from_pretrained(
16 model_path,
17 trust_remote_code=True,
18 low_cpu_mem_usage=True
19).to(device=device, dtype=torch.bfloat16)
20
21tokenizer = model.tokenizer
22vision_processors = model.vision_tower.vision_processor
23config = model.config
24num_repeat_token = config.mm_connector_cfg['num_output_tokens']
25mm_processor = ApolloMMLoader(
26 vision_processors,
27 config.clip_duration,
28 frames_per_clip=4,
29 clip_sampling_ratio=0.65,
30 model_max_length=config.model_max_length,
31 device=device,
32 num_repeat_token=num_repeat_token
33)
34
35video_path = "path/to/video.mp4"
36question = "Describe this video in detail"
37mm_data, replace_string = mm_processor.load_video(video_path)
38
39conv = conv_templates["qwen_2"].copy()
40conv.append_message(conv.roles[0], replace_string + "\n\n" + question)
41conv.append_message(conv.roles[1], None)
42
43prompt = conv.get_prompt()
44input_ids = tokenizer_mm_token(prompt, tokenizer, return_tensors="pt").unsqueeze(0).to(device)
45
46stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2
47stopping_criteria = KeywordsStoppingCriteria([stop_str], tokenizer, input_ids)
48
49with torch.inference_mode():
50 output_ids = model.generate(
51 input_ids,
52 vision_input=[mm_data],
53 data_types=['video'],
54 do_sample=True,
55 temperature=0.4,
56 max_new_tokens=256,
57 top_p=0.7,
58 use_cache=True,
59 num_beams=1,
60 stopping_criteria=[stopping_criteria]
61 )
62
63pred = tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0].strip()
64print(pred)1@article{zohar2024apollo,
2 title={Apollo: An Exploration of Video Understanding in Large Multimodal Models},
3 author={Zohar, Orr and Wang, Xiaohan and Dubois, Yann and Mehta, Nikhil and Xiao, Tong and Hansen-Estruch, Philippe and Yu, Licheng and Wang, Xiaofang and Juefei-Xu, Felix and Zhang, Ning and Yeung-Levy, Serena and Xia, Xide},
4 journal={arXiv preprint arXiv:2412.10360},
5 year={2024}
6}