基于GPU并行优化的实时全景视频拼接

GPU based parallel optimization for real time panoramic video stitching

  • 作者:Chengyao Du; Jingling Yuan; Jiansheng Dong; Lin Li; Mincheng Chen; Tao Li
  • 年份:2020
  • 机构:武汉大学
  • 期刊/会议:Pattern Recognition Letters
  • 原文地址:GPU based parallel optimization for real time panoramic video stitching

全景视频是一种以同一视角录制的视频,以记录全场景。随着视频监控的发展和智慧城市对3D融合视频监控的需求,需要CPU和GPU具备强大的处理能力来制作全景视频。传统全景产品依赖后期处理,导致功耗高、稳定性低、实时性差。为了解决这些问题,我们提出了实时全景视频拼接框架。我们提出的框架主要由三种算法组成:L-ORB图像特征提取算法、基于LSH的特征点匹配算法和基于CUDA的GPU并行视频拼接算法。实验结果表明,该算法在图像拼接匹配的特征提取阶段均能提高性能,运行速度是传统ORB算法的11.3倍,是传统SIFT算法的641倍。在分析每个分辨率图像拼接的GPU资源占用率的基础上,我们进一步提出了一种流并行策略,以最大限度地利用GPU资源。与L-ORB算法相比,该策略的效率提高了1.6-2.5倍,并且可以充分利用GPU资源。论文中完成的系统性能是前者嵌入式系统的29.2倍,而功耗降低到10 W。

Ⅰ 介绍

动机:视频监控在目标跟踪、跨模态检索、人员重新识别、建通管理发挥巨大作用。随着高性能计算和深度学习技术的成熟,视频处理算法不断研究改进,视频监控技术发展迅速。

本文的贡献可以总结如下:

  • 我们提出了一种基于GPU并行优化的全景视频拼接框架,利用GPU指令的块、线程和流并行策略,实现实时、高精度和低计算功耗。
  • 我们提出了一种L-ORB图像特征提取算法,该算法通过优化特征检测区域的分割并简化尺度不变性和旋转不变性来降低时间成本。
  • 我们提出了一种基于LSH的特征点匹配算法,它使用多探针局部敏感哈希(Multi-Probe LSH)算法来匹配特征点,并利用渐进式样本共识算法(PROSAC)来匹配特征点。消除错误匹配,得到帧图像拼接映射。然后我们使用多波段融合算法消除视频接缝。

实验结果表明,该算法在图像拼接、特征提取、特征匹配等方面均取得了良好的性能。这样论文中提出的框架的性能是前者嵌入式框架的29.2倍,而功耗降低到10 W。

Ⅱ 相关工作

生成全景视频需要对视频的每一帧进行配准和融合。图像配准的关键是特征提取。

  • 边缘平滑金字塔多分辨率图像融合拼接;
  • ORB算法
  • 分布式并行计算SIFT
  • CUDA并行环境ORB算法进行3D重建
  • CUDA并行GPU加速的HartSIFT

Ⅲ 视频拼接框架

框架主要由三种算法组成,L-ORB图像特征提取算法、基于LSH的特征点匹配算法和基于CUDA的GPU并行视频拼接算法。通过改进图像拼接和GPU优化算法,该框架的性能是前嵌入式框架的29.2倍,同时功耗降低到10 W。

框架示意图
L-ORB特征提取算法

L-ORB图像特征提取算法通过将图像与相机之间的位置参数粗略对齐来缩小检测区域。然后算法通过计算图像的重叠区域得到特征点的分布范围。相对于原ORB算法简化了尺度和旋转不变性,使得效率大大提高。

基于LSH的特征点匹配算法

LSH算法由Muilti-Probe LSH和PROSAC特征点筛选组成。相对于原ORB算法简化了尺度和旋转不变性,使得效率大大提高。

Qin Lv等人利用与查询数据在多哈希表查找与之最接近的细微偏差,提出了Muilti-Probe LSH的思想。传统的RANSAC算法效率低,由于采用了随机采样的方式,忽略了好坏样本的差异。使用PROSAC算法按质量对样本排序,从高质量数据子集中提取样本,获得最优解。

基于CUDA的GPU并行视频拼接算法

