当前位置: 首页 > 科技观察

ImageNet零样本准确率首次突破80%,地表最强开源CLIP模型更新

时间:2023-03-14 16:05:08 科技观察

虽然ImageNet已经完成了它的历史使命,但它仍然是人工智能领域的关键数据集计算机视觉。2016年在ImageNet上训练的分类模型sota准确率还不到80%;如今,仅通过大规模预训练模型的零样本泛化就可以达到80.1%的准确率。最近,LAION使用开源代码OpenCLIP框架训练了一个新的ViT-G/14CLIP模型。在ImageNet数据集上,原始O??penAICLIP的准确率仅为75.4%,而OpenCLIP实现了80.1%的零样本准确率。在MSCOCO上实现了74.9%的零样本图像检索(Recall@5),是目前最强大的开源CLIP模型。LAION的全称是Large-scaleArtificialIntelligenceOpenNetwork。它是一个非营利组织,成员来自世界各地。它旨在向公众提供大规模机器学习模型、数据集和相关代码。他们声称自己是真正的OpenAI,100%非盈利且100%免费。有兴趣的朋友可以更新手头的CLIP模型版本!模型地址:https://huggingface.co/laion/CLIP-ViT-bigG-14-laion2B-39B-b160kOpenCLIP模型在各个数据集上的具体表现如下表所示。零样本能力一般来说,计算机视觉(CV)模型在各种任务上的SOTA性能是基于特定领域的训练数据,不能泛化到其他领域或任务,导致对视觉一般属性的理解有限世界。泛化问题对于缺乏大量训练数据的领域尤为重要。理想情况下,CV模型应该学习图像的语义内容,而不会过多关注训练集中的特定标签。例如,对于一张狗的图像,模型应该能够理解图像中有一只狗,并进一步理解背景中有树、是白天、狗在草地上等。然而,使用“分类训练”得到的结果却与预期恰恰相反。该模型学习将狗的内部表示推入同一个“狗向量空间”,并将猫推入同一个“猫向量空间”。所有问题的答案都是一样的。是二进制的,即图像是否可以与类标签对齐。为新任务重新训练一个分类模型也是一种解决方案,但是训练本身需要大量的时间和金钱投入来收集分类数据集和训练模型。幸运的是,OpenAI的CLIP模型是一种非常灵活的分类模型,通常无需重新训练即可用于新的分类任务。为什么CLIPZero-Shot可以比较语言-图像预训练(CLIP,ContrastiveLanguage-ImagePretraining)是OpenAI在2021年发布的基于Transformer的模型。CLIP由两个模型组成,一个用于将文本转换为embeddings的Transformer编码器,一个Vision用于编码图像的Transformer(ViT)。CLIP中的文本和图像模型都在预训练期间进行了优化,以在向量空间中对齐相似的文本和图像。在训练期间,数据中的图像-文本对在向量空间中被推近到输出向量,同时分离不属于一对的图像-文本向量。CLIP与一般分类模型有几点不同:首先,OpenAI使用从互联网上爬取的4亿文本图像对的大规模数据集进行训练。优点是:1.CLIP的训练只需要“图像-文本对”,不需要特定的类标签,在当今以社交媒体为中心的网络世界中,此类数据非常丰富。2.大数据集意味着CLIP能够理解图像中常见的文本概念。3.文本描述(textdescriptor)往往包含图像中的各种特征,而不仅仅是类别特征,这意味着可以建立更全面的图像和文本表示。以上优势也是CLIP建立零击能力的关键因素。论文作者还对比了专门在ImageNet上训练的ResNet-101模型和CLIP模型,并将其应用到从ImageNet衍生出来的其他数据集上。下图显示了性能比较。可以看出,虽然ResNet-101是在ImageNet上训练的,但是在类似数据集上的表现比同样任务上的CLIP要差很多。将ResNet模型应用到其他领域时,常用的方法是“线性探测”(lineardetection),即将ResNet模型最后几层学习到的特征输入到一个线性分类器中,然后对特定的数据集进行.微调。在CLIP论文中,将线性检测ResNet-50与零样本CLIP进行了对比,得出的结论是,在同一场景下,零样本CLIP在多个任务中的表现优于ResNet-50中的线性检测。然而,值得注意的是,在给定更多训练样本时,零样本并不优于线性检测。使用CLIP进行零样本分类从上面的描述中,我们可以知道图像和文本编码器可以创建一个512维的向量,并将输入图像和文本输入映射到同一个向量空间。使用CLIP做Zero-shot分类就是把类别信息放到文本句子中。比如输入一张图片,想判断它的类别是汽车、鸟还是猫,可以创建三个文本字符串来表示类别:T1代表汽车:汽车的照片T2代表鸟:照片abirdT3representsCat:aphotoofacat在文本编码器中输入类别描述,可以得到一个可以表示类别的向量。假设输入是一张猫的照片,使用ViT模型对其进行编码得到图像向量,计算其与类别向量的余弦距离作为相似度。如果与T3的相似度最高,说明该图像的类别属于猫。可以看出类别标签不是一个简单的词,而是根据模板“aphotoofa{label}”的格式改写成句子,这样就可以扩展到不受限制的类别预测通过培训。在实验中,使用提示模板将ImageNet的分类准确率提高了1.3个百分点,但是提示模板并不总能提高性能,需要在实际使用中根据不同的数据集进行测试。Python也很容易快速使用CLIP进行零样本分类。作者选择了HuggingFace中的frgfm/imagenette数据集作为演示。该数据集包含10个标签,所有标签都保存为整数值。使用CLIP进行分类需要将整数值标签转换为其相应的文本内容。在直接计算标签和照片之间的相似度之前,需要初始化CLIP模型,这可以使用通过HuggingFacetransformers找到的CLIP来实现。文本转换器不能直接读取文本,而是需要一组整数值,称为tokenID(或input_ID),其中每个唯一的整数代表一个词或子词(即token)。将转换后的张量输入文本转换器,得到标签的文本嵌入。注意CLIP输出的向量没有经过归一化处理,点乘后得到的相似度结果不准确。接下来,您可以在数据集中选择一张图像进行测试,同样的过程得到图像向量。将图像转化为大小为(1,3,224,224)的向量后,输入到模型中,得到embedding。接下来就是计算数据集中imageembedding和十个labeltextembeddings的点积相似度,得分最高的就是预测的类。模型给出的结果是盒式磁带播放器(cassettetapeplayer)。再次运行整个数据集后,准确率可以达到98.7%。除了Zero-shot分类、多模态搜索、目标检测和生成模型(如OpenAI的Dall-E和Stabledisusion)之外,CLIP为计算机视觉打开了一扇新的大门。