运行基于clip的zero-shot预测代码,报错如下:
Traceback (most recent call last):
File "D:\code\ptcontainer\clip\clipembeding.py", line 38, in
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}%")
查看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方法。
重新安装clip组件包
pip unintall clip
pip install torch==1.9.0
pip install torchaudio==0.9.0
pip install torchvision==0.10.0
pip 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%
Conda是一个开源的包管理器和环境管理系统,用于安装、运行和更新包和其依赖项。它是由Anaconda, Inc.(以前称为Continuum Analytics)创建,用于支持Python程序开发,但它也可以用来管理来自其他语言的包。Conda使得包管理和环境隔离变得简单,对于处理多个项目中的依赖关系和版本控制尤其有用。
Conda是一个强大的工具,对于管理复杂的Python项目和环境至关重要。它简化了包管理和环境设置,使得Python开发更加容易和高效。通过使用Conda,开发者可以确保他们的项目在不同机器和操作系统上都能以相同的方式运行,大大提高了项目的可移植性和可复现性。
包管理:Conda作为包管理器,可以安装、更新和移除Python包。它通过Conda仓库,如Anaconda Cloud或Conda Forge,来获取包。
环境管理:Conda允许用户创建隔离的环境,以便于不同项目可以拥有不同的库和/或Python版本。这在处理不兼容的依赖项或不同项目的需求时非常有用。
跨平台:Conda支持Linux、OS X和Windows,并允许创建跨平台的Python环境。
开源:Conda是开源的,允许用户查看源代码并对其进行改进。
解决依赖性问题:Conda可以自动解决包之间的依赖关系,简化了安装过程。
环境隔离:创建独立的环境可以避免包之间的版本冲突,使得项目更稳定。
易于使用:Conda的命令行界面简单直观,易于学习和使用。
广泛的包支持:Conda支持Python的许多流行库和应用程序。
社区支持:作为一个流行的工具,Conda拥有一个活跃的社区,用户可以从中找到支持和资源。
创建新环境:使用conda create
命令创建一个新环境,可以指定Python版本和所需的包。
激活环境:使用conda activate
命令来激活环境。
安装包:在激活的环境中使用conda install
命令来安装新的包。
环境列表:使用conda env list
来查看所有可用的Conda环境。
移除环境:使用conda env remove
命令来移除不再需要的环境。