VCD : Atténuer les hallucinations d'objets dans les modèles de langage de grande vision grâce au décodage visuel contrastif
Sicong Leng, Hang Zhang, Guanzheng Chen, Xin Li, Shijian Lu, Chunyan Miao, Lidong Bing
VideoLLaMA 2 : Faire progresser la modélisation spatio-temporelle et la compréhension audio dans les vidéo-LLM
Zesen Cheng, Sicong Leng, Hang Zhang, Yifei Xin, Xin Li, Guanzheng Chen, Yongxin Zhu, Wenqi Zhang, Ziyang Luo, Deli Zhao, Lidong Bing
La malédiction des multimodalités : évaluation des hallucinations de grands modèles multimodaux à travers le langage, le visuel et l'audio
Sicong Leng, Yun Xing, Zesen Cheng, Yang Zhou, Hang Zhang, Xin Li, Deli Zhao, Shijian Lu, Chunyan Miao, Lidong Bing
[2024.10.18] Publication des codes de formation et d'évaluation d'Inf-CLIP.
Dépendances de base :
Python >= 3,8
Pytorch >= 2.0.0
Version CUDA >= 11.8
[À distance] Installez Inf-CL :
# installation à distancepip install inf_cl -i https://pypi.org/simple
[Local] Installez Inf-CL :
pip install -e .
Installez les packages requis :
git clone https://github.com/DAMO-NLP-SG/Inf-CLIPcd Inf-CLIP pip install -r exigences.txt
inf_cl
est l'implémentation triton de la perte Inf-CL :
Ring-CL (inf_cl/ring.py#L238)
Inf-CL (inf_cl/ring.py#L251)
inf_clip
est la base de code de formation CLIP avec perte Inf-CL et d'autres fonctionnalités de formation :
Accumulation de dégradé (inf_clip/train/train.py#L180)
Cache de dégradé (inf_clip/train/train.py#L292)
Un exemple simple sur la façon d'adopter notre perte Inf-CL pour un apprentissage contrasté. Utiliser une telle commande pour tenter :
torchrun --nproc_per_node 2 tests/example.py
import torchimport torch.nn.function as Fimport torch.distributed as distimport numpy as npfrom inf_cl import cal_inf_lossdef create_cl_tensors(rank, world_size):# Parametersdtype = torch.float32num_heads = 3 # Nombre d'attention headsseq_length_q = 32768 # Longueur de séquenceseq_length_k = 32768d_model = 256 # Dimension de chaque tête (doit être 16, 32, 64 ou 128)# Initialiser aléatoirement 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__":# Supposons que l'environnement distribué a été initialisédist.init_process_group("nccl")rank = dist.get_rank()world_size = dist.get_world_size()torch.cuda.set_device(rank)# Dans l'exemple de l'apprentissage contrastif image-texte, q correspond aux caractéristiques globales de l'image, # k correspond aux caractéristiques du texte et l est l'échelle logit. q, k, l = create_cl_tensors(rank, world_size)# les étiquettes sont des éléments diagonaux par défaut. # étiquettes = torch.arange(q.shape[0])loss = cal_inf_loss(q, k, scale=l.exp())print(loss)
* désigne l'adoption d'une stratégie de « déchargement de données ».
La formation avec une plus grande échelle de données nécessite une taille de lot plus grande.
Pour faciliter le développement ultérieur de notre base de code, nous fournissons un guide de démarrage rapide sur la façon d'utiliser Inf-CLIP pour former un CLIP personnalisé et évaluer le modèle formé sur les références de clips grand public.
Structure des données de formation :
Inf-CLIP ├── ensembles de données │ ├── 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
Commande:
scripts bash/cc3m/lit_vit-b-32_bs16k.sh scripts bash/cc12m/lit_vit-b-32_bs32k.sh scripts bash/laion400m/lit_vit-b-32_bs256k.sh
Structure des données d'évaluation :
Inf-CLIP ├── ensembles de données │ ├── imagenet-1k/ # télécharger val_images.tar.gz de imagenet| | └──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
Commande:
# imagenet évaluationbash scripts/imagenet_eval.sh# évaluation globalebash scripts/benchmarks_eval.sh
Si vous trouvez Inf-CLIP utile pour vos recherches et applications, veuillez citer en utilisant ce BibTeX :
@article{damovl2024infcl, title={Briser la barrière de la mémoire : mise à l'échelle quasi infinie de la taille des lots pour une perte de contraste}, author={Zesen Cheng, Hang Zhang, Kehan Li, Sicong Leng, Zhiqiang Hu, Fei Wu, Deli Zhao, Xin Li, Lidong Bing}, journal={préimpression arXiv arXiv:2410.17243}, année={2024}, url={https://arxiv.org/abs/2410.12787}}
La base de code d'Inf-CLIP est adaptée d' OpenCLIP . Nous sommes également reconnaissants pour les projets suivants dont notre Inf-CL est issu :
OpenAI CLIP , img2dataset , CLIP-Benchmark .
FlashAttention , RingAttention , RingFlashAttention .
Ce projet est publié sous la licence Apache 2.0 telle que trouvée dans le fichier LICENSE. Le service est un aperçu de recherche destiné à un usage non commercial UNIQUEMENT , sous réserve des licences modèles de CLIP, des conditions d'utilisation des données générées par OpenAI et de Laion. Veuillez nous contacter si vous constatez des violations potentielles.