【问题标题】:How to design realtime deeplearnig application for robotics using python?如何使用 python 为机器人设计实时深度学习应用程序?
【发布时间】:2019-10-21 12:35:04
【问题描述】:

我创建了一个机器学习软件,它可以检测对象(呃!),根据一些计算机视觉参数处理对象,然后触发一些硬件,将对象放入相应的 bin 中。物体被放置在传送带上,相机安装在一个点上,以便在物体通过相机下方时拍摄物体(一次一个物体)的照片。我无法控制传送带的速度。

现在,挑战是我必须配置大量的东西才能让机器正常工作。

第一个问题是模型创建分割掩码所需的时间,它因对象而异。

另一个问题是我如何维护计算机视觉处理后生成的信号,以不会与基于计算机视觉的推理不一致的方式将它们发送到执行器。

我的初始设计包括创建负责特定任务的流程,然后根据需要让它们相互通信。但是,同步问题依然存在。

到目前为止,我正在考虑将软件堆栈视为一组服务,就像我们通常在后端做的那样,并使用 celery 和 Redis 队列之类的东西使它们进行通信。

我是系统设计方面的菜鸟,来自数据科学背景。我探索了 python 的多线程模块,发现它无法用于我的目的(所有线程都在单核上运行)。我担心如果我使用多处理,由于消息传递,单个进程可能会出现额外的延迟,因此会给程序增加另一个不确定性。

其他细节:

  1. 编程框架和库:Tensorflow、OpenCV 和 python
  2. 相机分辨率:1920P
  3. 最大加速速度:3 次触发器/秒
  4. 深度学习模型:MaskRCNN/UNet

P.S:您还可以评论我应该搜索的技术或关键字,因为普通搜索不会产生任何好处。

【问题讨论】:

  • 对于这是否过于宽泛,或者是否适合迁移到软件工程站点,我有两种看法。不过,这绝对是题外话。
  • @Useless 我认为你是对的。这是一个适当的软件工程问题。我应该把这个问题留在这里,然后在那个交流中写一个新问题吗?
  • 如果您无法迁移它,我只需将文本复制到那里的一个新问题并关闭这个问题 - 老实说,它更有可能吸引反对票而不是答案。这仍然是一个大问题,我不确定你是否真的可以拆分它,但至少它会成为话题。
  • 非常感谢。结束这个问题。

标签: python tensorflow deep-learning robotics


【解决方案1】:

让我先总结一下。

  • 你想做什么

    1. “物体”在传送带上
    2. 相机会对物体拍照
    3. 将运行 MaskRCNN 进行分析
  • 这是您面临的一些问题

    1. “第一个问题是模型创建分割掩码所需的时间,它因对象而异。”

    -> 如果您想减少每个图像的处理时间,则需要加速器(FPGA、芯片等)或一些加速技术。英特尔 OpenVino 和英特尔 DL 棒是一个好的开始。

    -> 如果要处理的图片太多,那么您将有 2 个选择:1)放置很多机器,以便可以完成所有工作或 2)只选择重要的工作并丢弃其他工作。您将“最大累积”设置为固定数字(3/秒)的事实让我认为这是您面临的问题。背景减法器是创建图像捕获触发器的良好开端。

    1. “另一个问题是我如何维护计算机视觉处理后生成的信号,以不会与基于计算机视觉的推理不一致的方式将它们发送到执行器。”

    -> 像 Celery 这样的“工作分配器”在这里是不错的选择。如果消息堆叠在代理(Redis)内部,那么一些任务将不得不等待。但这可以通过扩展您的计算机轻松实现。

这里只是一些建议:

  1. 视觉系统还包括硬件部分,因此硬件规范是必须的。
  2. 明确要求
  3. 不可能的事情确实存在,因此有时您可以减少项目的某些因素(可靠性、成本)。

【讨论】:

  • 非常感谢您的详细回复。我正在使用我能拿到的最好的消费级 GPU(GTX 2070)和 i7 8700k。如果设计足够好,我认为硬件不会成为瓶颈。我认为项目需要的唯一要求是确定性和容错性。
  • 对于 PoC,这些类型的硬件绰绰有余。但是在下一个阶段,当您将系统放入工厂时,始终建议使用工业级硬件。据我所知,如果该卡用于工业系统,Nvidia将不承担任何责任。最后一点,只有运行测试阶段才能告诉您系统是否可靠。所以第一步应该开发自恢复功能。
猜你喜欢
  • 1970-01-01
  • 2017-01-28
  • 2019-07-24
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
  • 2023-01-03
  • 2020-03-06
  • 2019-09-23
相关资源
最近更新 更多