VCD: Mitigar las alucinaciones de objetos en modelos de lenguaje-visión amplios mediante decodificación visual contrastiva
Sicong Leng, Hang Zhang, Guanzheng Chen, Xin Li, Shijian Lu, Chunyan Miao, Lidong Bing
VideoLLaMA 2: Avanzando en el modelado espacio-temporal y la comprensión del audio en Video-LLM
Zesen Cheng, Sicong Leng, Hang Zhang, Yifei Xin, Xin Li, Guanzheng Chen, Yongxin Zhu, Wenqi Zhang, Ziyang Luo, Deli Zhao, Lidong Bing
La maldición de las multimodalidades: evaluación de alucinaciones de grandes modelos multimodales en lenguaje, imágenes y audio
Sicong Leng, Yun Xing, Zesen Cheng, Yang Zhou, Hang Zhang, Xin Li, Deli Zhao, Shijian Lu, Chunyan Miao, Lidong Bing
[2024.10.18] Lanzamiento de códigos de capacitación y evaluación de Inf-CLIP.
Dependencias básicas:
Pitón >= 3.8
Pytorch >= 2.0.0
Versión CUDA >= 11.8
[Remoto] Instalar Inf-CL:
# instalación remotapip install inf_cl -i https://pypi.org/simple
[Local] Instalar Inf-CL:
instalación de pip -e.
Instale los paquetes necesarios:
clon de git https://github.com/DAMO-NLP-SG/Inf-CLIPcd Inf-CLIP instalación de pip -r requisitos.txt
inf_cl
es la implementación tritón de la pérdida de Inf-CL:
Anillo-CL (inf_cl/ring.py#L238)
Inf-CL (inf_cl/ring.py#L251)
inf_clip
es el código base de entrenamiento CLIP con pérdida de Inf-CL y otras características de entrenamiento:
Acumulación de gradiente (inf_clip/train/train.py#L180)
Caché de degradado (inf_clip/train/train.py#L292)
Un ejemplo sencillo sobre cómo adoptar nuestra pérdida Inf-CL para el aprendizaje contrastivo. Usando dicho comando para intentar:
torchrun --nproc_per_node 2 tests/example.py
import torchImport Torch.nn.functional como Fimport Torch.distributed AS DistImport Numpy como NPFrom INF_CL IMPORT. 768d_model = 256 # Dimensión de cada cabezal (debe ser 16, 32, 64 o 128)# Inicializar 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, dispositivo=f"cuda:{rank}")l = torch.ones([], dtype=dtype, dispositivo=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__":# Supongamos que el entorno distribuido ha sido inicializadodist.init_process_group("nccl")rank = dist.get_rank()world_size = dist.get_world_size()torch.cuda.set_device(rank)# Ejemplo del aprendizaje contrastivo de imagen-texto, q son las características globales de la imagen, # k son las características del texto y l es la escala logit. q, k, l = create_cl_tensors(rank, world_size)# las etiquetas son elementos diagonales de forma predeterminada. # etiquetas = torch.arange(q.shape[0])loss = cal_inf_loss(q, k, scale=l.exp())print(loss)
* denota la adopción de una estrategia de "descarga de datos".
La capacitación con una escala de datos mayor necesita un tamaño de lote mayor.
Para facilitar un mayor desarrollo además de nuestro código base, proporcionamos una guía de inicio rápido sobre cómo usar Inf-CLIP para entrenar un CLIP personalizado y evaluar el modelo entrenado en los puntos de referencia de clips convencionales.
Estructura de datos de entrenamiento:
Inf-CLIP ├── conjuntos de datos │ ├── 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
Dominio:
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
Estructura de datos de evaluación:
Inf-CLIP ├── conjuntos de datos │ ├── imagenet-1k/ # descargar 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
Dominio:
# scripts de evaluación de imagenet/imagenet_eval.sh # scripts de evaluación general de bash/benchmarks_eval.sh
Si encuentra útil Inf-CLIP para su investigación y aplicaciones, cítelo utilizando este BibTeX:
@article{damovl2024infcl, title={Rompiendo la barrera de la memoria: escalamiento casi infinito del tamaño de lote para pérdida contrastiva}, autor={Zesen Cheng, Hang Zhang, Kehan Li, Sicong Leng, Zhiqiang Hu, Fei Wu, Deli Zhao, Xin Li, Lidong Bing}, diario={arXiv preprint arXiv:2410.17243}, año={2024}, url={https://arxiv.org/abs/2410.12787}}
El código base de Inf-CLIP está adaptado de OpenCLIP . También estamos agradecidos por los siguientes proyectos de los que surgió nuestro Inf-CL:
OpenAI CLIP , img2dataset , CLIP-Benchmark .
Atención Flash , Atención Anillo , Atención Flash Anillo .
Este proyecto se publica bajo la licencia Apache 2.0 como se encuentra en el archivo LICENCIA. El servicio es una vista previa de la investigación destinada ÚNICAMENTE a uso no comercial , sujeto a las licencias modelo de CLIP, los términos de uso de los datos generados por OpenAI y Laion. Póngase en contacto con nosotros si encuentra alguna posible infracción.