计算机视觉项目的完整 MLOPS 周期

原文:towardsdatascience.com/complete-mlops-cycle-for-a-computer-vision-project-b2821d9c6fc3

深入了解 MLOPS 基础知识,以提高您设计、开发和部署面向现实世界、工业应用的计算机视觉项目的能力

这些天,我们遇到了(也许我们自己也在生产)许多计算机视觉项目,其中 AI 是新技术领域最热门的话题。微调预训练的图像分类、目标检测或其他任何计算机视觉项目并不是什么大问题。但正确创建和部署用于工业使用的 AI 项目的方式是什么呢?

MLOps(机器学习运营)是一套旨在自动化生产环境中机器学习模型开发、部署、监控和管理实践的流程、工具和框架。它弥合了研发环境之间的差距,并帮助我们提高这两个阶段。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7da5c336dd4e848fe2626888c2d84445.png

作者提供的图片

在这个完整的教程集中,我们将涵盖计算机视觉项目 MLOPS 周期的每个步骤。

以下是 AI 项目的完整 MLOPS 周期,以及我们将用来完成相关步骤的示例工具:

  1. 数据版本控制与管理(DVC)

  2. 实验跟踪(MLFlow)

  3. 模型优化(ONNX)

  4. 模型打包与部署(Docker)

  5. CI/CD for ML Pipelines(Git)

  6. 监控与反馈循环(Grafana)

在我们的教程中,我们将检查针对目标检测或图像分类模型的所有这些步骤(有时两者都会涉及)!

让我们直接从这里开始,探索什么是 DVC,为什么我们需要它,以及我们如何轻松地使用它!

数据版本控制与管理(DVC)

想象一下,你在一个工业项目中工作,你期望定期更新数据集版本,即添加新产品,你需要重新训练你的模型以跟上 AI 模型应检测的最新对象。

将数据集存储在单独的文件夹中,如 dataset_v1、dataset_v2、…dataset_vx,就像为我们的代码更新创建新文件夹并将它们命名为 project_v1、project_v2、…project_vx 一样糟糕。幸运的是,我们的代码跟踪和版本控制是通过 Git 完成的,Git 是开发者中非常常见的框架。DVC 来到我们的身边,就像 Git 一样,这次是为了跟踪我们的数据集并对它们进行版本控制,而无需每次更新数据集时都创建新文件夹!

因此,在本教程结束时,我们将学习如何将我们的数据集环境从非专业转换为以下图示中的适当环境:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/61c79f960ce2fb9db75eca0a494e1969.png

作者提供的图片

假设你已经在项目文件夹中初始化了 Git,你可以按照以下步骤操作;否则,首先初始化一个 Git 仓库,因为 DVC 与 Git 协作以跟踪你的数据集!

