基于神经网络的视频编码NNVC(1):帧内预测
在H.266/VVC发布后,基于传统编码框架提升压缩率越来越难,随着深度学习的发展,研究人员开始尝试将神经网络引入编码器。为此,JVET工作组在2020年成立AHG11小组来专门进行基于神经网络的视频编码的研究。

为了方便研究,工作组基于VTM-11.0开发了参考软件NNVC,包含了编码器、解码器、训练、推理等相关代码。目前NNVC中集成了的神经网络相关的模块主要是loop filter、帧内预测、超分辨率等。目前NNVC已经发展到4.0版本,相比于VTM-11.0在RA、low-delay和all-intra配置下{Y,Cb,Cr}的BD-rate分别达到{-11.94%,-21.86%,-22.59%},{-9.18%,-19.76%,-20.92%}和{-10.63%,-21.56%,-23.02%}。本文主要介绍其中的NN-Based Intra Prediction模块。

Framework
NN-Based Intra Prediction共包含7个模型,分别用于不同尺寸的块{4x4,4x8,4x16,4x32,8x8,8x16,16x16}。

对于wxh的块Y使用NN-Based Intra Prediction模型预测的过程如Fig.1。首先获取Y的上下文X,X通过前处理过程得到,然后作为NN模型
的输入,模型输出
,经过后处理得到wxh的预测块
。其中Y的参考像素X由Y的上方
和左侧
的重建像素构成。NN模型的输出还包括grpIdx1、grpIdx2和repIdx,其中grpIdx和LFNST的参数选择有关。repIdx对应传统的67个帧内预测模式和MPM构建相关。
NN-Based Intra Prediction中的模型都是全连接神经网络,不包含卷积层。
If min(h,w)≤8 && hw<256:n_a=n_l=min(h,w)
otherwise:if h>8:n_a=h⁄2otherwise:n_a=hif w>8:n_l=w⁄2otherwise:n_l=wIf h≤8, e_h=4. Otherwise, e_h=0.
If w≤8, e_w=4. Otherwise, e_w=0.
前处理和后处理
在上面的流程中,上下文X经过前处理后再输入NN模型,前处理过程可分为4步:
-
当前块Y的上下文X可分为2个部分,可参考部分
和不可参考部分
,如Fig.2,可参考部分减去其对应的均值u。
-
上下文X内的像素乘以
,b是bitdepth,在VVC中是10。
-
所有不可参考像素
置零。
-
上面得到的结果展平为一维向量,长度为

对于NN模型的输出的后处理过程和前处理过程相反,将一维向量reshape为wxh尺寸,像素除以p,可参考部分像素加上均值u,然后clip到正常像素范围,整个过程可以描述如下:
注意上述前处理和后处理过程是浮点精度。对于signed-integers的NN模型,,对于int16,Qin=7,对于int32,Qin=23。
MPM列表构建
使用MPM对intra模式进行预测可以减少编码intra模式的码率,在VVC中MPM列表包含6个候选项,来自当前块上方和左侧intra块的模式。在开启NN-Based Intra Prediction后,若当前块采用传统intra模式,而其相邻块采用NN-based模式,那如何构建当前块的MPM列表?这里就需要Fig.1中NN模型的输出repIdx,若相邻块采用NN-based模式则将其输出的repIdx加入当前块的MPM列表。
上下文变换
前面提到NN-Based Intra Prediction共包含7个模型,分别用于不同尺寸的块{4x4,4x8,4x16,4x32,8x8,8x16,16x16}。但是有的编码块可能不属于这7个尺寸,为了解决整个问题可以对其上下文X进行变换,变换后满足这7个尺寸,可以在垂直方向下采样δ和/或在水平方向下采样γ,还可以进行转置,NN模型处理完后对后处理的结果再进行上采样和转置得到最终预测结果。表1中是各个尺寸块进行变换的具体参数,例如对于32x8的块在垂直方向进行2倍下采样然后转置得到8x16的块,使用8x16的模型对它处理。对于不在表1中的尺寸的块(h,w)不允许使用NN模式。

