尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Gradio × Hugging Face:用一行代码构建 Vision Transformers(ViT)图像分类 Web 应用

Gradio × Hugging Face:用一行代码构建 Vision Transformers(ViT)图像分类 Web 应用 Gradio × Hugging Face用一行代码构建 Vision TransformersViT图像分类 Web 应用【免费下载链接】gradioBuild and share delightful machine learning apps, all in Python. Star to support our work!项目地址: https://gitcode.com/GitHub_Trending/gr/gradio本篇技术指南围绕 Gradio 与 Hugging Face 生态的深度集成讲解如何借助 Hugging Face Hub 上开箱即用的 Vision TransformersViT图像分类模型在不手写预处理/后处理管线、不定义输入输出组件的情况下用极少量 Python 代码搭建一个可交互、可分享的浏览器端图像分类演示。读完本文你将掌握gr.load()/gr.Interface.from_pipeline()两种一键装载模型的 API 用法、examples等界面参数的配置方式以及其底层自动推断组件 → 调用推理 → 渲染置信度结果的实现链路可直接复用到文本分类、目标检测等其它 Hub 模型任务上。背景图像分类、Vision Transformers 与 Gradio 的契合点图像分类是计算机视觉领域的核心任务——判断一张图片中存在什么对象其应用场景从人脸识别一直延伸到制造质量检测。当前最先进的图像分类模型大多基于transformers架构这类架构最早在自然语言处理任务中流行开来被迁移到视觉领域后通常被称为Vision TransformersViT。ViT 模型天然适合与 Gradio 的图像输入组件搭配使用用户在网页端上传一张图片Gradio 完成模型推理并把图片属于哪个类别 各类别置信度直观地展示出来。这正是本教程要构建的演示一个由 ViT 驱动的 Web 图像分类应用Hugging Face 上对应的官方示例 Space 为abidlabs/vision-transformer核心代码量只需一行 Python。前置条件在开始之前请确保已安装gradioPython 包。若从当前仓库源码安装可参照 Python 快速上手指南普通用户直接执行pip install gradio即可。如果希望走文末介绍的本地推理路径还需额外安装transformerspip install transformers。步骤 1 —— 从 Hugging Face Hub 选择 ViT 图像分类模型第一步需要选定一个图像分类模型。本教程使用 Hugging Face Model Hub 上托管的模型该 Hub 聚合了覆盖数十种机器学习任务、数以千计的预训练模型。具体挑选方式在 Model Hub 页面左侧边栏展开Tasks任务分类勾选Image Classification图像分类即可看到专为图像分类设计的全部模型。在本文撰写时其中最受欢迎的模型是google/vit-base-patch16-224——该 ViT 模型在 224×224 像素分辨率的 ImageNet 图像上完成训练因此适合接收约 224×224 的自然图像输入。以下演示均使用该模型。步骤 2 —— 用 Gradio 加载 Vision Transformer 模型当使用 Hugging Face Hub 上的模型时不需要为演示手动定义输入/输出组件也不需要关心图片的预处理resize、归一化等或预测结果的后处理细节——这些信息都可以从模型的标签task/pipeline 标签中自动推断。也就是说除导入语句外加载并启动整个演示只需一行 Python 代码。历史写法与当前仓库的 API 变化说明原始教程使用gr.Interface.load()并传入带huggingface/前缀的模型路径以指明模型来自 Hugging Face Hubimport gradio as gr gr.Interface.load( huggingface/google/vit-base-patch16-224, examples[alligator.jpg, laptop.jpg]).launch()需要特别指出在当前仓库中gr.Interface.load()这一类方法已经被移除。见 gradio/CHANGELOG.md 中 Gradio 4.0 迁移说明原文Similarly,Interface.load()has been removed并建议改用模块级函数gr.load()。因此若你的 Gradio 版本为 4.x 及以上应使用下面的现代等价写法在旧版本 3.x 上上面的历史代码仍然有效import gradio as gr demo gr.load( huggingface/google/vit-base-patch16-224, examples[alligator.jpg, laptop.jpg], ) demo.launch()这里添加的examples参数用于用若干预定义示例图片预填充界面方便访问者一键试玩该参数的详细语义可参考 Examples 专项指南。运行后浏览器会打开一个带图片上传/示例区 分类结果标签的界面输入图片后它会被自动预处理并发送到 Hugging Face Hub 推理 API经模型处理后以人类可读的类别 置信度预测结果返回。gr.load()的参数详解与其它等价写法模块级函数gr.load()定义在 gradio/external.py并在 gradio/init.py 中被导出为顶层 API。其完整签名为gr.load( name: str, src: Literal[models, spaces, huggingface] | Callable | None None, token: str | None None, accept_token: bool | gr.LoginButton False, provider: PROVIDER_T | None None, **kwargs, ) - Blocks各参数的核心作用以当前仓库实现为准name模型或 Space 仓库名例如google/vit-base-patch16-224。若省略src则name必须以{src}/{repo 名}形式书写代码中通过按/拆分并取首个片段来判定来源类型gradio/external.py因此huggingface/google/vit-base-patch16-224与models/google/vit-base-patch16-224等价。src可为models走 Hugging Face 推理 API 加载模型、spaces加载 Hugging Face Space 并复刻其界面或一个接受name、token并返回 Gradio 应用的可调用对象。当解析出的src不是spaces时统一走from_model的模型加载分支gradio/external.py。token访问模型/Space 使用的 Hugging Face Token。加载模型时若未显式传入会回退读取HF_TOKEN环境变量gradio/external.py访问私有 Space 或私有模型时必需。accept_token置为True时界面会先渲染一个 Token 输入框用户输入的 Token 将替换token参数实际生效。provider第三方推理服务商如replicate、sambanova、fal-ai等仅srcmodels时生效。**kwargs当src为models或spaces时其余关键字参数会被透传给gr.Interface/gr.ChatInterface构造函数这也是上面示例中examples能生效的原因。界面相关常用参数还包括title、description等。函数最终返回一个Blocks应用对象可以继续调用.launch()启动也可以按 Hugging Face 集成全景指南 的介绍在一个gr.Blocks()上下文中嵌入gr.load()加载的应用以组合更复杂的页面。底层原理自动推断组件与推理调用链一行代码的魔法背后是一条清晰的自动装配调用链理解它对排查问题、复用到其它任务都很有帮助。1. 从模型元信息推断任务类型gr.load()最终进入from_model()gradio/external.py。这里首先构造huggingface_hub.InferenceClient并携带{X-Wait-For-Model: true}请求头——该头指示服务端在模型首次被调用冷启动加载时等待而不是直接超时随后调用 gradio/external_utils.py 中的get_model_info()通过HfApi.model_info()读取模型卡片中的pipeline_tag与tags据此判定该模型究竟解决什么任务。2. 按 pipeline 标签自动组装输入/输出组件拿到任务标签后from_model内按分支为每种任务装配对应的组件、预处理与后处理函数。对本文的image-classification任务对应分支为gradio/external.pyinputs components.Image(typefilepath, labelInput Image) outputs components.Label(labelClassification) postprocess external_utils.postprocess_label examples [get_image(cheetah1.jpg)] fn client.image_classification也就是说Gradio 自动创建了Image输入组件标签 Input Image与Label输出组件标签 Classification连默认示例图片都从仓库内建的 gradio/media_assets/images/cheetah1.jpg 自动准备好。推理函数则直接绑定InferenceClient.image_classification。3. 结果后处理从原始分数到可读标签Hugging Face 推理 API 返回的是模型原始分类得分需要转换成界面可渲染的结构。后处理函数postprocess_label()位于 gradio/external_utils.py其实现非常简洁def postprocess_label(scores: list[ImageClassificationOutputElement]) - dict: return {c.label: c.score for c in scores}它把类别 → 置信度列表整理成{类别名: 分数}字典Label组件收到该字典后即在前端渲染出按置信度排序的类别条形结果。这也解释了用户体验到的完整链路上传/点击示例图片 → 预处理 → 发送到 Hub 推理 API → 模型推理 → 后处理成字典 →Label组件展示前若干候选类及其置信度。替代方案在本地加载 ViT 模型不依赖远程 APIgr.load(huggingface/...)的推理发生在 Hugging Face 云端需要网络且首次调用有冷启动等待。如果希望模型权重与推理都发生在本地Gradio 还提供第二个一键方案——gr.Interface.from_pipeline()。它从transformers的 pipeline 对象出发构造界面签名与示例可见 gradio/interface.pyimport gradio as gr from transformers import pipeline pipe pipeline(image-classification, modelgoogle/vit-base-patch16-224) gr.Interface.from_pipeline(pipe).launch()from_pipeline()的实现委托给 gradio/pipelines.py 中的load_from_pipeline()它根据 pipeline 的实际类型找到对应的组件配置与前后处理函数包一层fn作为Interface的推理函数并用pipeline.model.config.name_or_path自动填充界面标题transformers pipeline 场景见 gradio/pipelines.py。对ImageClassificationPipeline而言组件映射定义在 gradio/pipelines_utils.py{ inputs: components.Image(typefilepath, labelInput Image, renderFalse), outputs: components.Label(labelClassification, renderFalse), preprocess: lambda i: {images: i}, postprocess: lambda r: {i[label]: i[score] for i in r}, }可以看到这条本地路径与远程gr.load()路径保持了高度一致的设计输入统一用Image(typefilepath)输出统一用Label预处理把图片包装成 pipeline 需要的{images: ...}后处理把结果摊平成{label: score}字典。两条路径在组件层与数据形态上的一致性意味着云端一行加载与本地 pipeline 加载可以无痛互相切换选择哪条仅取决于你对网络依赖与硬件算力的考量。将演示分享给他人本地运行只是第一步。Gradio 应用可以通过launch()的shareTrue参数生成一个临时公网分享链接把应用直接发给协作者或客户demo.launch(shareTrue)关于分享链接的更多选项如自定义域名、生命周期管理等见 分享你的应用指南。小结从 ViT 分类到一行装载的通用范式回到本文起点我们以 ViT 图像分类为例只写了一行核心 Python 代码就在浏览器中拥有了一个完整的图像分类器 Web 演示。深入 gradio/external.py 与 gradio/external_utils.py 的源码可以看到这种一行代码的便利建立在 Hugging Face 模型标签驱动的自动装配机制之上pipeline_tag决定组件与推理绑定后处理函数决定结果展示形态。因此本文的整套思路并非 ViT 专属——把模型名换成 Hub 上任意支持image-classification、text-classification等标签的模型gr.load()都会自动适配对应组件你同样能在一行内完成不同任务的 Web 化封装。若想继续深挖本教程的英文原版位于 guides/11_other-tutorials/image-classification-with-vision-transformers.md其姊妹篇 Hugging Face 集成全景指南 则覆盖了从 Hub 模型、Inference Endpoint 到 Space 复刻的更多玩法。说明上述远程加载gr.load方案需要能访问 Hugging Face Hub且私有模型需配合 Token 使用本地方案from_pipeline会由transformers自行下载模型权重请确保环境具备相应网络与磁盘条件。若你的 Gradio 仍是 3.x请沿用原始教程的gr.Interface.load()写法4.x 及以上版本请统一改用本文的gr.load()。【免费下载链接】gradioBuild and share delightful machine learning apps, all in Python. Star to support our work!项目地址: https://gitcode.com/GitHub_Trending/gr/gradio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表