随着大规模的GPT3风格的变换模型侵入视觉领域,DALL-E(一个可以从文本提示生成图像的模型)本周吸引了大量关注,但本文将重点放在CLIP上:一个零样本分类器,其影响力可能更为深远。
在CLIP之前,对图像进行分类通常需要收集一个定制的数据集,其中包含数百、数千甚至数百万张标记图像,这些图像能够适当地代表目标类别,并使用它来训练一个监督分类模型(通常是卷积神经网络)。这种方法(及其扩展,如目标检测)在过去十年中推动了计算机视觉的迅速发展(从自动驾驶汽车到增强现实)。
监督训练的缺点是,由此产生的模型泛化能力并不特别强。如果向它们展示一个来自不同领域的图像,它们的表现通常不会比随机猜测更好。这意味着需要策划一个足够广泛的数据集,这些数据集能够充分代表模型将在野外执行的确切任务。
CLIP(Contrastive Language-Image Pre-training)的引入打破了这一范式。它是一个零样本模型,意味着它能够识别出它以前从未见过的大量事物。
CLIP就像是最好的AI字幕编写器。它能够根据32,768个样本字幕说出图像中的内容。与传统分类器不同,这些分类器忽略了标签的含义(实际上,它们通常只是被丢弃并被内部替换为整数),CLIP创建了其类别的编码,并在超过4亿个文本到图像对上进行了预训练。这使得它能够利用变换模型从文本中提取语义含义的能力,无需在定制数据上进行微调即可进行图像分类。
只需要定义一个可能的类别列表或描述,CLIP将根据其先验知识预测给定图像最有可能属于哪个类别。想象一下,就像问模型“这些字幕中哪一个最符合这幅图像?”
在本文中,将通过一个演示来展示如何在自己的图像上测试CLIP的性能,以便能够获得一些具体的数字,并直观地了解CLIP在各种用例上的表现如何。发现,CLIP在花卉分类任务上的表现优于自定义训练的ResNet分类模型。它在一系列更晦涩和具有挑战性的任务上也表现出色(包括从相机胶卷中识别蘑菇种类和识别狗和猫的品种)。
在本教程中,将需要一个想要分类的图像数据集,并将其划分为想要看到的类别。如果还没有数据集,并且只是想尝试这项新技术,请查看Roboflow的公共计算机视觉数据集。在本文中,将在公共花卉分类数据集上对CLIP进行基准测试。如果使用自己的数据,将数据上传到Roboflow是简单且免费的(最多1000张图像),然后可以按照本文中的相同流程进行。
一旦组装了数据集,就可以进入CLIP基准测试Colab笔记本了。要将自己的数据导出到这个教程中,请在Roboflow注册并创建一个公共工作区,或者在现有的账户中创建一个新的公共工作区。如果数据是私有的,可以升级到付费计划以导出数据,以使用这种外部训练程序,或者尝试使用Roboflow的内部训练解决方案。
要在自己的数据上尝试CLIP,在驱动器中复制笔记本,并确保在运行时选择GPU(Google Colab将为提供免费的GPU使用)。然后,进行一些安装,并克隆CLIP仓库。
下一步是将分类数据集下载到Colab中。如果在Roboflow中制作了数据集,这可以通过点击生成,然后下载OpenAI CLIP分类格式来实现。这将把所有测试图像放在一个名为test的文件夹中,每个类别的图像都有单独的子目录,并给一个_tokenization.txt文件,让可以实验“提示工程”,这可以显著提高或降低模型的性能。
还为对象检测数据集创建了一个转换器,它将从存在的边界框中创建一个文本描述。对这些结果有混合的看法,但它们肯定值得一试。此外,已经免费提供了所有的开源数据集,以CLIP格式下载。
最后一步是通过预测步骤传递测试图像。CLIP以图像和可能的类别标题列表作为输入。可以在_tokenization.txt文件中按看到的方式定义类别标题。确保它们与按字母顺序排序的class_names(由文件夹结构定义)保持相同的顺序。
笔记本包含了遍历测试集中每个类别文件夹的代码,并将相关图像通过预测步骤。当使用CLIP进行分类任务时,尝试不同的类别标题对分类本体进行实验是有用的,并记住CLIP被训练来区分图像标题。
在花卉数据集上,尝试了以下本体,并看到了这些结果:
"daisy" vs "dandelion" --> 46% accuracy (worse than guessing)
"daisy flower" vs "dandelion flower" --> 64% accuracy
"picture of a daisy flower" vs "picture of a dandelion flower" --> 97% accuracy
97%的准确率高于在这个数据集上训练的任何其他分类模型。这些结果表明,为CLIP提供正确的类别描述的重要性,并表达了预训练过程的丰富性,这是传统二进制分类中完全丢失的一个特征。OpenAI称这个过程为“提示工程”。
CLIP可能还有许多其他用例,包括根据目标查询字符串对图像进行排名,或根据它们的独特性对图像进行排序。在笔记本中,将看到定义两个变量image_features和text_features的代码。这些特征之间的余弦相似性代表了它们的语义距离——根据迄今为止的经验,它是惊人的准确。这些是早期的日子……
如果发现CLIP的性能不如希望的那么高,可能仍然想要考虑使用监督训练定制图像分类模型。有关更多CLIP研究,考虑阅读论文,查看关于构建图像搜索引擎的指南,并查看OpenAI的博客文章。很乐意听到在玩弄这个模型时发现的任何有趣的事情!一定要在Twitter上给留言。