下载并初始化 DVC(Linux

如果你是一名 Linux 用户,请使用以下命令下载 DVC,如果不是,请从官方仓库中找到适合你的正确命令。

snap install dvc --classic

前往你的项目环境并初始化 DVC。我们假设你的项目结构如下:

project
  |__ data
  |__ cfg
  |__ models
  |__ weights
  ...
So basically you have a main project folder and everything arranged 
inside as subfolders, as well as the data folder
cd project
dvc init

开始版本化

将你的第一个版本数据集放入"data/"文件夹中。在我的情况下,它被称为 dataset_v2,因为我丢失了 dataset_v1,这是我只有本地的一个旧项目。

mv dataset_v2/* data/

将此更改添加到你的 DVC 跟踪历史中。

dvc add data

确保 Git 也不会跟踪你的数据,这完全是多余的,也是 Git 的糟糕使用方式,因为 Git 负责跟踪开发代码,而不是数据集!

.gitignore

data/*

将 DVC 日志添加到 Git 跟踪中,以及.gitignore,因为我们已经更新了它,并通过 git 提交这个更改。

git add data.dvc .gitignore
git commit -m "dataset version 2"

确定本地存储为 DVC 在不同版本之间存储数据的地方。我将其命名为"local_onedrive_remote",因为在接下来的步骤中,我们将学习如何在我们 OneDrive 云存储之间推送或拉取数据。

dvc remote add -d local_onedrive_remote ~/dvc_onedrive_remote

是时候将我们的第一个数据集推送到我们的本地存储了!

dvc push

在我们重复这些步骤直到将不同文件夹中存储的所有数据集版本化之前,我们将看看如何将这种版本化保存在云存储中。如果你想要任何备份,或者想要在云上与同事协作,这是一个重要的步骤。此外,你还可以从任何其他你需要本地数据集的机器上拉取包含所有可用版本的整个数据集。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3e87cb34a655bf8cea2673e6ff165eae.png

作者图片

Rclone:连接本地和远程存储的桥梁

Rclone 是一个帮助你在本地和远程路径之间推送和拉取数据的工具。它成为填补我们数据版本化管道空缺的桥梁。

将 Rclone 安装到你的本地机器上:

sudo apt update
sudo apt install rclone

为你的云存储创建一个新的 Rclone 配置,在我的情况下是我的个人 OneDrive,但你可以选择 Rclone 列出的任何类型的云存储:

rclone config

n创建一个新的配置,输入你想要给配置的名称,并选择类型。对我来说,是 21 引用 OneDrive 从提供的列表中。

如果一切正常,你应该能够在再次运行rclone config命令时看到你的新存储:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ee04b7f222d7ab1999b70487d5a23bb2.png

作者图片

此外,通过rclone ls onedrive:/命令进行双重检查将是一个好主意,以查看它是否开始列出你的远程存储中的所有内容,这样你就可以确保远程链接是正确的,并且已经很好地挂载在你称为"onedrive"(或任何你喜欢的个人云存储)的存储对象中。

推送到远程存储的最后一个命令:

rclone sync ~/dvc_onedrive_remote onedrive:/DVC_STORAGE

我们执行这一行操作基本上是将我们的本地存储(~/dvc_onedrive_remote)与远程存储(onedrive:/DVC_STORAGE)同步,其中onedrive是我配置时选择的 rclone 远程仓库的名称,而DVC_STORAGE是我创建在 Onedrive 中以存储我的数据的文件夹。

那就是设置我们的数据版本化环境的全部内容!

现在,我将应用相同的命令将我的数据集的新版本添加到我的版本历史中,并逐个删除所有分离的文件夹。

以下 bash 脚本在复制粘贴数据集文件夹的新版本(dataset_v3、dataset_v4 等)后非常有用,可以一次性完成所有附加步骤。

#!/bin/bash

# Step 1: Automatically determine the dataset version
# Count previous commits containing "dataset version"
previous_version=$(git log --oneline | grep -c "dataset version")

# Increment the dataset version
new_version=$((previous_version + 1))

# Step 2: Add the dataset to DVC
echo "Adding dataset to DVC..."
dvc add data

# Step 3: Stage the updated DVC metadata
echo "Staging DVC metadata..."
git add data.dvc

# Step 4: Commit with the new dataset version
commit_message="dataset version $new_version"
echo "Committing with message: $commit_message"
git commit -m "$commit_message"

# Step 5: Push to DVC remote
echo "Pushing dataset to DVC remote..."
dvc push

# Step 6: Sync with OneDrive via Rclone
echo "Syncing DVC cache with OneDrive..."
rclone sync ~/dvc_onedrive_remote onedrive:/DVC_STORAGE

echo "Dataset version $new_version successfully pushed and synced!"

现在一切都已经完成,我在 DVC 存储中有一个包含 7 个不同版本的数据集,而我的项目目录中只有最后一个版本,是时候看看我们如何在不同版本之间旅行,以防我们需要使用数据集的旧版本。

拉取数据集的旧版本

我项目文件夹中当前和最新的数据集看起来如下,在 classes.txt 中写了 56 个类别,1072 个训练图像和 256 个验证图像。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ebb855a0f04e6eba71dfa02a008d7da9.png

作者图片

检查你需要回退到特定版本的提交:

git log --oneline

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f1d576d691f7c619bd9f74117f32fbfe.png

作者图片

假设我需要我的数据集版本 5,我选择8f8de95作为我想要进入的提交,然后我从 DVC 存储库中拉取数据回到我的项目文件夹。

git checkout 8f8de95
dvc pull

现在我项目文件夹中的当前数据集看起来如下,在 classes.txt 中写了 39 个类别,662 个训练图像和 152 个验证图像。我可以看到,即使是 distribution.png 也被 DVC 跟踪并更新到了旧版本。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/637768096a2c27b2a38ece40f8466ccf.png

作者图片

回到最新的数据集版本

假设我们完成了对旧数据集的使用,并想要回到最新版本,两行我们就完成了!

git checkout master #or main according to your repo
dvc pull

从云端拉取数据到新机器

我们使用rclone sync ~/dvc_onedrive_remote onedrive:/DVC_STORAGE命令来同步我们的本地远程仓库与云端远程仓库。当我们需要相反方向(从远程到本地)时,它只是相同命令的反向!所以命令rclone sync onedrive:/DVC_STORAGE ~/dvc_onedrive_remote将同步远程存储与我们的本地存储,并且可以用于任何你想要拉取的新机器。

如果我们同一个项目中有多数据集怎么办?

在实际应用中,你可能会有一个以上与同一项目相关的子任务。例如,一个目标检测模型和一个图像分类模型可以并行或顺序工作,这需要用不同的数据集进行训练。这不过是将我们的项目文件夹整理好,并相应地设计我们的 DVC 系统:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7293a1cffb517a3819c08808eae29f56.png

作者图片

由于现在我们的主要工作空间包含多个子任务文件夹,如分类和检测,我们将 data.dvc 重命名为 _datadetection.dvc 并放置在我们主要文件夹的根目录下,同时创建一个新的名为 _dataclassification.dvc

由于我们进行了替换,因此我们也应该更新 .dvc 文件中写明的路径:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5cc6e776580fc7be906fe3cd77c06f5d.png

重复之前的步骤,我们为分类子任务配置 DVC:

dvc add classification/data 
git add data_classification.dvc
dvc remote add -d local_onedrive_remote_classification ~/dvc_onedrive_remote_classification
dvc push -r local_onedrive_remote_classification data_classification.dvc 
rclone config # create a new cloud storage for classification dataset
rclone sync ~/dvc_onedrive_remote_classification onedrive:/DVC_STORAGE_CLASSIFICATION

就这样!在整理工作空间并添加新的子任务到 DVC 系统后,如果需要,更新先前任务的 .dvc 文件或路径,其余的就没有什么不同了。你唯一需要注意的事情是运行正确的命令,以进行正确的数据集更新。例如,在我们的设置中:

  1. 如果分类数据集有更新:
dvc add classification/data 
git add data_classification.dvc
dvc push -r local_onedrive_remote_classification data_classification.dvc 
rclone sync ~/dvc_onedrive_remote_classification onedrive:/DVC_STORAGE_CLASSIFICATION
  1. 如果检测数据集有更新:
dvc add detection/data 
git add data_detection.dvc
dvc push -r local_onedrive_remote data_detection.dvc 
rclone sync ~/dvc_onedrive_remote onedrive:/DVC_STORAGE

我们已经完成了项目 MLOPS 循环的第一步,要了解设置数据版本化环境后的下一步,请继续阅读本教程的以下内容!

基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究”展开,提出了一种结合数据驱动方法与Koopman算子理论的递归神经网络(RNN)模型线性化方法,旨在提升纳米定位系统的预测控制精度与动态响应能力。研究通过构建数据驱动的线性化模型,克服了传统非线性系统建模复杂、计算开销大的问题,并在Matlab平台上实现了完整的算法仿真与验证,展示了该方法在高精度定位控制中的有效性与实用性。; 适合人群:具备一定自动化、控制理论或机器学习背景的科研人员与工程技术人员,尤其是从事精密定位、智能控制、非线性系统建模与预测控制相关领域的研究生与研究人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能预测控制;②为复杂非线性系统的数据驱动建模与线性化提供新思路;③结合深度学习与经典控制理论,推动智能控制算法的实际落地。; 阅读建议:建议读者结合Matlab代码实现部分,深入理解Koopman算子与RNN结合的建模范式,重点关注数据预处理、模型训练与控制系统集成等关键环节,并可通过替换实际系统数据进行迁移验证,以掌握该方法的核心思想与工程应用技巧。
基于粒子群算法优化Kmeans聚类的居民用电行为分析研究(Matlb代码实现)内容概要:本文围绕基于粒子群算法(PSO)优化Kmeans聚类的居民用电行为分析展开研究,提出了一种结合智能优化算法与传统聚类方法的技术路径。通过使用粒子群算法优化Kmeans聚类的初始聚类中心,有效克服了传统Kmeans算法易陷入局部最优、对初始值敏感的问题,提升了聚类的稳定性和准确性。研究利用Matlab实现了该算法,并应用于居民用电数据的行为模式识别与分类,有助于精细化电力需求管理、用户画像构建及个性化用电服务设计。文档还提及相关应用场景如负荷预测、电力系统优化等,并提供了配套代码资源。; 适合人群:具备一定Matlab编程基础,从事电力系统、智能优化算法、数据分析等相关领域的研究人员或工程技术人员,尤其适合研究生及科研人员。; 使用场景及目标:①用于居民用电行为的高效聚类分析,挖掘典型用电模式;②提升Kmeans聚类算法的性能,避免局部最优问题;③为电力公司开展需求响应、负荷预测和用户分群管理提供技术支持;④作为智能优化算法与机器学习结合应用的教学与科研案例。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,深入理解PSO优化Kmeans的核心机制,关注参数设置对聚类效果的影响,并尝试将其应用于其他相似的数据聚类问题中,以加深理解和拓展应用能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值