VCD:透過視覺對比解碼減輕大視覺語言模型中的物體幻覺
冷思聰、張航、陳冠正、李欣、盧世健、苗春燕、冰立東
VideoLLaMA 2:推進視訊法學碩士中的時空建模和音訊理解
程澤森、冷思聰、張航、辛一飛、李欣、陳冠正、朱永新、張文琪、羅紫陽、趙德利、冰立東
多模態的詛咒:評估跨語言、視覺和音訊的大型多模態模型的幻覺
冷思聰、邢雲、程澤森、週揚、張航、李鑫、趙德利、盧世健、苗春燕、冰立東
[2024.10.18]發布Inf-CLIP培訓和評估代碼。
基本依賴關係:
Python >= 3.8
火炬 >= 2.0.0
CUDA 版本 >= 11.8
[遠端]安裝Inf-CL:
# 遠端安裝pip install inf_cl -i https://pypi.org/simple
[本地]安裝Inf-CL:
pip install -e 。
安裝所需的套件:
git 克隆 https://github.com/DAMO-NLP-SG/Inf-CLIPcd Inf-CLIP pip install -r 要求.txt
inf_cl
是 Inf-CL 損失的 triton 實作:
環-CL (inf_cl/ring.py#L238)
Inf-CL (inf_cl/ring.py#L251)
inf_clip
是具有 Inf-CL 損失和其他訓練功能的 CLIP 訓練程式碼庫:
梯度累積 (inf_clip/train/train.py#L180)
梯度緩存 (inf_clip/train/train.py#L292)
一個關於如何採用 Inf-CL 損失進行對比學習的簡單範例。使用這樣的命令來嘗試:
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):# setype = torch。序列長度seq_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, 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__":# 假設分散式環境已初始化ddist.init_process_group("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl")rank("nccl") = dist.get_rank()world_size = dist.get_world_size()torch.cuda.set_device(rank)#以圖文比較學習為例,q是全域影像特徵,# k是文字特徵,l是logit尺度。 , l = create_cl_tensors(rank, world_size)# 標籤預設是對角線元素。 # labels = torch.arange(q.shape[0])loss = cal_inf_loss(q, k, scale=l.exp())print(loss)
* 表示採用「資料卸載」策略。
更大資料規模的訓練需要更大的批量大小。
為了促進在我們的程式碼庫之上的進一步開發,我們提供瞭如何使用 Inf-CLIP 訓練定制 CLIP 並在主流剪輯基準上評估訓練後的模型的快速入門指南。
訓練資料結構:
資訊片段 ├── 資料集 │ ├── 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
命令:
bash 腳本/cc3m/lit_vit-b-32_bs16k.sh bash 腳本/cc12m/lit_vit-b-32_bs32k.sh bash腳本/laion400m/lit_vit-b-32_bs256k.sh
評估資料結構:
資訊片段 ├── 資料集 │ ├── imagenet-1k/ # 下載imagenet的val_images.tar.gz| | └── 值/| | | ├── n01440764| | | ├── n01443537| | | ├── ...| | | └── n15075141 │ ├── Clip-benchmark/ # bash 資料集/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評估bash腳本/imagenet_eval.sh#總體評估bash腳本/benchmarks_eval.sh
如果您發現 Inf-CLIP 對您的研究和應用有用,請使用此 BibTeX 進行引用:
@article{damovl2024infcl, title={打破內存障礙:對比損失的近乎無限批量大小縮放},作者={Zesen Cheng, Hang Zhang, Kehan Li, Sicong Leng,zhiqiang Hu, Fei Wu, Deli Zhao, Xin Li,李東冰},期刊={arXiv預印本arXiv:2410.17243},年份={2024},url={https://arxiv.org/abs/2410.12787}}
Inf-CLIP 的程式碼庫改編自OpenCLIP 。我們也感謝 Inf-CL 的以下項目:
OpenAI CLIP 、 img2dataset 、 CLIP-Benchmark 。
FlashAttention 、 RingAttention 、 RingFlashAttention 。
該專案是根據 Apache 2.0 許可證發布的,如 LICENSE 文件中所示。本服務為研究預覽版,僅供非商業用途,受 CLIP 授權模式、OpenAI 和 Laion 產生的資料的使用條款的約束。如果您發現任何潛在的違規行為,請與我們聯絡。