วีซีดี: การบรรเทาอาการประสาทหลอนของวัตถุในแบบจำลองภาษาการมองเห็นขนาดใหญ่ผ่านการถอดรหัสภาพตัดกัน
ซือฉงเล้ง, ฮัง จาง, กวนเจิ้ง เฉิน, ซิน ลี, ซื่อเจียน หลู, ชุนหยาน เหมียว, ลี่ตง ปิง
VideoLLaMA 2: การพัฒนาการสร้างแบบจำลองเชิงพื้นที่และชั่วคราวและความเข้าใจด้านเสียงใน Video-LLM
เซเซ่น เฉิง, ซือฉง เล้ง, หัง จาง, อี้เฟย ซิน, ซิน ลี, กวนเจิ้ง เฉิน, หยงซิน จู, เหวินฉี จาง, ซีหยาง หลัว, เดลี่ จ้าว, ลี่ตง ปิง
คำสาปแห่งหลากหลายรูปแบบ: การประเมินภาพหลอนของแบบจำลองหลายรูปแบบขนาดใหญ่ในภาษา ภาพ และเสียง
ซือกง เล้ง, หยุน ซิง, เซเซน เฉิง, หยาง โจว, หัง จาง, ซิน หลี่, เดลี่ จ้าว, ซื่อเจียน หลู่, ชุนหยาน เหมียว, ลี่ตง ปิง
[2024.10.18] เผยแพร่รหัสการฝึกอบรมและการประเมินผลของ Inf-CLIP
การพึ่งพาขั้นพื้นฐาน:
หลาม >= 3.8
ไพทอร์ช >= 2.0.0
เวอร์ชัน CUDA >= 11.8
[ระยะไกล] ติดตั้ง Inf-CL:
# การติดตั้งระยะไกล pip ติดตั้ง inf_cl -i https://pypi.org/simple
[ท้องถิ่น] ติดตั้ง Inf-CL:
pip ติดตั้ง -e
ติดตั้งแพ็คเกจที่จำเป็น:
โคลนคอมไพล์ https://github.com/DAMO-NLP-SG/Inf-CLIPcd Inf-CLIP pip ติดตั้ง -r ข้อกำหนด.txt
inf_cl
คือการใช้งาน triton ของการสูญเสีย Inf-CL:
ริง-CL (inf_cl/ring.py#L238)
Inf-CL (inf_cl/ring.py#L251)
inf_clip
เป็นโค้ดเบสการฝึกอบรม CLIP ที่มีการสูญเสีย Inf-CL และคุณสมบัติการฝึกอบรมอื่นๆ:
การสะสมแบบไล่ระดับ (inf_clip/train/train.py#L180)
แคชไล่ระดับสี (inf_clip/train/train.py#L292)
ตัวอย่างง่ายๆ เกี่ยวกับวิธีการนำการสูญเสีย Inf-CL ของเราไปใช้ในการเรียนรู้เชิงเปรียบเทียบ การใช้คำสั่งดังกล่าวเพื่อพยายาม:
torchrun --nproc_per_node 2 tests/example.py
นำเข้า torchimport torch.nn.function เป็น Fimport torch.distributed เป็น distimport numpy เป็น npfrom inf_cl นำเข้า cal_inf_lossdef create_cl_tensors (อันดับ, world_size):# พารามิเตอร์dtype = torch.float32num_heads = 3 # จำนวนความสนใจ headsseq_length_q = 32768 # ลำดับ lengthseq_length_k = 32768d_model = 256 # ขนาดของแต่ละหัว (ต้องเป็น 16, 32, 64 หรือ 128)# เริ่มต้นแบบสุ่ม 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, อุปกรณ์=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__":# สมมติว่าสภาพแวดล้อมแบบกระจายได้รับการเตรียมใช้งานแล้วdist.init_process_group("nccl")rank = dist.get_rank()world_size = dist.get_world_size()torch.cuda.set_device(rank)# ตัวอย่างโดยการเรียนรู้ที่ขัดแย้งกันของข้อความและรูปภาพ, q คือคุณลักษณะรูปภาพส่วนกลาง, # k คือคุณลักษณะข้อความ และ l คือขนาด logit q, k, l = create_cl_tensors(rank, world_size)# label เป็นองค์ประกอบแนวทแยงตามค่าเริ่มต้น # ป้ายกำกับ = torch.arange(q.shape[0])loss = cal_inf_loss(q, k, scale=l.exp())พิมพ์(สูญเสีย)
* หมายถึงการนำกลยุทธ์ "การถ่ายโอนข้อมูล" มาใช้
การฝึกอบรมที่มีขนาดข้อมูลที่ใหญ่ขึ้นจำเป็นต้องมีขนาดชุดที่ใหญ่ขึ้น
เพื่ออำนวยความสะดวกในการพัฒนาเพิ่มเติมนอกเหนือจากฐานโค้ดของเรา เรามีคำแนะนำเริ่มต้นอย่างรวดเร็วเกี่ยวกับวิธีใช้ Inf-CLIP เพื่อฝึก CLIP ที่ปรับแต่งเอง และประเมินโมเดลที่ได้รับการฝึกในการวัดประสิทธิภาพคลิปกระแสหลัก
โครงสร้างข้อมูลการฝึกอบรม:
Inf-คลิป ├── ชุดข้อมูล │ ├── 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| - ...| - └── 1,044.tar │ ├── laion400m/ # https://github.com/rom1504/img2dataset/blob/main/dataset_examples/laion400m.md| - ├── 00000.tar| - ├── 00001.tar| - ...| - └── 41407.tar
สั่งการ:
สคริปต์ทุบตี /cc3m/lit_vit-b-32_bs16k.sh สคริปต์ทุบตี /cc12m/lit_vit-b-32_bs32k.sh สคริปต์ทุบตี / laion400m/lit_vit-b-32_bs256k.sh
โครงสร้างข้อมูลการประเมิน:
Inf-คลิป ├── ชุดข้อมูล │ ├── imagenet-1k/ # ดาวน์โหลด val_images.tar.gz ของ imagenet| - └── วาล/| - - ├── 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
สั่งการ:
# สคริปต์ทุบตีการประเมินผล imagenet/imagenet_eval.sh# สคริปต์ทุบตีการประเมินโดยรวม/benchmarks_eval.sh
หากคุณพบว่า Inf-CLIP มีประโยชน์สำหรับการวิจัยและการใช้งานของคุณ โปรดอ้างอิงโดยใช้ BibTeX นี้:
@article{damovl2024infcl, title={การทำลายอุปสรรคแห่งความทรงจำ: 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}, Journal={arXiv พิมพ์ล่วงหน้า arXiv:2410.17243}, year={2024}, url={https://arxiv.org/abs/2410.12787}}
codebase ของ Inf-CLIP ถูกดัดแปลงมาจาก OpenCLIP นอกจากนี้เรายังรู้สึกขอบคุณสำหรับโครงการต่อไปนี้ที่ Inf-CL ของเราเกิดขึ้น:
OpenAI CLIP , img2dataset , CLIP-Benchmark
FlashAttention , RingAttention , RingFlashAttention
โครงการนี้เผยแพร่ภายใต้ลิขสิทธิ์ Apache 2.0 ตามที่พบในไฟล์ LICENSE บริการนี้เป็นการแสดงตัวอย่างงานวิจัยที่มีจุดประสงค์เพื่อ การใช้งานที่ไม่ใช่เชิงพาณิชย์เท่านั้น โดยอยู่ภายใต้ใบอนุญาตรุ่นของ CLIP เงื่อนไขการใช้ข้อมูลที่สร้างโดย OpenAI และ Laion โปรดติดต่อเราหากคุณพบการละเมิดที่อาจเกิดขึ้น