InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

掌握这个开源工具,更快速地构建计算机视觉模型

  • 2021-07-06
  • 本文字数:3773 字

    阅读完需:约 12 分钟

掌握这个开源工具,更快速地构建计算机视觉模型

本文最初发表于 Towards Data Science 博客,经原作者 Eric Hofesmann 授权,InfoQ 中文站翻译并分享。


最近几年,开源工具在满足端到端平台的许多需求方面取得了很大进步。从模型架构开发到数据集管护(Dataset curation),再到模型训练和部署,它们都可以扮演一个不可思议的角色。有了充分的挖掘,你就能发现一个开源的工具,可以支持大量的数据和模型生命周期。工具间的紧密集成是实现近乎无缝工作流的最好方法。本文将对PyTorch Lightning Flash与数据集可视化和模型分析工具FiftyOne之间的集成进行了深入研究。


Lightning Flash 是一个在 PyTorch Lighting 基础上构建的新框架,它提供了快速原型、基线、微调和深度学习解决业务和科学问题的任务集合。尽管 Flash 很容易上手,但是不管你有多少深度学习经验,你都可以通过 Lightning 和 PyTorch 修改已有的任务来寻找适合你的抽象层次。为更快地推进,Flash 的代码是可扩展的,内建支持任何硬件的分布式训练和推理。


Flash 可以让你的第一个模型变得非常简单,但是要继续改进,你需要知道你的模型的性能和改进方法。FiftyOne 是一个开源工具,由 Voxel51 开发,用来建立高质量数据集和计算机视觉模型。它提供了优化数据集分析管道的构件,允许你亲自操作数据,包括可视化复杂的标签、评估模型、探索感兴趣的场景、确定失败模式、查找注释错误、管护训练数据集等。


有了 Flash+ FiftyOne,你就可以加载资料集,训练模型,然后分析下列所有计算机视觉任务的结果:


概述

Flash 和 FiftyOne 之间的紧密集成允许你执行端到端的工作流,加载数据集,训练它的模型,以及可视化 / 分析它的预测,所有这些都只需要几个简单的代码块。

将 FiftyOne 数据集加载到 Flash

尽管使用 FiftyOne 开发数据集一直都很容易,但是与 PyTorch Lightning Flash 集成后,你就可以将这些数据加载到 Flash 中,直接完成训练任务。


from flash.image import ImageClassificationDataimport fiftyone as fotrain_dataset = fo.Dataset.from_dir("/path/to/train",fo.types.ImageClassificationDirectoryTree,label_field="ground_truth",)val_dataset = fo.Dataset.from_dir("/path/to/val",fo.types.ImageClassificationDirectoryTree,label_field="ground_truth",)datamodule = ImageClassificationData.from_fiftyone(train_dataset=train_dataset,val_dataset=val_dataset,label_field="ground_truth",)
复制代码

训练 Flash 任务

Flash 提供了你需要的工具,你可以用尽可能少的代码抓取任务的模型,然后从数据上进行微调,最重要的是,不需要成为该领域的专家。


import flashfrom flash.core.data.utils import download_datafrom flash.image import ImageClassificationData, ImageClassifier# 1. Download the datadownload_data("https://pl-flash-data.s3.amazonaws.com/hymenoptera_data.zip", 'data/')# 2. Load the datadatamodule = ImageClassificationData.from_folders(train_folder="data/hymenoptera_data/train/",val_folder="data/hymenoptera_data/val/",test_folder="data/hymenoptera_data/test/",)# 3. Build the modelmodel = ImageClassifier(num_classes=datamodule.num_classes, backbone="resnet18")# 4. Create the trainer. Run once on datatrainer = flash.Trainer(max_epochs=1)# 5. Finetune the modeltrainer.finetune(model, datamodule=datamodule, strategy="freeze")# 6. Save it!trainer.save_checkpoint("image_classification_model.pt")
复制代码



使用 FiftyOne 可视化 Flash 预测


随着现代数据集的复杂性和规模的增加,图像和视频数据的可视化一直是一个挑战。FiftyOne 的设计目的是提供对数据集和标签的用户友好的视图 (包括注释和模型预测),现在 Flash 模型可以通过一行额外的代码访问这些数据集和标签。