NN-Based Intra Prediction模式的传输
亮度:对于不在表1中的尺寸不允许使用NN模式,对于表1中的尺寸的块设置标志位nnFlagY,nnFlagY=1表示使用NN模式,nnFlagY=0表示使用传统的intra模式。如Fig.3所示。
色度:在VVC中色度intra模式编码中,若色度模式和亮度模式相同则采用DM模式否则需要编码色度模式。如果色度对应的亮度块使用NN模式且色度块满足表1的尺寸则DM模式表示NN模式否则DM模式表示PLANAR模式。如果亮度块不是NN模式且色度块满足表1尺寸,则需要编码标志位nnFlagC,nnFlagC=1表示使用NN模式,nnFlagC=0表示不使用NN模式。
注意如果使用NN模式但是当前块的上下文超出图像边界,如,则当前块使用PLANAR模式。

训练
模型的训练需要进行4轮迭代训练:
-
cycle0,使用VTM-11.0作为anchor生成训练需要的块Y和对应的上下文X组成数据对(Y,X)。将7个模型参数随机初始化然后在这些数据上训练。
-
cycle1,VTM-11.0_nnvc使用cycle0的参数再次生成训练数据,7个模式使用cycle0的结果初始化参数然后再训练。
-
cycle2,VTM-11.0_nnvc使用cycle1的参数再次生成训练数据,7个模式使用cycle1的结果初始化参数然后再训练。然后使用相同的训练数据,恢复这7个神经网络的训练,这一次对它们的权重引入了稀疏性约束
-
cycle3,VTM-11.0_nnvc使用cycle2的参数再次生成训练数据,7个模式使用cycle2的结果初始化参数,然后在这7个神经网络中分别对计算grpIdx1和grpIdx2的部分进行训练

NNVC的代码中包含了这些训练代码。
推理
推理采用SADL框架,SADL是工作组开发的框架用c++写成,它没有额外的依赖,可以直接集成进VTM中调用模型进行推理。

SADL既可以进行浮点推理也可以进行定点推理,下面是NNVC中的训练好的模型,可以看到每个尺寸既有float版本也有int16版本。

