ICIP2020:利用CNN降低VVC帧内编码复杂度

2023-11-05 11:20

本文主要是介绍ICIP2020:利用CNN降低VVC帧内编码复杂度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文来自ICIP2020论文《CNN ORIENTED COMPLEXITY REDUCTION OF VVC INTRA ENCODER》

VVC复杂度增加很大一部分是因为其块划分方式,除了四叉树划分还支持二叉树和三叉树划分。该论文通过使用CNN在All Intra(AI)模式下预测块的划分方式减少计算复杂度。

上图Fig.1是VVC的块划分模式,二叉树和三叉树可以在水平和垂直方向上划分产生矩阵子块。VVC需要对每种划分模式计算RD cost,选择RD cost的作为最终模式计算量非常大。论文通过实现一个CNN,以64x64的亮度块作为输入,输出一个向量表示每个4x4块边界的概率。通过这个向量编码器可以跳过一些不可能的划分模式。

CNN结构

论文提出的CNN结构基于ResNet,如上图Fig.2所示。网络输入为64x64的亮度CU,输出为480维向量。由于帧内预测需要使用左边一列和上边一行的信息,所以实际网络输入为65x65。

上图Fig.3是CU划分和输出向量。例如向量第一个值表示左上角4x4块下边界的概率。

训练过程

训练就是通过优化CNN权重使得损失函数值最小,损失函数定义如下:

其中y是ground truth向量,lambda=10^-5,c_k是惩罚项。使用Adam optimizer来优化CNN网络。训练使用python3.6下的tensorflow框架以keras做后端。GPU为RTX 2080Ti,batch size为256,共训练10 epochs。

训练集由65x65的亮度块和对应的ground truth向量组成。65x65的亮度块从Div2k1数据集和4K图像数据集中提取出来。由于我们在AI配置下实验,所以只使用数据集中的静态图像而不是视频,这比只使用视频数据集的训练带来了更多的多样性。CNN输入的65x65的亮度块归一化到[0,1]。ground truth向量是将输入图像在VTM6.1 AI配置下编码后计算得到,收集每个64x64块的划分信息生成480维向量(1表示划分,0表示不划分)。

VTM中使用CNN

要在VTM6.1中集成上面训练好的CNN模型。由于CNN是在python中训练的,使用frugally-deep library在c++中调用。

上面Fig.3展示了使用CNN判断一些水平划分模式(BTH和TTH)是否跳过。边界划分概率通过下面方式计算,首先计算S1,S2,S3,S4的平均概率,分别表示为P(S1),P(S2),P(S3),P(S4)。BTH划分概率由S2和S3中较小的概率决定,

TTH划分概率由S1和S4计算,min(P(S1),P(S4))。垂直划分模式(BTV,TTV)计算方式类似。四叉树划分模式QT的划分概率由BTH和BTV的概率决定(即水平和垂直都进行二叉树划分相对于进行四叉树划分),

对上面的模式获得概率后就可以判断该边界是不是需要按该模式划分,

如果概率小于阈值beta则跳过该模式。当beta越大时,划分的次数越少,复杂度降低的更多同时编码失真也更大。论文中beta范围为[0,100]。

实验

实验在VTM6.1中AI配置下进行,操作系统为ubuntu16.04.5,Intel Xeon E5-2603处理器1.70GHz主频。测试集为官方测试序列,共包含26条序列分为6类, A (3840x2160),B (1920x1080), C (832x480), D (416x240), E (1280x720),F(832x480到1920x1080)。量化参数QP为22,27,32,37。

评价指标使用BD-Rate和复杂度降低(编码时间减少),

其中T-R是正常编码时间,T_C是加入文中算法后的编码时间(不包括CNN执行时间)。

上表是和几个算法的结果比较,beta=10,20,30。可以看到尤其是在高分辨率视频上文中算法表现更好,这是因为CNN的训练集由1080p和4k图像构成。

上图是本文算法和其他算法的复杂度降低与BD-Rate关系图。包括A-E序列,其中A-B序列用圆圈表示其他用叉表示。

更详细的内容请参考ICIP2020论文《CNN ORIENTED COMPLEXITY REDUCTION OF VVC INTRA ENCODER》

感兴趣的请关注微信公众号Video Coding

这篇关于ICIP2020:利用CNN降低VVC帧内编码复杂度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/349509

相关文章

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

VSCode中C/C++编码乱码问题的两种解决方法

《VSCode中C/C++编码乱码问题的两种解决方法》在中国地区,Windows系统中的cmd和PowerShell默认编码是GBK,但VSCode默认使用UTF-8编码,这种编码不一致会导致在VSC... 目录问题方法一:通过 Code Runner 插件调整编码配置步骤方法二:在 PowerShell

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常