2024/10/21
: Kami merilis seri Mini-InternVL. Model ini mencapai performa mengesankan dengan ukuran minimal: model 4B mencapai 90% performa hanya dengan 5% ukuran model. Untuk lebih jelasnya, silakan periksa halaman dan dokumen proyek kami.
2024/08/01
: Tim Chartmimic mengevaluasi model seri InternVL2 berdasarkan benchmark mereka. Model InternVL2-26B dan 76B mencapai dua performa teratas di antara model sumber terbuka, dengan model InternVL2 76B melampaui GeminiProVision dan menunjukkan hasil yang sebanding dengan karya Claude-3.
2024/08/01
: InternVL2-Pro mencapai kinerja SOTA di antara model sumber terbuka pada kumpulan data CharXiv, melampaui banyak model sumber tertutup seperti GPT-4V, Gemini 1.5 Flash, dan Claude 3 Sonnet.
2024/07/24
: Tim MLVU mengevaluasi InternVL-1.5 berdasarkan benchmark mereka. Rata-rata kinerja pada tugas pilihan ganda adalah 50,4%, sedangkan kinerja pada tugas generatif adalah 4,02. Kinerja pada tugas pilihan ganda berada di peringkat #1 di antara semua MLLM sumber terbuka.
2024/07/18
: ?? InternVL2-40B mencapai kinerja SOTA di antara model sumber terbuka pada kumpulan data Video-MME, dengan skor 61,2 saat memasukkan 16 bingkai dan 64,4 saat memasukkan 32 bingkai. Performanya secara signifikan mengungguli model sumber terbuka lainnya dan merupakan model sumber terbuka yang paling mendekati GPT-4o mini.
2024/07/18
: ? InternVL2-Pro mencapai kinerja SOTA pada benchmark DocVQA dan InfoVQA.
2024/07/04
: ? Kami merilis seri InternVL2. InternVL2-Pro mencapai akurasi 62,0% pada benchmark MMMU, menyamai performa model komersial sumber tertutup terkemuka seperti GPT-4o. API gratis model ini dapat diterapkan dengan mengisi (formulir aplikasi) / (申请表). Model lain tersedia di tautan HF.
2024/06/19
: Kami mengusulkan Needle In A Multimodal Haystack (MM-NIAH), tolok ukur pertama yang dirancang untuk mengevaluasi secara sistematis kemampuan MLLM yang ada dalam memahami dokumen multimodal yang panjang.
2024/05/30
: Kami merilis ShareGPT-4o, kumpulan data berskala besar yang kami rencanakan untuk dijadikan sumber terbuka dengan 200 ribu gambar, 10 ribu video, dan 10 ribu audio dengan deskripsi mendetail.
2024/05/28
: Terima kasih kepada tim lmdeploy yang telah memberikan dukungan kuantisasi AWQ. Model 4-bit tersedia di OpenGVLab/InternVL-Chat-V1-5-AWQ.
2024/05/13
: InternVL 1.0 kini dapat digunakan sebagai pembuat enkode teks untuk model difusi guna mendukung pembuatan multibahasa secara asli dalam lebih dari 110 bahasa di seluruh dunia. Lihat MuLan untuk lebih jelasnya.
2024/04/18
: InternVL-Chat-V1-5 telah dirilis di HF link, mendekati performa GPT-4V dan Gemini Pro pada berbagai benchmark seperti MMMU, DocVQA, ChartQA, MathVista, dll.
2024/02/27
: InternVL diterima oleh CVPR 2024 (Lisan)! ?
2024/02/21
: InternVL-Chat-V1-2-Plus mencapai kinerja SOTA di MathVista (59.9), MMBench (83.8), dan MMVP (58.7). Lihat blog kami untuk lebih jelasnya.
2024/02/12
: InternVL-Chat-V1-2 telah dirilis. Ini mencapai 51,6 pada MMMU val dan 82,3 pada tes MMBench. Untuk lebih jelasnya, silakan merujuk ke blog kami dan data SFT. Model ini sekarang tersedia di HuggingFace, dan data pelatihan/evaluasi serta skrip bersumber terbuka.
2024/01/24
: InternVL-Chat-V1-1 dirilis, mendukung bahasa Mandarin dan memiliki kemampuan OCR yang lebih kuat, lihat di sini.
2024/01/16
: Kami merilis kode mmcv/mmsegmentation/mmdetection khusus kami, terintegrasi dengan DeepSpeed, yang dapat digunakan untuk melatih model deteksi dan segmentasi skala besar.
Mendukung vLLM dan Ollama
Bangun kembali dokumen menggunakan readthedocs
Mendukung penyempurnaan LLM yang berbeda dengan LoRA
Mendukung input video dan PDF dalam demo online
Rilis InternVL2 dengan integrasi VisionLLMv2
Rilis requirements.txt
untuk InternVL2
Rilis kode pelatihan/evaluasi untuk seri InternVL2
Rilis UI web Streamlit untuk InternVL1.5 dan InternVL2
Memulai
Instalasi: [Lingkungan] [requirements.txt]
Persiapan Data Evaluasi: [Evaluasi InternVL]
Format Data Obrolan: [File Meta] [Teks Murni] [Gambar Tunggal] [Multi-Gambar] [Video]
API Obrolan InternVL: [InternVL2-Pro]
Demo Obrolan Lokal: [Demo Streamlit] [Demo Gradio] [Demo LDeploy]
Tutorial: [Meningkatkan InternVL2 pada COCO Caption Menggunakan LoRA Fine-Tuning]
Keluarga InterVL
InternVL 2.0: [Pendahuluan] [Mulai Cepat] [Penyempurnaan] [Evaluasi] [Penerapan]
InternVL 1.5: [Pendahuluan] [Mulai Cepat] [Penyempurnaan] [Evaluasi] [Penerapan]
InternVL 1.2: [Pendahuluan] [Mulai Cepat] [Penyempurnaan] [Evaluasi]
InternVL 1.1: [Pendahuluan] [Mulai Cepat] [Evaluasi]
InternVL 1.0: [Klasifikasi] [CLIP-Benchmark] [Segmentasi] [InternVL-Chat-LLaVA] [InternVL-G]
Nama Model | Bagian Visi | Bagian Bahasa | Tautan HF | Tautan MS | Dokumen |
---|---|---|---|---|---|
MagangVL2‑1B | InternViT‑300M‑448 piksel | Qwen2‑0,5B‑Instruksikan | ? link | ? link | ? dokter |
MagangVL2‑2B | InternViT‑300M‑448 piksel | maganglm2‑obrolan‑1‑8b | ? link | ? link | ? dokter |
MagangVL2‑4B | InternViT‑300M‑448 piksel | Instruksi Phi‑3‑mini‑128k‑ | ? link | ? link | ? dokter |
MagangVL2‑8B | InternViT‑300M‑448 piksel | maganglm2_5‑7b‑obrolan | ? link | ? link | ? dokter |
MagangVL2‑26B | MagangViT‑6B‑448px‑V1‑5 | maganglm2‑obrolan‑20b | ? link | ? link | ? dokter |
MagangVL2‑40B | MagangViT‑6B‑448px‑V1‑5 | Nous‑Hermes‑2‑Yi‑34B | ? link | ? link | ? dokter |
MagangVL2-Llama3-76B | MagangViT‑6B‑448px‑V1‑5 | Hermes‑2‑Theta‑ Llama‑3‑70B | ? link | ? link | ? dokter |
Kami menyambut semua orang untuk menggunakan API kami untuk penelitian. Untuk pengelolaan yang lebih baik, silakan kirimkan (formulir aplikasi) / (申请表) untuk mendapatkan akses API gratis.
Model | Tanggal | Tautan HF | Tautan MS | Catatan |
---|---|---|---|---|
Mini‑InternVL‑Obrolan‑4B‑V1‑5 | 28.05.2024 | ? link | ? link | ?? 16% ukuran model, 90% performa |
Mini‑InternVL‑Obrolan‑2B‑V1‑5 | 2024.05.19 | ? link | ? link | ? 8% dari ukuran model, 80% dari performa |
InternVL‑Obrolan‑V1‑5 | 2024.04.18 | ? link | ? link | mendukung gambar 4K; OCR super kuat; Mendekati performa GPT-4V dan Gemini Pro pada berbagai benchmark seperti MMMU, DocVQA, ChartQA, MathVista, dll. |
InternVL‑Obrolan‑V1‑2‑Plus | 21.02.21.2024 | ? link | ? link | lebih banyak data SFT dan lebih kuat |
InternVL‑Obrolan‑V1‑2 | 2024.02.11 | ? link | ? link | meningkatkan LLM menjadi 34B |
MagangVL‑Obrolan‑V1‑1 | 24.01.24 | ? link | ? link | mendukung bahasa Cina dan OCR yang lebih kuat |
InternVL‑Obrolan‑19B | 25.12.2023 | ? link | ? link | Dialog multimodal bahasa Inggris |
InternVL‑Obrolan‑13B | 25.12.2023 | ? link | ? link | Dialog multimodal bahasa Inggris |
Model | Tanggal | Tautan HF | Tautan MS | Catatan |
---|---|---|---|---|
InternViT‑300M‑448 piksel | 25.05.2024 | ? link | ? link | model pondasi visi kecil sulingan dengan parameter 300M (?baru) |
MagangViT‑6B‑448px‑V1‑5 | 20.04.20 | ? link | ? link | mendukung resolusi dinamis dan kemampuan ekstraksi fitur OCR yang sangat kuat melalui pra-pelatihan tambahan (?baru) |
MagangViT‑6B‑448px‑V1‑2 | 2024.02.11 | ? link | ? link | mendukung resolusi 448 dengan pra-pelatihan tambahan |
MagangViT‑6B‑448px‑V1‑0 | 30.01.2024 | ? link | ? link | mendukung resolusi 448 dengan pra-pelatihan tambahan |
MagangViT‑6B‑224 piksel | 22.12.2023 | ? link | ? link | versi pertama InternViT-6B, diekstraksi dari InternVL‑14B‑224px |
Model | Tanggal | Tautan HF | Tautan MS | Catatan |
---|---|---|---|---|
MagangVL‑14B‑224px | 22.12.2023 | ? link | ? link | model dasar bahasa visi, InternViT-6B + QLLaMA, dapat digunakan untuk pengambilan gambar-teks seperti CLIP |
Klasifikasi Gambar Probe Linier [lihat detail]
ViT-22B menggunakan kumpulan data JFT-3B pribadi.
metode | #param | DALAM-1K | DALAM-Nyata | DALAM-V2 | DI SEBUAH | DALAM-R | DALAM-Sketsa |
---|---|---|---|---|---|---|---|
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-KLIP-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 (milik kami) | 5.9B | 88.2 | 90.4 | 79.9 | 77.5 | 89.8 | 69.1 |
Segmentasi Semantik [lihat detail]
metode | dekoder | #param (kereta/total) | ukuran tanaman | mIoU |
---|---|---|---|---|
OpenCLIP-G (beku) | Linier | 0,3M / 1,8B | 512 | 39.3 |
ViT-22B (beku) | Linier | 0,9M / 21,7B | 504 | 34.6 |
InternViT-6B (beku) | Linier | 0,5M / 5,9B | 504 | 47,2 (+12,6) |
ViT-22B (beku) | Jaringan Atas | 0,8B / 22,5B | 504 | 52.7 |
InternViT-6B (beku) | Jaringan Atas | 0,4B / 6,3B | 504 | 54,9 (+2,2) |
ViT-22B | Jaringan Atas | 22.5B / 22.5B | 504 | 55.3 |
MagangViT-6B | Jaringan Atas | 6.3B / 6.3B | 504 | 58,9 (+3,6) |
Klasifikasi Gambar Zero-Shot [lihat detail]
metode | DALAM-1K | DI SEBUAH | DALAM-R | DALAM-V2 | DALAM-Sketsa | ObjekNet |
---|---|---|---|---|---|---|
OpenCLIP-G | 80.1 | 69.3 | 92.1 | 73.6 | 68.9 | 73.0 |
EVA-02-KLIP-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 (milik kami) | 83.2 | 83.8 | 95,5 | 77.3 | 73.9 | 80.6 |
Klasifikasi Gambar Zero-Shot Multibahasa [lihat detail]
EN: Inggris, ZH: Cina, JP: Jepang, Ar: Arab, IT: Italia
metode | DALAM-1K (EN) | DALAM-1K (ZH) | DALAM-1K (JP) | DALAM-1K (AR) | DALAM-1K (TI) |
---|---|---|---|---|---|
Taiyi-KLIP-ViT-H | - | 54.4 | - | - | - |
WuKong-ViT-LG | - | 57.5 | - | - | - |
CN-KLIP-ViT-H | - | 59.6 | - | - | - |
AltCLIP-ViT-L | 74.5 | 59.6 | - | - | - |
EVA-02-KLIP-E+ | 82.0 | - | - | - | 41.2 |
OpenCLIP-XLM-RH | 77.0 | 55.7 | 53.1 | 37.0 | 56.8 |
InternVL-C (milik kami) | 83.2 | 64.5 | 61.5 | 44.9 | 65.7 |
Klasifikasi Video Zero-Shot
metode | #bingkai | K400 | K600 | K700 |
---|---|---|---|---|
OpenCLIP-G | 1 | 65.9 | 66.1 | 59.2 |
EVA-02-KLIP-E+ | 1 | 69.8 | 69.3 | 63.4 |
InternVL-C (milik kami) | 1 | 71.0 | 71.3 | 65.7 |
ViCLIP | 8 | 75.7 | 73.5 | 66.4 |
InternVL-C (milik kami) | 8 | 79.4 | 78.8 | 71.5 |
Pengambilan Gambar-Teks Zero-Shot Bahasa Inggris [lihat detail]
model | Flickr30K | KELAPA | rata-rata | ||||||||||
gambar-ke-teks | teks-ke-gambar | gambar-ke-teks | teks-ke-gambar | ||||||||||
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-KLIP-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-KLIP-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 (milik kami) | 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 (milik kami) | 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 |
Pengambilan Gambar-Teks Zero-Shot China [lihat detail]
model | Flickr30K-CN | COCO-CN | rata-rata | ||||||||||
gambar-ke-teks | teks-ke-gambar | gambar-ke-teks | teks-ke-gambar | ||||||||||
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-KLIP-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 (milik kami) | 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 (milik kami) | 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 |
Pengambilan Gambar-Teks Zero-Shot Multibahasa di XTD [lihat detail]
metode | EN | ITU | Perancis | ZH | DIA | KO | ru | JP | rata-rata |
---|---|---|---|---|---|---|---|---|---|
klip alternatif | 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 (milik kami) | 97.3 | 95.7 | 95.1 | 95.6 | 96.0 | 92.2 | 93.3 | 95,5 | 95.1 |
InternVL-G (milik kami) | 98.6 | 97.7 | 96,5 | 96.7 | 96.9 | 95.1 | 94.8 | 96.1 | 96.6 |
Lihat bagian "Dibandingkan dengan SOTA VLLM".
impor obor dari PIL impor Gambar dari transformator impor 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( )gambar = Gambar.open('./examples/image1.jpg').convert('RGB')image_processor = CLIPImageProcessor.from_pretrained('OpenGVLab/InternViT-6B-448px-V1-5')pixel_values = image_processor(gambar= gambar, return_tensors='pt').pixel_valuespixel_values = pixel_values.to(torch.bfloat16).cuda()outputs = model(pixel_values)
impor obor dari PIL impor Gambar dari transformator impor AutoModel, CLIPIImageProcessor dari transformator impor 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 # setel pad_token_id ke 0image s = [Image.open('./examples/image1.jpg').convert('RGB'),Image.open('./examples/image2.jpg').convert('RGB'),Image.open( './examples/image3.jpg').convert('RGB') ]prefix = 'ringkas:'texts = [awalan + 'foto panda merah', # Englishprefix + '一张熊猫的照片', # Chineseprefix + '二匹の猫の写真' # Jepang]pixel_values = image_processor( gambar=gambar, return_tensors='pt').pixel_valuespixel_values = pixel_values.to(torch.bfloat16).cuda()input_ids = tokenizer(teks, 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]] , perangkat='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= )# harap setel add_eos_token ke False untuk generationtokenizer.add_eos_token = Falseimage = Gambar.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("Keterangan bahasa Inggris:", 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_tok_baru=8, )caption = tokenizer.decode(pred[0].cpu(), skip_special_tokens=True).strip()# Keterangan bahasa Inggris: panda merah duduk di atas platform kayu
Di sini, kami mengambil OpenGVLab/InternVL2-8B
yang lebih kecil sebagai contoh:
impor numpy sebagai npimport torchimport torchvision.transformasikan sebagai Tdari dekorasi dan impor VideoReader, cpudari PIL impor Gambar dari torchvision.transforms.fungsional impor Mode Interpolasidari transformator impor AutoModel, AutoTokenizerIMAGENET_MEAN = (0.485, 0.456, 0.406)IMAGENET_STD = (0.229, 0.224, 0.225)def build _transformasi( 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 , ukuran_input), interpolasi=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 = lebar * tinggiuntuk rasio dalam target_ratios:target_aspect_ratio = rasio[0] / rasio[ 1]ratio_diff = abs(aspect_ratio - target_aspect_ratio)if rasio_diff < best_ratio_diff:best_ratio_diff = rasio_diffbest_ratio = rasioelif rasio_diff == best_ratio_diff:if area > 0,5 * ukuran_gambar * ukuran_gambar * rasio[0] * rasio[1]:rasio_terbaik = rasiokembalikan rasio_terbaik_dinamis_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# hitung rasio aspek gambar yang adatarget_ratios = set( (i, j) untuk n dalam rentang(min_num, max_num + 1) untuk i dalam rentang(1, n + 1) untuk j dalam rentang(1, n + 1) ifi * j <= max_num dan i * j >= min_num)target_ratios = diurutkan(target_ratios, key=lambda x: x[0] * x[1])# cari rasio aspek yang paling dekat dengan targettarget_aspect_ratio = find_closest_aspect_ratio(aspect_ratio, target_ratios, orig_width, orig_height, image_size)# hitung lebar target dan 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]# ubah ukuran imageresized_img = image.resize((target_width, target_height))processed_images = []untuk saya di rentang(blok):kotak = ( (i % (target_width // ukuran_gambar)) * ukuran_gambar, (i // (target_width // ukuran_gambar)) * ukuran_gambar, ((i % (target_width // ukuran_gambar)) + 1) * ukuran_gambar, ((i // (target_width // image_size)) + 1) * image_size)# membagi imagesplit_img = mengubah ukuran_img.crop(box)processed_images.append(split_img)assert