丁冬冬,陈世平
(上海理工大学光电信息与计算机工程学院,上海 200093)
随着数字化时代的到来,监控视频的存储与传输数据量越来越大,无压缩的视频将会消耗巨大的带宽和存储资源,而高效的视频编码算法可以解决视频压缩问题,码率控制是视频编码中非常重要的技术模块。现主流的编码标准有VP9[1],AVC(H.264)[2],HEVC(H.265)[3]和AV1[4]等系列,均可以对视频进行压缩编码,但是没有考虑到监控视频的特殊性[5],大多数固定摄像头安装后场景基本不变,我们称固定不变的背景为后景,移动的人或者物称为前景,就监控视频而言,前景一般为感兴趣区域(ROI)[6]。
近些年来深度学习在很多领域都取得了突破性成果,本文基于两阶段Mask R-CNN 实例分割算法,将监控视频中的前后景进行分离,计算出前后景占比,为后续码率控制模型改进做准备。
对于监控视频的码率控制,本文所提算法降低了视频平均比特率且提高了前景比例高的帧数图像的质量,视频比特率平均降低7.59kbps,PSNR 平均提升0.1141dB。
HEVC采用R-λ码率控制模型[7]:
其中,R 为编码码率,一般使用每像素比特数bpp 来表示,D 为失真,一般使用亮度分量的均方误差MSE,c和k为常数。
R-λ码率控制模型中的λ是RD曲线的斜率,所以对式⑴中R两边求导:
其中,α=ck,β=-k-1,α 和β 为编码参数,一般和视频序列的内容有关。
HEVC码率控制通常分为两个步骤:
一般分为三个等级,分别为画面组(GOP)级比特分配、帧(Frame)级比特分配、最大编码单元(LCU)级比特分配。
一开始先定义视频序列平均每帧的比特数:
其中,为视频序列平均每帧的比特数,Rtg为目标比特,FrRate为帧率。
1.1.1 GOP级比特分配
视频在编码前被划分为多个连续的GOP,其中分配给GOP的目标比特数TGOP为[8]:
其中,为分配给Frame 的平均比特数,NGOP为一个GOP所包含的图像数.。
1.1.2 Frame级比特分配
对于每一个GOP 中,又由多帧图像组成,分配给每帧图像的目标比特数TPic为:
其中,TGOP为分配给GOP 的目标比特数,RGOPCoded为当前GOP 已消耗比特数,ωPic为当前GOP 中每一帧图像比特分配权重,ωPicCurr为当前帧图像的比特分配权重。
1.1.3 LCU级比特分配
对于每一幅图像,HEVC会将其划分为多个最大编码单元为LCU,分配给每个LCU的目标比特数TLCU为:
其中,TPic为分配给Frame的目标比特数,BitH为所有头信息编码所需比特数,RPicCoded为当前Frame 已消耗比特数。
计算拉格朗日乘数λ和量化参数QP。
1.2.1 拉格朗日乘数λ的计算
根据式⑵,利用R 来计算拉格朗日乘数λ,式⑵中α 和β 为编码参数,一般和视频序列的内容有关,所以这里每一个Frame和LCU对应的α和β都不相同:
其中,Rreal为编码中实际使用的每像素比特数,λreal为编码中实际使用λ,δα和δβ为常数,用于调节公式的收敛速度。
1.2.2 量化参数QP的确定
量化参数QP,体现图像细节压缩情况。其值越小,量化越精细,图像质量越高。当拉格朗日乘数λ确定以后,就可以进一步计算QP:
其中,a和b为模型参数,取值为4.2005和13.7122[9]。
对于感兴趣区域(ROI)的图像分割[10],传统的图像分割算法在一些特殊场景分割效果较差,如树叶摇曳会被识别为前景,且无法指定识别特殊前景,深度学习Mask R-CNN[11]算法可以解决这些问题。Mask R-CNN 基于Faster R-CNN[12],是一个两阶段的实例分割算法,是在目标检测基础上再进行实例分割,第一阶段先对输入的图像进行扫描,然后生成建议框,第二阶段分类建议框,然后生成边界框和掩码。
图1 为主干网络简化过程,Mask R-CNN 对输入进来的图像的有尺寸要求,首先对输入的图像进行预处理,将处理后的图像输入到一个预训练完成的神经网络中(ResNet50,ResNet101[13]等)获得对应的特征图,对这个特征图中的每个位置都设置一定数目不同大小的先验框(Anchor),从而获得多个候选先验框,将这些候选的先验框送入区域建议网络(RPN)进行二值分类(前景或后景)以及坐标回归,选出有价值的先验框。
图1 主干网络简化图
将上述选出的先验框进行ROIAlign 操作,最终对这些先验框进行N 类别分类,候选框回归和引入全卷积网络(FCN)[14]生成Mask,完成分割任务。
监控视频的前后景划分较为明显,前景一般为感兴趣区域,针对这一情况,本文在R-λ 码率控制模型上进行改进。
利用MaskR-CNN 深度学习算法将视频每一帧的前后景进行分离,定义前景所占比例Rforground为:
其中,Sforground为视频一帧图像前景所占面积,Sbackground为视频一帧图像后景所占面积。
在Frame 级比特分配算法中,无法根据监控视频本身特点对每一帧图像进行更合理地分配的目标比特,故将式⑸进行改进。因为监控视频感兴趣区域一般为前景,人们希望前景占比高的图像更加清晰,将式⑾的计算结果引入式⑸,根据当前帧图像前景比例,调整分配给当前帧的比特数,得到:
其中,TGOP为分配给GOP 的目标比特数,RGOPCoded为当前GOP 已消耗比特数,ωPic为当前GOP 中每一帧图像比特分配权重,ωPicCurr为当前帧图像的比特分配权重,Rforground为前GOP 中每一帧前景所占比例,RforgroundCurr为当前帧前景所占比例,ε为权重调节常数,用于调整原公式参数与新引入参数权重。
本文实验的硬件为Intel Core i7-8750H 处理器,NVIDIA GeForce GTX 1070 显卡、16GB 内存。
软件 环境为Anaconda-3,CUDA-10.0,Python-3.6,tensorflow-gpu-1.13.1,keras-2.1.5,本文使用在COCO数据集上预训练权重mask_rcnn_coco.h5,对视频图像进行前后景分割,将前景用不同颜色标记,效果如图2所示。
图2 MaskR-CNN分割效果图
再根据式⑽计算出每一帧图像的前景所占比例,为后面计算做准备。
使用HEVC 参考软件HM-16[15]进行实验,测试图像数据为hall_cif.yuv、container_cif.yuv 和bridgeclose_cif.yuv,分别编号1,2,3。将HM-16与本文的改进算法视频编码结果作对比。以hall_cif.yuv 为例,图3 左侧为HM16 算法编码后的图像,右侧为本文算法编码后的图像。因原始视频分辨率较低,对局部细节进行放大后观察,得到图4,图4 左侧为HM16 算法进行编码后的局部放大细节图像,右侧为本文提出的改进算法编码后局部放大细节图像。
图3 HM16算法与改进算法图像对比
图4 放大细节图像对比
图4 左侧和右侧图像对比,可以看出监控视频中前景人物裤子细节图像质量有一定的提升。
因原始视频分辨率较低,人眼对结果图像主观感受有所差别。本文再根据客观数据进一步进行验证。分别选取量化参数QP 为22,27,32,37进行实验,这里预设的QP值越大,编码后质量越低。
实验后得到不同QP 下HM16 算法与本文提出的改进算法编码后视频在比特率分配上和PSNR(Peak Signal to Noise Ratio)方面的对比。表1 为HM16 算法在不同QP 下编码得到的比特率和PSNR 值,表2 为本文改进的算法在不同QP 下编码得到的比特率和PSNR值,表3是表2数据与表1对应数据相减而得到,用于反映分配比特率的降低和编码质量的提升。
表1 HM16算法编码结果
表2 本文改进算法编码结果
表3 两种算法的差值
对于视频来说,在同等QP 下,一般视频分配的比特率越低,视频的最终传输及存储大小就会越低。从表3中可以看出本文提出的算法在比特率分配上有所降低,平均降低7.59kbps。
PSNR 为峰值信噪比,是一种广泛运用于评价视频画质的客观测量法。PSNR 值越大,代表着视频图像质量越好,人眼对Y 明亮度分量比U、V 分量要敏感,从表3中可以看出,本文提出的算法在Y-PSNR 和分量上和整体YUV-PSNR 都有一定的提升。整体YUV-PSNR平均提升0.1141dB。
本文针对监控视频特点,在HEVC 视频编码基础上,利用Mask R-CNN 对码率控制算法进行改进,从实验结果可见改进算法不仅降低了视频码率,且在视频质量上也有一定的提升,达到了目标效果。
实验中发现,因改进算法在原算法基础上增加了更多参数和分配指标,导致改进算法的编码时间高于HM16 算法编码时间,对于视频编码技术而言,编码时间也是算法非常重要的一部分,所以未来可以在此方面再做进一步优化。