图像分类竞赛进阶技能:OpenAI-CLIP使用范例

OpenAI-CLIP

在这里插入图片描述

官方介绍

  • 尽管深度学习已经彻底改变了计算机视觉,但目前的方法存在几个主要问题:典型的视觉数据集是劳动密集型的,创建成本高,同时只教授一组狭窄的视觉概念;标准视觉模型擅长于一项任务且仅擅长于一项任务,并且需要大量的努力来适应新的任务;在基准测试中表现良好的模型在压力测试中的表现令人失望,1234对整个计算机视觉深度学习方法产生了怀疑。

  • 我们提出了一个旨在解决这些问题的神经网络:它是在各种各样的图像上训练的,有各种各样的自然语言监督,这些图像在互联网上随处可见。通过设计,可以用自然语言指导网络执行各种各样的分类基准测试,而不直接优化基准测试的性能,类似于GPT-25和GPT-3.6的“零镜头”功能。这是一个关键的变化:通过不直接优化基准测试,我们表明它变得更具代表性:我们的系统在不使用任何原始1.28M标记示例的情况下,在ImageNet零拍上与原始ResNet-507的性能匹配时,将这一“鲁棒性差距”缩小了75%。

CLIP使用示例

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import os

import cv2
import skimage
import IPython.display
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
from glob import glob

from collections import OrderedDict
import torch
import gc

%matplotlib inline
%config InlineBackend.figure_format = 'retina'

安装CLIP库

openai-clip-weights链接

!pip install ../input/openaiclipweights/python-ftfy-master/python-ftfy-master
!pip install ../input/openaiclipweights/clip/CLIP
!cp ../input/openaiclipweights/CLIP-main/CLIP-main/clip/bpe_simple_vocab_16e6.txt /opt/conda/lib/python3.7/site-packages/clip/.
!gzip -k /opt/conda/lib/python3.7/site-packages/clip/bpe_simple_vocab_16e6.txt
!ls /opt/conda/lib/python3.7/site-packages/clip/.

import torch
import clip
from tqdm.notebook import tqdm
from torch.utils.data import DataLoader, Dataset

print("Torch version:", torch.__version__)
  • 下载几张图片用于测试
!wget https://farm8.staticflickr.com/6036/6426668771_b5b915e46c_o.jpg
!wget https://c6.staticflickr.com/8/7457/10806045045_02d3dbdcee_o.jpg
!wget https://c1.staticflickr.com/4/3267/2888764405_0a0a608604_o.jpg
!wget https://farm8.staticflickr.com/4028/4294212194_a49663b2b9_o.jpg
!wget https://c5.staticflickr.com/9/8173/8019508216_6540c8686a_o.jpg
!wget https://farm3.staticflickr.com/1146/1357102390_943c5cb999_o.jpg
  • 统计图片列表
files = glob('*.jpg')
print(files)![请添加图片描述](https://img-blog.csdnimg.cn/13db547da25a4f7fa7dc027d4535e93d.png)

  • 列出可用的CLIP预训练模型
clip.available_models()

请添加图片描述

  • 列出可用的CLIP预训练权重
!ls ../input/openaiclipweights/clip/CLIP/models/

请添加图片描述

  • 加载CLIP的基础视觉模型
model, preprocess = clip.load("../input/openaiclipweights/clip/CLIP/models/ViT-B-32.pt")
model.cuda().eval()

请添加图片描述

重头戏,对每一张图片我们可以提问问题,并且查看CLIP会做出什么样的回答

QUERIES = [
    "a dog",
    "a cat",
    "a elephant",
    "a zebra",
    "a sleeping dog",
    "a sleeping cat",
    "a giraffe",
    "a poodle",
    "animal inside a car",
    "animal outside a car",
    "a sofa",
    "some animals",
    "santa claus",
    "ipod",
    "two mugs",
    "three mugs",
    "blue sky",
] ```

## 使用CLIP结合问题对图片进行打分

```python
with torch.no_grad():
    for file in files:
    print(file)
    #加载图像数据
    img = Image.open(file).convert('RGB')
    #图片可视化
    plt.imshow(cv2.resize(np.array(img),(256,256)))
    plt.show()
    #使用clip对图片进行预处理
    img = preprocess(img).unsqueeze(0).cuda()
    #将图片进行编码
    image_embeddings = model.encode_image(img)
    image_embeddings/=image_embeddings.norm(dim=-1, keepdim = True)
    score = []


    #提问问题并且进行打分
    for query in QUERIES:
    text = clip.tokenize(query)cuda()
    #问题文本编码
            text_embeddings = model.encode_text(texts)
            text_embeddings /= text_embeddings.norm(dim=-1, keepdim=True)
            
            
            #计算图片和问题之间的匹配分数
            sc = float((image_embeddings @ text_embeddings.T).cpu().numpy())
            score.append(sc)
	        
	        print( pd.DataFrame({'query': QUERIES, 'score': score}).sort_values('score', ascending=False) )
	        print('')
	        print('-------------------------')
	        print('')





请添加图片描述
请添加图片描述

数据集
petfinder-data

参考文章

OpenAI推出CLIP:连接文本与图像,Cover所有视觉分类任务
openai-CLIP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kaggle竞赛指南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值