VCD: Milderung von Objekthalluzinationen in großen Seh-Sprach-Modellen durch visuelle kontrastive Dekodierung
Sicong Leng, Hang Zhang, Guanzheng Chen, Xin Li, Shijian Lu, Chunyan Miao, Lidong Bing
VideoLLaMA 2: Weiterentwicklung der räumlich-zeitlichen Modellierung und des Audioverständnisses in Video-LLMs
Zesen Cheng, Sicong Leng, Hang Zhang, Yifei Xin, Xin Li, Guanzheng Chen, Yongxin Zhu, Wenqi Zhang, Ziyang Luo, Deli Zhao, Lidong Bing
Der Fluch der Multimodalitäten: Bewertung von Halluzinationen großer multimodaler Modelle in Sprache, Bild und Ton
Sicong Leng, Yun Xing, Zesen Cheng, Yang Zhou, Hang Zhang, Xin Li, Deli Zhao, Shijian Lu, Chunyan Miao, Lidong Bing
[18.10.2024] Trainings- und Evaluierungscodes von Inf-CLIP veröffentlichen.
Grundlegende Abhängigkeiten:
Python >= 3.8
Pytorch >= 2.0.0
CUDA-Version >= 11.8
[Remote] Inf-CL installieren:
# Remote-Installationpip install inf_cl -i https://pypi.org/simple
[Lokal] Inf-CL installieren:
pip install -e .
Erforderliche Pakete installieren:
Git-Klon https://github.com/DAMO-NLP-SG/Inf-CLIPcd Inf-CLIP pip install -r Anforderungen.txt
inf_cl
ist die Triton-Implementierung des Inf-CL-Verlusts:
Ring-CL (inf_cl/ring.py#L238)
Inf-CL (inf_cl/ring.py#L251)
inf_clip
ist die CLIP-Trainingscodebasis mit Inf-CL-Verlust und anderen Trainingsfunktionen:
Gradientenakkumulation (inf_clip/train/train.py#L180)
Verlaufscache (inf_clip/train/train.py#L292)
Ein einfaches Beispiel dafür, wie wir unseren Inf-CL-Verlust für kontrastives Lernen übernehmen können. Verwenden Sie einen solchen Befehl, um Folgendes zu versuchen:
torchrun --nproc_per_node 2 tests/example.py
import Torchimport Torch.nn.Functional As Fimport Torch.distributed As Distimport Numpy As NPFrom Inf_Cl Import Cal_Inf_Lossdef Create_Cl_tensors (Rank, World_Size): 256 # Dimension jedes Kopfes (muss 16, 32, 64 oder 128 sein)# Zufällig initialisieren inputsq = Torch.rand((seq_length_q // world_size, num_heads * d_model), dtype=dtype, device=f"cuda:{rank}" )k = Torch.rand((seq_length_k // world_size, num_heads * d_model), dtype=dtype, device=f"cuda:{rank}")l = Torch.ones([], dtype=dtype, device=f" cuda:{rank}") * np.log(1 / 0.07)q = F.normalize(q, p=2, dim=-1).requires_grad_() # Queryk = F.normalize(k, p=2, dim=-1).requires_grad_() # Keyl = l.requires_grad_() # Logit scalereturn q, k, lif __name__ == "__main__":# Angenommen, die verteilte Umgebung wurde initialisiertdist.init_process_group("nccl")rank = dist.get_rank()world_size = dist.get_world_size()torch.cuda.set_device(rank)# Am Beispiel von Image-Text Contrastive Learning sind q die globalen Bildmerkmale, # k die Textmerkmale und l die Logit-Skala. q, k, l = create_cl_tensors(rank, world_size)# Beschriftungen sind standardmäßig diagonale Elemente. # labels = Torch.arange(q.shape[0])loss = cal_inf_loss(q, k, scale=l.exp())print(loss)
* bedeutet die Einführung einer „Data-Offload“-Strategie.
Für das Training mit einem größeren Datenumfang ist eine größere Batchgröße erforderlich.
Um die weitere Entwicklung zusätzlich zu unserer Codebasis zu erleichtern, stellen wir eine Kurzanleitung zur Verwendung von Inf-CLIP zum Trainieren eines benutzerdefinierten CLIP und zur Bewertung des trainierten Modells anhand der gängigen Clip-Benchmarks zur Verfügung.
Trainingsdatenstruktur:
Inf-CLIP ├── Datensätze │ ├── cc3m/ # https://github.com/rom1504/img2dataset/blob/main/dataset_examples/cc3m.md| | ├── 0000.tar| | ├── 0001.tar| | ├── ...| | └── 0301.tar │ ├── cc12m/ # https://github.com/rom1504/img2dataset/blob/main/dataset_examples/cc12m.md| | ├── 0000.tar| | ├── 0001.tar| | ├── ...| | └── 1044.tar │ ├── laion400m/ # https://github.com/rom1504/img2dataset/blob/main/dataset_examples/laion400m.md| | ├── 00000.tar| | ├── 00001.tar| | ├── ...| | └── 41407.tar
Befehl:
Bash-Skripte/cc3m/lit_vit-b-32_bs16k.sh Bash-Skripte/cc12m/lit_vit-b-32_bs32k.sh Bash-Skripte/laion400m/lit_vit-b-32_bs256k.sh
Struktur der Bewertungsdaten:
Inf-CLIP ├── Datensätze │ ├── imagenet-1k/ # val_images.tar.gz von imagenet| herunterladen | └── val/| | | ├── n01440764| | | ├── n01443537| | | ├── ...| | | └── n15075141 │ ├── clip-benchmark/ # bash datasets/benchmarks_download.sh| | ├── wds_mscoco_captions| | ├── wds_flickr8k| | ├── wds_flickr30k| | ├── wds_imagenet1k| | ├── wds_imagenetv2| | ├── wds_imagenet_sketch| | ├── wds_imagenet-a| | ├── wds_imagenet-r| | ├── wds_imagenet-o| | └── wds_objectnet
Befehl:
# imagenet Evaluationbash scripts/imagenet_eval.sh# Gesamtbewertungbash scripts/benchmarks_eval.sh
Wenn Sie Inf-CLIP für Ihre Forschung und Anwendungen nützlich finden, zitieren Sie bitte mit diesem BibTeX:
@article{damovl2024infcl, title={Breaking the Memory Barrier: Near Infinite Batch Size Scaling for Contrastive Loss}, author={Zesen Cheng, Hang Zhang, Kehan Li, Sicong Leng, Zhiqiang Hu, Fei Wu, Deli Zhao, Xin Li, Lidong Bing}, Zeitschrift={arXiv preprint arXiv:2410.17243}, Jahr={2024}, url={https://arxiv.org/abs/2410.12787}}
Die Codebasis von Inf-CLIP ist von OpenCLIP übernommen. Wir sind auch dankbar für die folgenden Projekte, aus denen unsere Inf-CL hervorgegangen ist:
OpenAI CLIP , img2dataset , CLIP-Benchmark .
FlashAttention , RingAttention , RingFlashAttention .
Dieses Projekt wird unter der Apache 2.0-Lizenz veröffentlicht, wie in der LICENSE-Datei zu finden. Bei dem Dienst handelt es sich um eine Forschungsvorschau, die NUR für die nichtkommerzielle Nutzung bestimmt ist und den Musterlizenzen von CLIP, den Nutzungsbedingungen der von OpenAI und Laion generierten Daten unterliegt. Bitte kontaktieren Sie uns, wenn Sie mögliche Verstöße feststellen.