ResNet50模型是一个预先训练的卷积神经网络,它已经在ImageNet数据集上训练用于图像分类任务。该脚本使用飞桨加载预处理的ResNet50模型,并使用model.eval()将模型设置为评估模式。预测函数获取输入图像,使用变换函数对其进行预处理,使其通过预先训练的ResNet50模型以获得预测的logits,并将概率最高的标签作为包含标签名称及其相应概率的字典返回。该脚本使用Gradio.interface()函数创建一个Gradio接口,该函数将预测函数以及函数的输入和输出类型作为输入,并为图像分类器创建一个用户界面。该界面允许用户上传图像并查看图像的预测标签。
安装模块
conda install paddlepaddle==2.4.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
conda install gradio
代码
import paddle
from paddle.vision.transforms import Compose, Resize, Normalize
import gradio as gr
import paddle.vision.transforms as T
# 加载模型
model = paddle.vision.models.resnet50(pretrained=True)
model.eval()
# 定义图像预处理函数
# transform = Compose([Resize((224, 224)), Normalize(mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225])])
transform = T.ToTensor()
# 定义预测函数
def predict(image):
# 预处理图像
image = transform(image)
# 添加一维批次维度
image = paddle.unsqueeze(image, axis=0)
# 模型预测
logits = model(image)
# 取最大概率的标签
pred = paddle.argmax(logits).numpy()[0]
print(pred)
# 返回预测结果
return {'label': str(pred)}
# 创建Gradio界面
inputs = gr.inputs.Image()
outputs = gr.outputs.Label(num_top_classes=1)
interface = gr.Interface(fn=predict, inputs=inputs, outputs=outputs,
title='ResNet50 图像分类器',
description='使用PaddlePaddle的ResNet50模型对图像进行分类')
interface.launch()
界面
通过浏览器访问界面:http://127.0.0.1:7860
![](https://img-blog.csdnimg.cn/img_convert/998280c5649433ae2e4b311614ef788a.png)
效果
![](https://img-blog.csdnimg.cn/img_convert/6123af7e1d926dee9056cfb5dad48495.png)