基于神经网络的视频编码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…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