from flash import Trainerfrom flash.core.classification import FiftyOneLabelsfrom flash.core.integrations.fiftyone import visualizefrom flash.video import VideoClassificationData, VideoClassifierclassifier = VideoClassifier.load_from_checkpoint(...)# Option 1: Generate predictions using a Trainer and datamoduledatamodule = VideoClassificationData.from_folders(predict_folder="/path/to/folder",...)trainer = Trainer()classifier.serializer = FiftyOneLabels(return_filepath=True)predictions = trainer.predict(classifier, datamodule=datamodule)session = visualize(predictions) # Launch FiftyOne# Option 2: Generate predictions from model using filepathsfilepaths = ["list", "of", "filepaths"]predictions = classifier.predict(filepaths)classifier.serializer = FiftyOneLabels()session = visualize(predictions, filepaths=filepaths) # Launch FiftyOne
复制代码



用 FiftyOne 进行可视化 Flash 视频分类预测。

示例工作流

安装

要跟上本文的示例,你需要安装相关的软件包。首先,你需要安装 PyTorch Lightning Flash 和 FiftyOne:


pip install fiftyone lightning-flash
复制代码


对于嵌入可视化工作流,你还需要安装降维软件包 umap-learn:


pip install umap-learn
复制代码

通用工作流

使用这些工具的大多数模型开发工作流遵循相同的通用结构:


图像目标检测

本节展示了使用 PyTorch Lightning Flash 和 FiftyOne 之间的这种集成,以训练和评估一个图像目标检测模型的具体示例。


from itertools import chainimport fiftyone as foimport fiftyone.zoo as fozfrom flash import Trainerfrom flash.image import ObjectDetectionData, ObjectDetectorfrom flash.image.detection.serialization import FiftyOneDetectionLabels# 1. Load your FiftyOne dataset# Here we use views into one dataset, but you can also create a# different dataset for each splitdataset = foz.load_zoo_dataset("quickstart", max_samples=40)train_dataset = dataset.shuffle(seed=51)[:20]test_dataset = dataset.shuffle(seed=51)[20:25]val_dataset = dataset.shuffle(seed=51)[25:30]predict_dataset = dataset.shuffle(seed=51)[30:40]# 2. Load the Datamoduledatamodule = ObjectDetectionData.from_fiftyone(train_dataset = train_dataset,test_dataset = test_dataset,val_dataset = val_dataset,predict_dataset = predict_dataset,label_field = "ground_truth",batch_size=4,num_workers=4,)# 3. Build the modelmodel = ObjectDetector(model="retinanet",num_classes=datamodule.num_classes,serializer=FiftyOneDetectionLabels(),)# 4. Create the trainertrainer = Trainer(max_epochs=1, limit_train_batches=1, limit_val_batches=1)# 5. Finetune the modeltrainer.finetune(model, datamodule=datamodule)# 6. Save it!trainer.save_checkpoint("object_detection_model.pt")# 7. Generate predictionsmodel = ObjectDetector.load_from_checkpoint("https://flash-weights.s3.amazonaws.com/object_detection_model.pt")model.serializer = FiftyOneDetectionLabels()predictions = trainer.predict(model, datamodule=datamodule)predictions = list(chain.from_iterable(predictions)) # flatten batches# 8. Add predictions to dataset and analyzepredict_dataset.set_values("flash_predictions", predictions)session = fo.launch_app(view=predict_dataset)
复制代码


在 FiftyOne 中可视化的 Flash 目标检测预测


在此之后,你可以将预测返回到数据集中,并且可以运行评估来生成混淆矩阵PR 曲线,以及准确率和 mAP 等指标。尤其是,你可以识别并查看个别的真 / 假正类 / 负类结果,让你了解你的模型在哪些方面表现良好,哪些方面表现不佳。基于常见失败模式改进模型是开发更好模型的更加可靠的方法。



FiftyOne 中的交互式混淆矩阵

嵌入式可视化


这个工作流的独特之处在于,它采用预训练模型,并使用它们来生成数据集中的每一张图片的嵌入向量。然后,你就可以在低维空间中计算这些嵌入的可视化,以查找数据集群。这一功能可以为硬样本挖掘、数据注释、注释样本推荐等提供有价值的发现。



有了交互图的概念,你可以点击或圈出这些嵌入的区域,并自动更新你的会话,查看和标记相应的示例

