MPEG/VCEG/JVET下的基于神经网络的视频编码(Neural Network-based Video Compression)探索标准从21年开始设定为探索实验EE1,由AHG11进行维护。
考虑到中文现存的参考模型总结资料较少,本文将对NNVC工作项进行简单总结、性能数据存档,作演进前瞻与相关讨论。
本文以介绍NNVC环路滤波(in-loop filter)工具为主。
#TODO:后续介绍其他NN工具。
SoftWare
- NNVC仓库:https://vcgit.hhi.fraunhofer.de/jvet-ahg-nnvc/VVCSoftware_VTM
- 模型推理使用 SADL 库:https://vcgit.hhi.fraunhofer.de/jvet-ahg-nnvc/sadl
- 通用测试条件(CTC):JVET-AI2016
- 维护与开发指引:JVET-AI2007,JVET-AC2003
一般建议开展的EE1测试的算法复杂度应低于现有NNVC工具(kMAC/pxl需要必须低于;参数量Number of Parameters建议低于,即运算复杂度kMAC/pxl是更受关注和控制的指标)。
现存工具选项
NNVC开启的工具选项可以通过命令行option指定生效。参数如下表所示。
Variant | Command-line | Model name | Comment | Reference |
---|---|---|---|---|
NN intra | –NnIntraPred=1 | –PrefixAbsolutePathsToGraphsOutput= models/intra | Used for NNVC anchor | JVET-AC0116 |
NN intra low complexity | –NnIntraPred=1 | –PrefixAbsolutePathsToGraphsOutput= models/intra2 | Half complexity in worst case | JVET-AF0139 |
LOP2 | –NnlfOption=1 | –NnlfModelName= nnlf_lop2_model_int16.sadl | Anchor ILF method for JVET-AF, AG, AH meetings | JVET-AF0043 |
LOP2 b | –NnlfOption=1 | –NnlfModelName= nnlf_lop2_AH0042 _model_int16.sadl | Improved training for LOP2 | JVET-AH0042 |
LOP3 | –NnlfOption=3 | –NnlfModelName= nnlf_lop3_model_int16.sadl | NNVC anchor since JVET-AI | JVET-AH0080 |
LOP3 AH0081 | –NnlfOption=3 | –NnlfModelName= nnlf_lop3_AH0081_model_int16.sadl | LOP3 with 3 stages training | JVET-AH0081 |
VLOP | –NnlfOption=1 | –NnlfModelName= nnlf_vlop_model_int16.sadl | JVET-AH0051 | |
HOP1 | –NnlfOption=1 | –NnlfModelName= nnlf_hop_model_int16.sadl | JVET-AF0041 | |
HOP3 | –NnlfOption=1 | –NnlfModelName= nnlf_hop3_model_int16.sadl | JVET-AG0174 | |
HOP4 | –NnlfOption=4 | –NnlfModelName= nnlf_hop4_model_int16.sadl | JVET-AH0205 & JVET-AH0189 | |
LOP2 adaptive | –NnlfOption=1 | Encoder and decoder:–NnlfModelName= nnlf_lop2_model_int16.sadlEncoder only (split RA):–NnfuEnabled=1–NumNnfus=1–NnfuPayloadFileName0= /path/to/nnr/bitstream–NnfuModelFileName0= /path/to/sequence/qp/segment/modelDecoder only:–NnfuOutputFileStem= </path/to/file/stem> | JVET-AH0096 | |
NNSR | -c nn-based/nnsr/nnsr_classAx_sx.cfg | –NnsrModelName=super_resolution/NNVC_SR_int16.sadl | Different options for A1 and A2 | |
RPR | -c nn-based/nnsr/nnsr_classAx_sx.cfg | –NnsrModelName=default_rpr | Different options for A1 and A2 | |
NNPF | –SEINNPFCEnabled=1–SEINNPFAEnabled=1 | –LCModelPath= models/NnlfSetLC/LC_int16_model0.sadl, models/NnlfSetLC/LC_int16_model1.sadl, models/NnlfSetLC/LC_int16_model2.sadl, models/NnlfSetLC/LC_int16_model3.sadl–NnpfModelPath=/path/to/sequence/qp/segment/model | Check cfg/nn-based/nnpf/ for full params | JVET-AC0055 |
废弃的旧工具:
Variant | Command-line | Model name |
---|---|---|
LOP1 | –NnlfOption=12 | |
Filterset0 | –NnlfOption=10 | –NnlfModelName=NnlfSet0_model_int16.sadl |
Filterset1 | –NnlfOption=11 | –NnlfModelName=NnlfSet1_ChromaCNNFilter_InterSlice_int16.sadlNnlfSet1_ChromaCNNFilter_IntraSlice_int16.sadlNnlfSet1_LumaCNNFilter_InterSlice_int16.sadlNnlfSet1_LumaCNNFilter_IntraSlice_int16.sadl |
遵循CTC,现有NNVC-9.1参考模型默认开启NNLF- LOP3 和 NNLF-Intra.
算法原理与性能
1. 低复杂度运算点LOP
架构简介
环路滤波器的输入是重建的亮度和色度样本(Rec)、预测的亮度和色度样本(Pred)、亮度和色度的边界强度信息(BS)、基质QP(QPbase)、切片QP(QPslice)和块预测信息(IPB)。
- 亮度输入被转换,即大小为 WxH 的输入亮度通过每个 2x2 子块的 2x2 DCT-II 变换进行转换,并重塑为 (W/2)x(H/2)x4,其中 4 代表四个频率通道。然后,将转换后的亮度样本与色度 U 和 V 通道连接,形成 (W/2)x(H/2)x6 的大小。
- 对于色度重建样本,由于上采样为 2,因此每个 2x2 子块都是常数,无需应用变换。
下图展示了尺寸为 144x144 的重建样本示例。大小为 144x144x1 的输入亮度被转换并重塑为 72x72x4。
- 对于 Rec、Pred 和 BS,应用的转换将应用于亮度。对于 QPbase 和 QPslice,由于它们是常数,因此无需应用变换,直接将其重塑为 (W/2)x(H/2)x1。对于IPB,由于只有亮度信息,因此将其转换并重塑为(W/2)x(H/2)x4
- 转换后的输入由核大小为 3x3 或 1x1 的卷积层处理,并连接起来进行融合和过渡。在融合和过渡模块中,使用了 1x3 和 3x1 的可分离卷积以及因子为 2 的下采样。然后,网络分裂为两个分支,一个分支用于亮度,一个分支用于色度。每个分支由顺序的主干块组成,每个主干块由一个 PReLU、一个具有 1x1 内核的卷积层、一个具有 1x3 和 3x1 内核的可分离卷积层以及一个具有 1x1 内核的卷积层组成。
- 在输出侧,PixelShuffle 应用于亮度输出,反向 DCT 应用于亮度和色度,使输出恢复到与输入相同的空间大小。
性能
复杂度表现
2. 极低复杂度运算点(VLOP)
复杂度打到5kMAC/pixel,VLOP 被定义为对 LOP2 架构的修改,通过在transition阶段引入可分离卷积并更改网络配置(例如通道和层数)以实现目标复杂度水平。
VLOP 模型按照改进的 LOP2 训练程序、使用 Stage 3 LOP2 数据集进行训练。
性能
3. 高工作点 (HOP) 模型
架构简介
目标复杂度为470kMAC/pixel。(HOP1-HOP4基本都在这个数量级)
在HOP4中,由重建的 YUV 样本(UV 数据在空间上上采样到 Y 分辨率)和补充数据组成的输入数据:预测信息、deblocking 参数 (BS)、量化(QPBase、QPSlice)和编码模式信息,由 HeadBlock (HB) 并行处理并连接。HB 的输出由融合和过渡块 (FTB) 处理,该模块实现数据融合和空间下采样。FTB的输出由Backbone处理,该处理由一系列Backbone Blocks(BB)组成。滤波通过 Tailblock 和亮度/色度分离完成。
HOP几代模型基本是逐项演进而来:从AD0380的统一滤波器架构开始,AF041中演进为HOP1;AF0155、AF0180演进为HOP2;AG0174演进为HOP3;AH0205、AH0189演进为HOP4结构。
HOP4对HOP3的修改,主要是引入了 Attention 机制。主干由 24 个主干块 (BB) 组成,其中两个块(id=8 和 id=15)通过注意力 (BB+A) 增强。受注意力机制引入影响的模块在图中以红色显示。
性能
参考资料存档
- HOP设计和训练选择:JVET-AD0380
- 训练过程:AE0042
- 训练结果:AE0191
- 训练程序与结果:AE0289
- Stage II 模型:AE0291
- HOP 完整结果:AF0041
#TODO:NNVC架构中有一些小细节都是比较巧妙的设计,例如编解码侧复杂度优化、DBF blending、QP调整等。后续或可单进行介绍分析。
4. loop filter Set 0
已经不维护的旧架构。
除了重建图像(rec_yuv),其他的side information也被输入到网络中,例如预测图像(pred_yuv)、切片 QP、基础 QP 和切片类型。
- 复杂度:485kMax/pxl (frame-level input), 615kMax/pxl (block-level input)
- 参数量:3.8MB (int model)
5. Loop filter Set 1
Set 1 中有两个常规网络,一个用于亮度,另一个用于色度。
-
亮度网络的输入包括重建的亮度样本(rec)、预测亮度样本(pred)、边界强度(bs)、QP和块类型(IPB)
-
对于色度ILF,亮度信息被用作色度环内滤波的附加输入。考虑到 luma 的分辨率高于 YUV 4:2:0 格式的色度,首先从 luma 和 chroma 中分离提取特征。然后,对亮度特征进行下采样,并与色度特征连接。色度网络的输入包括重建的亮度样本 (recY)、重建的色度样本 (recUV)、预测的色度样本 (predUV)、边界强度 (bsUV) 和 QP.
luma和chroma所用骨干网络都是相同的。
- 复杂度:532kMax/pxl (frame-level input), 673kMax/pxl (block-level input)
- 参数量:3.1MB (int model, luma & chroma)
组合测试结果
AI0023报告了现有参考模型NNVC-9.1各个基本工具的性能。可见各工具处于一定的tradeoff边界限上。