何盛琪,李其超,宋 巍*,王文娟,高 松,毕 凡
(1.上海海洋大学 信息学院,上海 201306; 2.国家海洋局北海预报中心,山东 青岛 266061)
中国是拥有1.8万公里海岸线的海洋大国,沿海地区一直深受海洋灾害问题的困扰。2019年的《中国海洋灾害公报》指出:海浪灾害造成的直接经济损失达到0.34亿元,造成死亡22人。可见,海浪灾害已成为威胁中国近海民众生命财产安全突出的海洋灾害。因此,近岸海浪的检测对近岸工程设计、浅海生产作业以及保障中国沿海人民生命财产安全等方面具有十分重要的意义。
目前,中国近海海浪观测采用波浪浮标与人工观测相结合的方式,浮标是对“点”观测,对于港湾复杂地形的准确海浪测量需要高密度部署,运行和维护成本高;人工观测是有一定经验的预报员通过目测的方式估计海浪高度,观测频率和精度难以保障[1-2]。近年来,国内外学者提出了一些对海浪要素进行检测的新方案,文献[3]使用基于视觉的波传感方法检测水波的斜率、高度和频率等相关特性,且在戴维森实验室测试了水波相关特性,所得浪高数据与测波计基本相同,但是该方法不适用于存在较大噪点的视频图像。文献[4]提出视差法和高程法,用于评估10米到100米较大空间尺度上的海洋表面位移,这两种方法都已经在来自海上平台的真实视频数据上进行了测试,结果表明,两种方法都提供了相似的测量结果,但是高程法的结果与理论模型没有良好的一致性。文献[5]提出了一种基于双目立体视觉估计波浪高度和周期的方法,使用双目视觉在海浪高度上测量近岸水域的海浪变换,从基准中提取波浪的垂直高度,并据此估计波高和波周期。基于摄影测量的方法计算复杂度较高、成本高。文献[6]提出了适用于海洋领域海浪等级深度学习模型架构(Wave-CNNs),将海浪高度分为三个等级,但其识别精度仅为66.6%,无法满足海浪预报对浪高检测精度的要求。文献[7]设计使用多层局部感知卷积神经网络(network in network,NIN)[8]和支持向量回归模型(support vector regression,SVR)[9]对海浪视频进行浪高检测,该方法弥补了人工设计特征的不完备性,浪高检测平均相对误差≤20%,有着较好的实用性。现有研究在海浪要素检测算法上取得了一定的成果,但鲜见将研究成果应用于浪高预警预报实际业务中。
在海洋监测或预警系统方面,已有大量工作可以借鉴。文献[10]结合政府部门、科研人员和用海企业等各方用户的需求,构建了集冰情数据查询、事故应急响应和海冰灾害风险分析等主要功能于一体的海冰预警监测综合信息服务平台。文献[11]针对海洋管理部门监测预警的需求,研发了海洋放射性环境监测预警信息系统,实现了放射性监测数据的管理、核事故的预警和应急响应模拟等。事实上,基于视频的智能检测系统已经广泛应用于安防、交通等领域。文献[12]采用螺旋视频摘要及其相应交互技术,研发了面向监控视频内容的可视分析系统,该系统结合运动目标检测结果与螺旋摘要的展示优势,从多角度对视频目标统计信息进行可视化,辅以导航定位及草图交互等方式,从而快速有效获取监控视频内容。文献[13]利用分布式系统架构Hadoop、分布式实时计算框架Spark Streaming以及视频关键帧提取,设计实现了基于Hadoop的客车超载监测系统,对平台中所有运行客车的海量视频进行实时检测和预警超载。
该文依托国家海洋局黄海区域海洋环境监测站的实际数据,设计并实现了一个近岸海面视频监控下的浪高实时检测预测系统。与中国目前浪高检测手段相比,该系统具有部署简单、易扩展、实时检测、准确率高以及经济实用的优点,对丰富近海浪高检测手段以及保障沿海地区人民生命财产安全具有重要意义。
系统总体框架如图1所示。
图1 系统总体框架
近岸海面监控视频通过视频采集卡接入系统,系统对接入的视频进行实时计算,根据业务需求输出结果。该系统采用三层架构设计模式,从下至上依次为数据资源层、业务逻辑层和视图层。
(1)数据资源层。
数据资源层是系统的重要组成部分,基于视频的近岸浪高实时检测系统有实时浪高检测、历史视频管理和用户管理三类需求,针对这三类需求设计了历史浪高数据表、海浪视频数据表和用户信息表,并将其存储在MySQL数据库中。
(2)业务逻辑层。
业务逻辑层是系统的关键层,其主要工作是从数据资源层获取数据进行处理,将结果返回给视图层或保存至数据资源层,本系统的业务逻辑主要包括视频预处理、浪高检测、浪高预测、检测站点切换和视频流推送等。
(3)视图层。
视图层的主要功能是显示数据和接受传输用户的数据,为系统运行提供交互式操作界面,结合用户需求,系统对实时海浪画面、预测浪高画面、历史浪高数据和用户信息管理进行了可视化。
在实际业务中,近岸浪高检测主要是以浮标观测为主,人工观测为辅。波浪浮标运行和维护成本高,人工观测频率和精度难以保障[14-15],迫切需要一种更加经济实用且可靠的观测手段。为此,针对实际业务需求,该文设计并研发了本系统,其主要功能模块包括视频传输模块、视频预处理模块、浪高检测模块、浪高预测模块和浪高可视化模块。
(1)视频传输模块。
从自动截断保存到海浪画面实时播放,再到浪高检测结果展示,视频传输贯穿整个系统,视频传输模块是保证系统正常运作的重要基础,主要包含三个功能:①将各监控站点监控信号接入系统并自动截断保存监控视频;②将各监控站点的实时监控画面推送到前端,供用户观看;③为多站点实时切换提供解决方案。
(2)视频预处理模块。
由于图像编码问题和监控视频中遮挡物或礁石会对检测精度产生影响,因此来自近海岸监控站点的监控视频需要经一系列预处理后才可用于浪高检测。为保证浪高的检测精度,设计了视频预处理模块,主要包括抽取关键帧、关键帧裁剪缩放和归一化等[16]。
(3)浪高检测模块。
近岸海浪浪高变化预测的基础是准确的实时浪高检测。浪高检测模块的主要作用是建立视频中连续变化的图像帧与当前浪高值之间的映射。为此,建立浪高检测模型,使用NIN网络提取视频中的时间特征和空间特征,两类高层特征融合后使用SVR模型进行回归预测浪高值。训练后的模型可以实现实时(30次/s)的自动检测。
(4)浪高预测模块。
基于WAVEWATCH Ⅲ第三代海浪数值模式[17],自然资源部北海局建立了业务化海浪预报模式,用于日常的预报业务。为丰富海浪预报手段,协助预报员进行浪高预报,该文设计了浪高预测模块,使用长短期记忆网络(long short term memory,LSTM)[18]根据最近36个小时的浪高信息预测未来12个小时或24个小时的浪高,为浪高预报业务提供参考。
(5)浪高可视化模块。
近海与远海区域浪高值一般不尽相同,应采用一种直观的方式展示海浪面不同区域的浪高情况。因此,该文设计将浪高值映射为伪彩色,并以一定透明度叠加在原视频帧上,使海浪面不同区域的浪高情况一目了然。
系统的关键技术包括视频流接入、视频预处理、浪高检测、浪高可视化和浪高预测,其中视频预处理、浪高检测与浪高预测三个模块是核心模块。海浪监控视频接入系统后,经关键帧提取、光照去除和归一化等预处理后,进入浪高检测模块,检测所得浪高数据输入浪高预测模块用于预测任务,其协作处理过程如图2所示。
图2 视频预处理、浪高检测与浪高预测协作过程
海浪监控视频从接入系统到前端播放需要经过一系列的处理,视频流接入在系统中扮演着重要角色。考虑到需要同时接入来自海岸多个监控站点的持续视频流信号并进行实时处理,首先,基于多线程为每一个接入系统的监控站点创建独立的线程,每个线程将海浪视频拆分为连续的图像帧,在进行浪高检测前,将每一帧图像封装为flv格式的视频流;其次,采用稳定、低延时的实时消息传输协议(real time messaging protocol,RTMP)[19]将视频流推送至Nginx[20]服务器的不同地址,切换观测站点时,Web前端根据所要切换的站点名称从Nginx服务器获取直播视频流并播放;最后,为方便后续研究,系统对近海岸监控视频进行自动截断保存,接入与保存视频方法如下:
(1)接入视频:来自海岸各监控站点的视频信号经高清晰多媒体接口(high definition multimedia interface,HDMI)输出,通过视频采集卡将视频接入电脑,读取电脑的摄像头设备即可获取监控站点的视频信号。
(2)保存视频:通过对图像帧的计数,结合摄像头的帧率,可以控制每个视频文件的时长,从而实现对监控视频的自动截断保存。比如摄像头的帧率为30帧每秒,若要对监控视频每隔1个小时截断保存,那么当图像帧的计数达到108 000的整数倍时,对视频进行截断保存。
将来自近海岸监控摄像头的视频拆分为图像帧,每隔n个帧抽取一个帧作为关键帧。在进行单点浪高检测时,要从近海岸无礁石、遮挡物的视频区域中选取一块图像做进一步处理,考虑到距离摄像头较远的地方会有一定的视觉信息丢失,靠近礁石会有白浪,因此在选取视频区域时选择图像中部位置,然后根据模型输入的要求进行裁剪缩放并归一化[7]。在进行海浪“面”检测时,设计使用累加帧差并结合形态学操作的方法来去除干扰物,具体方案流程如图3所示。
图3 干扰物去除流程
设视频序列的连续两帧源图像分别为f(k)(x,y)和f(k+1)(x,y),其差分图像D(k,k+1)可表示为:
D(k,k+1)=|f(k+1)(x,y)-f(k)(x,y)|
(1)
对连续n帧图像帧差累加结果为:
(2)
为了除去由源图像内在噪声产生的帧差图像的非零差值,需要选取阈值T对累积差分图D进行二值化处理得到图像D'。此时图像D'中依然包含很多噪声,需要对其进行去噪处理。闭运算是对图像进行膨胀操作后再进行腐蚀操作,图像膨胀公式如下:
A⊕B={x|(B)x∩A≠Θ}
(3)
图像腐蚀公式如下:
A-B={x|Bx⊆A}
(4)
闭运算常用于填充前景中的空洞,因此对图像D'进行闭运算以去除前景中的噪声,从而生成掩码图,在浪高检测前用于屏蔽含有干扰物的区域。
考虑到海浪视频中蕴含丰富的时域信息和空域信息,为此使用差分帧和预处理后的视频帧作为数据集,分别训练了用于提取时域特征的NIN网络和提取空域特征的NIN网络,这两个NIN网络分别从时域和空域各提取20个高层特征,两类高层特征融合后使用SVR模型回归预测浪高值。
NIN网络由多个多层感知卷积层(multilayer perceptron convolution layer,Mlpconv)和全局平均池化层组成,传统的卷积层中对局部感受野的运算是一个简单的卷积操作,卷积层通过线性卷积滤波器生成特征图,随后是非线性激活函数,以Relu激活函数为例,特征图的计算公式如下所示:
(5)
式中,(i,j)是特征图中像素的索引,xi,j是位置为(i,j)处的输入,k是特征图通道的索引。Mlpconv实际上是在卷积层后添加了两层感知层,对每个局部感受野进行更加复杂的运算,因此Mlpconv具有更强的抽象能力,Mlpconv特征图的计算公式如下所示:
(6)
(7)
式中,n是多层感知器的层数。与传统的卷积神经网络相比,NIN网络能更充分地从每个局部感受野提取特征,因此更适用于从对比度低、细节丰富的海浪视频提取特征。在本系统中,搭建并训练了两个NIN网络模型,分别用于提取时域特征和空域特征,最后将两类特征进行串行融合,得到融合后的特征F。
经NIN网络提取海浪视频中的时空特征后,使用回归模型对浪高值进行回归预测。普通的线性回归模型计算速度快,但对于异常值敏感,而多项式回归模型需要手动设置多项式次数,因此该文使用SVR模型进行浪高检测。
(8)
(9)
式中,K(Fi,Fj)为核函数,鉴于NIN网络提取的高层特征与浪高值呈高度非线性,因此使用具有强大非线性映射能力的高斯核函数。
浪高可视化的具体流程为:首先使用前文所述干扰物去除方法生成掩码图,然后将原视频帧分割为若干个尺寸相同的区域。根据掩码图排除含有干扰物的区域,得到若干待检测海浪图片,对其预处理后输入模型进行浪高检测,并将所得浪高值存储在与原视频帧同样大小的二维矩阵的对应位置,据此二维矩阵创建伪彩色图层,最后将伪彩色图层以一定透明度覆盖在原图像上。
LSTM网络是循环神经网络(recurrent neural network,RNN)的一种改进模型,每一个LSTM单元拥有一个记忆单元(cell),在t时刻的状态记为ct,其值通过输入门(input gate)、遗忘门(forget gate)和输出门(output gate)更新,它们一般使用sigmoid或tanh函数进行激活。记忆单元的工作流程如下:在时刻t,记忆单元通过3个门接收当前状态xt与上一时刻记忆单元的隐藏状态ht-1,此外,每一个门还接收记忆单元的状态ct-1。接收到输入信息后,每一个门对不同来源的输入进行计算,并且由其激活函数决定其是否激活。输入门的输入经非线性变换后,与经过遗忘门处理过的记忆单元状态进行组合,产生新的记忆单元状态ct。最后,记忆单元状态ct通过非线性运算和输出门的控制产生记忆单元的输出ht。
对于不同的任务,LSTM具有不同的结构,在浪高预测任务中,使用多对多的LSTM结构,如图4所示,LSTM框架设置为5个LSTM层和1个全连接层。使用各监控站点真实历史浪高作为数据集,训练了一个适用于多个监控站点的浪高预测模型,其输入为过去36个浪高值,即过去36个小时的浪高值,输出为24个浪高值,即未来24个小时的浪高预测值。
图4 LSTM框架
根据《海洋预报和警报发布 第2部分:海浪预报和警报发布》将浪高分为10个浪高等级,并根据浪高发出警报[21],警报等级如表1所示。浪高值检测频率最高可达2次/秒,这里设置为每分钟的平均浪高(一般传统浮标每10分钟向接收站发送一次数据[22])。
表1 海浪警报等级
根据前文介绍的浪高可视化方案,系统对监控视频的每一帧添加伪彩色图层,由于对整个海浪“面”检测需要进行大量计算,耗时较高,因此,系统降低检测频率以保证直播视频的流畅性。
根据用户选择的站点,系统自动调用训练好的浪高预测模型,进行未来12个小时和24个小时的浪高预测,并根据预测浪高值发出预警。
历史浪高页面的窗口左侧播放历史监控视频,右侧是当前视频的浪高数据,包括最大浪高、最小浪高和平均浪高,使用曲线图展示每个时刻对应的浪高。
根据对多路摄像头视频进行实时检测与预测浪高的需求,设计并实现了近岸海面视频监控下的浪高实时检测预测系统。在系统的设计实现过程中,主要解决了三个问题:(1)如何从近海岸监控视频中提取实时浪高信息;(2)如何根据已有的浪高信息对未来一段时间的浪高进行预测;(3)对多个观测站点并行检测浪高的同时,如何实现站点实时切换。对于问题(1),设计使用卷积神经网络从海浪视频中提取海浪的高层特征,然后使用SVR模型对提取的高层特征进行回归预测浪高值。对于问题(2),设计了基于LSTM的浪高预测方法,根据过去36个小时的浪高信息预测未来12个小时的浪高信息。对于问题(3),设计了多线程调度策略和观测站点切换方案。最终,实现了一个稳定高效的近岸浪高实时检测预测系统,该系统具有多观测站点并行检测、站点切换、自动截断保存监控视频和存储浪高数据等功能,在满足业务化检测需求的基础上,具有检测频率高、经济实用等优点,能够较好地协助浪高预报人员的工作,对节约浪高检测成本以及丰富海浪观测手段具有重要意义。