工具选择 1. 我们需要5分钟才能获得初始解决方案 2. 无需编写代码并在各种开发工具之间来回切换 3. 开箱即用:一系列预训练的模型,可视化和部署
如何处理任务
实际上,我们有两种方法来解决这个问题: (1)使用预训练的模型
(2)训练我们自己的人物检测器。
因此计划如下: I. 初始化人物检测模型 II. 检测图像上的人物以衡量检测质量 III. 为生产应用部署模型
让我们开始吧……
执行步骤
I. 初始化人物检测模型 初始化一个人物检测模型很简单。为了完成这步,我们需要将你的GPU机器连接到Supervise.ly,然后选择一个预训练的模型。
1. 将你的GPU机器连接到Supervise.ly平台 (1) 点击 “connect your first node” 按钮 (2)在终端上运行所选命令 (3)检查您的计算机是否已连接到平台
转到“Cluster”页面,点击图(1) “connect your first node” 按钮,然后,你将看到图(2)窗口,只需复制命令并在终端中执行即可。Python代理将安装在你的计算机上,它将显示在可用节点列表中(3)。
2.选择预训练模型
(1)转到Model Zoo页面(2)选择你的检测器(3)检查“My Models”列表
转到“Neural networks” -> “Model Zoo”页面(1)。您将看到一系列用于语义分割和目标检测任务的预训练模型。如果将光标悬停在“FasterRCNN NasNet”上,您将看到“Add model”按钮(2)。点击后,模型将出现在“My Models”列表(3)。
现在,Faster R-CNN检测器准备就绪。下一步是看它是如何作用于图像的。
II. 检测图像上的人物以衡量检测质量在将模型部署为API之前,最好可视化神经网络预测,以了解它是否符合要求。使用Supervisely非常简单:只需点击几下即可拖放图像并运行推理过程。
1. 导入图像
(1)转到“Import”->”Upload” 页面并拖放图像(2)定义项目名称并开始导入(3)勾选 “Projects”页面
转到“Import”页面,然后拖放包含测试图像的文件夹(1)。将项目命名为保存图像的项目。在我们的例子中,项目名称是“test_images”。然后单击"start import"按钮(2)。导入完成后,转到“Projects”页面,检查包含你的图像的项目是否已创建(3)
2. 运行推理过程
(1)单击“测试”按钮(2)选择项目(3)定义推理参数
现在让我们在你的图像上测试我们的人物检测器。 转到“我的模型”页面,然后单击“测试”按钮(1)。 然后,你选择一个带有图像的项目来检测人物。 在我们的例子中,它是“test_images”项目,然后单击“下一步”按钮(2)。 然后,我们应该指定将存储检测结果的项目的名称。 在我们的例子中,它是“inf_test_images”项目(3)。
唯一剩下的就是选择推理模式。 在列表“inference_full_image”中选择。 最后一步是替换该行: - <font size="2">“save_classes”: “__all__”,</font>
复制代码这行: - <font size="2">“save_classes”: [“person”],</font>
复制代码点击开始“推理”按钮: 3. 检查结果 (1)点击生成的项目(2)查看预测
推理过程完成后,你将在项目页面(1)上看到“inf_test_images”。 要检查结果(2),请单击“inf_test_images”项目,然后单击此项目中的数据集。
现在我们知道我们的模型符合要求,让我们进入最后一步 - 模型部署。
III. 为生产应用程序部署模型 在大多数情况下,一旦我们对检测质量感到满意,我们就需要通过API从自定义环境中使用该模型。 以下说明介绍了如何为生产应用程序部署模型。
1.部署人物检测模型
(1)单击“Deploy”按钮(2)指定并提交部署参数(3)确保任务完成
转到“我的模型”页面,然后单击“部署”按钮(1)。 然后,在指定目标GPU机器和设备后,单击“提交”按钮(2)。 因此,将创建一个新任务,并且一旦完成(3),你就可以将API请求发送到你的人员检测模型。
2. 发送API请求
(1)单击“Deploy API Info”项(2)获取部署信息
在调用API之前,我们需要获取令牌和URL信息。 为此,在“Cluster-> Tasks”页面上单击上下文菜单(1)中的“Deploy API info”。 在下一页,你将看到通过API(2)使用我们的检测模型所需的所有信息。
更具体地说,这里(2)我们可以看到:
1. API令牌RsiYTrSBsyE5BIXRYYCFBLJf13JqVQ4NeEUUxX2oE1SdkwgdpmErjZ0tHEKljadILv8cQrosxMVmirJVOOf025mR8XB88feSRDbbeAYpKL2MwJ1MAZtJ2PfideN4UmNP
2. URL 3. 用法示例 很明显,不过我要说的是,您的API令牌和网址将与上述不同。 例如,假设你有“dl_heroes.jpg”图像。 Yann LeCun, Geoffrey Hinton, Yoshua Bengio, Andrew Ng
因此,如果你在终端中运行以下命令: - <font size="2">curl -XPOST -H ‘X-API-KEY: YourToken’ -F ‘image=@dl_heroes.jpg;type=image/jpeg’ YourUrl</font>
复制代码
然后,Supervise.ly会以json格式给你回复检测结果: - <font size="2">[{"tags":[],"description":"","objects":[{"bitmap":{"origin":[],"np":[]},"type":"rectangle","classTitle":"person","description":"","tags":[],"points":{"exterior":[[343,87],[493,375]],"interior":[]},"score":0.999502420425415},{"bitmap":{"origin":[],"np":[]},"type":"rectangle","classTitle":"person","description":"","tags":[],"points":{"exterior":[[0,94],[149,375]],"interior":[]},"score":0.9994213581085205},{"bitmap":{"origin":[],"np":[]},"type":"rectangle","classTitle":"person","description":"","tags":[],"points":{"exterior":[[247,96],[367,377]],"interior":[]},"score":0.9987866282463074},{"bitmap":{"origin":[],"np":[]},"type":"rectangle","classTitle":"person","description":"","tags":[],"points":{"exterior":[[138,96],[256,378]],"interior":[]},"score":0.99868243932724},{"bitmap":{"origin":[],"np":[]},"type":"rectangle","classTitle":"person","description":"","tags":[],"points":{"exterior":[[100,133],[129,177]],"interior":[]},"score":0.9136056900024414}],"size":{"width":506,"height":380}}]</font>
复制代码
上面的Json对应于检测到的所有对象,包括坐标和置信度。 可视化后,我们得到
API返回的预测可视化
为了让生活更轻松,我们提供了一个python notebook,它实现了API调用并可视化检测结果。 我们鼓励你使用它。
Jupyter notebook
回到主要问题回想一下标题中的问题“你能在10分钟内解决一个人检测任务吗?”
1. 快速回答是,只需按照上面的说明操作即可。
2. 更为深思熟虑的答案是“它取决于”,细节决定成败。
同样,需要人员检测的可能应用程序的数量是巨大的。 以下是引起头痛的三个最受欢迎的因素:
1. 硬件限制。 对于某些应用程序,可以使用板载高端GPU的台式计算机。 其他应用程序应该可以在手机上或机器人内部使用。 在这种情况下,我们需要以牺牲模型精度为代价来使用小而快速的神经网络。
2. 实时要求。 例如,在自动驾驶行业中,软件应该是实时工作的。 在这种情况下,最新的GPU仍然不够强大,无法运行更快的R-CNN的最先进的实现。 因此,我们必须牺牲准确性并选择更简单的模型。
3. 具体情况。 如果我们构建一个安全应用程序,那么很可能,我们必须在夜间发现不需要的人。 无法保证开箱即用的探测器可以解决此任务。 许多其他变化是可能的 - 不同的天气,摄像机角度或只有一小部分人可见的事实。 好消息是我们可以训练模型在特定条件下运行良好,但它可能需要我们一些额外的工作。
将来,我们将发布一系列博客文章,解决更复杂的场景,包括自定义对象检测器的培训。
如果你发现这篇文章很有趣,那就多分享它一些,这样更多的人就能看到它!
|