多卡训练的时候发现一个问题:cuda() 方法会无视环境变量CUDA_VISIBLE_DEVICES。示例如下: CUDA_VISIBLE_DEVICES="3,4,5,6" python -m torch.distributed.launch --nproc_per_node=${N_GPUS} train.py --config_option <your_config_here> 这边指定了可见显卡为3-6号,然而如果在代码里出现cuda(),模型/数据还是会load到0卡(default)。 # load to GPU_0 model.cuda() model = torch.nn.parallel.DistributedDataParallel( model, device_ids=[local_rank], broadcast_buffers=False, find_unused_parameters=False) sample.cuda() 解决方案1,初始化ddp的时候设置默认cuda设备,然而这个方法对我没用。 torch.cuda.set_devi
ALBEF paper : http://arxiv.org/abs/2107.07651 BLIP paper : http://arxiv.org/abs/2201.12086 BLIP code : https://github.com/salesforce/BLIP ALBEF 网络结构如下,这篇算得上BLIP/BLIP2的前身了,其三个Loss一直延续至今(当然MLM变成了LM)。具体三个Loss的介绍可以看BLIP2 - JJJYmmm Blog,有以下几个特别点: ITC Loss采用了MOCO的形式,即通过一个momentum encoder来扩大负样本的数量,这也是多了一个momentum model的原因。论文还从模型蒸馏的角度对momentum model做了进一步改进,例如在计算ITC和MLM时引入了伪标签 这里对于文本理解任务,采用的是MLM而不是LM,可能是因为MLM任务相比于LM任务更简单,因为模型只需要预测被mask的单词即可 在计算ITC时得到的Image-Text Similarity可以挑选出hard negatives,专门去做ITM;这个方法
Repository:https://github.com/salesforce/LAVIS/tree/main/projects/blip2 预训练结构 第一阶段 网络结构如下图。 对于图像特征,采用DETR类似的思路,使用Learned Queries作为输入,Image Features作为cross attention的KVs,希望通过可学习的参数来抽取与文本更相关的视觉特征 对于文本特征,采用传统的Bert Encoder思路 对于多模态特征的融合,与双流模型不同,这里两个Encoder的self attention层是共享参数的,当然与单流模型也不同,因为FFN不共享参数,且视觉特征提取时还会走cross attention层 训练采用的三个Loss函数(ITG/ITM/ITC)主要参考之前的ALBEF工作。 Image-Text Contrastive : 这部分的目的主要是对齐图像特征和文本特征的单模态特征,计算方法类似CLIP。与ALBEF不同的是,这里的negative pairs直接采用in-batc方式得到,并没有像ALBEF那样借鉴MOCO得到一个较大
找到一个Github star比较多的CLIP跑起来玩一下。结果发现挺多坑的......(我发现Shariatnia好像很喜欢在Jupyter改代码,却不把改动更新到源文件) 项目地址:https://github.com/moein-shariatnia/OpenAI-CLIP 关于Loss的一些问题 CLIP网络的输入是一个个图像-文本对,对于一个batch_size=8的输入,总共有8个正样本对和56个负样本对。于是我们可以使用torch.eye来创建标签值。在这个项目中,由于Flicker-8k数据集较小,而且一张图片对应5个caption,所以作者使用文本(图像)之间的相似度作为标签,如下代码块。 targets = F.softmax( (images_similarity + texts_similarity) / 2 * self.temperature, dim=-1) texts_loss = cross_entropy(logits, targets, reduction='none') images_loss
突然发现MathJax的inline parse没用了?不知道是不是和更新的主题有关,大家看到$JJJY_{mmm}$就先自我脑补下标吧...
Axuanz
Updating as per fate.