实施主动学习

使用主动学习快速改进Roboflow上的模型。

Written by Mohamed Traore

Last published at: June 30th, 2022

“主动学习是一种机器学习训练策略,它使算法能够主动识别可以最有效地提高性能的训练数据子集。更简单地说——主动学习是一种策略,用于确定我们训练数据中的哪些特定示例可以最好地提高模型性能。它是人类在环机器学习策略的一个子集,通过充分利用我们的训练数据来改进我们的模型。” - 什么是主动学习?

主动学习的美妙之处在于它可以帮助您使用更少的图像创建更强大的模型。保持模型运行良好并对其进行改进所需的训练轮次将随着时间的推移而迅速减少。

有 3 种实现主动学习的关键方法:

1.不断随机收集新图像

您可以将随机抽样编码到您的部署解决方案中。

随机抽样将有助于将更多代表真实部署环境的图像带入您的项目。

好处:

  1. 该模型将快速了解在它所在的环境中检测什么,不检测什么。
  2. 更多包含感兴趣对象的图像(我们的模型被训练检测的对象) - 在标记和重新训练之后,我们的模型将在其部署环境中做得更好!

例子:

您正在运行推理(部署模型)6 小时。在这 6 小时的时间范围内,您以编程方式将您的设备(即NVIDIA Jetson或OAK设备)设置为每 15 分钟保存一定数量的图像(即“每 15 分钟保存 3 张图像”)。将收集的图像返回给Roboflow或将它们存储在您的设备/系统上,以便将来上传到Roboflow 。

  • 随着时间的推移,您会看到更少的错误检测。
    • 此外,无论置信度如何,您都将获得一些带有感兴趣对象的图像(您的模型被训练“看到”的内容)。
    • 这样做的好处是,您的模型将得到加强,以继续在感兴趣的对象上做得“好”,并改进它做得“坏”的地方(低置信度检测,或在应该有检测时没有检测到)一)无论检测到的置信水平如何。

2. 收集低于给定置信阈值的新图像

可以通过为检测选择置信度阈值并要求(在您自己的代码中) 对置信度阈值低于 ___% 或 0.___ 的任何对象检测(模型经过训练以识别)进行采样和发送来使用此方法返回您在Roboflow上的工作区进行进一步检查,即在托管 Web 应用程序或推理API 中进行测试以查找问题 + 标记,然后重新培训。

好处:

  1. 该模型将快速了解在它所在的环境中检测什么,不检测什么。
  2. 检测的置信度将很快开始增加,因为您实际上是在告诉您的模型(在标记和重新训练之后),“嘿,你在这里做得不好——这是你应该做的。”
  3. 更多包含感兴趣对象的图像(我们的模型被训练检测的对象) - 在标记和重新训练之后,我们的模型将在其部署环境中做得更好!

例子:

  • 从 40% 的置信度阈值开始 - 在置信度低于 40% 或 0.40 的情况下检测到的任何对象(或每 __ 次对象)都应以编程方式设置为返回到Roboflow或存储在您的设备上以供将来上传到Roboflow 。
    • Next : 在重新训练并从生产环境接收到更好的训练指标和/或更多数据后, 置信度阈值设置为 50%,并且在置信度水平低于 50% 或 0.50 时检测到的任何对象都应以编程方式设置为返回到Roboflow或存储在您的设备/系统上以供将来上传到Roboflow 。
    • 稍后:随着时间的推移,您将能够为置信水平设置更高的基准,例如 60%、75% 或 80%。您不想从这些级别开始进行置信度基准测试的原因是,您将收到大量错误检测,或者使用较新模型的低置信度检测。

3. 请求您的应用程序用户验证模型预测

好处:

  1. 用户反馈是一个很好的工具。你基本上得到了更多的眼睛来帮助你的模型的质量控制。
  2. 您还可以添加错误报告, repo模型根本不工作(即,系统或应用程序崩溃或模型运行但未检测到任何东西时发出警报)。

例子:

  • 在您的仪表板、移动应用程序或您选择创建计算机视觉产品的任何方式中添加“ repo报告”。使用这些repo报告来快速确定改进计算机视觉产品功能的方法,最重要的是,确保用户拥有一个不仅运行良好而且准备好快速改进的模型。
    • 从错误Roboflow repo将它们存储在您的系统中以供将来上传到Roboflow 。

实施主动学习的资源

示例代码

首先,安装Roboflow Python pip 包(PyPi)

# installing the Roboflow Python pip package
pip install roboflow
  1. 将下面的代码块复制/粘贴到 VSCode、XCode、PyCharm、Spyder(或其他代码编辑器)中
  2. 更新“rf”对象中模型 [名称]、模型版本、api_key 和 device_name 的值。
  3. 将python文件保存到一个目录 -请务必记下目录名和文件名,因为稍后我们将需要它们来进行部署
from roboflow import Roboflow
import json
# private api key found in Roboflow > YOURWORKSPACE > Roboflow API
# NOTE: this is your private key, not publishable key!
# https://docs.roboflow.com/rest-api#obtaining-your-api-key
private_api_key = "INSERT API KEY HERE"

# gain access to your workspace
rf = Roboflow(api_key=private_api_key)
workspace = rf.workspace()

# you can obtain your model path from your project URL, it is located
# after the name of the workspace within the URL - you can also find your
# model path on the Example Web App for any dataset version trained
# with Roboflow Train
# https://docs.roboflow.com/inference/hosted-api#obtaining-your-model-endpoint
model_path = "INSERT MODEL PATH HERE"
project = workspace.project(f"{model_path}")

# be sure to replace with a path to your file
# if you run this in Colab, be sure to upload the file to colab, hover over
# the file name, and select the 3 dots on the right of the file name to copy
# the file path, and paste it as the value for "imgpath"
img_path = "INSERT IMAGE PATH HERE"

# establish number of retries to use in case of upload failure
project.upload(f"{img_path}", num_retry_uploads=3)

Roboflow的上传 API

Upload API 可用于将图像上传到新项目

  • 示例项目 1 :当前部署的模型 |项目 2 :主动学习图像 - 随机收集的图像 |项目 3 :主动学习图像 - 低于 30% 置信度阈值的图像 |项目 4:主动学习图像 - 低于 50% 置信度阈值的图像

Roboflow的推理API

“InferenceHosted”和“UploadHosted”脚本将用于托管在服务器上的图像。 “InferenceLocal”和“UploadLocal”脚本将用于托管在您的设备(即计算机硬盘驱动器或边缘设备)上的图像。

Roboflow的 Python 包