Как стать автором
Обновить

Alibaba представила мультимодальную нейросеть, которая может за четыре секунды проанализировать двухчасовое видео

Время на прочтение2 мин
Количество просмотров5.5K

Инженеры китайской компании Alibaba представили мультимодальную модель машинного обучения mPLUG-Owl3. С её помощью можно анализировать текст, изображения и видео. Разработчики делают упор именно на скорость работы нейросети, отмечая, что на обработку двухчасового видео уйдёт всего четыре секунды.

В основе mPLUG-Owl3 используется модель Qwen2, которую доработали и оптимизировали. Благодаря этому в шесть раз сократилось время ожидания первого токена, а на одной видеокарте A100 можно обрабатывать по 400 изображений в секунду. Кроме того, инженеры использовали специальный блок HATB (Hyper Attention Transformer), который связывает визуальные и текстовые признаки. Так, нейросеть, например, может искать визуальные образы на основе текста.

Код проекта открыт и опубликован на GitHub. Также инженеры поделились всем необходимым для работы на портале Hugging Face и его китайском аналоге Model Scope. Есть полный текст исследования, в котором разработчики подробно рассказали о работе mPLUG-Owl3.

Скрытый текст
from PIL import Image

from transformers import AutoTokenizer, AutoProcessor
from decord import VideoReader, cpu    # pip install decord
model_path = 'mPLUG/mPLUG-Owl3-7B-240728'
tokenizer = AutoTokenizer.from_pretrained(model_path)
processor = model.init_processor(tokenizer)

image = Image.new('RGB', (500, 500), color='red')

messages = [
    {"role": "user", "content": """<|image|>
Describe this image."""},
    {"role": "assistant", "content": ""}
]

inputs = processor(messages, images=image, videos=None)

inputs.to('cuda')
inputs.update({
    'tokenizer': tokenizer,
    'max_new_tokens':100,
    'decode_text':True,
})


g = model.generate(**inputs)
print(g)

Скрытый текст
from PIL import Image

from transformers import AutoTokenizer, AutoProcessor
from decord import VideoReader, cpu    # pip install decord
model_path = 'mPLUG/mPLUG-Owl3-7B-240728'
tokenizer = AutoTokenizer.from_pretrained(model_path)
processor = model.init_processor(tokenizer)


messages = [
    {"role": "user", "content": """<|video|>
Describe this video."""},
    {"role": "assistant", "content": ""}
]

videos = ['/nas-mmu-data/examples/car_room.mp4']

MAX_NUM_FRAMES=16

def encode_video(video_path):
    def uniform_sample(l, n):
        gap = len(l) / n
        idxs = [int(i * gap + gap / 2) for i in range(n)]
        return [l[i] for i in idxs]

    vr = VideoReader(video_path, ctx=cpu(0))
    sample_fps = round(vr.get_avg_fps() / 1)  # FPS
    frame_idx = [i for i in range(0, len(vr), sample_fps)]
    if len(frame_idx) > MAX_NUM_FRAMES:
        frame_idx = uniform_sample(frame_idx, MAX_NUM_FRAMES)
    frames = vr.get_batch(frame_idx).asnumpy()
    frames = [Image.fromarray(v.astype('uint8')) for v in frames]
    print('num frames:', len(frames))
    return frames
video_frames = [encode_video(_) for _ in videos]
inputs = processor(messages, images=None, videos=video_frames)

inputs.to('cuda')
inputs.update({
    'tokenizer': tokenizer,
    'max_new_tokens':100,
    'decode_text':True,
})


g = model.generate(**inputs)
print(g)

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+12
Комментарии0

Другие новости

Истории

Работа

Data Scientist
76 вакансий

Ближайшие события

19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн