Python入门实战:使用ViT模型构建第一个图像分类应用
Python入门实战使用ViT模型构建第一个图像分类应用你是不是也对AI图像识别感到好奇看到别人用代码让电脑“看懂”图片自己也想试试但总觉得那些模型、算法听起来太复杂不知道从何下手别担心今天我们就来一起动手用Python和ViT模型从零开始搭建一个能识别日常物品的图像分类应用。整个过程就像搭积木一样简单你不需要深厚的数学背景只要会一点基础的Python语法跟着步骤走一小时内就能看到你的第一个AI应用跑起来。我们会用一个已经训练好的、能识别1300多种常见物品的模型比如猫狗、杯子、键盘这些。你只需要准备一张图片写几行代码就能让模型告诉你图片里有什么。听起来是不是挺酷的让我们开始吧。1. 准备工作搭建你的Python环境在开始写代码之前我们需要先把“工作台”准备好。这里我推荐使用Anaconda来管理Python环境它能帮你轻松处理不同项目所需的库避免版本冲突。1.1 安装Anaconda如果你还没安装Anaconda可以去它的官网下载安装包。选择对应你操作系统的版本Windows、macOS或Linux然后像安装普通软件一样安装它。安装过程中记得勾选“Add Anaconda to my PATH environment variable”这个选项这样后面在命令行里使用会更方便。安装完成后打开你的终端Windows上是Anaconda Prompt或CMDmacOS/Linux上是Terminal输入以下命令检查是否安装成功conda --version如果能看到版本号比如conda 24.x.x那就说明安装好了。1.2 创建专属的Python环境接下来我们为这个图像分类项目创建一个独立的环境。这样做的好处是这个环境里安装的所有库都不会影响你电脑上其他的Python项目。在终端里运行下面的命令conda create -n vit-image-classification python3.9这个命令创建了一个名叫vit-image-classification的新环境并且指定使用Python 3.9版本。系统会提示你确认安装一些基础包输入y然后回车。环境创建好后激活它conda activate vit-image-classification激活后你会发现命令行提示符前面多了(vit-image-classification)的字样这说明你已经进入这个专属环境了。1.3 安装必要的Python库我们的项目主要依赖两个库modelscope和Pillow。modelscope是阿里云开源的模型社区框架我们可以直接通过它来使用别人训练好的ViT模型省去了自己训练的巨大工作量。Pillow则是Python里处理图片最常用的库。在激活的环境下运行以下命令来安装pip install modelscope pillow安装过程可能需要一两分钟取决于你的网速。安装完成后准备工作就全部就绪了。2. 理解核心ViT模型是什么在写代码之前我们花两分钟简单了解一下ViT模型到底是怎么“看”图片的。放心我们不用深究复杂的数学公式就用一个比喻来理解。你可以把一张图片想象成一张拼图。传统的卷积神经网络CNN看这张拼图的方式是拿着一个小放大镜从左到右、从上到下一块一块区域地仔细看然后综合所有局部信息来猜整张图是什么。而ViTVision Transformer的做法不太一样。它上来就把整张拼图拆成一个个固定大小的小方块在模型里叫“patch”比如16x16像素一块。然后它把这些打乱顺序的小方块排成一队就像一列士兵。关键的一步来了ViT会给每个小方块发一个“编号牌”这个牌子上写着“我是从左数第几个从上数第几个”。这个就是“位置编码”。因为如果不告诉模型方块原来的位置它可能就拼不回原来的图片了。接着ViT模型的核心——Transformer这个技术最初是用来处理人类语言的就开始工作了。它让队列里的每一个小方块都和所有其他小方块“交流信息”通过这种全局的沟通模型最终就能理解整张图片的内容了。最后ViT借鉴了BERT模型的一个巧思在方块队列的最前面加了一个特殊的“班长”方块。这个“班长”不包含具体的图像内容它的任务就是在大家交流的过程中吸收全局信息然后由它来代表整张图片输出最终的分类结果。我们今天要用的模型就是用海量中文互联网图片超过140万张训练出来的已经学会了识别1300多种日常物品我们直接拿来用就行。3. 动手实践三步完成图像分类理论说完了现在进入最有趣的实操环节。整个过程只需要三步准备图片、加载模型、运行识别。3.1 第一步准备一张测试图片首先你需要找一张想要识别的图片。可以是你的水杯、你的键盘、窗外的树或者你家宠物的照片。把它保存到你的项目文件夹里比如命名为test_image.jpg。如果你一时找不到合适的图片也可以用代码从网上下载一张示例图片。我们在项目文件夹里创建一个Python脚本叫first_vit_classification.py然后开始写代码。我们先写一段代码来自动下载一张示例图片一只鸟# first_vit_classification.py import requests from PIL import Image import io # 网络图片的URL一只鸟的图片 img_url https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/bird.JPEG # 下载图片 print(正在下载示例图片...) response requests.get(img_url) img_data response.content # 用Pillow打开图片并保存到本地 image Image.open(io.BytesIO(img_data)) image.save(test_image.jpg) print(f图片已保存为 test_image.jpg 尺寸: {image.size}) # 可以显示一下图片看看可选 # image.show()运行这段代码前需要先安装requests库pip install requests。运行后你就会在文件夹里看到test_image.jpg了。3.2 第二步加载ViT模型并识别图片这是最核心的一步但代码却出奇地简单这要归功于modelscope框架把复杂的模型封装成了简单的管道pipeline。我们在刚才的脚本里继续添加代码# 接上面的代码 from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks print(\n正在加载ViT图像分类模型...) # 关键代码创建一个图像分类的管道指定使用日常物品模型 image_classification pipeline(Tasks.image_classification, modeldamo/cv_vit-base_image-classification_Dailylife-labels) print(模型加载成功开始识别图片...) # 对图片进行分类 result image_classification(test_image.jpg) print(\n识别结果) print(result)让我解释一下这几行代码from modelscope.pipelines import pipeline导入pipeline函数它是调用模型的万能接口。Tasks.image_classification告诉pipeline我们要执行的任务是“图像分类”。modeldamo/cv_vit-base_image-classification_Dailylife-labels这是模型在ModelScope社区的唯一ID指向那个能识别1300类日常物品的ViT模型。框架会自动从网上下载模型文件。image_classification(test_image.jpg)把图片路径传给管道模型就开始工作了。3.3 第三步运行并查看结果现在在终端里确保你在项目目录下并且激活了之前的环境然后运行脚本python first_vit_classification.py你会先看到下载图片和加载模型的提示。模型第一次加载时会下载参数文件可能需要几十秒到一分钟取决于你的网速请耐心等待。下载完成后模型就会对图片进行分析。运行完成后你会在终端里看到类似这样的输出识别结果 {labels: [鸟, 鹦鹉, 鸽子, 麻雀, 鹰], scores: [0.854, 0.123, 0.011, 0.005, 0.002]}这个结果非常直观labels模型认为图片最可能是什么列出了前5个候选类别按可能性从高到低排序。scores对应每个类别的置信度分数可以理解为模型有多大的把握。分数越接近1把握越大。在这个例子里模型有85.4%的把握认为这是一只“鸟”并且进一步猜测可能是鹦鹉、鸽子等。这说明模型不仅识别出了大类别还能进行更细致的区分。4. 玩转模型更多实用技巧成功运行了第一个例子后你可以尝试更多玩法让这个应用变得更实用。4.1 识别本地任意图片你不需要总是用网络图片。把你想识别的任何图片比如my_cat.png放到项目文件夹然后只需要修改一行代码# 将识别对象换成你自己的图片 result image_classification(my_cat.png)4.2 处理识别结果输出更友好的信息原始的字典结果可能不够美观。我们可以写个小函数来美化输出def print_pretty_result(result_dict): labels result_dict[labels] scores result_dict[scores] print(*40) print(图像分类结果报告) print(*40) for i, (label, score) in enumerate(zip(labels, scores), 1): # 将置信度转换为百分比 confidence score * 100 print(fTOP {i}: {label:10} | 置信度: {confidence:5.1f}%) print(*40) # 给出最可能的结论 top_label, top_score labels[0], scores[0] if top_score 0.5: print(f\n模型非常确定图片中的物体是【{top_label}】) else: print(f\n模型猜测图片中的物体可能是【{top_label}】但把握不是特别大。) # 使用函数 print_pretty_result(result)这样输出看起来就清楚多了。4.3 试试模型的边界它可能认错什么了解一个模型的能力边界和它的能力一样重要。你可以故意找一些有挑战性的图片试试看非常规角度倒置的椅子、只露出一部分的物体。复杂背景草丛里的钥匙、杂乱书桌上的水杯。抽象或艺术图片卡通画、简笔画。通过观察模型在这些情况下的表现你能更深刻地理解当前AI视觉的强项和弱点。比如它可能对写实照片识别很准但对简笔画就无能为力了。这非常正常也是AI有趣的地方。5. 常见问题与解决思路第一次尝试你可能会遇到一些小麻烦这里有几个常见问题的解决办法问题运行时报错提示连接不上或下载失败。解决这通常是网络问题。可以尝试检查你的网络连接。如果使用某些网络环境可能需要配置代理请务必遵守当地法律法规和使用条款。更简单的方法是多试几次或者换个时间再运行。问题提示缺少某个模块ModuleNotFoundError。解决这说明有库没安装全。除了modelscope和pillow确保requests也安装了。最稳妥的办法是在项目文件夹里创建一个requirements.txt文件内容如下modelscope pillow requests然后在终端运行pip install -r requirements.txt一次性安装所有依赖。问题模型预测的结果完全不对。解决首先确认你的图片是否属于那1300类日常物品日用品、动物、植物、家具、设备、食物等。如果图片内容太偏门比如某种罕见的昆虫模型不认识是正常的。其次检查图片是否清晰主体是否明确。模糊或过于复杂的图片会影响识别。6. 总结与下一步恭喜你到这里你已经成功完成了你的第一个图像分类AI应用。回顾一下我们做了什么搭建了独立的Python环境用寥寥数行代码就调用了一个强大的、能识别上千种物品的ViT模型并且看到了它如何“思考”和输出结果。整个过程最让人兴奋的点在于作为初学者你无需触碰训练模型这个庞大而复杂的工程直接站在了巨人的肩膀上使用了现成的、成熟的技术来解决实际问题。这种“即插即用”的能力正是当前AI开发越来越普及的关键。用下来感觉这个模型的易用性确实很好对于日常物品的识别准确率也令人满意作为入门项目再合适不过。如果你意犹未尽接下来可以尝试这些方向用这个模型给你手机相册里的照片自动打标签写一个循环批量识别一个文件夹里的所有图片或者去ModelScope社区探索其他更有趣的模型比如能生成图片的、能对话的你会发现一个更广阔的AI世界。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。