基于学习的编码(二):使用CNN对intra frame进行环路滤波_Dillon2015的博客-程序员宅基地

技术标签: H.266/VVC  VVC  CNN  环路滤波  视频编码  h.265/hevc  VTM  

基于学习的编码(二):使用CNN对intra frame进行环路滤波

本文算法来自JVET-O0157

介绍

为了取代VVC环路滤波中的去方块滤波(DBF)提出来一种下采样的CNN滤波器。该CNN滤波器在降低神经网络复杂度的同时能保持编码效率。它是一个轻量级CNN网络,能够高效的控制CNN滤波强度以应对不同量化参数。只用于intra frame

滤波过程

下图展示了针对intra frame加入CNN后的环路滤波过程,DBF被CNN替换了。对于inter frame环路滤波和VTM中一样。

 

网络结构

下图展示了该CNN的网络结构。其中N表示下采样步长,M表示卷积核通道数。核心思想是通过下采样减少计算量,通过控制强度使单个网络可以用于不同QP。

 

 

CNN过程:

  1. (N,N,M)卷积层(N倍下采样)用于提取特征。

  2. 将特征传给多个residual block来加强滤波。

  3. (3,3,NxN)卷积层输出NxN的特征图,DepthToSpace 函数将特征图映射为和输入图像尺寸一致。

滤波强度

网络中除以和乘以Qstep 的目的是控制滤波强度。

 

对不同Qstep 进行round操作会造成不同水平的失真。所以重建图像在传给CNN之前除以正则化的Qstep 来控制失真水平,CNN处理后乘以正则化的Qstep

正则化的Qstep求解过程如下:

 

训练

使用DIV2K数据集(含800幅图像)生成训练数据。首先将每幅图像由RGB转为YUV。然后禁用VTM5.0的环路滤波在All Intra(AI)配置下生成重建图像。然后在Y分量随机裁剪800000块,UV分量随机裁剪800000块,训练两组参数。

 

实验结果

下面是N=4,M=32下的测试结果:

 

下面是一个主观比较,可以看到脖子处的块效应被消除了。

 

该方法在VTM5.0中用预训练的CNN模型取代DBF,在AI配置下Y、U、V的BD-Rate分别-1.44%,-2.51%,-3.39%。解码时间为1040%。

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

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Dillon2015/article/details/106846889

智能推荐

在ubuntu中运行exe文件_iteye_3753的博客-程序员宅基地

exe文件执行是要依靠Windows系统的库,linux系统肯定不支持。不过如果你在linux安装Wine软件,可以安装运行一般小型的Windows程序。Wine的安装;1. 安装 wineubuntu 官方自带了 wine , 但是推荐用 winehq 官方提供的最新版本 wine , 新版本解决了很多以前显得麻烦的问题, 请照下边说的来安装先增加签名::wget -q http://wine....

计算两个日期之间,相差多少天C语言详解_cdhuangjin-的博客-程序员宅基地

问题描述:如2019-12-27与2017-11-7,相差780天。编译环境:vc++6.0代码:#include <stdio.h>/*计算两个日期之间相差多少天*/struct date{ int years; int months; int days;};int days_on_month[13] = { 0,31,28,31,30,31,30,31,3...

Adblock Plus 下载 | Google 插件下载_小浩算法的博客-程序员宅基地

作用下载人数全球超过5000万人都在使用adblock plus,这个chrome插件完全免费,能够屏蔽整个互联网广告的插件你见过吗?那就是Adblock Plus!Adblock Plus牛在哪里?在谷歌开发者商店里面有4000万以上的下载!10,000,000+ 位用户 !下载地址 ...

Linux 升级openSSH详细教程_啊嘞嘞嘞嘞的博客-程序员宅基地

简书:https://www.jianshu.com/p/1b3d2b7b649a

kettle pdi8.2 连接mysql8_woailyoo0000的博客-程序员宅基地

mysql-connector-java-5.1.41-bin.jar 只支持到5.1的,mysql8的连接只能在pdi8/simple-jndi/jdbc.properties文件中增加如下代码:MYSQL8_DB/type=javax.sql.DataSourceMYSQL8_DB/driver=com.mysql.cj.jdbc.DriverMYSQL8_DB/url=jdbc:mysql://127.0.0.1:3306/kettle?useUnicode=true&chara..

docker 2375无法链接的问题_随风404的博客-程序员宅基地

vim /usr/lib/systemd/system/docker.serviceExecStart修改为以下内容ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock重启systemctl daemon-reload177 systemctl restart docker178 ...

随便推点

Linux swap命令_韩湘的博客-程序员宅基地

swapoff :关闭系统交换分区 参数 -a 关闭所有交换设备 选择参数 -h 帮助信息 -V 版本信息显示分区信息: sfdisk -l关闭交换分区: swapoff /交换分区swap文件路径/swap文件一关一开可以刷新swap设置 swapoff -a swapon -a 查询swap优先级: sysctl -q vm.swappiness修改swa

iOS 性能优化:使用 MetricKit 2.0 收集数据_普通网友的博客-程序员宅基地

Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群▲扫码关注添加客服进Java社群▲作者:Jerry4me,iOS 开发者,目前就职于字...

vue中keep-alive组件实现多级嵌套路由的缓存_"<keep-alive :include=\"cachedviews\">"_花名森林的博客-程序员宅基地

现状(问题):keep-alive 组件对第三级及以上级的路由页面缓存失效探索方案:方案1、直接将路由扁平化配置,都放在一级或二级路由中方案2、再一层缓存组件用来过渡,并将其name配置到include中实现方式方案1不需要例子,按规则配置路由就行重点介绍方案2因为我用了vue-element-admin做了架构,并且项目中我将菜单和路由全部通过服务端返回做了统一配置,所以我只能用方案2来实现。直接看原有代码(问题代码)// src/layout/component/..

浙大互联网协会(INA)2020~2021学年纳新启动!_weixin_37097665的博客-程序员宅基地

ZJUINA 2020学年纳新启动!协会简介浙江大学互联网协会(INA),旨在聚集并培养浙大互联网领域最优秀的人才,为浙大有志于进入互联网行业发展的同学提供最优秀的学习平台和人际网络。协...

windows7下的OMNeT++4.6 Inet MiXiM 安装_黑斧阿胡的博客-程序员宅基地

windows7下的OMNeT++4.6 Inet MiXiM 安装安装omnet++4.6安装omnet++4.6最近要用到omnet这个仿真软件, 国内很少, 但是国外无线传感器网络方向的论文不少都使用了这个软件。但是相关资料非常少是这个软件很让人头疼的地方, 不同版本支持的扩展工具不同。从翻墙到更换不同版本来匹配不同的工具, 浪费了不少时间。大部分资料说只有omnet++4.2版本跟mi...

pytorch训练的模型在onnx和mnn中的使用(python+cpp调用)_setintraopnumthreads_喝粥也会胖的唐僧的博客-程序员宅基地

pytorch自身部署较麻烦,一般使用onnx和mnn较为实用训练模型的代码:import torchimport torch.nn as nnimport torchvisionimport torchvision.transforms as transformsimport torch.optim as optimfrom torch.optim import lr_schedulerimport torch.onnxif __name__ == '__main__':

推荐文章

热门文章

相关标签