物体检测技术开发框架的应用

2021-06-16 09:35祝裕璞李梓邵国强张百顺
电子技术与软件工程 2021年7期
关键词:代码物体框架

祝裕璞 李梓 邵国强 张百顺

(大庆师范学院 黑龙江省大庆市 163712)

物体检测技术,通常是指在一张图像中检测出物体出现的位置及对应的类别。

在计算机视觉众多的技术领域中,物体检测是一项非常基础的任务,图像分割、物体追踪、关键点检测等通常都要依赖于物体检测。此外,由于每张图像中物体的数量、大小及姿态各不相同,也就是非结构化的输出,这是与图像分类非常不同的一点,并且物体时常会有遮挡截断,物体检测技术也极富挑战性,从诞生以来始终是研究学者最为关注的焦点领域之一。工欲善其事,必先利其器。对于物体检测的学习,选择一个优秀的开发框架是一件十分重要的事情。下面对目前流行的几种开发框架进行介绍。

1 OpenCV

OpenCV(Open Source Computer Vision Library)即开放源代码计算机视觉库,目前它已经包含了2500 多个算法,主要算法涉及图像处理、计算机视觉和机器学习相关方法。应用领域覆盖了工业产品检测、医学成像、无人机飞行、无人驾驶、安防、 卫星地图与电子地图拼接、信息安全、用户界面、摄像机标定、立体视觉和机器人等。它可以运行在Linux、Windows、Android 和Mac OS 操作系统上,支持的高级语言包括:C、C++、Python、JS、Ruby、MATLAB 等。

OpenCV 主要特点:

(1)OpenCV使用了两步PR审核。当开发者提交pull request后,PR 首先需要通过OpenCV Buildbot 的自动测试,包括18 种测试配置。当PR 通过了自动测试后,OpenCV 核心团队的成员将会对PR进行审核,若通过则此PR 将会被集成进OpenCV 主版本中。

(2)OpenCV 实现不同平台加速的思想是:写一份代码,则可在不同操作系统平台上运行。对于CPU,OpenCV 使用了parallel_for() 和universal intrinsics API 来实现这个目标;对于GPU,OpenCV 则使用了T-API。用户不需要针对不同的平台编写不同的加速代码,只需使用OpenCV 提供的这些函数和API 则可实现一份代码在不同的平台上运行。OpenCV 内部替用户实现了不同平台上的加速代码。

(3)OpenCV_DNN 模 块在2017年3.4.x 版本中 从OpenCV contrib 进入主干部分,并且随后不断得到改进和更新。DNN 模块实现了深度学习的前向推理计算,它支持Caffe、Tensoflow、Torch、Darknet 模型,无需用户安装对应的深度学习框架,也无需进行模型格式转换。DNN 模块包含了大量的单元测试。在进行推理计算时,后端有多种加速方式可以选择,例如OpenVINO、Vulkan、Tegine、cuDNN 等。DNN 提供了C++/Python 调用接口以及调用实例,比如分类、目标检测、图像分割、定制layer等典型应用。

2 SLAM

SLAM 是 Simultaneous Localization and Mapping 的缩写,中文译作“同时定位与地图构建”。它是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。如果这里的传感器主要为相机,那么这种SLAM被称为“视觉 SLAM”。

周围的人七嘴八舌给他出主意给他提醒他都充耳不闻,径直朝池塘边走去。突然看见一个和他年纪差不多的中年男人,手握一把菜刀朝他齿牙咧嘴比划着什么。还看见在那人背后的池塘水中,有一个小女孩水已经淹到了胸口,边哭边举起双臂,一头拴在女孩手臂上,一头被持刀人逮在手上的绳子正在不断摇晃。

视觉 SLAM 流程分为以下几步:

(1)传感器信息读取。在视觉 SLAM 中主要为相机图像信息的读取和预处理。如果在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。

(2)视觉里程计 (Visual Odometry, VO)。视觉里程计任务是估算相邻图像间相机的运动,以及局部地图的样子,VO 又称为前端(Front End)。

(3)后端优化(Optimization)。后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在 VO 之后,又称为后端(Back End)。

(4)回环检测(Loop Closing)。回环检测判断机器人是否曾经到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。

(5)建图(Mapping)。它根据估计的轨迹,建立与任务要求对应的地图。

