计算机视觉中的基础模型:CLIP、SAM与FastSAM的应用与实践
立即解锁
发布时间: 2025-09-01 01:19:32 阅读量: 10 订阅数: 30 AIGC 

### 计算机视觉中的基础模型:CLIP、SAM与FastSAM的应用与实践
#### 1. 利用OpenAI CLIP获取匹配图像
在计算机视觉领域,为给定查询提供匹配图像是一项重要任务。从头训练CLIP模型需要大量的计算资源和数据,但OpenAI CLIP已经在包含4亿个图像 - 文本对的数据集上完成了训练。以下是使用OpenAI CLIP的具体步骤:
1. **安装所需包**:
```python
!pip install ftfy regex tqdm
```
2. **克隆GitHub仓库**:
```python
!git clone https://github.com/openai/CLIP.git
%cd CLIP
```
3. **加载预训练的CLIP模型**:
```python
import torch
import clip
from PIL import Image
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT - B/32", device=device)
```
4. **提供图像和文本并进行预处理**:
```python
image = preprocess(Image.open("CLIP.png")).unsqueeze(0).to(device)
text = clip.tokenize(["a diagram", "a dog", "a cat"]).to(device)
```
5. **通过前馈网络传递图像和文本嵌入**:
```python
with torch.no_grad():
image_features = model.encode_image(image)
text_features = model.encode_text(text)
logits_per_image, logits_per_text = model(image, text)
probs = logits_per_image.softmax(dim=-1).cpu().numpy()
print("Label probs:", probs)
```
通过上述步骤,给定图像和一组可能的标签,我们就能得到对应的标签。
#### 2. 引入SAM模型
假设给定一张包含多个对象(如狗、猫、人等)的图像,并要求预测与给定文本(如“狗”)对应的掩码,传统方法通常是对象检测问题,需要数据在给定数据集上进行微调或利用预训练模型。而CLIP只能对整体图像进行分类,无法处理单个对象。此时,Meta的Segment Anything Model (SAM) 可以解决这个问题。
##### 2.1 SAM的工作原理
SAM在由1100万张图像生成的10亿个掩码的语料库上进行训练,这些数据的生成分为以下三个阶段:
1. **辅助手动**:SAM协助标注人员标注掩码。
2. **半自动**:SAM为图像中部分对象生成掩码,标注人员对其余对象进行掩码标注。
3. **全自动**:人类用点网格提示SAM,SAM自动生成对应点的掩码。
通过这三个步骤,可以为每张图像生成更多的掩码。
##### 2.2 SAM的架构
SAM的架构主要包括以下步骤:
1. **图像编码**:图像通过预训练的视觉Transformer编码器,得到对应的图像嵌入。
2. **查询掩码**:有了图像嵌入后,可以通过提供密集掩码或稀疏掩码(点、框和文本)来查询特定掩码。
3. **提示编码**:提示编码器负责接收点、框和掩码,并返回密集和稀疏嵌入。不同类型的掩码用途不同:
- **密集掩码**:适用于分割人物头发或树叶等场景,提供大致轮廓,SAM会提取掩码。
- **稀疏掩码**:用于指定与图像对应的文本、边界框或点。
- **无输入情况**:如果不提供任何掩码、文本或点输入,模型会在输入图像上均匀自动生成1024个点。
4. **掩码解码**:嵌入通过掩码解码器,计算提示编码和图像编码器之间的注意力,然后输出一组掩码。
掩码解码器的架构及各组件功能如下:
1. **图像嵌入**:输入图像转换为一组特征向量。
2. **输出令牌 + 提示令牌**:提示表示为嵌入,输出令牌类似于Transformer中的CLS令牌,包含有效分割信息。
3. **注意力块**:
- **图像到令牌注意力**:帮助模型关注图像嵌入中与令牌相关的特定特征。
- **令牌到图像注意力**:使令牌影响图像特征的处理。
- **自注意力**:允许令牌相互交互,整合信息。
4. **多层感知器(MLP)**:处理注意力机制的特征,进一步转换和组合信息。
5. **迭代**:注意力块和MLP堆叠,使模型不断细化对图像和提示的理解。
6. **2x卷积转置**:上采样操作,提高特征图的空间分辨率。
7. **每个掩码的点积**:计算细化特征与每个潜在掩码的点积,为特征与掩码的匹配度打分。
8. **掩码生成**:根据点积结果生成最终分割掩码。
9. **交并比(IoU)分数**:模型同时输出IoU分数,衡量预测分割掩码与真实掩码的重叠程度。
##### 2.3 实现SAM
以下是使用SAM在示例图像上进行快速分割的代码:
1. **克隆GitHub仓库并安装所需包**:
```python
!git clone https://github.com/facebookresearch/segment - anything.git
%cd segment - anything
!pip ins
```
0
0
复制全文
相关推荐