其他任务

你可以在这里查看其他任务的类似工作流,例如分类和分割

总结

开源社区多年来的发展令人瞩目,特别是在机器学习领域。尽管单独的工具可以很好地解决一个特定的问题,但是它们之间的紧密结合形成了一个强大的工作流。PyTorch Lightning Flash 与 FiftyOne 之间的新集成为开发数据集、训练模型和分析结果提供了一种新的简便方法。


作者介绍:


Eric Hofesmann,Voxel51 机器学习工程师,密歇根大学(University of Michigan)计算机科学硕士。


原文链接:


https://towardsdatascience.com/open-source-tools-for-fast-computer-vision-model-building-b39755aab490

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2021-07-06 11:271843
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 457.5 次阅读, 收获喜欢 1946 次。

关注

评论

发布
暂无评论
发现更多内容

企业要如何建立适合自己的PMF?

PingCode

ABAP Netweaver 和 ABAP Platform 这两个名词的辨析

Jerry Wang

SAP abap Netweaver 思爱普 9月月更

不止于《幻塔》,云底座护航完美世界迎接行业新时代

阿里云弹性计算

游戏 ECS

三个案例,带你体验SQL的神奇特性

华为云开发者联盟

数据库 后端 sql 企业号九月金秋榜

研发效能之环境管理

laofo

DevOps cicd 研发效能 持续集成 持续交付

复享光学承担的上海市2022年度科学仪器领域项目获批立项

硬科技星球

5分钟get一个技术点!揭秘一种加密框架的技术实现

Java-fenn

Java

一站式数字藏品收款系统开发解决方案

开源直播系统源码

NFT 元宇宙 数字藏品 数字藏品系统

Ansible如何使用Filter插件转换数据

山河已无恙

9月月更

政务服务平台建设的难点怎样解决

Geek_99967b

小程序 小程序容器

Nacos 和 Apollo中的 长轮询 定时机制,太好用了

Java快了!

Nacos 和 Apollo中的

亿铸科技聚焦国产存算一体AI大算力芯片,28纳米工艺实现10倍能效比

硬科技星球

Python基础(四) | 程序控制结构

timerring

Python. 9月月更

双“简”合璧:极简 Kubernetes 上使用极简服务网格

Flomesh

Service Mesh 服务网格

倒计时 1 天|洞察数字化转型新机遇,共论云上数据分析新观点

Kyligence

数据分析 指标管理

京东前端二面高频react面试题

Geek_07a724

前端 React

[Go WebSocket] 多房间的聊天室(五)用多个小锁代替大锁,提高效率

HullQin

Go golang 后端 websocket 9月月更

Java进阶(十八)Java实现定时器(Timer)

No Silver Bullet

Java 定时器 9月月更

【火热招募】一文看懂华为云IoT Edge边缘计算开发者大赛技术亮点

华为云开发者联盟

IoT 边缘计算 华为云 企业号九月金秋榜

架构的核心要素

源字节1号

软件开发 前端开发 软件架构 后端开发

基于 iframe 的微前端框架 —— 擎天

vivo互联网技术

前端框架 微前端 项目管理工具 iframe

Java虚拟机之垃圾收集算法

派大星

9月月更

活动回顾 | 基于英特尔技术的端到端音视频优化

网易云信

音视频技术

Java 8 的异步利器:CompletableFuture源码解析(建议精读)

Java快了!

java;

JavaScript 这几个“神(qi)奇(pa)“设计也是醉了......

掘金安东尼

JavaScript 前端 9月月更

【云原生】Kubernetes编排工具精讲

陈橘又青

云原生 9月月更

移动App开发的痛点怎样解决

Geek_99967b

小程序

2022前端二面react面试题

Geek_07a724

前端 React

基于lio-sam框架,教你如何进行回环检测及位姿计算

华为云开发者联盟

人工智能 企业号九月金秋榜

Qt|图片旋转缩放操作

中国好公民st

c++ qt 9月月更

数据脱敏前沿实践分享,筑造数据安全边界 | 极客星球

MobTech袤博科技

加密 数据安全

  • 扫码添加小助手
    领取最新资料包
掌握这个开源工具,更快速地构建计算机视觉模型_开源_Eric Hofesmann_InfoQ精选文章