使用Streamlight演示你的模型-600学习网
600学习网终身会员188,所有资源无秘无压缩-购买会员
任务
假设您需要展示您在开发计算机视觉模型方面所取得的进展。您正在使用的模型尚未就绪,因此将其部署到适当的开发或生产环境可能需要时间和大量工作。
另一方面,开发与模型交互的特定web界面可能是一项繁琐的任务,需要数据科学家不常见的技能。
流线型照明
Streamlit是一个开源的Python库,可以轻松创建和共享用于机器学习和数据科学的web应用程序。它在向团队展示项目进度.获得并与经理分享见解,甚至获得客户反馈方面非常有用。
它不能取代需要监视.日志记录和其他功能的生产部署。然而,它允许您在几个小时内创建”有用的东西”,而无需事先了解任何web开发知识,甚至无需知道如何使用烧瓶或Django作为后端。
让我们看看它是如何工作的。
安装
要安装Streamlight,请运行:
pip安装streamlit
如果你使用诗歌,运行:
诗歌加流线
要验证所有功能是否正常,可以运行此行并查看一些解释和演示:
streamlit你好
您的第一个应用程序-上传图片让我们从从本地存储加载图像并显示它们开始:
将streamlit导入为st
def加载_图像():
uploaded_file=st.file_uploader(标签=”选择要测试的图像”)
如果上传的_文件不是无:
image_data=上传的_file.getvalue()
st.image(图像数据)
定义main():
st.title(“图像上传演示”)
加载_图像()
如果__name__==’__main__’:
main()
要运行应用程序,只需键入:streamlint run image_upload.py
然后它将在浏览器中打开应用程序。应该是这样的:
你可以浏览你的电脑并上传你喜欢的任何图片。我选择上传一些可爱企鹅的照片。
部署预训练模型时,了解预训练模型如何工作以获得良好的基线非常有用。现在,您将在Streamlight应用程序中部署其中一个模型,在本例中为ResNet18。要使用PyTorch实现这一点,您需要加载模型并下载ImageNet标记:
def load_model():
型号=火炬轮毂负载(‘pytorch/vision:v0.10.0’,’resnet18’,预处理=True)
模型评估()
收益模型
def load_labels():
labels_path=’https://raw.githubusercontent.com/pytorch/hub/master/imagenet_classes.txt’
标签_文件=os.path.basename(标签_路径)
如果不存在os.path.exis(labels_file):
wget.download(标签_路径)
打开(labels_file,”r”)为f:
categories=[s.strip()用于f.readlines()中的s]
退货类别
为了在imageload_image函数上运行模型,您应该修改以前使用的函数以返回图像。您需要将image_data转换为PIL图像对象,以便将其输入到模型中:
def加载_图像():
uploaded_file=st.file_uploader(标签=”选择要测试的图像”)
如果上传的_文件不是无:
image_data=上传的_file.getvalue()
st.image(图像数据)
return Image.open(io.BytesIO(图像_数据))
否则:
return无
以下代码是PyTorch ResNet教程的修改版本。它运行模型预测并显示前五类图像:
定义预测(模型.类别.图像):
预处理=变换。合成(〔
调整大小(256)
CenterCrop(224)
transforms.ToTensor()
变换。归一化(平均值=〔0.485,0.456,0.406〕,标准值=〔0.229,0.224,0.225〕)
])
输入_张量=预处理(图像)
input _ batch=input _ tensor.unqueze(0)
带火炬。无_级():
输出=型号(输入_批次)
概率=torch.nn.functional.softmax(输出[0],dim=0)
top5_prob,top5_catid=torch.topk(概率,5)
对于范围内的i(top5_概率大小(0)):
st.write(类别〔top5〕catid〔i〕〕,top5〕prob〔i〕.item())
当然,您还需要相应地修改main函数:
定义main():
st.title(“预训练模型演示”)
模型=载荷_模型()
类别=载荷_标签()
image=load_image()
结果=st.button(“在图像上运行”)
如果结果:
st.write(“计算结果…”)
预测(模型.类别.图像)
首先要改变的是标题。然后将加载模型.标记和图像。您还应该添加一个按钮来触发模型推断。
这就是应用程序的运行方式:
该模型将这些图像分类为”企鹅”,概率为1.0。其他四类的可能姓很小。这个例子的完整代码在Github中。
部署自定义图像分类模型
现在可以部署自定义模型了。您将使用PyTorch模型,该模型根据企鹅类型对图像进行分类。创建使用自定义模型的web应用程序的过程与使用预先训练的模型的过程非常相似,只是做了一些修改。代码可以在此处找到。
关于模型
通常,预先训练的模型不足以满足我们的需求,因为手头的任务更具体,而且这些模型无法涵盖。例如,ImageNet有一个”国王企鹅”类,但实际上有更多的企鹅类型。因此,为了根据企鹅的类型对图像进行分类,我必须训练自己的模型。我用这个笔记本训练。
如果你想了解更多关于这个模型是如何构建的,你可以在上一篇文章中阅读。
获取模型
为模型相关文件创建目录:
mkdir自定义_模型
要直接下载模型文件,可以使用此链接。将其复制到新目录。
将此常量定义添加到代码中:
模型_路径=’自定义_模型/模型.pt’
创建标签文件
创建一个包含分类类名的文本文件,每个类一行。确保课程顺序与培训期间使用的顺序一致。
例如,要查找企鹅数据集的顺序,您可以在培训笔记本中找到以下几行,并在它们后面添加打印:
class_name=image_dataset〔’train’〕class
打印(班级名称)
这将为您提供以下输出:
[Adelie企鹅.下巴企鹅.帝企鹅.Gentoo企鹅]
因此,您应该将以下类名复制到名为model_class的文件中。txt并将其放置在custom_model目录中:
阿德莉·企鹅
下巴企鹅
帝企鹅
巴布亚企鹅
将新标签文件作为常量添加到代码中:
标签_路径=’自定义_模型/模型_类.txt
加载模型和标签
模型和标签加载变得更容易:
def-load_模型(模型_路径):
型号=火炬负载(型号_路径,地图_位置=”cpu”)
模型评估()
收益模型
def加载_标签(标签_文件):
打开(labels_file,”r”)为f:
categories=[s.strip()用于f.readlines()中的s]
退货类别
对的
与具有许多标签的ResNet18不同,此自定义模型只有四个标签。因此,您应该修改预测代码以输出所有现有类的概率:
概率=torch.nn.functional.softmax(输出[0],dim=0)
所有_ prob,所有_ catid=torch.topk(概率,len(类别))
对于范围内的i(所有_概率大小(0)):
st.write(类别〔all〕catid〔i〕〕,all〕prob〔i〕.item())
在主函数中更改应用程序的标题,并传递模型和标签的本地路径:
定义main():
st.title(“自定义模型演示”)
模型=载荷_模型(模型_路径)
类别=负载_标签(标签_路径)
image=load_image()
结果=st.button(“在图像上运行”)
如果结果:
st.write(“计算结果…”)
预测(模型.类别.图像)
最后,应用程序应该如下所示:
为了测试这个应用程序,我上传了一张Gentoo企鹅的照片。该模型将图像分类为Gentoo企鹅图像,概率为0.91。其他企鹅的概率要低得多。除了确认应用程序运行良好之外,我还得到了模型正确姓的另一个证明。很好,对吧?
结论
开发一个运行良好的计算机视觉模型需要花费大量时间和精力。在此过程中,您可能需要部署模型,并向经理.团队成员和客户演示其功能。
Streamlight是一个功能强大且易于使用的工具,即使您没有适当的内部工具或前端知识,也可以实现这一点。
我举例说明了Streamlight在图像分类中的潜在用途。但是,它可以用于其他类型的计算机视觉任务,以及可视化.数据分析等。我鼓励您浏览Streamlight网站上的示例,并亲自尝试该工具,看看它如何融入您的日常工作。
600学习网 » 使用Streamlight演示你的模型-600学习网