您的位置:首页 > 文旅 > 美景 > 哪些网站可以免费_苏州seo关键词优化_竞价托管一般要多少钱_百度认证平台官网

哪些网站可以免费_苏州seo关键词优化_竞价托管一般要多少钱_百度认证平台官网

2024/12/27 20:39:20 来源:https://blog.csdn.net/engchina/article/details/144751192  浏览:    关键词:哪些网站可以免费_苏州seo关键词优化_竞价托管一般要多少钱_百度认证平台官网
哪些网站可以免费_苏州seo关键词优化_竞价托管一般要多少钱_百度认证平台官网

零样本图像分类:用Python和CLIP模型轻松实现

    • 1. 安装必要的库
    • 2. 加载模型和处理器
    • 3. 加载图片
    • 4. 定义标签
    • 5. 处理输入数据
    • 6. 运行模型并获取输出
    • 7. 解析模型输出
    • 8. 打印结果
    • 9. 总结
    • 10. 代码是固定写法吗?需要死记硬背吗?
    • 11. 动手试试!

大家好!今天我们来学习一个非常有趣的技术——零样本图像分类。简单来说,就是让计算机根据我们提供的标签,自动识别图片中的内容。听起来是不是很酷?别担心,即使你是Python初学者,甚至是小学生,也能轻松理解并实现这个功能!

我们将使用一个叫做 CLIP 的模型,它是由 OpenAI 开发的,可以同时理解图像和文本。下面,我会一步一步地解释代码,并告诉你如何更好地理解和记忆这些代码,而不是死记硬背。


1. 安装必要的库

首先,我们需要安装一些Python库。如果你还没有安装,可以在命令行中运行以下命令:

pip install transformers pillow
  • transformers:这是 Hugging Face 提供的一个库,里面有很多预训练的模型,包括我们今天要用的 CLIP。
  • pillow:这是 Python 的一个图像处理库,用来加载和显示图片。

2. 加载模型和处理器

接下来,我们需要加载 CLIP 模型和它的处理器。代码如下:

from transformers import CLIPModel, AutoProcessor# 加载CLIP模型
model = CLIPModel.from_pretrained("openai/clip-vit-large-patch14")# 加载CLIP处理器
processor = AutoProcessor.from_pretrained("openai/clip-vit-large-patch14")

解释

  • CLIPModel.from_pretrained("openai/clip-vit-large-patch14"):从 Hugging Face 加载预训练的 CLIP 模型。
  • AutoProcessor.from_pretrained("openai/clip-vit-large-patch14"):加载与模型对应的处理器,用来处理输入数据。

小提示:这里的 "openai/clip-vit-large-patch14" 是模型的名称,你可以把它想象成一个“工具箱”,里面装满了处理图像和文本的工具。


3. 加载图片

我们需要一张图片来测试模型。假设我们有一张名为 kittens.jpeg 的图片,代码如下:

from PIL import Image# 加载图片
image = Image.open("./kittens.jpeg")# 显示图片(在Jupyter Notebook中有效)
image

解释

  • Image.open("./kittens.jpeg"):打开当前目录下的图片文件。
  • image:显示图片(如果你在 Jupyter Notebook 中运行这段代码,图片会直接显示出来)。

4. 定义标签

接下来,我们需要定义一些标签,告诉模型我们想让它对图片进行分类。比如:

labels = ["a photo of a cat", "a photo of a dog"]

解释

  • labels 是一个列表,里面包含两个标签:"a photo of a cat""a photo of a dog"。模型会根据这些标签来判断图片中是猫还是狗。

5. 处理输入数据

现在,我们需要将图片和标签转换成模型可以理解的格式。代码如下:

inputs = processor(text=labels, images=image, return_tensors="pt", padding=True)

解释

  • processor(text=labels, images=image, return_tensors="pt", padding=True):使用处理器将文本标签和图片转换成模型可以接受的输入格式。
    • text=labels:传入标签。
    • images=image:传入图片。
    • return_tensors="pt":返回 PyTorch 张量(一种数据格式)。
    • padding=True:对输入进行填充,确保所有输入的长度一致。

小提示:这段代码的作用就像是一个“翻译官”,把人类能理解的图片和文字翻译成计算机能理解的数据。


6. 运行模型并获取输出

接下来,我们将处理后的输入数据传递给模型,并获取输出:

outputs = model(**inputs)

解释

  • model(**inputs):将输入数据传递给模型,并获取输出。这里的 **inputs 表示将 inputs 中的所有内容传递给模型。

7. 解析模型输出

模型会返回一些原始的输出数据,我们需要对这些数据进行处理,得到我们想要的结果:

# 获取模型输出的原始分数
logits_per_image = outputs.logits_per_image# 将原始分数转换为概率
probs = logits_per_image.softmax(dim=1)[0]

解释

  • outputs.logits_per_image:获取模型对每个标签的原始预测分数。
  • logits_per_image.softmax(dim=1)[0]:对原始分数进行 softmax 操作,将其转换为概率分布。

小提示softmax 的作用是将原始分数转换为概率,所有概率加起来等于 1。


8. 打印结果

最后,我们可以打印每个标签及其对应的概率:

probs = list(probs)
for i in range(len(labels)):print(f"label: {labels[i]} - probability of {probs[i].item():.4f}")

解释

  • probs = list(probs):将概率张量转换为列表。
  • for i in range(len(labels)):遍历所有标签。
  • print(f"label: {labels[i]} - probability of {probs[i].item():.4f}"):打印每个标签及其对应的概率,保留四位小数。

9. 总结

通过以上步骤,我们成功地用 CLIP 模型对图片进行了分类!以下是完整的代码:

from transformers import CLIPModel, AutoProcessor
from PIL import Image# 加载模型和处理器
model = CLIPModel.from_pretrained("openai/clip-vit-large-patch14")
processor = AutoProcessor.from_pretrained("openai/clip-vit-large-patch14")# 加载图片
image = Image.open("./kittens.jpeg")# 定义标签
labels = ["a photo of a cat", "a photo of a dog"]# 处理输入数据
inputs = processor(text=labels, images=image, return_tensors="pt", padding=True)# 运行模型并获取输出
outputs = model(**inputs)# 解析模型输出
probs = outputs.logits_per_image.softmax(dim=1)[0]# 打印结果
probs = list(probs)
for i in range(len(labels)):print(f"label: {labels[i]} - probability of {probs[i].item():.4f}")

10. 代码是固定写法吗?需要死记硬背吗?

不需要死记硬背! 代码的每一部分都有其特定的作用,理解了这些作用后,你就能轻松记住它们。比如:

  • processor(text=labels, images=image, return_tensors="pt", padding=True):这是将图片和标签转换成模型输入的标准方法。
  • model(**inputs):这是将输入数据传递给模型的通用写法。
  • outputs.logits_per_image.softmax(dim=1)[0]:这是将模型输出转换为概率的标准操作。

你可以把这些代码看作是“工具箱”里的工具,每个工具都有其特定的用途。当你理解了它们的用途后,自然就能记住它们了。


11. 动手试试!

现在,你已经掌握了零样本图像分类的基本方法,可以尝试用自己的图片和标签来测试模型了!比如,你可以用一张狗狗的图片,或者一张风景图,看看模型会给出什么样的结果。

如果你有任何问题,欢迎在评论区留言,我会尽力帮助你!


希望这篇文章对你有帮助!如果你觉得有趣,别忘了点赞和分享哦!😊

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com