当前位置: 首页 > news >正文

基于神经网络的视频编码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通过前处理过程得到\tilde{X},然后作为NN模型f_{h,w}( .;\theta _{h,w})的输入,模型输出\tilde{Y},经过后处理得到wxh的预测块\hat{Y}。其中Y的参考像素X由Y的上方n_{a} \times ( n_{l} +2w+e_{w})和左侧( 2h+e_{h}) \times n_{l}的重建像素构成。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步:

  1. 当前块Y的上下文X可分为2个部分,可参考部分\overline{X}和不可参考部分X_{u},如Fig.2,可参考部分减去其对应的均值u。

  2. 上下文X内的像素乘以\rho =1/\left( 2^{b-8}\right),b是bitdepth,在VVC中是10。

  3. 所有不可参考像素X_{u}置零。

  4. 上面得到的结果展平为一维向量,长度为n_{a}( n_{l} +2w+e_{w}) +( 2h+e_{h}) n_{l}

对于NN模型的输出的后处理过程和前处理过程相反,将一维向量reshape为wxh尺寸,像素除以p,可参考部分像素加上均值u,然后clip到正常像素范围,整个过程可以描述如下:

\hat{Y} =min\left( max\left(\frac{reshape\left(\tilde{Y}\right)}{\rho } +u,0\right) ,2^{b} -1\right)

注意上述前处理和后处理过程是浮点精度。对于signed-integers的NN模型,\rho =2^{Q_{in} -b-8},对于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模式但是当前块的上下文超出图像边界,如x< n_{l} ||y< n_{a},则当前块使用PLANAR模式。

训练

模型的训练需要进行4轮迭代训练:

  1. cycle0,使用VTM-11.0作为anchor生成训练需要的块Y和对应的上下文X组成数据对(Y,X)。将7个模型参数随机初始化然后在这些数据上训练。

  2. cycle1,VTM-11.0_nnvc使用cycle0的参数再次生成训练数据,7个模式使用cycle0的结果初始化参数然后再训练。

  3. cycle2,VTM-11.0_nnvc使用cycle1的参数再次生成训练数据,7个模式使用cycle1的结果初始化参数然后再训练。然后使用相同的训练数据,恢复这7个神经网络的训练,这一次对它们的权重引入了稀疏性约束

  4. 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发布后&#xff0c;基于传统编码框架提升压缩率越来越难&#xff0c;随着深度学习的发展&#xff0c;研究人员开始尝试将神经网络引入编码器。为此&#xff0c;JVET工作组在2020年成立AHG11小组来专门进行基于神经网络的视频编码的研究。 为了方便研究&#xff0c;工…...

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索引——让查询飞起来

文章目录 索引是什么&#xff1f;&#xff1f;硬件理解MySQL与存储 MySQL 与磁盘交互基本单位索引的理解B vs B聚簇索引 VS 非聚簇索引索引操作创建主键索引唯一索引的创建普通索引的创建全文索引的创建查询索引删除索引 在现代数据库应用中&#xff0c;查询性能是决定系统响应…...

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 版本的推出&#xff0c;APT 的密钥管理方式发生了重大的变化。apt-key 命令被正式弃用&#xff0c;新的密钥管理机制要求使用 /etc/apt/keyrings/ 或 /etc/apt/trusted.gpg.d/ 来存储和管理密钥。这一变化对管理员和普通用户来说至关重要…...

洛谷P1143 进制转换

题目链接&#xff1a;P1143 进制转换 - 洛谷 | 计算机科学教育新生态 题目难度&#xff1a;普及— 解题思路&#xff1a;本题先将输入的数转为10进制&#xff0c;然后取模&#xff0c;最后倒着输出就好了&#xff0c;最后直接上代码 #include<bits/stdc.h> using namespa…...

99.12 金融难点通俗解释:毛利率

