VCD: Mengurangi Halusinasi Objek dalam Model Bahasa Penglihatan Besar melalui Decoding Kontras Visual
Sicong Leng, Hang Zhang, Guanzheng Chen, Xin Li, Shijian Lu, Chunyan Miao, Lidong Bing
VideoLLaMA 2: Memajukan Pemodelan Spasial-Temporal dan Pemahaman Audio dalam Video-LLM
Zesen Cheng, Sicong Leng, Hang Zhang, Yifei Xin, Xin Li, Guanzheng Chen, Yongxin Zhu, Wenqi Zhang, Ziyang Luo, Deli Zhao, Lidong Bing
Kutukan Multi-Modalitas: Mengevaluasi Halusinasi Model Multimodal Besar dalam Bahasa, Visual, dan Audio
Sicong Leng, Yun Xing, Zesen Cheng, Yang Zhou, Hang Zhang, Xin Li, Deli Zhao, Shijian Lu, Chunyan Miao, Lidong Bing
[2024.10.18] Merilis kode pelatihan dan evaluasi Inf-CLIP.
Ketergantungan Dasar:
Piton >= 3.8
Pytorch >= 2.0.0
Versi CUDA >= 11.8
[Jarak Jauh] Instal Inf-CL:
# instalasi jarak jauhpip instal inf_cl -i https://pypi.org/simple
[Lokal] Instal Inf-CL:
instalasi pip -e .
Instal paket yang diperlukan:
git klon https://github.com/DAMO-NLP-SG/Inf-CLIPcd Inf-CLIP instalasi pip -r persyaratan.txt
inf_cl
adalah implementasi triton dari hilangnya Inf-CL:
Dering-CL (inf_cl/ring.py#L238)
Inf-CL (inf_cl/ring.py#L251)
inf_clip
adalah basis kode pelatihan CLIP dengan kehilangan Inf-CL dan fitur pelatihan lainnya:
Akumulasi Gradien (inf_clip/train/train.py#L180)
Cache Gradien (inf_clip/train/train.py#L292)
Contoh sederhana tentang bagaimana mengadopsi kerugian Inf-CL untuk pembelajaran kontrastif. Menggunakan perintah tersebut untuk mencoba:
torchrun --nproc_per_node 2 tests/example.py
import torchimport torch.nn.fungsional sebagai Fimport torch.didistribusikan sebagai distimport numpy sebagai npfrom inf_cl import cal_inf_lossdef create_cl_tensors(rank, world_size):# Parametersdtype = torch.float32num_heads = 3 # Jumlah perhatian headseq_length_q = 32768 # Urutan lengthseq_length_k = 32768d_model = 25 6# Dimensi setiap kepala (harus 16, 32, 64, atau 128)# Inisialisasi input secara acakq = 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:{peringkat}") * np.log(1 / 0.07)q = F.normalisasi(q, p=2, redup=-1).requires_grad_() # Queryk = F.normalisasi(k, p=2, dim=-1).requires_grad_() # Keyl = l.requires_grad_() # Logit scalereturn q, k, lif __name__ == "__main__":# Asumsikan bahwa lingkungan terdistribusi telah diinisialisasidist.init_process_group("nccl")rank = dist.get_rank()world_size = dist.get_world_size()torch.cuda.set_device(rank)# Contoh dari Pembelajaran Kontrastif Gambar-Teks, q adalah fitur gambar global, # k adalah fitur teks, dan l adalah skala logit. q, k, l = create_cl_tensors(rank, world_size)# label adalah elemen diagonal secara default. # label = torch.arange(q.shape[0])loss = cal_inf_loss(q, k, scale=l.exp())print(loss)
* menunjukkan penerapan strategi "pembongkaran data".
Pelatihan dengan skala data yang lebih besar memerlukan ukuran batch yang lebih besar.
Untuk memfasilitasi pengembangan lebih lanjut selain basis kode kami, kami memberikan panduan cepat tentang cara menggunakan Inf-CLIP untuk melatih CLIP yang disesuaikan dan mengevaluasi model yang dilatih pada tolok ukur klip mainstream.
Struktur Data Pelatihan:
Inf-KLIP ├── kumpulan data │ ├── 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
Memerintah:
skrip bash/cc3m/lit_vit-b-32_bs16k.sh skrip bash/cc12m/lit_vit-b-32_bs32k.sh skrip bash/laion400m/lit_vit-b-32_bs256k.sh
Struktur Data Evaluasi:
Inf-KLIP ├── kumpulan data │ ├── imagenet-1k/ # unduh val_images.tar.gz dari 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
Memerintah:
# skrip evaluasibash imagenet/imagenet_eval.sh# skrip evaluasibash keseluruhan/benchmarks_eval.sh
Jika Anda merasa Inf-CLIP berguna untuk penelitian dan aplikasi Anda, silakan mengutip menggunakan BibTeX ini:
@article{damovl2024infcl, title={Mendobrak Penghalang Memori: Penskalaan Ukuran Batch Mendekati Tak Terbatas untuk Kerugian Kontrasif}, author={Zesen Cheng, Hang Zhang, Kehan Li, Sicong Leng, Zhiqiang Hu, Fei Wu, Deli Zhao, Xin Li, Lidong Bing}, jurnal={arXiv pracetak arXiv:2410.17243}, tahun={2024}, url={https://arxiv.org/abs/2410.12787}}
Basis kode Inf-CLIP diadaptasi dari OpenCLIP . Kami juga berterima kasih atas proyek-proyek berikut yang menjadi asal muasal Inf-CL kami:
CLIP OpenAI , img2dataset , CLIP-Benchmark .
FlashAttention , RingAttention , RingFlashAttention .
Proyek ini dirilis di bawah lisensi Apache 2.0 seperti yang terdapat dalam file LICENSE. Layanan ini adalah pratinjau penelitian yang HANYA ditujukan untuk penggunaan non-komersial , tunduk pada Lisensi model CLIP, Ketentuan Penggunaan data yang dihasilkan oleh OpenAI, dan Laion. Silakan menghubungi kami jika Anda menemukan potensi pelanggaran.