利用 GPU 的核心计算功能来实现所提出算法的并行执行。此外,我们利用CUDA架构来加速并发矩阵运算,可以使视频拼接速度提高一倍。

Ⅳ 框架中的三种算法

L-ORB算法

L-ORB算法结合了FAST特征点和Harris角点测量方法。并且生成了Brief特征描述因子,相对于原ORB算法简化了尺度和旋转不变性,使得效率大大提高。L-ORB将 Fast 特征检测与 Harris 角点度量响应函数相结合来检测角点。

FAST:如果像素的邻域内有足够连续的像素点与该点不同,则认为该点为FAST特征点。

算法1:角点检测算法:

输入: I: 输入图像.
输出: Corners[]: 输入图像的角点.
1: Ix, Iy ← Gradient(I(x, y)) //计算图像I在X和Y方向的梯度。
2: Ix^2, Iy^2, Ixy ← Product(Ix, Iy) // 计算图像两个方向梯度的内积。
3: A, B, C ← Gauss(Ix^2, Iy^2, Ixy, σ=1) // 使用高斯函数拟合M矩阵中的ABC参数。
4: FAST_Points[]← FAST(I) // 计算图像I中的FAST点。
5: Rs[]← Harris(FAST_Points[]) // 计算FAST点的Harris相应R,并将低于阈值t的点删除。
6: Rs_Suppressed[]← Suppress(R[]) // 执行非最大值抑制,局部近邻点的最大值极为Harris特征。
7: Corners[]← MaxN(Rs_Suppressed[]) // 从Harris角点中获取响应最大的N个点。

BRIEF描述子:在特征点周围以特定方法选择个点对,对每个点对判断:若亮度值,生成值为1,若生成值为-1,否则为0. 对所有点对,生成的二进制串。

当图像旋转角度大于45°时,BRIEF图像特征描述因子的识别率几乎为零。所以它没有旋转不变性;但旋转角度在15°以内时,图像识别率大于70%,旋转角度越小,识别率越高。

不同旋转角度下rBrief、SIFT、Brief描述子性能比较

算法2:L-ORB实现:

输入:Is[]:输入图像。
输出: Factors[]:P 组特征描述因子。
1: Areas[]← Divide(Is[]) //所有n幅图像被分成m个特征检测区域
2: FAST_Points[]← FAST(Areas[]) //特征检测区域的FAST角点检测
3: Corners[]← MaxP(FAST_Points[]) //从FAST特征点中选出Harris角点响应值最高的P个特征点
4: Factors[]← Brief(Corners[]) //用P个Harris特征点构造Brief图像特征描述因子
基于LSH的特征点匹配算法

使用近似最近邻搜索(ANN)比线性搜索和KNN具有更小的时间和空间复杂度。

原始LSH方法获取查询数据的hashbucket为,定义一个哈希扰动向量,可以检测hashbucket 。在LSH函数中,

相似数据的映射差异至多为一个单位。Multi-Probe LSH 算法可以减少哈希表的大小,以减少内存占用并加快搜索速度。

传统的RANSAC算法效率低,采用随机抽样的方法,忽略了好坏样本的差异。PROSAC 算法按质量对样本进行排序,以从更高质量的数据子集中提取样本。经过多次假设和验证,得到最优解。其效率比RANSAC高100倍,具有更高的鲁棒性。

算法3:基于LSH的特征点匹配算法:

输入:Features[]:两张图片的一组特征点。
输出:Pairs[]:筛选的特征对。
1: Pairs[]← LSH(Features[]) //特征点集使用Multi-Probe LSH进行特征点匹配
2:while Parameters fit model do //应用PROSAC算法去除错误匹配
3: Ranged_pairs[]← Sort(Pairs[]) //根据匹配质量从好到差对匹配特征点进行排序,然后选择前n个质量较高的数据
4: Parameters[], Num_of_inliers←Calculate(Ranged_pairs[]) //从n个数据中随机选择m个数据。计算模型参数和内点数
基于CUDA的GPU并行视频拼接算法

