deblock filter 研发阶段总结

一. 研发进展

工程链接:

  1. https://github.com/riverlight/qn-enh-sdk  算法封装成 ffmpeg filter 的工程
  2. https://github.com/riverlight/ImageRestoration_CNN deblock 模型

截止本周,deblock filter 的优化大约花费了5-6周时间,算法效果简单总结如下:

  1. psnr 提升
    在显著的块效应图片上,经过deblock处理后,psnr 约提升了 1.8db 
    在 32*32 的小样本图片上,普遍也取得了超过 1db 的psnr 改善
  2. 主观视觉提升
    对压缩块效应比较显著的视频,这种情况因为没有原始的清晰视频,故无法计算改善的psnr
    但 deblock 处理后,主观视觉改善是比较显著的
    这种case 是当前 deblock filter 在dora的典型应用场景,部分点播视频经过转码后,主观视觉体验可以得到提升
    当然,如果原始视频本身质量比较好,块效应不是很显著,则该 filter 改善效果会不显著
  3. 算法性能提升
    原始算法,对1280*720的单帧image,处理速度(cpu) 使用MNN框架跑约 9秒(单线程)
    目前在TRT 框架下,单帧处理速度约 45ms (GPU,GTX1060),提升还是比较显著的
  4. 演示图片及视频
    v-merge-deblock.mp4 这个是 deblock 的效果
    v-merge-low-deb.mp4 这个是 deblock + 暗光增强的效果
    这是图片演示效果,左边是原始图片,中间是过压缩的图片,最右边是deblock后的效果,该sample psnr 提升约 1.9db
     

二 过程总结

2.1 概述

    这是我们的第一个把深度学习技术应用于 dora 转码的项目,核心工作主要包括了数据集准备、算法模型设计、推理框架实践和性能优化等工作,这里都简要介绍下

2.2 算法介绍

    最终选择的模型结构是比较简单,如下图:

 

   过程中借鉴了微信扫码超分的模型(https://mp.weixin.qq.com/s/ZEthIoGsIm1KsHheWUviZg),但最终综合考虑TRT的推理性能,选择了一个最简化的模型,效果也还行

   数据集使用的是 VOC2012 图片集,然后对原始图片进行 jpg 高损伤压缩作为 噪声样本,数据集准备的脚本见 prepare.py

   损失函数比较简单,就测试了 L2 和 L1 loss,最终的结果是 L1 psnr 略高,最终选择的也是 L1 Loss

2.3 模型性能优化

   首先是推理引擎选择,测试了 阿里的MNN 和 nvidia的 TRT,最终选择的是 TRT,总的来说,这两个引擎感觉都不是很完美,MNN 现阶段还不算很完善,文档等方面都比较粗糙,TRT 比较适合 N卡,使用受限制,虽然对dora这个问题不大,另一个缺陷是 他不是开源的,在 windows10+mingw64 下似乎有bug(已提交nvidia),逼得我最后用的是 vs2019 把ffmpeg给编译出来了,MNN 也发现了一个类似bug,但因为开源,我就可以自己修复绕过去

   从dora的场景而言,应该是TRT或者 pytorch 更合适,未来如果应用到移动端,则应该是还是要用 MNN

   TRT 还有个问题就是对 ONNX 格式解析很慢,导致算法启动比较慢,大约20秒+

三 意外的收获

   这次有个意外的收获,就是使用 vs2019 把 ffmpeg 给编译出来了,这个对 windows 开发的同学意义还是很大的,参考的链接如下: https://my.oschina.net/u/4398200/blog/3336484 和 https://github.com/ShiftMediaProject/FFmpeg 

去块滤波(Deblock)是视频编码中的一种技术,用于减少压缩后图像的块状伪影和边界伪影。在VVC编码标准中,去块滤波是以CU(Coding Unit)为单元进行的。具体的去块滤波过程如下: 1. 首先,通过设置边界是否可用去块滤波,确定需要进行滤波的边界。这些边界包括内部子块边界、左侧边界和上侧边界。 2. 然后,遍历CU中的全部子TU(Transform Unit),设置子TU的垂直和水平边界,并根据边界长度确定需要进行滤波的像素数。 3. 接下来,遍历CU中的全部子PU(Prediction Unit),进行类似的边界设置过程。 4. 针对每个需要进行滤波的边界,先对边界进行排序,然后调用相应的滤波函数进行滤波。滤波过程包括对亮度分量和色度分量的滤波。 总的来说,去块滤波通过对CU、TU和PU进行边界设置,并调用相应的滤波函数对边界进行滤波,以减少压缩后图像的块状伪影和边界伪影。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [H.266/VVC技术学习之环路滤波:去块滤波(Deblock)技术](https://blog.csdn.net/BigDream123/article/details/115016745)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [H.266/VVC代码学习:去块滤波Deblock代码一](https://blog.csdn.net/BigDream123/article/details/115974424)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值