马赛克:人类文明进步的绊脚石,宅男的死敌,老司机的噩梦。从马赛克诞生起,人类和马赛克的斗争就从未停止。
马赛克将图片某区域的细节劣化,造成色块打乱的效果。哪怕是国民动画《喜洋洋与灰太狼》这样纯洁的动画,加上马赛克,也会让人浮想联翩,面红耳赤
对于程序员来说,如果女生问我们最多的问题是:如何装系统?那么男生问的最多的问题肯定是:咋去除马赛克
。如果有人问你能不能去除马赛克?你可以给他肯定的答复:不能,马赛克是不可逆的。
但是,但是!你可以脑补啊 ,那玩意看多了,被打码的地方啥样,自己心里没数么?但对于一个正常人来说,我这里说的是正常人啊,即使你阅片无数,给你一个严重打码的美女照片,你也很难脑补出这个美女长啥样,原因有两个:
2. 你没有建立 美女马赛克 到 美女原图 的联系
有的小伙伴就说了,我不吃不喝,就只看美女图片和对应的马赛克图。当我看了足够多,给我一个打码的美女图片,我脑海里会不会立马涌现这个美女长啥样 ?
妙啊,乍一听还真有点东西。难道这就是 “心中无码,便是高清” ?
但是,人的脑容量就那么大,不吃不喝能看多少美女图片啊?但是计算机就不一样了,计算机可以不吃不喝的工作,只要性能足够顶,容量足够大,它可每日每夜的"看片"。
如果计算机把 马赛克 -> 原图 这个规律记录下来,给它一个打码的图片,它是不是就能复原了?
想象很美好,现实很残酷。计算机也没办法做到 100% 还原到打马赛克之前的状态,也只能“脑补”。只不过计算机能看大量的图片,脑补出来的效果更好。
现在有没有这样的软件或者算法,能够根据马赛克图片脑补出"原图"呢?答案是有的,而且还开源了,开源地址会在文末给出。2014 年,生成对抗网络(GAN)技术的提出,让这种设想成为了可能,搞算法的小伙伴对这个技术肯定不陌生。
前段时间闹的沸沸扬扬的“一键脱衣”、Deepfake、ZAO 等软件都是基于这个技术。一键脱衣:就是给算法输入一张穿衣服的美女图片,它能 "脑补" 出没有穿衣的图片,计算机看过的图片越多,脑补的效果越好,是不是很羡慕?
这里简单说一下这个技术的原理吧,我简单举个例子,保证你能理解。大概感受一下什么是 GAN:
我有两个朋友,一个朋友是造假红酒的,另一个朋友是鉴别假酒的品鉴师。刚开始呢,造假红酒的哥们还是一个小白,他不太会造假酒。于是将自己造的假酒和真酒一起给品鉴师。品鉴师对每瓶酒进行品鉴,去判断哪瓶酒是真的,哪瓶酒是假的。
然后品鉴师会向这个造假红酒的哥们给出反馈,比如说:“不行啊,你这酒一喝就知道是假的啊!”造假红酒的那哥们回到自己的作坊,根据品鉴师的反馈,开始制作一些新的假酒。
随着时间的推移,二人一来一往的交流,造假者的造假能力迅速提升,越来越擅长造假酒,品鉴师也变得越来越擅长品出假酒。终于有一天,品鉴师说:“这次我品不出来了,我也不知道是真是假。” 这样,造假者终于造出了足以以假乱真的红酒。
那去马赛克,一键脱衣,又是怎么淦(GAN)出来的?
以给大雄去码为例,很简单嘛,将打码的图片输入到一个生成器里面,这个生成器具有去除马赛克的能力(刚开始能力很弱),生成器可以生成去码后的图片,并将它交给大雄鉴别师,大雄鉴别师会判断这个是没打码的大雄还是去除马赛克的大雄。这样一来二去,生成器去除马赛克的能力就非常强了。
其实 GAN 的思想是一种二人零和博弈思想(two-player game),博弈双方总的利益是一致的,即都是提升自己的能力。
是不是以为今天推的是水文,看到这儿是不是逼格瞬间拔高?
半年前,美国杜克大学研发出一种 AI 算法,叫做:PULSE(Photo Upsampling via Latent Space Exploration)。这个算法就是基于 GAN,该算法可以通过给图片增加像素点来实现去码或高清化。
下面这个动图就是算法的效果,复原结果真的很真实。每个头发丝、每个毛孔都非常逼真,甚至嘴上的光泽都能生成。
这里解释一下,生成后的高清图不是打码之前的原图啊,我前面也说了,马赛克是不可逆的。生成的高清图只是 AI 算法 “脑补” 的。
比如你看下面这张图,第一行是原图,第二行是打码的图片,第三行算法脑补的图片,脑补图和原图还是不一样的。
如果算法生成的图片和原图一模一样,那估计这些科学家都得崩溃。就像你敲了几百行代码,一运行 0 error,惊呼:卧槽!这他妈的不科学啊。
这个算法已经开源,现在已经 4.6 K 的 Star 了。大家可以去 GitHub 上搜索 PULSE,搞下来自己运行下,看看效果。
除了这个开源项目,还有一个项目最近非常火。这个项目刚刚发布,没一个星期就接近 1W 的 Star 了。
效果图是下图这样,第一行是打码的英文,看看这码打得,估计 TM 的连亲妈都认不出来,第二行是复原效果,第三行是原图。
即使有些细节没复原除了,但是猜测是哪个单词足够了。
对了,有的小伙伴可能会问了,除了给图片去码,视频可不可以呢?
答案是:可以
,还是基于 GAN 的技术:TecoGAN。TecoGAN 非常强大,可以给视频去马赛克或者进行超分辨率。TecoGAN 目前 GitHub 标星 3.1K,地址如下:
https://github.com/thunil/TecoGAN
去马赛克的效果图可以去这个 GitHub 仓库中去看,因为用的是蜘蛛、蜥蜴、蛇的视频,我怕有的小伙伴顶不住我就不放这了。
而且最刺激的是,你不用从头把 TecoGAN 项目跑起来,就可以在你的电脑上应用这一强大技术:已经有软件集成了 TecoGAN 的技术:JavPlayer,这糟糕的名字 ...
「JavPlayer」就是利用了「TecoGAN」 + 「Video Super Resolution」项目制作出来的工具。去马赛克主要就是靠「TecoGAN」技术。
Javplayer 软件具有强大的超分辨率算法,可以容易去除视频、图片文件中的马赛克图层,为您还原最真实的画面,对比各类同类马赛克去除软件,它可以将部分作品还原度高达 90%。
我迫不及待地测试了一下这款软件,发现默认的软件包是没有集成 TecoGAN 技术的,想要实现 TecoGAN 技术,需要插件。所谓插件,其实就是用 PyInstaller 打包好的 TecoGAN 的 Tensorflow 模型 ( 已经训练完成的模型:也就是见过足够多的视频 )
安装了这款软件,再加上这个插件,你就有了 2 位职业去码师。Normal 模式是初级去码师,TecoGAN 模式是资深去码师。
注:使用「TecoGAN」插件需要兼容 AVX 的 CPU,SandyBridge 或更高版本,i3或更高版本。另外要求64 位 Windows 系统。
以最近特别火的赛博朋克 2077 的宣传片为例,我截取了其中的一小段来进行去码实验:
首先,原片长这样(GIF比较大,可能加载比较慢):
这是选择设置为 Normal 时,输出的去码效果:
可以发现,利用 TecoGAN 进行去码效果稍微好了那么一丢丢。特定的边缘会更加锐利,但效果并不像 TecoGAN 的官方 GitHub 的示例那么好,我推测,应该是 TecoGAN 模型的训练数据和我们输入的测试视频差异较大所致。
实际上 TecoGAN 插件,还可以实现若干其它功能,我们看下它不同的模式:
-
TG-STD:超分辨率
-
TG-AFL:抗闪烁
-
TG-ASH:防抖
-
TG-X4:全区域超分辨率
因本篇内容所限,我就不一一测试展示了,感兴趣的各位可以自己尝试。本文提到的开源项目获取方式:转发本文章或者点个在看,扫描关注下方微信公众号后台回复「1214」获取下载链接。
[1] https://blog.csdn.net/u014626748/article/details/88415675
[2] https://github.com/thunil/TecoGAN
[
3] https://github.com/adamian98/pulse
本文分享自微信公众号 - Java后端(web_resource)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。