人工智能去除马赛克有戏吗?(文字稿+神经网络运行步骤补充)
Posted Ele实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人工智能去除马赛克有戏吗?(文字稿+神经网络运行步骤补充)相关的知识,希望对你有一定的参考价值。
人工智能已经能够修复马赛克了?
我们开车的时候,一般讨厌两种人:一种加塞的,另一种就是不让我加塞的。马赛克也一样,我们既想用它保护我们的隐私,又不想让它阻挡了我们研究精品图片和小电影的探索之心。
但凡学术界或者工程界有和去除马赛克沾一点边的成果放出来,大家都如同饿狼一般,争先恐后的扑上去,但是往往都扑了个寂寞。
「大家真觉得马赛克真的有可能被去除吗?」
经过调查研究,我发现经常被提到的去除马赛克的技术大多来自深度学习,出现频率较高的有:
•DeepCreamPY•PULSE•TecoGAN
我们来看看这些被媒体吹捧,被软件二道贩子用来割韭菜的的所谓的“去除马赛克”的技术到底能不能做到你心中满意的效果。
DeepCreamPY
实验效果
DeepCreamPY的作者在介绍里说明参考的是 PEPSI这篇论文的实现,PEPSI的全称是“基于并行解码网络的快速图像修复”,输入的图像经过编码网络进行编码,然后再利用注意力机制模块和解码网络去除遮挡物。
基于PEPSI,DeepCreamPY的设计和训练目的则是用来处理某种特定类型的动漫条码遮挡,而不是通常意义上的马赛克。
首先我们来看一下它自带的这一张测试图片,经过一顿凶猛处理之后发现结果确实比较完美,手臂和肩膀等位置除了有一点淡淡的痕迹,基本上是完美修复,但是左脸部分有一些变形和模糊,不过基本满意。
随后我又自己添加了一些条码遮挡,发现线条和颜色比较简单的地方仍然可以比较完美的修复,但是在线条和色彩比较复杂的地方,就有点力不从心了。如果把条码加大力度,比如这双眼睛,补是补出来了,奏是有点不对劲啊!
如果让条码把眼睛全部挡起来,正所谓巧妇难为无米之炊,在彻底失去相关图形和颜色后,恢复的结果是眼睛直接消失了。看来DeepCreamPY并不具备基于人脸的任何推理能力。
虽然DeepCreamPY的作者一再强调它只能应用在动漫中,不能用于真人真事,我还是控制不住试了试。当然用的是大家的老熟人——建国同志。
结果很让人沮丧哈!这像极了被其他小朋友被胖揍之后,回家和妈妈哭鼻子的样子。
至于DeepCreamPY的去马赛克功能,非常的差,如果很优秀的话,作者的测试图片里也不至于不带一张马赛克图。
所以再遇到有人和你说基于DeepCreamPY的处理马赛克技术如何如何神奇,还是乘早散了吧,它和你心中的期望相差太大。
DeepCreamPY运行步骤
方式1.直接使用 windows 10 可执行文件:
https://github.com/deeppomf/DeepCreamPy/releases/download/v2.2.0-beta/DeepCreamPy_2.2.0-beta_win64.zip
方式2.源码运行:
https://github.com/deeppomf/DeepCreamPy
1.运行环境:
•python3•tensorflow 1.15.2
2.下载DeepCreamPy的源码后先安装依赖:
pip install -r requirements.txt
3.把需要修复图片放在decensor_input目录下
4.运行python主文件:
python main.py
稍等一会模型加载完成后会弹出图形化界面。
可以选择条码遮挡和马赛克遮挡两种类型,当然,马赛克遮挡就图一乐呵。
PULSE
实验效果
PULSE其实是基于一个非常著名的神经网络,由英伟达团队开发的styleGAN,就是去年有一段时间刷屏的AI自动生成人脸。
styleGAN是一种GAN类型的神经网络,不是三点水加个金的淦哈,GAN(Generative Adversarial Networks )是生成对抗网络的缩写。
所谓生成对抗简单来说就是周伯通的左右手互搏,两个部分相互对抗,一个生成,一个鉴别,这样机器就可以不知疲倦的训练下去,最终成为目标问题的大师。
基于styleGAN,PULSE的思路是这样的,给我一张低分辨率的人脸,用styleGAN尝试生成人脸,把这个生成的人脸缩放到和低分辨率的原始图像一样大小,比较两者的差异。
随着这个过程的增加,如果缩放后的图片和原始图片的差异越来越小,说明这张生成的人脸基本上就可以表示低分辨率的原始图片的高清面貌。
想法很妙啊,但是实际效果如何呢?
这是我在网上找到的一名欧美女性,对它进行了低像素化处理,得到了这样的一张图片。
在PULSE网络上完成200次优化后,误差降低到0.002,然后我得到了这样结果图片。
相当perfect,但是和原始图片对比,这种完美却并不真实。
当然我也试了试自己照片,这是经历100次优化后的我,由于我并没有重新训练这个网络,而是用的官方自带的基于欧美人种训练的数据,所以把我变成了这样事儿了。
这是200次优化后的我,有点亚洲人的意思了哈,看起来有点像我三大爷。
让我们把我家大黄的狗头混入其中,看看是什么样的效果。
在低分辨率下看着差不多,但是放大后这些图片就开始有点恐怖了。
有点像美国恐怖片里鬼怪的形象,很容易发现啊,这恐怖的乌紫嘴唇实际上是狗黑色的大鼻头。
我们来对比这些原始和缩放的低像素照片,讲道理它们已经很接近了,为什么生成的高清图和原始图差距这么大?
生成马赛克的正向过程很简单,类似于卷积网络中的池化,我们举个简单的例子。
图片是由一个一个像素构成的,如果我们把它分为3*3的块,计算出这些块中的像素平均值,或者最大值,或者就随便选择一个值,然后用新的值去覆盖块中的像素,那原先的高清图片中就会出现一大坨一大坨的马赛克块,因为一个块中所有的像素值现在变得一样了嘛!
那消除马赛克的关键就是利用这些块中一毛一样的值去得到原始的值,大家觉得有可能吗?
这有点类似于非对称加密中用到的质数分解,正向过程中两个大的质数相乘很容易,但是要把一个大数拆成两个质数相乘的形式则很难,但是质数分解的难还是有边界的,比如近年以来高速发展的量子计算机就开始威胁基于质数分解的非对称加密算法。
但是逆向马赛克则完全没有可能,比如把一个3*3个的块取做大值100覆盖原先的各个像素单元的值,那从100如何反推出这9个原始像素的值到底是多少呢?那情况可就太多了,而且没有参考答案验证逆向的结果是否正确。
「一句话,低像素图片中蕴含的信息量是无法还原出一张真实的高清原图的,所谓高清,不过是AI脑补出来的。」
正如香农采样定理说的那样,当采样频率低于信号最高频率的两倍的时候采样的结果是无法复原出原始信息的,
想要把这里的5合1,10合1的信息损失恢复出来,简直白日做梦。
所以今天的结论是,不论是条形码还是马赛克,想要恢复它们的真实面貌绝无可能。
但是仔细思考这里的逻辑,“去马赛克”的潜台词真的是得到原始的图像?
我认为能不能恢复真实的原貌并不一定那么重要,重要的是看着清晰,爽。
所以如果有人利用这种技术做出一个去除马赛克的付费软件,一定会有人为这种清晰爽快买单,因为正确答案既然如此无法考证,那让AI自由发挥就成为了最后的狂欢。
运行步骤
PULSE网络的运行要求比较高,至少需要16GB的英伟达GPU,大家可以去购买GPU加速的云服务器运行。
源码地址:
https://github.com/adamian98/pulse
环境要求:
•conda•python3•pytorch
运行过程
conda env create -n pulse -f pulse.yml
conda activate pulse
python run.py
大家要格外注意pytorch和英伟达驱动和CUDA的版本匹配问题,目前pulse使用的pytorch是1.5.0版本,根据pytorch的文档介绍我们可以使用以下版本的CUDA:
而更具英伟达的文档,对应9.2 10.1 10.2的cuda 应该安装如下的驱动程序:
TecoGAN
有一个被大家经常提及的技术TecoGAN,也是一种生成对抗网络。
前一段时间有一个叫Javplayer的播放器被炒的火热,号称能修复视频中被打码的部分,充满着诸如神器,强大等溢美之词,它所用到的正是TecoGAN。
TecoGAN的本意其实是把模糊的视频变成高清的,但是大家还是它的去除马赛克作用表示兴趣浓厚。这很正常,毕竟“第一生产力”嘛!就像很多视频弹幕里常年出现的一堆黄色的小问号一样,但凡有一滴油,那也得开车!
但是实际上不论是TecoGAN还是styleGAN,这些技术在修复那些珍贵的老照片和视频上有很大的价值。
我把它自带的几个例子跑了一下,效果果然很perfect,TecoGAN仿佛有种搏一搏单车变摩托的神奇力量。
当然这些例子既然作者敢放进去,那效果要是差的话不是打自己的脸么。于是我决定用自己的素材进行测试。
在用纹理明显,色差鲜明的视频测试的时候,效果相当的perfect。
但是在有些纹理和色彩不是十分占优势的视频中效果就有点像共享单车变二八大杠的感觉了,不能说没有提升,但是基本上可以忽略不计。
运行步骤
环境要求:
1.python3
2.tensorflow 1.8<版本<2.0
tensorflow的版本一定要小于2.0,否则tensorflow的API不兼容,比如2.0后删除了contrib包,自己手动修改就太麻烦了。
运行过程
•pip3 install -r requirements.txt #安装依赖•python3 runGan.py 0 #下载模型
runGan.py源码片段•python3 runGan.py 1 #运行网络处理图像
事先把你想要处理的一批图像的文件夹(比如demo文件夹下放了10张需要处理的图片)放在LR目录下,然后修改runGan.py源码中目标的名字。
runGan.py源码片段•等待网络运行,高清的结果在results目录下
以上是关于人工智能去除马赛克有戏吗?(文字稿+神经网络运行步骤补充)的主要内容,如果未能解决你的问题,请参考以下文章