相关文章:
基于神经网络的视频编码NNVC(1):帧内预测
在H.266/VVC发布后,基于传统编码框架提升压缩率越来越难,随着深度学习的发展,研究人员开始尝试将神经网络引入编码器。为此,JVET工作组在2020年成立AHG11小组来专门进行基于神经网络的视频编码的研究。 为了方便研究,工…...
Android开发,待办事项提醒App的设计与实现
文章目录 1. 研究目的2. 主要内容3. 运行效果图4. 涉及到的技术点5. 开发环境6. 关于作者其它项目视频教程介绍 1. 研究目的 当今,随着时代的发展和计算机的普及,人们开始利用网络来记录并管理日常的事务,时下这方面的软件数不胜数。各种日程管理软件就是将每天的工作和事务安…...
豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)
文章目录 豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)写在前面数据采集(Visual Studio Code+Navicat)1.观察网页信息2.编写Scrapy代码(Visual Studio Code)2.1 创建Scrapy项目`doubanProject`2.2 创建爬虫脚本`douban.py`2.3 修改`douban.py`的代码2…...
MySQL索引——让查询飞起来
文章目录 索引是什么??硬件理解MySQL与存储 MySQL 与磁盘交互基本单位索引的理解B vs B聚簇索引 VS 非聚簇索引索引操作创建主键索引唯一索引的创建普通索引的创建全文索引的创建查询索引删除索引 在现代数据库应用中,查询性能是决定系统响应…...
Springboot集成Elasticsearch8.0(ES)版本,采用JAVA Client方式进行连接和实现CRUD操作
本文章介绍了 springboot t集成Elasticsearch8.0(ES)版本,如何通过 AVA Client方式进行连接和实现CRUD操作 在ES7.15版本之后,ES官方将高级客户端 RestHighLevelClient标记为弃用状态。同时推出了全新的 Java API客户端 Elasticsearch Java API Client,该客户端也将在 Ela…...
【Linux】APT 密钥管理迁移指南:有效解决 apt-key 弃用警告
引言 随着 Debian 11 和 Ubuntu 22.04 版本的推出,APT 的密钥管理方式发生了重大的变化。apt-key 命令被正式弃用,新的密钥管理机制要求使用 /etc/apt/keyrings/ 或 /etc/apt/trusted.gpg.d/ 来存储和管理密钥。这一变化对管理员和普通用户来说至关重要…...
洛谷P1143 进制转换
题目链接:P1143 进制转换 - 洛谷 | 计算机科学教育新生态 题目难度:普及— 解题思路:本题先将输入的数转为10进制,然后取模,最后倒着输出就好了,最后直接上代码 #include<bits/stdc.h> using namespa…...
99.12 金融难点通俗解释:毛利率
目录 0. 承前1. 简述2. 比喻:冰淇淋店赚钱2.1 第一步:准备材料2.2 第二步:卖冰淇淋2.3 第三步:计算毛利率 3. 生活中的例子3.1 好的毛利率3.2 一般的毛利率3.3 差的毛利率 4. 小朋友要注意4.1 毛利率高不一定好4.2 毛利率低不一定…...
HUMANITY’S LAST EXAM (HLE) 综述:人工智能领域的“最终考试”
论文地址:Humanity’s Last Exam 1. 背景与动机 随着大型语言模型(LLMs)能力的飞速发展,其在数学、编程、生物等领域的任务表现已超越人类。为了系统地衡量这些能力,LLMs 需要接受基准测试(Benchmarks&…...
C++从入门到实战(二)C++命名空间
C从入门到实战(二)C命名空间 前言一、C的第一个程序二、命名空间(一)为什么需要命名空间(二)定义命名空间(三)使用命名空间1.通过命名空间限定符:2.使用 using 声明&…...
C# OpenCV机器视觉:实现农作物病害检测
在酷热难耐的夏日,阳光似火舌般舔舐大地。阿强惬意地躺在老家院子摇椅上,哼着小曲,手边放着一碗冰镇西瓜,头顶大槐树宛如巨大遮阳伞,洒下斑驳阴凉。他本想趁假期回老家放松,远离城市喧嚣与代码 “纠缠”。 …...
开源软件协议介绍
一、可以闭源使用/不具传染性的协议 允许商业使用和分发 1、BSD:详细介绍 2、LGPL许可证:详细介绍 3、MPL2.0:详细介绍 二、具有传染性/使用后需要开源自身软件的协议 不建议商业使用 1、GPL许可证:详细介绍...
CLion开发Qt桌面
IDE:CLion Qt Qt版本:5.12 学习正点原子的嵌入式Linux开发板时,使用Qt Creator写代码不是很方便,遂尝试使用CLion搭建Qt开发环境。 一、CLion的Qt环境搭建 1,配置工具链 找到Qt的安装目录,此处为E:\Tools\…...
09_异步加载_单例模式_常量类配置_不可销毁
1.首先在 资源加载服务层ResSvc.cs中添加 自定义异步加载函数 using UnityEngine; using UnityEngine.SceneManagement; //异步加载 命名空间 //功能 : 资源加载服务 public class ResSvc : MonoBehaviour{public void InitSvc(){Debug.Log("Init ResSvc...");}//自定…...
士的宁(strychnine)的生物合成-文献精读104
Biosynthesis of strychnine 士的宁(strychnine) 又名 番木鳖碱 的生物合成 摘要 士的宁(番木鳖碱)是一种天然产物,通过分离、结构阐明和合成努力,塑造了有机化学领域。目前,士的宁因其强大的…...
【开源免费】基于Vue和SpringBoot的常规应急物资管理系统(附论文)
本文项目编号 T 159 ,文末自助获取源码 \color{red}{T159,文末自助获取源码} T159,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
(Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计
源码 论文 下载地址: cc基于JAVA的网络通讯系统设计与实现(源码系统论文)https://download.csdn.net/download/weixin_39682092/90299782https://download.csdn.net/download/weixin_39682092/90299782 第1章 绪论 1.1 课题选择的…...
ray.rllib 入门实践-2:配置算法
前言: ray.rllib的算法配置方式有多种,网上的不同教程各不相同,有的互不兼容,本文汇总罗列了多种算法配置方式,给出推荐,并在最后给出可运行代码。 四种配置方式 方法1 import os from ray.rllib.algori…...
2025-01学习笔记
1.SpEL 第一次知道它的全称 Spring Expression Language(SpEL) Value("${my.property}") private String myProperty; Value("#{2 * 3}") private int computedValue; 2.逃逸分析 逃逸分析:当一个对象在方法中被定…...
多线程执行大批量数据查询
// 创建一个固定大小的线程池ExecutorService executorService Executors.newFixedThreadPool(5);// 创建多个查询任务List<Callable<List<ShopCompareBase>>> tasks new ArrayList<>();//查询门店 切割,分成十份List<List<String>> sho…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
