VCD: Mitigando alucinações de objetos em grandes modelos de linguagem visual por meio de decodificação visual contrastiva
Sicong Leng, Hang Zhang, Guanzheng Chen, Xin Li, Shijian Lu, Chunyan Miao, Lidong Bing
VideoLLaMA 2: Avanço na modelagem espaço-temporal e compreensão de áudio em vídeo-LLMs
Zesen Cheng, Sicong Leng, Hang Zhang, Yifei Xin, Xin Li, Guanzheng Chen, Yongxin Zhu, Wenqi Zhang, Ziyang Luo, Deli Zhao, Lidong Bing
A maldição das multimodalidades: avaliando alucinações de grandes modelos multimodais em linguagem, visual e áudio
Sicong Leng, Yun Xing, Zesen Cheng, Yang Zhou, Hang Zhang, Xin Li, Deli Zhao, Shijian Lu, Chunyan Miao, Lidong Bing
[2024.10.18] Liberação dos códigos de treinamento e avaliação do Inf-CLIP.
Dependências Básicas:
Pitão >= 3.8
Pytorch >= 2.0.0
Versão CUDA >= 11.8
[Remoto] Instale o Inf-CL:
# instalação remotapip install inf_cl -i https://pypi.org/simple
[Local] Instale o Inf-CL:
pip instalar -e.
Instale os pacotes necessários:
clone git https://github.com/DAMO-NLP-SG/Inf-CLIPcd Inf-CLIP pip instalar -r requisitos.txt
inf_cl
é a implementação triton da perda Inf-CL:
Anel-CL (inf_cl/ring.py#L238)
Inf-CL (inf_cl/ring.py#L251)
inf_clip
é a base de código de treinamento CLIP com perda de Inf-CL e outros recursos de treinamento:
Acumulação de gradiente (inf_clip/train/train.py#L180)
Cache de gradiente (inf_clip/train/train.py#L292)
Um exemplo simples sobre como adotar nossa perda Inf-CL para aprendizagem contrastiva. Usando esse comando para tentar:
torchrun --nproc_per_node 2 tests/example.py
import torchimport torch.nn.funcional 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 # Número de atenção headsseq_length_q = 32768 # Comprimento da sequênciaseq_length_k = 32768d_model = 256 # Dimensão de cada cabeça (deve ser 16, 32, 64 ou 128)# Inicialize aleatoriamente 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:{classificação}") * 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__":# Suponha que o ambiente distribuído foi inicializadodist.init_process_group("nccl")rank = dist.get_rank()world_size = dist.get_world_size()torch.cuda.set_device(rank)# Exemplificado pela aprendizagem contrastiva imagem-texto, q são os recursos de imagem globais, # k são os recursos de texto e l é a escala logit. q, k, l = create_cl_tensors(rank, world_size)# rótulos são elementos diagonais por padrão. # rótulos = torch.arange(q.shape[0])perda = cal_inf_loss(q, k, escala=l.exp())print(perda)
* denota a adoção da estratégia de "descarregamento de dados".
O treinamento com maior escala de dados precisa de lotes maiores.
Para facilitar o desenvolvimento adicional em nossa base de código, fornecemos um guia de início rápido sobre como usar o Inf-CLIP para treinar um CLIP personalizado e avaliar o modelo treinado nos benchmarks de clipes convencionais.
Estrutura de dados de treinamento:
Inf-CLIP ├── conjuntos de dados │ ├── 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
Comando:
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
Estrutura de dados de avaliação:
Inf-CLIP ├── conjuntos de dados │ ├── imagenet-1k/ # baixar 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
Comando:
# scripts bash de avaliação imagenet/imagenet_eval.sh# scripts bash de avaliação geral/benchmarks_eval.sh
Se você achar o Inf-CLIP útil para suas pesquisas e aplicações, cite o uso deste BibTeX:
@artigo{damovl2024infcl, title={Quebrando a barreira da memória: escalonamento de tamanho de lote quase infinito para perda contrastiva}, autor={Zesen Cheng, Hang Zhang, Kehan Li, Sicong Leng, Zhiqiang Hu, Fei Wu, Deli Zhao, Xin Li, Lidong Bing}, diário={pré-impressão arXiv arXiv:2410.17243}, ano={2024}, url={https://arxiv.org/abs/2410.12787}}
A base de código do Inf-CLIP é adaptada do OpenCLIP . Agradecemos também os seguintes projetos dos quais surgiu o nosso Inf-CL:
OpenAI CLIP , img2dataset , CLIP-Benchmark .
FlashAttention , RingAttention , RingFlashAttention .
Este projeto é lançado sob a licença Apache 2.0 conforme encontrado no arquivo LICENSE. O serviço é uma prévia de pesquisa destinada APENAS para uso não comercial , sujeito às Licenças modelo do CLIP, Termos de Uso dos dados gerados pela OpenAI e Laion. Entre em contato conosco se encontrar alguma possível violação.