一种基于深度学习的视频单应性估计算法

2021-04-25 05:24郭孟夏
现代计算机 2021年6期
关键词:灰度卷积矩阵

郭孟夏

(四川大学视觉合成图形图像技术国防重点学科实验室,成都610065)

0 引言

单应性矩阵的使用一直是热门话题,在进行平面目标追踪时,寻找其单应性矩阵尤为重要。到目前为止,越来越多的人使用传统方法在进行单应性矩阵的估计计算,并不断的改进,但是在提取图像对的特征点时,极容易产生误匹配和累计误差。而使用基于深度学习的单应性估计算法可以减少误匹配带来的累计误差。近年来,现代深度学习模型[4]广泛运用在各个领域,包括图像分类、对象检测、场景分割、自然语言处理等。在计算机视觉领域,他们已经取得了超越传统方法的巨大成功。深度模型和传统方法的一个主要区别是以前手工制作的特征提取的自动化,它可以针对特定的数据和任务进行优化。

1 单应性矩阵估计概述

1.1 相机标定简述

相机标定[7]技术是根据物体在三维空间位置和图像位置之间的关系,建立相机几何成像模型并计算出相机参数的过程,通过摄像机拍摄的图片用某种算法计算出相机内部和外部参数,外部参数包括旋转矩阵和平移向量,内部参数包括相机焦距、光心和畸变参数等。由此,我们可以得到像素坐标系和世界坐标系的坐标映射关系:

其中,u、v 表示像素坐标系中的坐标,s 表示尺度因子,fx、fy、u0、v0、γ(由于制造误差产生的两个坐标轴偏斜参数,通常很小)表示5 个相机内参,R,t 表示相机外参,xw、yw、zw(假设标定棋盘位于世界坐标系中zw=0 的平面)表示世界坐标系中的坐标,M 是内参矩阵。

1.2 单应性矩阵引入

经过(4)计算可以得到(5)(6)。

对单应性矩阵的9 个参数进行归一化,为H 添加约束条件,将H 矩阵模设为1,如(7)所示,经整理后可得(8)(9)。

假如我们得到了两幅图片中对应的N 个点对(特征点匹配对),可以得到一个线性方程组,用矩阵形式表示为(10),A 的维度由N 确定。

由于单应矩阵H 包含了约束(7),因此根据上述线性方程组,8 个自由度的H 我们至少需要4 对对应的点才能计算出单应性矩阵。但是,在真实的应用场景中,我们计算的点对中都会存在误差。例如点的位置偏差几个像素,甚至出现特征点对误匹配的现象,如果只使用4 个点对来计算单应性矩阵,又会出现累计误差。因此,为了使得计算更精确,一般都会使用远大于4 个点对来计算单应矩阵。

2 单应性矩阵的计算方法

2.1 基于传统方法的单应性估计

一般有以下5 个步骤:

(1)提取每张图SIFT/SURF/FAST 等特征点;

(2)提取每个特征点对应的特征描述子;

(3)通过匹配特征点描述子,找到图像对中匹配的特征点对;

(4)使用RANSAC 算法剔除错误的匹配;

(5)求解方程组,计算单应性矩阵;

以上特征点提取算法和对匹配的特征点求解单应性在OpenCV 中都有已封装的库函数。

2.2 基于深度学习方法的单应性估计

目前最广为人知的方法有两类,一类是文献[1]中提出的基于CNN 的单应性估计方法使用类VGG 网络结构[5]来处理图像对中的两个图像块。这两个输入块被转换为灰度级、归一化,然后相互堆叠。该架构使用八个卷积层,后面是两个完全连接的层,卷积层则使用3×3 内核。第二类是文献[2]中提出的基于CNN 的单应性估计方法,它试图通过使用多个首尾相连堆叠的孪生卷积神经网络来提高先前方法的准确性。类似于之前的基于CNN 的方法,该方法还将两个图像块作为输入,并输出估计的角扰动值,该值可以映射到单应矩阵H。这种CNN 架构使用八个卷积层,后面是两个完全连接的层。在文献[6]中,对上述两种算法进行了对比,并提出,色彩对于单应性的估计并不敏感,因此考虑使用灰度图像。

以上算法所使用的数据都是在MS-COCO 中选取图像,在该图像上经过随机扰动和相应变化,与原图像形成图像对,使得其背景都一样,从而作为groundtruth进行训练。但是在视频场景中,帧与帧之间的连续变化,使得其单应性具有一定的关联性和规律。

3 在视频连续场景下的单应性矩阵估计

3.1 算法假设条件与前提

本文的主要工作是介绍了一种在视频场景下基于深度学习的单应性矩阵的估计方法。由于视频背景是实时变化的,有自然场景下有各种不同运动状态,包含缩放(Scale change,SC)、旋转(Rotation,RT)、透视倾斜(Perspective distortion,PD)、遮挡(Occlusion,OC)和超出视野范围(Out of view,OV),等等,无法实现背景的一致性。因此针对视频场景下,存在连续的帧变化,首先我们设视频第一帧为交互帧,在该帧标定平面目标的位置坐标,平面目标的位置在视频中随时变化。为了便于阐述视频序列中的前后关系,将前一帧设为第k-1帧,当前帧设为第k 帧。

