我创建了一个机器学习软件,可以检测对象(duh!(,根据一些计算机视觉参数处理对象,然后触发一些硬件将对象放入相应的箱中。将物体放置在传送带上,并将相机安装在一个点上,以便在物体经过相机下方时拍摄物体(一次一个物体(的照片。我无法控制皮带的速度。
现在,挑战是我必须配置大量东西才能使机器正常工作。
第一个问题是模型创建分割掩码所需的时间,它因对象而异。
另一个问题是,我如何维护在计算机视觉处理后产生的信号,以使其不会与基于计算机视觉的推理错位的方式将它们发送到执行器。
我的初始设计包括创建负责特定任务的流程,然后根据需要使它们相互通信。但是,同步问题仍然存在。
截至目前,我正在考虑将软件堆栈视为一组服务,就像我们通常在后端所做的那样,并使它们使用芹菜和 Redis 队列之类的东西进行通信。
我是系统设计中的菜鸟,来自数据科学背景。我已经探索了python的多线程模块,发现它无法用于我的目的(所有线程都在单核上运行(。我担心如果我使用多处理,由于消息传递,各个进程可能会有额外的延迟,因此,这将给程序增加另一个不确定性。
其他详细信息:
- 编程框架和库:Tensorflow,OpenCV和python
- 相机分辨率:1920P
- 最大切割速度:3次触发/秒
- 深度学习模型:MaskRCNN/UNet
PS:你也可以评论我应该搜索的技术或关键字,因为香草搜索不会产生任何好处。
让我先总结一下所有内容。
-
你想做什么
- "物体"在传送带上
- 相机将拍摄物体的照片
- MaskRCNN 将运行以进行分析
-
以下是您面临的一些问题
- "第一个问题是模型创建分割掩码所需的时间,它因对象而异。
->如果要减少每个图像的处理时间,则需要加速器(FPGA,芯片等(或一些加速技术。英特尔 OpenVino 和英特尔 DL 棒是一个良好的开端。
-> 如果有太多图片需要处理,那么您将有 2 个选择:1( 放置大量机器以便完成所有工作或 2( 仅选择重要工作并丢弃其他工作。您将"最大切割"设置为固定数字(3/秒(的事实使我认为这就是您面临的问题。背景减法器是创建图像捕获触发器的良好开端。
- "另一个问题是,我如何维护计算机视觉处理后产生的信号,以一种不会与基于计算机视觉的推理错位的方式将它们发送到执行器。
->像芹菜这样的"工作分销商"是不错的选择。如果消息堆叠在代理 (Redis ( 内,则某些任务将不得不等待。但这可以通过扩展计算机轻松实现。
这里有一些建议:
- 视觉系统还包括硬件部件,因此硬件规格是必须的。
- 明确要求
- 不可能的事情确实存在,所以有时你可以减少项目的一些因素(可靠、成本(。