某些使用场合中,我们只截取SLAM 的部分功能应用到实际场景中。举例来说只使用VO 部分我们可以得到连续的相机相对运动信息,虽然该运动信息存在累计误差,但应用中对此要求不高甚至不做要求,譬如VR 头显中计算头显设备运动时的位姿。

3 PyTorch

在2018年NeurIPS 大会上,Facebook 推出了PyTorch 1.0 版本,该版本吸收了Caffe 2 和ONNX 模块化及面向生产的特点,使得算法可以从原型快速无缝对接到生产部署中。这意味着,PyTorch 的生态将更加完备,在进行算法原型研究、移动部署时将更加便利。

表1:几种流行的开发框架的对比

PyTorch 以它良好的扩展性和超高的实现速度,近年来已赢得了不少开发者的喜爱和赞赏。首先,PyTorch 支持 GPU,这就能够显著提升代码的运行效率。同时,相比 TensorFlow 和 Caffe,PyTorch 拥有反向自动求导技术,让你在调整自定义模型的时候不必从头开始,帮助你节省不少的开发时间。

此外,PyTorch 的代码还比 TensorFlow 的代码更加简洁直观、友好易懂,堪称是非常优质的学习案例,这也能帮助许多开发者更深度地理解机器学习。

几乎涵盖所有主流的物体检测算法,包括VGGNet、ResNet、 FPN、DenseNet 和DetNet 等卷积基础网络,以及从Faster RCNN、 HyperNet、Mask RCNN、SSD、RefineDet、YOLO v1 到YOLO v3、 RetinaNet、CornerNet 和CenterNet 等物体检测算法,呈现给读者一个完整的知识体系。

2020年,Facebook 开源了PyTorch 3D 计算机视觉库,这个框架将3D 计算机视觉和深度学习结合,用于对三维数据的预测和计算。PyTorch 3D 实现了以下新特性:

(1)一个可微分的网格生成器。

(2)高效处理三角网格的算子,如投影变换、图卷积、采样、损失函数等。

(3)他们提出了新的3D 数据结构——Meshes,这种数据结构可以更好地存储和修改三角网格的数据。

4 TensorFlow

2015年,谷歌大脑(Google Brain)团队推出了深度学习开源框架TensorFlow,其前身是谷歌的DistBelief 框架。凭借其优越的性能与谷歌在深度学习领域的巨大影响力,TensorFlow 一经推出就引起了广泛的关注,逐渐成为用户最多的深度学习框架。

Tensorflow 实现了“Openpose”人体姿势估计算法。它还提供了几种变体,这些变体对网络结构进行了一些更改,以便在CPU或低功耗嵌入式设备上进行实时处理。

2020年,谷歌AI 推出了 TensorFlow 3D(TF 3D),它是一个开源的、高度模块化和高效的处理库,将3D 深度学习能力引入到了TensorFlow 框架中。TF 3D 库基于 TensorFlow 2 和Keras 构建,使得更易于构建、训练和部署3D 语义分割、3D 实例分割和3D 目标检测模型。TF 3D 提供了一系列流行的运算、损失函数、数据处理工具、模型和指标,使得开发、训练、部署3D 场景模型更加地方便和高效。TF 3D 还包含用于SOTA 3D 语义分割、3D 目标检测和3D 实例分割的训练和评估 pipeline,并支持分布式训练。该库还支持3D 物体形状预测、点云配准和点云加密等潜在应用。此外,TF 3D 提供了用于训练和评估标准3D 场景理解数据集的统一数据集规划和配置,目前支持Waymo Open、ScanNet 和Rio 三个数据集。

5 总结

随着深度学习的快速发展,计算机视觉在多个领域都取得了令人瞩目的成就。同时,日新月异的深度学习技术也推动了许多开发框架的快速更新,表1 对几种流行的开发框架做简单的对比。

支持物体检测的开发框架还有很多,例如,MXNet、Keras、Caffe 等,每个框架都有自身的优势和不足,开发时选择哪一个框架也没有一个统一的标准,很多应用往往需要使用2 个或2 个以上框架共同完成开发任务。所以开始一个新项目时,可以根据需要选择更适合的开发框架。

猜你喜欢
代码物体框架
广义框架的不相交性
创世代码
创世代码
创世代码
创世代码
WTO框架下
一种基于OpenStack的云应用开发框架
悬浮的鸡蛋