2024/10/21
: Wir veröffentlichen die Mini-InternVL-Serie. Diese Modelle erreichen beeindruckende Leistung bei minimaler Größe: Das 4B-Modell erreicht 90 % der Leistung bei nur 5 % der Modellgröße. Weitere Einzelheiten finden Sie auf unserer Projektseite und im Dokument.
2024/08/01
: Das Chartmimic-Team bewertete die Modelle der InternVL2-Serie anhand ihres Benchmarks. Die Modelle InternVL2-26B und 76B erzielten die beiden besten Leistungen unter den Open-Source-Modellen, wobei das Modell InternVL2 76B GeminiProVision übertraf und vergleichbare Ergebnisse wie Claude-3-opus zeigte.
2024/08/01
: InternVL2-Pro erreichte die SOTA-Leistung unter Open-Source-Modellen im CharXiv-Datensatz und übertraf damit viele Closed-Source-Modelle wie GPT-4V, Gemini 1.5 Flash und Claude 3 Sonnet.
2024/07/24
: Das MLVU-Team hat InternVL-1.5 anhand seines Benchmarks bewertet. Die durchschnittliche Leistung bei der Multiple-Choice-Aufgabe betrug 50,4 %, während die Leistung bei den generativen Aufgaben 4,02 betrug. Die Leistung bei der Multiple-Choice-Aufgabe belegte Platz 1 unter allen Open-Source-MLLMs.
2024/07/18
: ?? InternVL2-40B erreichte eine SOTA-Leistung unter Open-Source-Modellen im Video-MME-Datensatz und erzielte bei der Eingabe von 16 Frames einen Wert von 61,2 und bei der Eingabe von 32 Frames einen Wert von 64,4. Es übertrifft andere Open-Source-Modelle deutlich und ist das Open-Source-Modell, das dem GPT-4o mini am nächsten kommt.
2024/07/18
: ? InternVL2-Pro erreichte die SOTA-Leistung bei den DocVQA- und InfoVQA-Benchmarks.
2024/07/04
: ? Wir veröffentlichen die InternVL2-Serie. InternVL2-Pro erreichte beim MMMU-Benchmark eine Genauigkeit von 62,0 % und erreichte damit die Leistung führender kommerzieller Closed-Source-Modelle wie GPT-4o. Die kostenlose API dieses Modells kann durch Ausfüllen des (Antragsformulars) / (申请表) angewendet werden. Weitere Modelle sind bei HF Link erhältlich.
2024/06/19
: Wir schlagen Needle In A Multimodal Haystack (MM-NIAH) vor, den ersten Benchmark zur systematischen Bewertung der Fähigkeit bestehender MLLMs, lange multimodale Dokumente zu verstehen.
2024/05/30
: Wir veröffentlichen ShareGPT-4o, einen großen Datensatz mit 200.000 Bildern, 10.000 Videos und 10.000 Audiodateien mit detaillierten Beschreibungen, den wir als Open Source veröffentlichen möchten.
2024/05/28
: Vielen Dank an das lmdeploy-Team für die Bereitstellung der AWQ-Quantisierungsunterstützung. Das 4-Bit-Modell ist unter OpenGVLab/InternVL-Chat-V1-5-AWQ verfügbar.
2024/05/13
: InternVL 1.0 kann jetzt als Textencoder für Diffusionsmodelle verwendet werden, um die mehrsprachige Generierung nativ in über 110 Sprachen weltweit zu unterstützen. Weitere Informationen finden Sie unter MuLan.
2024/04/18
: InternVL-Chat-V1-5 wurde bei HF Link veröffentlicht und erreicht die Leistung von GPT-4V und Gemini Pro bei verschiedenen Benchmarks wie MMMU, DocVQA, ChartQA, MathVista usw.
2024/02/27
: InternVL wird von CVPR 2024 (mündlich) akzeptiert! ?
2024/02/21
: InternVL-Chat-V1-2-Plus erreichte SOTA-Leistung auf MathVista (59,9), MMBench (83,8) und MMVP (58,7). Weitere Informationen finden Sie in unserem Blog.
2024/02/12
: InternVL-Chat-V1-2 wurde veröffentlicht. Es erreicht 51,6 beim MMMU-Wert und 82,3 beim MMBench-Test. Weitere Einzelheiten finden Sie in unserem Blog und in den SFT-Daten. Das Modell ist jetzt auf HuggingFace verfügbar und sowohl Trainings-/Bewertungsdaten als auch Skripte sind Open-Source.
2024/01/24
: InternVL-Chat-V1-1 wird veröffentlicht, es unterstützt Chinesisch und verfügt über eine stärkere OCR-Fähigkeit, siehe hier.
2024/01/16
: Wir veröffentlichen unseren maßgeschneiderten mmcv/mmsegmentation/mmdetection-Code, der in DeepSpeed integriert ist und zum Training umfangreicher Erkennungs- und Segmentierungsmodelle verwendet werden kann.
Unterstützen Sie vLLM und Ollama
Erstellen Sie Dokumente mit readthedocs neu
Unterstützen Sie die Feinabstimmung verschiedener LLMs mit LoRA
Unterstützt die Video- und PDF-Eingabe in der Online-Demo
Geben Sie InternVL2 mit VisionLLMv2-Integration frei
Release- requirements.txt
für InternVL2
Geben Sie den Schulungs-/Evaluierungscode für die InternVL2-Serie frei
Veröffentlichung der Streamlit-Web-Benutzeroberfläche für InternVL1.5 und InternVL2
Legen Sie los
Installation: [Umgebung] [requirements.txt]
Auswertungsdatenaufbereitung: [InternVL-Auswertung]
Chat-Datenformat: [Metadatei] [Reiner Text] [Einzelbild] [Mehrfachbild] [Video]
InternVL-Chat API: [InternVL2-Pro]
Lokale Chat-Demo: [Streamlit-Demo] [Gradio-Demo] [LMDeploy-Demo]
Tutorials: [Verbesserung von InternVL2 auf COCO-Beschriftung mithilfe der LoRA-Feinabstimmung]
InternVL-Familie
InternVL 2.0: [Einführung] [Schnellstart] [Feinabstimmung] [Evaluierung] [Bereitstellung]
InternVL 1.5: [Einführung] [Schnellstart] [Feinabstimmung] [Evaluierung] [Bereitstellung]
InternVL 1.2: [Einführung] [Schnellstart] [Feinabstimmung] [Bewertung]
InternVL 1.1: [Einführung] [Schnellstart] [Bewertung]
InternVL 1.0: [Klassifizierung] [CLIP-Benchmark] [Segmentierung] [InternVL-Chat-LLaVA] [InternVL-G]
Modellname | Visionsteil | Sprachteil | HF-Link | MS-Link | Dokumentieren |
---|---|---|---|---|---|
InternVL2‑1B | InternViT‑300M‑448px | Qwen2-0.5B-Instruct | ? Link | ? Link | ? Dok |
InternVL2‑2B | InternViT‑300M‑448px | internlm2‑chat‑1‑8b | ? Link | ? Link | ? Dok |
InternVL2‑4B | InternViT‑300M‑448px | Phi-3-mini-128k-instruct | ? Link | ? Link | ? Dok |
InternVL2‑8B | InternViT‑300M‑448px | internlm2_5‑7b‑chat | ? Link | ? Link | ? Dok |
InternVL2‑26B | InternViT‑6B‑448px‑V1‑5 | internlm2‑chat‑20b | ? Link | ? Link | ? Dok |
InternVL2‑40B | InternViT‑6B‑448px‑V1‑5 | Nous-Hermes-2-Yi-34B | ? Link | ? Link | ? Dok |
InternVL2-Llama3-76B | InternViT‑6B‑448px‑V1‑5 | Hermes-2-Theta- Lama‑3‑70B | ? Link | ? Link | ? Dok |
Wir heißen jeden willkommen, unsere API für Forschungszwecke zu nutzen. Für eine bessere Verwaltung reichen Sie bitte (Antragsformular) / (申请表) ein, um kostenlosen API-Zugriff zu erhalten.
Modell | Datum | HF-Link | MS-Link | Notiz |
---|---|---|---|---|
Mini‑InternVL‑Chat‑4B‑V1‑5 | 28.05.2024 | ? Link | ? Link | ?? 16 % der Modellgröße, 90 % der Leistung |
Mini-InternVL-Chat-2B-V1-5 | 2024.05.19 | ? Link | ? Link | ? 8 % der Modellgröße, 80 % der Leistung |
InternVL‑Chat‑V1‑5 | 2024.04.18 | ? Link | ? Link | unterstützt 4K-Bild; superstarke OCR; Annäherung an die Leistung von GPT-4V und Gemini Pro bei verschiedenen Benchmarks wie MMMU, DocVQA, ChartQA, MathVista usw. |
InternVL‑Chat‑V1‑2‑Plus | 21.02.2024 | ? Link | ? Link | mehr SFT-Daten und stärker |
InternVL‑Chat‑V1‑2 | 2024.02.11 | ? Link | ? Link | Skalierung von LLM auf 34B |
InternVL‑Chat‑V1‑1 | 24.01.2024 | ? Link | ? Link | Unterstützen Sie Chinesisch und eine stärkere OCR |
InternVL‑Chat‑19B | 25.12.2023 | ? Link | ? Link | Englischer multimodaler Dialog |
InternVL‑Chat‑13B | 25.12.2023 | ? Link | ? Link | Englischer multimodaler Dialog |
Modell | Datum | HF-Link | MS-Link | Notiz |
---|---|---|---|---|
InternViT‑300M‑448px | 25.05.2024 | ? Link | ? Link | destilliertes Small-Vision-Foundation-Modell mit 300 Mio. Parametern (?neu) |
InternViT‑6B‑448px‑V1‑5 | 20.04.2024 | ? Link | ? Link | Unterstützt dynamische Auflösung und superstarke OCR-Merkmalsextraktionsfunktion durch inkrementelles Vortraining (?neu) |
InternViT‑6B‑448px‑V1‑2 | 2024.02.11 | ? Link | ? Link | Unterstützung der 448-Auflösung durch inkrementelles Vortraining |
InternViT‑6B‑448px‑V1‑0 | 30.01.2024 | ? Link | ? Link | Unterstützung der 448-Auflösung durch inkrementelles Vortraining |
InternViT‑6B‑224px | 22.12.2023 | ? Link | ? Link | die erste Version von InternViT-6B, extrahiert aus InternVL-14B-224px |
Modell | Datum | HF-Link | MS-Link | Notiz |
---|---|---|---|---|
InternVL‑14B‑224px | 22.12.2023 | ? Link | ? Link | Das Vision-Language-Foundation-Modell, InternViT-6B + QLLaMA, kann wie CLIP für den Bild-Text-Abruf verwendet werden |
Linear-Probe-Bildklassifizierung [siehe Details]
ViT-22B verwendet den privaten JFT-3B-Datensatz.
Verfahren | #param | IN-1K | IN-Real | IN-V2 | IN-A | IN-R | IN-Skizze |
---|---|---|---|---|---|---|---|
OpenCLIP-G | 1,8B | 86,2 | 89,4 | 77,2 | 63,8 | 87,8 | 66,4 |
DINOv2-g | 1.1B | 86,5 | 89,6 | 78,4 | 75,9 | 78,8 | 62,5 |
EVA-01-CLIP-g | 1.1B | 86,5 | 89,3 | 77,4 | 70,5 | 87,7 | 63.1 |
MAWS-ViT-6.5B | 6,5B | 87,8 | - | - | - | - | - |
ViT-22B* | 21,7B | 89,5 | 90,9 | 83,2 | 83,8 | 87,4 | - |
InternViT-6B (unser) | 5,9B | 88,2 | 90,4 | 79,9 | 77,5 | 89,8 | 69.1 |
Semantische Segmentierung [siehe Details]
Verfahren | Decoder | #param (Zug/Gesamt) | Erntegröße | mioU |
---|---|---|---|---|
OpenCLIP-G (eingefroren) | Linear | 0,3 Mio. / 1,8 Mrd | 512 | 39.3 |
ViT-22B (gefroren) | Linear | 0,9 Mio. / 21,7 Mrd | 504 | 34.6 |
InternViT-6B (eingefroren) | Linear | 0,5 Mio. / 5,9 Mrd | 504 | 47,2 (+12,6) |
ViT-22B (gefroren) | UperNet | 0,8B / 22,5B | 504 | 52,7 |
InternViT-6B (eingefroren) | UperNet | 0,4B / 6,3B | 504 | 54,9 (+2,2) |
ViT-22B | UperNet | 22,5B / 22,5B | 504 | 55.3 |
InternViT-6B | UperNet | 6,3B / 6,3B | 504 | 58,9 (+3,6) |
Zero-Shot-Bildklassifizierung [siehe Details]
Verfahren | IN-1K | IN-A | IN-R | IN-V2 | IN-Skizze | ObjectNet |
---|---|---|---|---|---|---|
OpenCLIP-G | 80.1 | 69,3 | 92.1 | 73,6 | 68,9 | 73,0 |
EVA-02-CLIP-E+ | 82,0 | 82.1 | 94,5 | 75,7 | 71,6 | 79,6 |
ViT-22B* | 85,9 | 90.1 | 96,0 | 80,9 | - | 87,6 |
InternVL-C (unser) | 83,2 | 83,8 | 95,5 | 77,3 | 73,9 | 80,6 |
Mehrsprachige Zero-Shot-Bildklassifizierung [siehe Details]
EN: Englisch, ZH: Chinesisch, JP: Japanisch, Ar: Arabisch, IT: Italienisch
Verfahren | IN-1K (EN) | IN-1K (ZH) | IN-1K (JP) | IN-1K (AR) | IN-1K (IT) |
---|---|---|---|---|---|
Taiyi-CLIP-ViT-H | - | 54.4 | - | - | - |
WuKong-ViT-LG | - | 57,5 | - | - | - |
CN-CLIP-ViT-H | - | 59,6 | - | - | - |
AltCLIP-ViT-L | 74,5 | 59,6 | - | - | - |
EVA-02-CLIP-E+ | 82,0 | - | - | - | 41.2 |
OpenCLIP-XLM-RH | 77,0 | 55,7 | 53.1 | 37,0 | 56,8 |
InternVL-C (unser) | 83,2 | 64,5 | 61,5 | 44.9 | 65,7 |
Zero-Shot-Videoklassifizierung
Verfahren | #rahmen | K400 | K600 | K700 |
---|---|---|---|---|
OpenCLIP-G | 1 | 65,9 | 66.1 | 59.2 |
EVA-02-CLIP-E+ | 1 | 69,8 | 69,3 | 63,4 |
InternVL-C (unser) | 1 | 71,0 | 71.3 | 65,7 |
ViCLIP | 8 | 75,7 | 73,5 | 66,4 |
InternVL-C (unser) | 8 | 79,4 | 78,8 | 71,5 |
Englischer Zero-Shot-Bild-Text-Abruf [siehe Details]
Modell | Flickr30K | COCO | Durchschn | ||||||||||
Bild-zu-Text | Text-zu-Bild | Bild-zu-Text | Text-zu-Bild | ||||||||||
R@1 | R@5 | R@10 | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 | R@1 | R@5 | R@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 |
EVA-02-CLIP-E+ | 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 |
EVA-CLIP-8B | 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 |
InternVL-C (unser) | 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 |
InternVL-G (unser) | 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 |
Chinesischer Zero-Shot-Bild-Text-Abruf [siehe Details]
Modell | Flickr30K-CN | COCO-CN | Durchschn | ||||||||||
Bild-zu-Text | Text-zu-Bild | Bild-zu-Text | Text-zu-Bild | ||||||||||
R@1 | R@5 | R@10 | R@1 | R@5 | R@10 | R@1 | R@5 | R@10 | R@1 | R@5 | R@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 |
InternVL-C (unser) | 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 |
InternVL-G (unser) | 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 |
Mehrsprachiger Zero-Shot-Bild-Text-Abruf auf XTD [siehe Details]
Verfahren | DE | ES | FR | ZH | ES | KO | RU | JP | Durchschnitt |
---|---|---|---|---|---|---|---|---|---|
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 |
InternVL-C (unser) | 97,3 | 95,7 | 95.1 | 95,6 | 96,0 | 92,2 | 93,3 | 95,5 | 95.1 |
InternVL-G (unser) | 98,6 | 97,7 | 96,5 | 96,7 | 96,9 | 95.1 | 94,8 | 96,1 | 96,6 |
Siehe Abschnitt „Im Vergleich zu SOTA-VLLMs“.
import Torchfrom PIL Import Imagefrom Transformers Import 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= image, return_tensors='pt').pixel_valuespixel_values = pixel_values.to(torch.bfloat16).cuda()outputs = model(pixel_values)
import Torchfrom PIL Import Imagefrom Transformers Import AutoModel, CLIPImageProcessorfrom Transformers Import 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 # setze pad_token_id auf 0images = [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 + 'a photo of a red panda', # Englishprefix + '一张熊猫的照片', # Chineseprefix + '二匹の猫の写真' # Japanese]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]] , device='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= )# Bitte setzen Sie add_eos_token auf False für 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("English caption:", 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()# Englische Bildunterschrift: Ein roter Panda, der auf einer Holzplattform sitzt
Hier nehmen wir das kleinere OpenGVLab/InternVL2-8B
als Beispiel:
import numpy as npimport Torchimport Torchvision.transforms As Tfrom Decord Import VideoReader, CPUfrom PIL Import Imagefrom Torchvision.transforms.Functional Import InterpolationModefrom Transformers Import AutoModel, AutoTokenizerIMAGENET_MEAN = (0.485, 0.456, 0.406)IMAGENET_STD = (0.229, 0.224, 0.225)def 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 = width * heightfor ratio in target_ratios:target_aspect_ratio = ratio[0] / ratio[ 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_ratiodefdynamic_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# berechnet das vorhandene Bildseitenverhältnistarget_ratios = set( (i, j) für n im Bereich(min_num, max_num + 1) für i im Bereich(1, n + 1) für j im Bereich(1, n + 1) wenn * j <= max_num und i * j >= min_num)target_ratios = sorted(target_ratios, key=lambda x: x[0] * x[1])# finde das dem Ziel am nächsten kommende Seitenverhältnistarget_aspect_ratio = find_closest_aspect_ratio(aspect_ratio, target_ratios, orig_width, orig_height, image_size)# berechne die Zielbreite und 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]# Größe des Bildes ändernresized_img = image.resize((target_width, target_height))processed_images = []for i in Bereich(Blöcke):Box = ( (i % (target_width // image_size)) * image_size, (i // (target_width // image_size)) * image_size, ((i % (target_width // image_size)) + 1) * image_size, ((i // (target_width // image_size)) + 1) * image_size)# teile die Bilder aufplit_img = resized_img.crop(box)processed_images.append(split_img)assert