CUDA 函数中的块和线程之间有两个级别的并行性。每个块相互独立,但同一块中的线程可以通过共享内存交换数据。CPU通过优先级和时间片实现线程调度;而GPU上的线程只有等待资源和执行两种状态,如果资源满足运行条件就会立即执行。当GPU资源充足时,所有线程并发执行,加速非常接近理论加速比。当GPU资源少于线程总数时,一些线程会在执行的线程释放资源之前等待,成为序列化的实现。

CUDA并行L-ORB算法加速的关键是将串行计算部分划分为多个子任务。图像处理过程如:FAST特征提取、非极大值抑制、BRIEF图像描述因子的建立、图像变换等满足条件,可分为多个子任务。这些子任务具有相同的计算过程,并且数据彼此不相关。

算法4:全景视频是是拼接算法:

输入:Videos[]:多台摄像机同时捕捉不同方向的视频。
输出:Panoramic_video:全景视频
1: Areas[]← Crop and transform(Videos[]) //根据预先校正的参数,使用GPU对每个摄像头采集的视频进行裁剪和变换
2: FAST_Points[]← FAST(Areas[]) //并行检测特征检测区域内的像素,选择与FAST特征点匹配的像素,计算Harris响应值
3: Corners[]← MaxP(FAST_Points[]) //GPU用于对每个满足FAST特征点的像素进行非极大值抑制
4: Factors[]← Brief(Corners[]) //得到Harris角的最大角度P,建立BRIEF图像特征描述因子
5: Matrix← Match_and_filter(Factors[]) //对两个视频的角点进行匹配过滤,计算变换矩阵
6: Panoramic_video← Transform(Videos[], Matrix) //使用GPU对视频进行变换,融合成全景视频

将传统的ORB算法应用到图像拼接中,需要对每张图片做一系列的事情:计算内存使用量→malloc→图像拼接→释放内存。这些步骤会浪费大量时间,导致流量阻塞和处理器空闲资源。我们分析了图像大小、图片通道数、特征点数、描述因子的长度。此外,我们计算所需的网格大小、块大小、静态内存和动态内存的分布。最后,我们在系统启动时实现了空间预分配,减少了GPU资源的浪费。

CUDA流列表

CUDA 流将程序的指令分成多个操作队列,可以将队列之间的操作从串行转换为并行。由于不同流的操作是异步进行的,通过精心构建相互协调的操作队列,可以充分利用GPU资源。

本文采用CUDA流在后一帧的传输过程中检测前一图像的特征点,在多张图像加载到GPU显存时利用GPU检测特征点并匹配多张图像的特征。此功能可节省时间并提高效率

Ⅴ 实验分析

本文的 CUDA 和 CPU 实验在 Ubuntu 14.04 LTS 环境下运行,使用配置为 Intel Core i7-6700HQ、RAM 16GB、NVIDIA GeForce GTX 970 M 的 Terrans Force X411 计算机;嵌入式实验使用NVIDIA TX2开发板。本文实验使用了NVIDIA CUDA Toolkit 8.0、OpenCV 3.2.0等软件开发包。

不同算法单帧图像拼接耗时
不同算法拼接结果
不同分辨率、不同摄像机数量视频拼接比较

实验证明,当GPU资源充足时,性能随着视频流的增加而提高。

不同分辨率不同算法性能比较
单位时间拼接图像帧数

Ⅵ 结论

本文提出了一种L-ORB特征提取算法。该算法减少了特征点检测面积,简化了传统ORB算法在尺度和旋转不变性上的支持,降低了算法的时间复杂度。然后我们将图像处理过程划分为可并行化的子任务,例如:FAST 特征提取、非极大值抑制、BRIEF 图像描述因子的建立和图像变换。此外,我们利用GPU的块、线程、流并行方法来加快算法的优化速度,将算法的效率进一步提高了1.6-2.5倍。实验结果表明,本文提出的方法是传统ORB算法的20倍以上,可以满足实时性要求。

实验中虽然可以依靠两个嵌入式GPU实现实时图像拼接速度,但是由于芯片目前的计算资源,该算法还不能完全集成到一个GPU中。未来的工作是通过将两种算法结合在一个芯片中并使用更强大的嵌入式芯片来减少资源浪费。

你可能感兴趣的:(基于GPU并行优化的实时全景视频拼接)