目录 0. 承前1. 简述2. 比喻&#xff1a;冰淇淋店赚钱2.1 第一步&#xff1a;准备材料2.2 第二步&#xff1a;卖冰淇淋2.3 第三步&#xff1a;计算毛利率 3. 生活中的例子3.1 好的毛利率3.2 一般的毛利率3.3 差的毛利率 4. 小朋友要注意4.1 毛利率高不一定好4.2 毛利率低不一定…...

HUMANITY’S LAST EXAM (HLE) 综述:人工智能领域的“最终考试”

论文地址&#xff1a;Humanity’s Last Exam 1. 背景与动机 随着大型语言模型&#xff08;LLMs&#xff09;能力的飞速发展&#xff0c;其在数学、编程、生物等领域的任务表现已超越人类。为了系统地衡量这些能力&#xff0c;LLMs 需要接受基准测试&#xff08;Benchmarks&…...

C++从入门到实战(二)C++命名空间

C从入门到实战&#xff08;二&#xff09;C命名空间 前言一、C的第一个程序二、命名空间&#xff08;一&#xff09;为什么需要命名空间&#xff08;二&#xff09;定义命名空间&#xff08;三&#xff09;使用命名空间1.通过命名空间限定符&#xff1a;2.使用 using 声明&…...

C# OpenCV机器视觉:实现农作物病害检测

在酷热难耐的夏日&#xff0c;阳光似火舌般舔舐大地。阿强惬意地躺在老家院子摇椅上&#xff0c;哼着小曲&#xff0c;手边放着一碗冰镇西瓜&#xff0c;头顶大槐树宛如巨大遮阳伞&#xff0c;洒下斑驳阴凉。他本想趁假期回老家放松&#xff0c;远离城市喧嚣与代码 “纠缠”。 …...

开源软件协议介绍

一、可以闭源使用/不具传染性的协议 允许商业使用和分发 1、BSD&#xff1a;详细介绍 2、LGPL许可证&#xff1a;详细介绍 3、MPL2.0&#xff1a;详细介绍 二、具有传染性/使用后需要开源自身软件的协议 不建议商业使用 1、GPL许可证&#xff1a;详细介绍...

CLion开发Qt桌面

IDE&#xff1a;CLion Qt Qt版本&#xff1a;5.12 学习正点原子的嵌入式Linux开发板时&#xff0c;使用Qt Creator写代码不是很方便&#xff0c;遂尝试使用CLion搭建Qt开发环境。 一、CLion的Qt环境搭建 1&#xff0c;配置工具链 找到Qt的安装目录&#xff0c;此处为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 士的宁&#xff08;strychnine&#xff09; 又名 番木鳖碱 的生物合成 摘要 士的宁&#xff08;番木鳖碱&#xff09;是一种天然产物&#xff0c;通过分离、结构阐明和合成努力&#xff0c;塑造了有机化学领域。目前&#xff0c;士的宁因其强大的…...

【开源免费】基于Vue和SpringBoot的常规应急物资管理系统(附论文)

本文项目编号 T 159 &#xff0c;文末自助获取源码 \color{red}{T159&#xff0c;文末自助获取源码} T159&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

(Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计

源码 论文 下载地址&#xff1a; ​​​​c​​​​​​c基于JAVA的网络通讯系统设计与实现(源码系统论文&#xff09;https://download.csdn.net/download/weixin_39682092/90299782https://download.csdn.net/download/weixin_39682092/90299782 第1章 绪论 1.1 课题选择的…...

ray.rllib 入门实践-2:配置算法

前言&#xff1a; ray.rllib的算法配置方式有多种&#xff0c;网上的不同教程各不相同&#xff0c;有的互不兼容&#xff0c;本文汇总罗列了多种算法配置方式&#xff0c;给出推荐&#xff0c;并在最后给出可运行代码。 四种配置方式 方法1 import os from ray.rllib.algori…...

2025-01学习笔记

1.SpEL 第一次知道它的全称 Spring Expression Language&#xff08;SpEL&#xff09; Value("${my.property}") private String myProperty; Value("#{2 * 3}") private int computedValue; 2.逃逸分析 逃逸分析&#xff1a;当一个对象在方法中被定…...

多线程执行大批量数据查询

// 创建一个固定大小的线程池ExecutorService executorService Executors.newFixedThreadPool(5);// 创建多个查询任务List<Callable<List<ShopCompareBase>>> tasks new ArrayList<>();//查询门店 切割,分成十份List<List<String>> sho…...

ChatGPT高效处理图片技巧使用详解

ChatGPT&#xff0c;作为OpenAI开发的预训练语言模型&#xff0c;主要用于生成自然语言文本的任务。然而&#xff0c;通过一些技巧和策略&#xff0c;我们可以将ChatGPT与图像处理模型结合&#xff0c;实现一定程度上的图像优化和处理。本文将详细介绍如何使用ChatGPT高效处理图…...

leetcode——相交链表(java)

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…...

RubyFPV开源代码之系统简介

RubyFPV开源代码之系统简介 1. 源由2. 工程架构3. 特性介绍&#xff08;软件&#xff09;3.1 特性亮点3.2 数字优势3.3 使用功能 4. DEMO推荐&#xff08;硬件&#xff09;4.1 天空端4.2 地面端4.3 按键硬件Raspberry PiRadxa 3W/E/C 5. 软件设计6. 参考资料 1. 源由 RubyFPV以…...

麦田物语学习笔记:创建TransitionManager控制人物场景切换

基本流程 制作场景之间的切换 1.代码思路 (1)为了实现不同场景切换,并且保持当前的persistentScene一直存在,则需要一个Manager去控制场景的加载和卸载,并且在加载每一个场景之后,都要将当前的场景Set Active Scene,保证其为激活的场景,在卸载的时候也可以方便调用当前激活的场…...

后端SpringBoot学习项目-用户管理-增删改查-service层

仓库地址 在初版代码中&#xff0c;已经实现了基础的增删改查。 但是&#xff0c;逻辑处理都放在Controller层中并没有分为Service层&#xff0c;所以&#xff0c;代码升级时候必须补充上去。 代码结构 升级后的代码结构有所变化。 --common 公共插件 --controller…...

机器学习11-学习路径推荐

机器学习11-学习路径推荐 本文希望摒除AI学习商业宣传要素&#xff0c;推荐一条极简的AI学习路线&#xff01;推荐内容均为在线免费内容&#xff0c;如果有条件可以咨询专业的培训机构&#xff01; 文章目录 机器学习11-学习路径推荐[toc] 1-AI培训路线第一阶段 Python-人工智能…...

[ACTF2020 新生赛]Upload1

题目 以为是前端验证&#xff0c;试了一下PHP传不上去 可以创建一个1.phtml文件。对.phtml文件的解释: 是一个嵌入了PHP脚本的html页面。将以下代码写入该文件中 <script languagephp>eval($_POST[md]);</script><script languagephp>system(cat /flag);&l…...

【PyTorch】0.初识:从吃货角度理解张量

0.初识张量 PyTorch 是一个 Python 深度学习框架&#xff0c;它将数据封装成张量&#xff08;Tensor&#xff09;来进行运算。PyTorch 中的张量就是元素为同一种数据类型的多维矩阵。在 PyTorch 中&#xff0c;张量以 "类" 的形式封装起来&#xff0c;对张量的一些运…...

医学图像分析工具09.1:Brainstorm安装教程

1. 安装前准备 **官方安装包和数据&#xff1a;**https://neuroimage.usc.edu/bst/download.php **官方安装教程&#xff1a;**https://neuroimage.usc.edu/brainstorm/Installation Matlab 版本要求&#xff1a; 有 Matlab&#xff1a; R2009b (7.9) 或更高版本没有 Matlab&…...

springboot基于Spring Boot的智慧养老服务系统的设计与实现

系统介绍&#xff1a; 智慧养老服务系统是一种运用现代科技手段&#xff0c;整合各类养老资源&#xff0c;为老年人提供全方位、个性化服务的综合性平台。该系统通过智能化设备、大数据分析、云计算等技术&#xff0c;实现对老年人健康状况、生活需求的实时监控与精准匹配&…...