小科普 | 去 马 赛 克 (下)
前两天咱们聊到了《给图片去马赛克》(戳这里),对于静态图像的修复,效果不尽人意,其实和Waifu2X等软件的超分辨率差不多,对二次元平面画效果不错,但三次元人像并没有多大用。或许是因为算法不够强,也可能是数据样本不够多,那么今天我们来试试对视频处理,能有几把刷子。
▌JavPlayer
这是个视频播放器,就是名字有点奇怪,别多想了只是作者名字叫Javski(也有说法他是发起人,软件是DMM做的)。其实上期评论区有朋友已经猜到了,有官网(javplayerfree.com/cn)但附带网盘链接并没有用,所以还是得找搬运站下载(52pojie.cn/thread-1183980-1-1.html)。
(注:TrialVersion试用版是有限制的,640p,限时1分钟,VR模式下最多10分钟)软件本体其实就130MB左右,带上TecoGAN、CUDA、ffmpeg、cudnn、waifu2x、DeepCreamPy等组件后,(1.09版)体积会直接飙到4个多GB...
因为直接打包了tensorflow、caffe深度学习框架,没有轻量化的AI图像生成网络,软件比较臃肿,优点是可以直接调用CUDA加速,2060Super在处理1080P视频的时候,默认处理60帧占用率20%左右,如果帧率不设限,最高能飙到70%左右的占用率。
界面很简单,甚至有点寒酸,也只有英文,不知道的还以为是个垃圾全家桶安装出来的捆绑软件:
把视频拖进去就能播放,视频分辨率太低,或者纯粹的模糊化处理,无法检测到马赛克,则不会产生任何效果。如果背景本身就是网格图案,可以处理整个屏幕,支持mp4、wmv、mkv、avi、jpg、png格式。DRM保护的视频不能处理,要么只有自己录屏。马赛克程度越低,色块越小越多越密集,信息量越多、效果越好。我们来看一下默认的播放动画效果:
涂抹感很严重,虽然确实完全去的掉了马赛克,但就像镜头脏了一样,模糊的没有细节。另外视频播放的时候,其实模糊的地方是有一种微微抖动的抽搐感。如果效果不满意,可以在右上角设置栏调整:
一般默认自动就可以了。因为效果默认的确不咋地。右上角其他几个栏目对应“设置、尺寸、调色、3D”比较常见就不多说了。左上角也有压制和截图功能,压制好的版本会在文件根目录“Movie”文件夹,“TG”文件夹用于存储深度学习的样本。
跑录制的效果好很多,但非常费时间,1小时电影可能要几十个小时渲染,比如直接用以前在视频里提到的Gigapixel AI超分辨率软件,或者Anime4K、Waifu2X。下面就简单看一下效果对比:
对人物厚码大色块的处理其实看小图还行,但实际播放还是有抖动感,勉强能用吧,总比啥都看不见好。
对比较简单的画面+薄码,动态观感好很多,但文字信息还是没办法,只能变成模糊的墨点。
对构成复杂的画面,哪怕用薄码,还是很糊,虽然灰阶过渡很自然,但本该清晰的手指外圈交界线,却也变模糊了,也就是说,它并不能分清画面哪些地方该锐利、哪些地方模糊。
动漫人途的厚码效果倒是还行,糊归糊,起码形态复原的蛮好。
如果画面中有半透明图层叠加、或者镜面反射,那复原效果会大打折扣,只能还原成一个面,看着就像画面上打了个补丁一样。
虽然看起来就和上了个模糊遮罩一样,其实原理和效果都更复杂些,通过亚像素运动补偿 + 视频超分辨率(Video SuperResolution)处理,超分辨率滤波器,对视频动态变化的劣化函数推算出逆向函数,配合一些涂抹、锐化的算法,一定程度上修复画面。最简单的有插值补偿算法,比方说临近值算法,
其中也用到了实现视频超分辨率的新型GAN ——TecoGAN,它是基于深度学习的视频超分辨率算法,需要支持AVX指令集的CPU(SandyBridge以上)和64bit Windows。有GitHub项目(github.com/thunil/TecoGAN)但实际效果并没有宣传的这么好,不知道是不是有什么前置条件。
其中GAN就是对抗生成网络(GenerativeAdversarial Networks)的意思,Lan Goodfellow于2014年提出,训练生成模型,用于增强学习(ReinforcementLearning)的框架中,预测帧通过balabala我也看不懂的巨复杂过程,目的就是以假乱真。
不过在JavPlayer中实时播放的效果并没什么惊喜感,效果可能和摘了眼镜差不多。按照油管上一个视频的演示对比来看(youtu.be/nL71CgE5bzw),如果跑渲染通过TecoGAN+Waifu效果还是很不错的:
不过这种算法对动漫的“暗牧”、“圣骑”还是没辙的,毕竟画面本身就没有信息。
另外用起来感觉没有根据前后帧动态变化,进行深度判断,动态画面的边缘总是会有鬼影和抖动,观感并不好。咱们以前说到的DAIN架构补帧,倒是用上了深度判断。
▌总结
其实目前的软件,哪怕用精妙的算法长时间渲染,结果也未必很好,很别说实时了。所谓AI修复,也不能真正还原,毕竟马赛克这种有损处理是不可逆的,你可以理解为“人屁股上贴罗非鱼皮”再真实也不是原来那张人皮。
另外也有一套给文字去马赛克的算法,来自国内的AI-Lab工程师RimoChan的NightBeam项目(github.com/RimoChan/Night-Beam)。条件相对比较苛刻,得知道文字的位置和字号,还得是英文等宽,但成功率真的挺高的,只不过文本有码的应用场景还蛮少的。
但任何东西都是在发展的,不妨试想一下:AI图像超分辨率的未来,是否可以做到,通过一个小巧的样本集,哪怕视频数据量很小、只保留关键信息,其他全靠实时演算还原,实现超高压缩比的数据存储呢?
其实深度学习在游戏中的应用应该更早普及,DLSS用一些细节画质换帧数,虽然画质的确不如原生高分辨率,但在流畅的使用体验下,画面小小的牺牲也变得微不足道。
但视频嘛,虽然需求并不小,但画面作为主要呈现手段,肉眼是很苛刻的,暂时不能令人满意。说不定以后显卡厂商加把劲,能把深度学习也用在视频播放上,驱动自带,降低使用门槛。
但我相信,真正的勇士,早就做到了,眼中有码,心中无码。
最后祝你身体健康,再见。
▼