3.2 算法流程与网络架构

该视频每个视频可拆分成501 帧,帧图像为三通道RGB 图像,像素为1280×720。首先对图像进行预处理,如图1 所示,图像第k-1 帧和第k 帧分别经过降采样和灰度化得到A 和B,然后将A,B 堆叠成双通道的灰度图像作为深度学习训练的输入。

图1

如图2 所示,基于回归的VGG 改进网络深度学习架构。我们的网络使用3×3 的卷积,并带有归一化(Batchnorm)和线性整流函数(Rectified Linear Unit,Re⁃LU),在结构上类似于VGG[5]网络。以128×72×2 的双通道灰度图像作为输入。我们使用8 个卷积层,每两个卷积后有一个最大池化层(maxpooling layer)(2×2,stride=2),8 个卷积层分别有64,64,64,64,128,128,128,128 个滤波器。决策层是两个完全连接层,第一个完全连接层有1024 个单元。最后生成8 个实数,并在训练中使用Euclidean(L2)损失函数。

图2

视频帧序列中,每一帧中都有一个平面目标,在现实中为矩形。对该模型进行训练之前,标定该目标的四个角点坐标,第k-1 帧的四个角点分别为A,B,C,D,第k 帧的对应角点分别为A’,B’,C’,D’,根据坐标点的变化制作训练的标签(11),训练的结果表征的是相邻两帧对应平面目标的角点坐标变化。而这一变化可以唯一的映射到单应性矩阵H,从而估计出我们想得到的结果。

图3

4 实验

本文使用Python 编程语言并基于TensorFlow 后台进行编码。电脑使用Intel Core i7-4790@3.6GHz CPU,8G RAM,NVIDIA GeForce GTX 1060 3GB GPU 的配置。训练单应性矩阵估计模型过程中,最小批大小设为32,学习率设为0.0001,优化器使用Adam,为防止模型过拟合,将丢失概率设为0.5。由于视频的帧序列之间存在连续性,而以往的图像预处理都忽略了这一点,因此,本文还在文献[1]的基础上设计了一种生成训练集的方法,从而可以将视频帧序列的连续性加以利用。

4.1 数据集生成

在文献[3]中,有多个不同场景、不同运动状态的视频,其中每个视频中都存在同一平面目标,本文使用其中缩放、旋转、透视倾斜三个运动状态的视频。图像的预处理过程如下:

(1)调整所有训练图像样本的大小,所有图像从1280×720 降采样到128×72;

(2)然后将所有三通道彩色图像样本都转化为灰度图;

(3)接着将第k 帧和第k-1 帧经过(1)(2)后的单通道灰度图像结合成双通道灰度图像。

本文选择了20 个场景,共计60 个视频,约30000张图片作为样本进行训练和测试。

4.2 实验结果

通过训练,我们可以得到的是一个权重模型,模型的输入为经过预处理的双通道灰度图像,输出为8 个自由度的向量,它们代表的是图3 中四个角点A,B,C,D 与A’,B’,C’,D’的坐标差值。在对测试集进行测试时,我们已知第k-1 帧的角点坐标,通过训练好的模型计算可得到第k 帧的角点坐标,从而可以计算得到第k-1 帧和第k 帧之间变换的单应性矩阵。图4 展示了部分图像对单应性矩阵估计的结果,左边是视频k-1帧,右边是第k 帧,蓝色线段标注的是四点坐标的GroundTruth。我们在图4 中画出了前后帧对应角点,从而可以更直观地看到估计效果。

本文使用约21000 张图像作为训练集,约9000 张图像作为测试集。在缩放、旋转和透视倾斜上,都相比于现有算法具有更好的鲁棒性。

图4

5 结语

本文提出了一种在视频场景下的单应性矩阵估计算法,相比于现有算法对图像进行切割或者拼接的图像预处理方法而言,更适用于在自然场景下,当背景发生变化时,对单应性矩阵进行估计。而实验结果表明,该算法有助于提高估计单应性矩阵的准确性,可以运用在平面目标追踪和SLAM(Simultaneous Localization And Mapping)等领域中。

但是本文也存在一些问题,在发生剧烈运动和运动模糊的状态下,由于图像的辨识度不够高,训练模型提取的特征点不够多,导致单应性的估计精度会降低。因此,针对上述问题,还有很大的改进空间,我们可以考虑对网络和损失函数进行改进,例如:在损失函数中加入一个权重影响因子等,从而实现优化后的视频单应性估计。

猜你喜欢
灰度卷积矩阵
基于全卷积神经网络的猪背膘厚快速准确测定
基于FPGA的卷积神经网络加速优化方法
基于二值化灰度图像的大豆蛋白液喷雾相对雾化程度的研究
基于图像处理与卷积神经网络的零件识别
天津港智慧工作平台灰度发布系统和流程设计
Arduino小车巡线程序的灰度阈值优化方案
基于深度卷积网络与空洞卷积融合的人群计数
多项式理论在矩阵求逆中的应用
矩阵
矩阵