2024/10/21
: Мы выпускаем серию Mini-InternVL. Эти модели достигают впечатляющей производительности при минимальных размерах: модель 4B достигает 90% производительности, занимая всего 5% размера модели. Для получения более подробной информации, пожалуйста, проверьте страницу нашего проекта и документ.
2024/08/01
: Команда Chartmimic оценила модели серии InternVL2 на своих тестах. Модели InternVL2-26B и 76B достигли двух лучших показателей среди моделей с открытым исходным кодом, при этом модель InternVL2 76B превзошла GeminiProVision и продемонстрировала результаты, сопоставимые с Claude-3-opus.
2024/08/01
: InternVL2-Pro достигла производительности SOTA среди моделей с открытым исходным кодом в наборе данных CharXiv, превзойдя многие модели с закрытым исходным кодом, такие как GPT-4V, Gemini 1.5 Flash и Claude 3 Sonnet.
2024/07/24
: Команда MLVU оценила InternVL-1.5 на своем тесте. Средняя успеваемость по задаче с множественным выбором составила 50,4%, а по порождающим задачам — 4,02. Результаты выполнения задачи с множественным выбором заняли первое место среди всех MLLM с открытым исходным кодом.
2024/07/18
: ?? InternVL2-40B достиг производительности SOTA среди моделей с открытым исходным кодом в наборе данных Video-MME, набрав 61,2 балла при вводе 16 кадров и 64,4 балла при вводе 32 кадров. Он значительно превосходит другие модели с открытым исходным кодом и является наиболее близкой к GPT-4o mini моделью с открытым исходным кодом.
2024/07/18
: ? InternVL2-Pro достиг производительности SOTA в тестах DocVQA и InfoVQA.
2024/07/04
: ? Выпускаем серию InternVL2. InternVL2-Pro достиг точности 62,0% в тесте MMMU, что соответствует производительности ведущих коммерческих моделей с закрытым исходным кодом, таких как GPT-4o. Бесплатный API этой модели можно применить, заполнив (форму заявки)/(申请表). Другие модели доступны по ссылке HF.
2024/06/19
: Мы предлагаем «Иголку в мультимодальном стоге сена» (MM-NIAH), первый тест, предназначенный для систематической оценки способности существующих MLLM понимать длинные мультимодальные документы.
2024/05/30
.: Мы выпускаем ShareGPT-4o, крупномасштабный набор данных, исходный код которого мы планируем открыть, содержащий 200 тысяч изображений, 10 тысяч видео и 10 тысяч аудио с подробными описаниями.
2024/05/28
: Спасибо команде lmdeploy за поддержку квантования AWQ. 4-битная модель доступна по адресу OpenGVLab/InternVL-Chat-V1-5-AWQ.
2024/05/13
: InternVL 1.0 теперь можно использовать в качестве кодировщика текста для диффузионных моделей для поддержки многоязычной генерации на более чем 110 языках по всему миру. См. Мулан для более подробной информации.
2024/04/18
.: InternVL-Chat-V1-5 был выпущен на HF link, приближаясь к производительности GPT-4V и Gemini Pro в различных тестах, таких как MMMU, DocVQA, ChartQA, MathVista и т. д.
2024/02/27
: InternVL принят на CVPR 2024 (устно)! ?
2024/02/21
: InternVL-Chat-V1-2-Plus достиг производительности SOTA на MathVista (59,9), MMBench (83,8) и MMVP (58,7). Подробности смотрите в нашем блоге.
2024/02/12
: Выпущен InternVL-Chat-V1-2. Он достигает 51,6 по MMMU val и 82,3 по тесту MMBench. Для получения более подробной информации, пожалуйста, обратитесь к нашему блогу и данным SFT. Модель теперь доступна на HuggingFace, а данные обучения/оценки и сценарии находятся в открытом доступе.
2024/01/24
: Выпущен InternVL-Chat-V1-1, он поддерживает китайский язык и имеет более сильные возможности оптического распознавания символов, см. здесь.
2024/01/16
: Мы выпускаем наш индивидуальный код mmcv/mmsegmentation/mmdetection, интегрированный с DeepSpeed, который можно использовать для обучения крупномасштабных моделей обнаружения и сегментации.
Поддержка vLLM и Ollama
Восстановить документы с помощью readthedocs
Поддержка тонкой настройки различных LLM с помощью LoRA.
Поддержка ввода видео и PDF в онлайн-демо
Выпуск InternVL2 с интеграцией VisionLLMv2.
Выпуск requirements.txt
для InternVL2
Выпуск обучающего/оценочного кода для серии InternVL2
Выпуск веб-интерфейса Streamlit для InternVL1.5 и InternVL2.
Начать
Установка: [Среда] [requirements.txt]
Подготовка оценочных данных: [Оценка InternVL]
Формат данных чата: [Метафайл] [Чистый текст] [Одно изображение] [Несколько изображений] [Видео]
API InternVL-Чата: [InternVL2-Pro]
Демо локального чата: [Демо Streamlit] [Демо Gradio] [Демо LMDeploy]
Учебные пособия: [Улучшение InternVL2 в подписи COCO с использованием тонкой настройки LoRA]
Семья СтажерВЛ
InternVL 2.0: [Введение] [Быстрый старт] [Точная настройка] [Оценка] [Развертывание]
InternVL 1.5: [Введение] [Быстрый старт] [Точная настройка] [Оценка] [Развертывание]
InternVL 1.2: [Введение] [Быстрый старт] [Точная настройка] [Оценка]
InternVL 1.1: [Введение] [Быстрый старт] [Оценка]
InternVL 1.0: [Классификация] [CLIP-Benchmark] [Сегментация] [InternVL-Chat-LLaVA] [InternVL-G]
Название модели | Видение Часть | Языковая часть | ВЧ связь | МС Ссылка | Документ |
---|---|---|---|---|---|
СтажерВЛ2‑1Б | ИнтернВиТ‑300М‑448px | Qwen2-0.5B-Инструктировать | ? связь | ? связь | ? док |
СтажерВЛ2‑2Б | ИнтернВиТ‑300М‑448px | internlm2‑chat‑1‑8b | ? связь | ? связь | ? док |
СтажерВЛ2‑4Б | ИнтернВиТ‑300М‑448px | Фи‑3‑мини‑128к‑инструкция | ? связь | ? связь | ? док |
СтажерВЛ2‑8Б | ИнтернВиТ‑300М‑448px | internlm2_5‑7b‑чат | ? связь | ? связь | ? док |
СтажерВЛ2‑26Б | СтажерВиТ‑6Б‑448px‑V1‑5 | internlm2‑chat‑20b | ? связь | ? связь | ? док |
СтажерВЛ2‑40Б | СтажерВиТ‑6Б‑448px‑V1‑5 | Ноус‑Гермес‑2‑Йи‑34Б | ? связь | ? связь | ? док |
СтажерВЛ2-Лама3-76Б | СтажерВиТ‑6Б‑448px‑V1‑5 | Гермес‑2‑Тета‑ Лама‑3‑70Б | ? связь | ? связь | ? док |
Мы приглашаем всех использовать наш API для исследований. Для лучшего управления отправьте (форму заявки) / (申请表), чтобы получить бесплатный доступ к API.
Модель | Дата | ВЧ связь | МС Ссылка | Примечание |
---|---|---|---|---|
Мини‑СтажерVL‑Чат‑4B‑V1‑5 | 2024.05.28 | ? связь | ? связь | ?? 16% размера модели, 90% производительности |
Мини‑СтажерVL‑Чат‑2B‑V1‑5 | 2024.05.19 | ? связь | ? связь | ? 8% размера модели, 80% производительности |
СтажерVL‑Чат‑V1‑5 | 2024.04.18 | ? связь | ? связь | поддержка изображения 4К; сверхсильное распознавание текста; Оценка производительности GPT-4V и Gemini Pro в различных тестах, таких как MMMU, DocVQA, ChartQA, MathVista и т. д. |
СтажерVL‑Chat‑V1‑2‑Plus | 2024.02.21 | ? связь | ? связь | больше данных SFT и сильнее |
СтажерVL‑Чат‑V1‑2 | 2024.02.11 | ? связь | ? связь | увеличение LLM до 34B |
СтажерVL‑Чат‑V1‑1 | 2024.01.24 | ? связь | ? связь | поддержка китайского языка и более сильное распознавание текста |
СтажерVL‑Chat‑19B | 2023.12.25 | ? связь | ? связь | Английский мультимодальный диалог |
СтажерVL‑Chat‑13B | 2023.12.25 | ? связь | ? связь | Английский мультимодальный диалог |
Модель | Дата | ВЧ связь | МС Ссылка | Примечание |
---|---|---|---|---|
ИнтернВиТ‑300М‑448px | 2024.05.25 | ? связь | ? связь | дистиллированная модель фундамента малого видения с параметрами 300M (?новая) |
СтажерВиТ‑6Б‑448px‑V1‑5 | 2024.04.20 | ? связь | ? связь | поддержка динамического разрешения и сверхмощных возможностей извлечения функций OCR путем постепенного предварительного обучения (? новое) |
СтажерВиТ‑6Б‑448px‑V1‑2 | 2024.02.11 | ? связь | ? связь | поддержка разрешения 448 путем постепенного предварительного обучения |
СтажерВиТ‑6Б‑448px‑V1‑0 | 2024.01.30 | ? связь | ? связь | поддержка разрешения 448 путем постепенного предварительного обучения |
ИнтернВиТ‑6Б‑224px | 2023.12.22 | ? связь | ? связь | первая версия InternViT-6B, извлеченная из InternVL‑14B‑224px |
Модель | Дата | ВЧ связь | МС Ссылка | Примечание |
---|---|---|---|---|
СтажерVL‑14B‑224px | 2023.12.22 | ? связь | ? связь | базовая модель визуального языка, InternViT-6B + QLLaMA, может использоваться для извлечения изображения и текста, например CLIP. |
Классификация изображений линейного зонда [см. подробности]
ВиТ-22Б использует частный набор данных JFT-3B.
метод | #парам | ИН-1К | ИН-Реал | ИН-В2 | ИН-А | ИН-Р | IN-эскиз |
---|---|---|---|---|---|---|---|
OpenCLIP-G | 1,8Б | 86,2 | 89,4 | 77,2 | 63,8 | 87,8 | 66,4 |
ДИНОВ2-г | 1.1Б | 86,5 | 89,6 | 78,4 | 75,9 | 78,8 | 62,5 |
ЕВА-01-КЛИП-г | 1.1Б | 86,5 | 89,3 | 77,4 | 70,5 | 87,7 | 63,1 |
МАВС-ВиТ-6.5Б | 6,5Б | 87,8 | - | - | - | - | - |
ВиТ-22Б* | 21,7Б | 89,5 | 90,9 | 83,2 | 83,8 | 87,4 | - |
ИнтернВиТ-6Б (наш) | 5.9Б | 88,2 | 90,4 | 79,9 | 77,5 | 89,8 | 69,1 |
Семантическая сегментация [см. подробности]
метод | декодер | #param (поезд/всего) | размер урожая | МИЛО |
---|---|---|---|---|
OpenCLIP-G (заморожено) | Линейный | 0,3М/1,8Б | 512 | 39,3 |
ВиТ-22Б (замороженный) | Линейный | 0,9М/21,7Б | 504 | 34,6 |
ИнтернВиТ-6Б (замороженный) | Линейный | 0,5М/5,9Б | 504 | 47,2 (+12,6) |
ВиТ-22Б (замороженный) | УперНет | 0,8Б / 22,5Б | 504 | 52,7 |
ИнтернВиТ-6Б (замороженный) | УперНет | 0,4Б / 6,3Б | 504 | 54,9 (+2,2) |
ВиТ-22Б | УперНет | 22,5Б / 22,5Б | 504 | 55,3 |
ИнтернВиТ-6Б | УперНет | 6,3Б / 6,3Б | 504 | 58,9 (+3,6) |
Классификация изображений с нулевым выстрелом [см. подробности]
метод | ИН-1К | ИН-А | ИН-Р | ИН-В2 | IN-эскиз | Объектная сеть |
---|---|---|---|---|---|---|
OpenCLIP-G | 80,1 | 69,3 | 92,1 | 73,6 | 68,9 | 73,0 |
ЕВА-02-КЛИП-Е+ | 82,0 | 82,1 | 94,5 | 75,7 | 71,6 | 79,6 |
ВиТ-22Б* | 85,9 | 90,1 | 96,0 | 80,9 | - | 87,6 |
СтажерВЛ-С (наш) | 83,2 | 83,8 | 95,5 | 77,3 | 73,9 | 80,6 |
Многоязычная классификация изображений с нулевым выстрелом [см. подробности]
EN: английский, ZH: китайский, JP: японский, Ar: арабский, IT: итальянский
метод | ИН-1К (АН) | ИН-1К (Ж) | ИН-1К (Япония) | ИН-1К (АР) | ИН-1К (ИТ) |
---|---|---|---|---|---|
Тайи-CLIP-ViT-H | - | 54,4 | - | - | - |
Вуконг-ВИТ-LG | - | 57,5 | - | - | - |
CN-CLIP-ViT-H | - | 59,6 | - | - | - |
AltCLIP-ВиТ-Л | 74,5 | 59,6 | - | - | - |
ЕВА-02-КЛИП-Е+ | 82,0 | - | - | - | 41,2 |
OpenCLIP-XLM-RH | 77,0 | 55,7 | 53,1 | 37,0 | 56,8 |
СтажерВЛ-С (наш) | 83,2 | 64,5 | 61,5 | 44,9 | 65,7 |
Классификация видео с нулевым кадром
метод | #рамка | К400 | К600 | К700 |
---|---|---|---|---|
OpenCLIP-G | 1 | 65,9 | 66,1 | 59,2 |
ЕВА-02-КЛИП-Е+ | 1 | 69,8 | 69,3 | 63,4 |
СтажерВЛ-С (наш) | 1 | 71,0 | 71,3 | 65,7 |
ВиКЛИП | 8 | 75,7 | 73,5 | 66,4 |
СтажерВЛ-С (наш) | 8 | 79,4 | 78,8 | 71,5 |
Извлечение изображения и текста на английском языке с нулевым выстрелом [см. подробности]
модель | Фликр30 тыс. | КОКО | среднее | ||||||||||
преобразование изображения в текст | преобразование текста в изображение | преобразование изображения в текст | преобразование текста в изображение | ||||||||||
Р@1 | Р@5 | Р@10 | Р@1 | Р@5 | Р@10 | Р@1 | Р@5 | Р@10 | Р@1 | Р@5 | Р@10 | ||
OpenCLIP-G | 92,9 | 99,3 | 99,8 | 79,5 | 95,0 | 97,1 | 67,3 | 86,9 | 92,6 | 51,4 | 74,9 | 83,0 | 85,0 |
ЕВА-02-КЛИП-Е+ | 93,9 | 99,4 | 99,8 | 78,8 | 94,2 | 96,8 | 68,8 | 87,8 | 92,8 | 51,1 | 75,0 | 82,7 | 85,1 |
ЕВА-КЛИП-8Б | 95,6 | 99,6 | 99,9 | 80,8 | 95,5 | 97,6 | 70,3 | 89,3 | 93,9 | 53,0 | 76,0 | 83,4 | 86,2 |
СтажерВЛ-С (наш) | 94,7 | 99,6 | 99,9 | 81,7 | 96,0 | 98,2 | 70,6 | 89,0 | 93,5 | 54,1 | 77,3 | 84,6 | 86,6 |
СтажерВЛ-Г (наш) | 95,7 | 99,7 | 99,9 | 85,0 | 97,0 | 98,6 | 74,9 | 91,3 | 95,2 | 58,6 | 81,3 | 88,0 | 88,8 |
Китайский поиск изображений и текста с нулевым выстрелом [см. подробности]
модель | Flickr30K-CN | КОКО-CN | среднее | ||||||||||
преобразование изображения в текст | преобразование текста в изображение | преобразование изображения в текст | преобразование текста в изображение | ||||||||||
Р@1 | Р@5 | Р@10 | Р@1 | Р@5 | Р@10 | Р@1 | Р@5 | Р@10 | Р@1 | Р@5 | Р@10 | ||
CN-CLIP-ViT-H | 81,6 | 97,5 | 98,8 | 71,2 | 91,4 | 95,5 | 63,0 | 86,6 | 92,9 | 69,2 | 89,9 | 96,1 | 86,1 |
OpenCLIP-XLM-RH | 86,1 | 97,5 | 99,2 | 71,0 | 90,5 | 94,9 | 70,0 | 91,5 | 97,0 | 66,1 | 90,8 | 96,0 | 87,6 |
СтажерВЛ-С (наш) | 90,3 | 98,8 | 99,7 | 75,1 | 92,9 | 96,4 | 68,8 | 92,0 | 96,7 | 68,9 | 91,9 | 96,5 | 89,0 |
СтажерВЛ-Г (наш) | 92,9 | 99,4 | 99,8 | 77,7 | 94,8 | 97,3 | 71,4 | 93,9 | 97,7 | 73,8 | 94,4 | 98,1 | 90,9 |
Многоязычный поиск изображения и текста с нулевой точки зрения на XTD [см. подробности]
метод | RU | ES | фр. | Ж.Ж. | ЭТО | КО | РУ | Япония | средний |
---|---|---|---|---|---|---|---|---|---|
AltCLIP | 95,4 | 94,1 | 92,9 | 95,1 | 94,2 | 94,4 | 91,8 | 91,7 | 93,7 |
OpenCLIP-XLM-RH | 97,3 | 96,1 | 94,5 | 94,7 | 96,0 | 90,2 | 93,9 | 94,0 | 94,6 |
СтажерВЛ-С (наш) | 97,3 | 95,7 | 95,1 | 95,6 | 96,0 | 92,2 | 93,3 | 95,5 | 95,1 |
СтажерВЛ-Г (наш) | 98,6 | 97,7 | 96,5 | 96,7 | 96,9 | 95,1 | 94,8 | 96,1 | 96,6 |
См. раздел «По сравнению с SOTA VLLM».
импортировать факел из PIL импортировать изображение из трансформаторов импортировать AutoModel, CLIPImageProcessormodel = AutoModel.from_pretrained('OpenGVLab/InternViT-6B-448px-V1-5',torch_dtype=torch.bfloat16,low_cpu_mem_usage=True,trust_remote_code=True).cuda().eval( )image = Image.open('./examples/image1.jpg').convert('RGB')image_processor = CLIPImageProcessor.from_pretrained('OpenGVLab/InternViT-6B-448px-V1-5')pixel_values = image_processor(images= изображение, return_tensors='pt').pixel_valuespixel_values = Pixel_values.to(torch.bfloat16).cuda()outputs = model(pixel_values)
импорт факела из PIL импорт изображения из трансформаторов импорт AutoModel, CLIPImageProcessorиз трансформаторов импорт AutoTokenizermodel = AutoModel.from_pretrained('OpenGVLab/InternVL-14B-224px',torch_dtype=torch.bfloat16,low_cpu_mem_usage=True,trust_remote_code=True).cuda().eval() image_processor = CLIPImageProcessor.from_pretrained('OpenGVLab/InternVL-14B-224px')tokenizer = AutoTokenizer.from_pretrained('OpenGVLab/InternVL-14B-224px', use_fast=False, add_eos_token=True)tokenizer.pad_token_id = 0 # установите для Pad_token_id значение 0изображений = [Image.open('./examples/image1.jpg').convert('RGB'),Image.open('./examples/image2.jpg').convert('RGB'),Image.open( './examples/image3.jpg').convert('RGB') ]prefix = 'summarize:'texts = [prefix + 'фото красной панды', # Englishprefix + '一张熊猫的照片', # Chineseprefix + '二匹の猫の写真' # японский]pixel_values = image_processor( images=images, return_tensors='pt').pixel_valuespixel_values = Pixel_values.to(torch.bfloat16).cuda()input_ids = tokenizer(texts, return_tensors='pt', max_length=80, truncation=True, Padding='max_length' ).input_ids.cuda()# InternVL-Clogits_per_image, logits_per_text = model(image=pixel_values, text=input_ids, mode='InternVL-C')probs = logits_per_image.softmax(dim=-1)# tensor([[9.9609e -01, 5.2185e-03, 6.0070e-08],# [2.2949e-02, 9.7656e-01, 5.9903e-06],# [3.2932e-06, 7.4863e-05, 1.0000e+00]] , устройство='cuda:0',# dtype=torch.bfloat16, grad_fn=)# InternVL-Glogits_per_image, logits_per_text = model(image=pixel_values, text=input_ids, mode='InternVL-G')probs = logits_per_image .softmax(dim=-1)# tensor([[9.9609e-01, 3.1738e-03, 3.6322e-08],# [8.6060e-03, 9.9219e-01, 2.8759e-06],# [1.7583 e-06, 3.1233e-05, 1.0000e+00]], device='cuda:0',# dtype=torch.bfloat16, grad_fn= )# установите для add_eos_token значение False для GenerationTokenizer.add_eos_token = Falseimage = Image.open('./examples/image1.jpg').convert('RGB')pixel_values = image_processor(images=image, return_tensors='pt').pixel_valuespixel_values = Pixel_values.to(torch.bfloat16).cuda() tokenized = tokenizer("Английская подпись:", return_tensors='pt')pred = model.generate(pixel_values=pixel_values,input_ids=tokenized.input_ids.cuda(),attention_mask=tokenized.attention_mask.cuda(),num_beams=5, min_new_tokens=8, )caption = tokenizer.decode(pred[0].cpu(),skip_special_tokens=True).strip()# Надпись на английском языке: красная панда сидит на деревянной платформе
Здесь в качестве примера мы возьмем меньший OpenGVLab/InternVL2-8B
:
импортировать numpy как npimport torchimport torchvision.transforms как Tfrom Decord импортировать VideoReader, cpufrom PIL импортировать Imagefrom torchvision.transforms.functional импорт InterpolationModefrom Transformers import AutoModel, AutoTokenizerIMAGENET_MEAN = (0,485, 0,456, 0,406)IMAGENET_STD = (0,229, 0,224, 5) защита build_transform( input_size):MEAN, STD = IMAGENET_MEAN, IMAGENET_STDtransform = T.Compose([T.Lambda(lambda img: img.convert('RGB') if img.mode != 'RGB' else img),T.Resize((input_size) , input_size), interpolation=InterpolationMode.BICUBIC),T.ToTensor(),T.Normalize(mean=MEAN, std=STD) ])return Transformdef find_closest_aspect_ratio(aspect_ratio, target_ratios, width, height, image_size):best_ratio_diff = float('inf')best_ratio = (1, 1)area = ширина * высотадля соотношения в target_ratios:target_aspect_ratio = соотношение[0] / соотношение[ 1]ratio_diff = abs(aspect_ratio - target_aspect_ratio)if Ratio_diff < best_ratio_diff:best_ratio_diff = Ratio_diffbest_ratio = Ratioelif Ratio_diff == best_ratio_diff:if area > 0,5 * image_size * image_size * Ratio[0] * Ratio[1]:best_ratio = Ratioreturn best_ratiodef Dynamic_preprocess( image, min_num=1, max_num=12, image_size=448, use_thumbnail=False):orig_width, orig_height = image.sizeaspect_ratio = orig_width / orig_height# вычислить существующее соотношение сторон изображенияtarget_ratios = set( (i, j) для n в диапазоне (min_num, max_num + 1) для i в диапазоне (1, n + 1) для j в диапазоне (1, n + 1) ifi * j <= max_num и i * j >= min_num)target_ratios = sorted(target_ratios, key=lambda x: x[0] * x[1])# найти ближайшее соотношение сторон к целевому target_aspect_ratio = find_closest_aspect_ratio(aspect_ratio, target_ratios, orig_width, orig_height, image_size)# вычислить целевую ширину и heighttarget_width = image_size * target_aspect_ratio[0]target_height = image_size * target_aspect_ratio[1]blocks = target_aspect_ratio[0] * target_aspect_ratio[1]# изменить размер изображенияresized_img = image.resize((target_width, target_height))processed_images = []for i in диапазон(блоки):box = ( (i % (target_width // размер_изображения)) * размер_изображения, (i // (target_width // размер_изображения)) * размер_изображения, ((i % (target_width // размер_изображения)) + 1) * размер_изображения, ((i // (target_width // image_size)) + 1) * image_size)# разделить изображенияplit_img = resized_img.crop(box)processed_images.append(split_img)assert