Drass 开发用于海事环境中实时目标检测的深度学习系统
挑战
帮助船舶操作员监控海洋环境,检测目标、障碍物和其他船舶
解决方案
创建一个可以在船舶上部署并实时运行的目标检测深度学习模型
结果
- 自动标注数据
- 缩短开发时间
- 建立灵活且可重现的框架
为了确保安全通行,船舶操作员必须在整个航行过程中追踪目标、障碍物和其他船舶。然而,在海上进行目标检测颇具挑战性,因为不断涌动的海浪会改变观测背景,而且开阔的海面提供的参照点很少。
为了应对这些挑战,海事技术公司 Drass 开发了用于海上实时目标检测的深度学习模型。尽管这是该团队首次应用深度学习,但在 MATLAB® 的帮助下,他们在截止日期前两个月就完成了 YOLOv2 模型的训练与验证,然后将其与船舶上运行的 C++ 应用程序进行了集成。
Drass 的计算机视觉工程师 Valerio Imbriolo 说,“MATLAB 提供的工具使项目从原型构建到集成的每一步都变得相当轻松。我们在 7 个月就完成了目标检测应用,并且 10 个月就做好了测试准备。在剩下的两个月里,我们开发了一些额外的功能。”
挑战
预训练的海洋环境目标检测模型是不存在的,这意味着 Drass 团队必须从零开始开发和训练自己的深度学习网络。传统的目标检测系统使用单一视觉输入源。而 Drass 团队的深度学习模型需要合并多个源的输入,包括日光和热感摄像头,这需要对网络架构和数据预处理管道进行额外的调整。
由于 Drass 想用多个海上目标测试目标检测模型,该团队必须创建、预处理并标注他们自己的数据集。这是一项费力耗时的任务。
该团队开发的模型还必须能够集成到船舶上使用的用 C++ 编写的主目标检测应用程序中。鉴于其应用的特殊性,Drass 团队需要执行大量的计算密集型测试和调整,以找到性能最佳的模型配置。
所有这些任务均需要在 12 个月内完成。而且,这是他们的第一个深度学习项目。时间异常紧迫。
解决方案
Drass 团队使用 Deep Learning Toolbox™ 创建和训练了神经网络的原型,并使用 GPU Coder™ 将其集成到 C++ 应用程序中。
该团队使用的第一个数据集是由 5000 帧未标注的原始海洋影像构成。之后,他们使用 Image Processing Toolbox™ 对图像进行了预处理以去除噪声和镜头失真。Wavelet Toolbox™ 也提供了帮助,将来自日光和热感摄像头的数据合并为单一数据源。
该团队用视频标注器对数据集的一小部分进行了标注。他们在 Deep Learning Toolbox 中创建了一个 YOLOv2 目标检测模型,并用已标注的数据子集对其进行了训练。经过部分训练的模型帮助他们在视频标注器中自动标注了数据集的其余部分。然后,该团队通过创建训练示例的副本并对其添加噪声、翻转图像或更改颜色以进行修改来增强该数据集。
为了加快为目标应用配置网络的过程,Drass 团队使用 Parallel Computing Toolbox™ 在强大的 CPU 和 GPU 集群上运行多个训练和优化过程实例。
GPU Coder 将原型模型转换为 CUDA® 代码,用于在船舶上使用的 NVIDIA® GPU。然后,该团队将这些 C++ 代码转给了负责与船上应用程序集成的编程团队。
结果
- 自动标注数据。Imbriolo 说,“人工标注每帧需要 3 分钟,标注整个数据集需要 249 个小时。借助视频标注器的自动标注过程,我们将时间减少到了每帧 0.3 秒。我们在 42 个小时内就标注并验证了 5000 个帧。”
- 缩短开发时间。Imbriolo 说,“我们在 10 个月内就完成了项目,并利用截止日期前剩余的两个月为客户实现了额外的功能。如果没有 MATLAB 和 GPU Coder,要从头开始开发并测试该模型,整个 C++ 工程师团队可能需要花费 18 个月的时间,每周工作 40 个小时。”
- 建立灵活且可重现的框架。Imbriolo 说,“使用我们的 MATLAB 框架,我们今后只需极少的工作量即可修改、更新、重新训练并在应用程序中重新集成模型。例如,如果有人要求我做个 YOLOv3 模型替代 YOLOv2 模型,大约三天内我就能提交结果。”