1 问题描述
运行基于clip的zero-shot预测代码,报错如下:
Traceback (most recent call last):File "D:\code\ptcontainer\clip\clipembeding.py", line 38, in <module>clip_embeding = ClipEmbeding()File "D:\code\ptcontainer\clip\clipembeding.py", line 11, in __init__self.model, self.processor = clip.load("d:/models/clip/ViT-L-14-336px.pt", device=self.device)
AttributeError: module 'clip' has no attribute 'load'
执行的代码:
import os
import clip
import torch
from torchvision.datasets import CIFAR100# Load the model
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load('ViT-B/32', device)# Download the dataset
cifar100 = CIFAR100(root=os.path.expanduser("./data/"), download=True, train=False)# Prepare the inputs
image, class_id = cifar100[3637]
image_input = preprocess(image).unsqueeze(0).to(device)
text_inputs = torch.cat([clip.tokenize(f"a photo of a {c}") for c in cifar100.classes]).to(device)# Calculate features
with torch.no_grad():image_features = model.encode_image(image_input)text_features = model.encode_text(text_inputs)# Pick the top 5 most similar labels for the image
image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)
similarity = (100.0 * image_features @ text_features.T).softmax(dim=-1)
values, indices = similarity[0].topk(5)# Print the result
print("\nTop predictions:\n")
for value, index in zip(values, indices):print(f"{cifar100.classes[index]:>16s}: {100 * value.item():.2f}%")
2 问题分析
查看pip安装的组件包,显示如下:
(pt2) D:\code\ptcontainer>pip list
Package Version Editable project location
---------------------------- ------------ -------------------------
absl-py 1.4.0
......
click 8.1.3
clip 1.0
......
vocos 0.0.3
wcwidth 0.2.6
websockets 11.0.2
Werkzeug 3.0.1
wheel 0.38.4
wincertstore 0.2
wrapt 1.15.0
yarl 1.9.2
zipp 3.15.0
组件中包含clip, 但在执行中找不到load方法。
3 问题解决
重新安装clip组件包
pip unintall clippip install torch==1.9.0
pip install torchaudio==0.9.0
pip install torchvision==0.10.0pip install ftfy regex tqdm
pip install git+https://github.com/openai/CLIP.git
最后一个pip有时执行会失败,需要多尝试几次,如果依然失败,使用下面的命令替换
pip install git+https://ghproxy.com/https://github.com/openai/CLIP.git
安装成功后,再次运行程序,不再报错。
运行结果显示如下:
100%|███████████████████████████████████████| 338M/338M [00:24<00:00, 14.6MiB/s]
Downloading https://www.cs.toronto.edu/~kriz/cifar-100-python.tar.gz to ./data/cifar-100-python.tar.gz
169001984it [00:21, 7711931.97it/s]
Extracting ./data/cifar-100-python.tar.gz to ./data/Top predictions:snake: 65.31%turtle: 12.29%sweet_pepper: 3.83%lizard: 1.88%crocodile: 1.75%
4 conda环境介绍
Conda是一个开源的包管理器和环境管理系统,用于安装、运行和更新包和其依赖项。它是由Anaconda, Inc.(以前称为Continuum Analytics)创建,用于支持Python程序开发,但它也可以用来管理来自其他语言的包。Conda使得包管理和环境隔离变得简单,对于处理多个项目中的依赖关系和版本控制尤其有用。
Conda是一个强大的工具,对于管理复杂的Python项目和环境至关重要。它简化了包管理和环境设置,使得Python开发更加容易和高效。通过使用Conda,开发者可以确保他们的项目在不同机器和操作系统上都能以相同的方式运行,大大提高了项目的可移植性和可复现性。
4.1 Conda的核心功能
-
包管理:Conda作为包管理器,可以安装、更新和移除Python包。它通过Conda仓库,如Anaconda Cloud或Conda Forge,来获取包。
-
环境管理:Conda允许用户创建隔离的环境,以便于不同项目可以拥有不同的库和/或Python版本。这在处理不兼容的依赖项或不同项目的需求时非常有用。
-
跨平台:Conda支持Linux、OS X和Windows,并允许创建跨平台的Python环境。
-
开源:Conda是开源的,允许用户查看源代码并对其进行改进。
4.2 使用Conda的优势
-
解决依赖性问题:Conda可以自动解决包之间的依赖关系,简化了安装过程。
-
环境隔离:创建独立的环境可以避免包之间的版本冲突,使得项目更稳定。
-
易于使用:Conda的命令行界面简单直观,易于学习和使用。
-
广泛的包支持:Conda支持Python的许多流行库和应用程序。
-
社区支持:作为一个流行的工具,Conda拥有一个活跃的社区,用户可以从中找到支持和资源。
4.3 Conda环境的创建和管理
-
创建新环境:使用
conda create
命令创建一个新环境,可以指定Python版本和所需的包。 -
激活环境:使用
conda activate
命令来激活环境。 -
安装包:在激活的环境中使用
conda install
命令来安装新的包。 -
环境列表:使用
conda env list
来查看所有可用的Conda环境。 -
移除环境:使用
conda env remove
命令来移除不再需要的环境。
4.4 应用场景
- 数据科学和机器学习:Conda非常适合于数据科学和机器学习项目,这些项目通常需要多个库和框架。
- 软件开发:软件开发者使用Conda来管理项目依赖,确保一致的开发环境。
- 教学和学术研究:教师和研究人员使用Conda来创建具有特定库和工具的环境,用于教学和研究。