Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >传统图像算法+深度学习方法结合会有什么样的火花?

传统图像算法+深度学习方法结合会有什么样的火花?

作者头像
计算机视觉研究院
发布于 2019-07-09 07:28:47
发布于 2019-07-09 07:28:47
2K0
举报

老早之前,有同学在问,有没有传统图像算法与深度学习结合的,其实这类的不是很多,之前学生研究期间有做过一些类似这类工作,结果还是很可以的,结果确实会比单独使用的好,但效率会比之前的一些技术慢一些,也就是就无法达到实时的效果。

这种结合方式,就几种形式:

1)先用传统方法处理,然后作为深度学习框架的输入使用;

2)先用深度学习网络学习源数据的特征表示,然后作为传统图像算法的输入;

3)传统和深度学习方法并行处理,最后设计一个新的损失函数来结合使用。

经过实验,其实后两种方式会比较好,有兴趣的同学可以自己去尝试,一定会有新的发现,加油!

我可以说一下基本原因,因为深度学习最好的输入还是接触最原始的数据,大家做了可视化的同学可以发现,深度学习就好比一个刚刚成长的小孩,如果你刚开始教他的知识比较高深,或者给他传输的知识不是最基本最原始的,他通过你的教学及后期学习,发现与实际不是很符合,这样长大后就会对一些知识出现偏差。所以,输入最好,应该是一定要是源数据,这样通过基本特征不断去深入学习,不仅对该知识有一定的辨别能力,还可以增加泛化能力。

那接下来我就来和大家说说之前比较火的一个技术,就是换脸技术,他就是将传统方法和深度学习结合的案例,如果有了解过的同学,可以再浏览一遍,增加自己的认知和深入思考。主要引用别人的一些现有知识,请大家不要见谅,谢谢~

前一段时间用于人物换脸的deepfake火爆了朋友圈,早些时候Cycle GAN就可以轻松完成换脸任务,其实换脸是计算机视觉常见的领域,比如Cycle GAN ,3DMM,以及下文引用的论文均可以使用算法实现换脸(一定程度上能模仿表情),而不需要使用PS等软件手工换脸(表情僵硬,不符合视频上下文)。

但是deepfake用一个新颖的思考角度进行换脸,其实GAN可以完成该领域的一些技术,但是大家都知道,GAN的训练是极其不稳定,且收敛时间特别长,某些特定的数据集可能还需要有些Trick,才能保证最后的效果。

但deepfake似乎可以在各个数据集里训练测试,无所不能的模型,深入阅读开源代码后(https://github.com/deepfakes/faceswap),发现这东西很多值得一说的地方和优化的空间。

本文主要包括以下几方面:   

  • 解读deepfake的模型和预处理与后处理的算法以引用论文。(目前大多文章只是介绍了其中的神经网络,然而这个项目并不是单纯的端到端(end-to-end)的输出,所以本文还会涉及其他CV的算法以及deepfake的介绍)。  
  • 引入肤色检测算法,提升换脸的视觉效果。

虽然原作没有指出,但从模型和整体方法设计来说,该模型应该是参考了论文https://arxiv.org/abs/1611.09577,其网络结构总体仍是encoder-decoder的形式,但与我们所熟知autoencoder不同的是,它是由一个Encoder和两个Decoder组成,两个Decoder分别对应imageA和imageB的解码。

Encoder部分用了简单的堆叠5x5卷积核,采用aplha=0.1的Leak Relu作为激活函数。Decoder部分使用了卷积和Pixel Shuffer来做上采样,结构上采用了4x4,8x8……64x64这样分辨率递增的重建方式(网络整体是类U-net的结构)。下图为U-net网络结构。

如果你想要复现和改进模型的话,需要主要一点的是,虽然期望输入A脸然后输出B脸,输入B脸输出A脸,但训练却不把A、B脸作为pair输进神经网络(输入A脸,期望在另一端获得B脸),仍然是像训练普通autoen coder的一样,给出A脸,你要复原A脸,B脸亦然。

用不同的decoder,这样训练的结果是decoder A能学会用A的信息复原A,decoder B用B的信息复原B,而他们共用的Encoder呢?学会了提取A,B的共有特征,比如眼睛的大小,皮肤的纹理,而解码器根据得到的编码,分别找对应的信息复原,这样就能起到换脸的效果了。

而Encoder获取到共同的特征,比单独学习A的特征,信息要损失得更为严重,故会产生模糊的效果,另一个照片模糊得原因是autoen coder使用得是均方误差这一点已经是不可置否的了,后文提及的使用GAN来优化,可以一定程度上缓解模糊的问题。

预处理

大家都知道在CV里用深度学习解决问题前,需要用进行数据增强,然而涉及人脸的数据增强的算法和平时的有一点不太一样。   

在开源代码中,分别使用了random_transform,random_warp 两个函数来做数据增强。但这个两个函数只是做一些比例拉伸之类的参数封装,真正做了转换的是opencv的warpAffine、rmap两个函数。

rmap其直译过来就是重映射,其所做的就是将原图的某一个像素以某种规则映射到新的图中。利用该函数,可以完成图像的平移,反转等功能。  

注:

void remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2,int interpolation, intborderMode = BORDER_CONSTANT,const Scalar& borderValue = Scalar())

第一个参数:输入图像,即原图像,需要单通道8位或者浮点类型的图像

第二个参数:输出图像,即目标图像,需和原图形一样的尺寸和类型

第三个参数:它有两种可能表示的对象:

  • 表示点(x,y)的第一个映射;
  • 表示CV_16SC2,CV_32FC1等

第四个参数:它有两种可能表示的对象:

  • 若map1表示点(x,y)时,这个参数不代表任何值;
  • 表示 CV_16UC1,CV_32FC1类型的Y值

第五个参数:插值方式,有四中插值方式:

  • INTER_NEAREST——最近邻插值
  • INTER_LINEAR——双线性插值(默认)
  • INTER_CUBIC——双三样条插值(默认)
  • INTER_LANCZOS4——lanczos插值(默认)

第六个参数:边界模式,默认BORDER_CONSTANT

第七个参数:边界颜色,默认Scalar()黑色


在数据增强中,大家都不希望改动数据会影响label的分布,在常见的有监督任务中,数据的标签由人工打上,如类别,位置等,图像的扭曲,反转不会影响到label的分布,但在deepfake中,做的是生成任务,作为无监督任务中的一种,其反向转播的误差由图像自己的提供,而要使得数据增强后(代码中的warped_image)有对应的样本(代码中的target_image),作者使用了rmap构造除warped_image,而使用umeyama和warpAffine构造出target_image。

Umeyama是一种点云匹配算法,简单点来理解就是将源点云(source cloud)变换到目标点云(target cloud)相同的坐标系下,包含了常见的矩阵变换和SVD的分解过程。调用umeyama后获取变换所需的矩阵,最后将原图和所求得矩阵放进warpAffine即可获的增强后对应的target_image。其中warpAffine的功能就是根据变换矩阵对源矩阵进行变换。下图,上面是经过变型处理的warped_image ,下面是target_image。

后处理

在deepfake(上述链接中)的命令行版本中,有一个-P参数,选中后可以实时演示图片的变化过程。在通过预览这个演变过程中,不难发现进入神经网络的不是整张图片,也不是使用extract出来的整个256x256的部分(头像),而是仅仅只有脸部的小区域(64x64)。因此在预测阶段,首先就是截取人脸,然后送进网络,再根据网络的输出覆盖原图部分。   

在脸部替换后,会出现如下问题:

  • 肤色差异,即使是同种人,也会有细微的差异;
  • 差异,每张照片的光照环境不同;
  • 假脸边界明显   

前两者的造成原因一是客观差异,二是和数据集的大小相关,作为想给普通的用户用,数据集太大了,用户承受不起,数据集太小,神经网络学习不多。至于最后一点则是前两者造成的,但这一点可以通过降低分辨率缓解。这也是很多网上小视频假脸边界不明显的原因,因为很少会有一张脸占屏幕80%的画面。但如果你直接用在256x256的头像图上则边界效果明显,如下图:

另外的两个问题的解决及缓减方法,我们将下一期继续,感谢大家对我们“计算机视觉战队”的支持!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机视觉战队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
传统算法和深度学习的结合和实践,解读与优化 deepfake
  前一段时间用于人物换脸的deepfake火爆了朋友圈,早些时候Cycle GAN就可以轻松完成换脸任务,其实换脸是计算机视觉常见的领域,比如Cycle GAN ,3dmm,以及下文引用的论文均可以使用算法实现换脸(一定程度上能模仿表情),而不需要使用PS等软件手工换脸(表情僵硬,不符合视频上下文),只能说deepfake用一个博取眼球的角度切入了换脸算法,所以一开始我并没有太过关注这方面,以为是Cycle GAN干的,后来隐约觉得不对劲,因为GAN系列确实在image to image领域有着非凡的成绩,但GAN的训练是出了名的不稳定,而且收敛时间长,某些特定的数据集时不时需要有些trick,才能保证效果。但deepfake似乎可以无痛的在各个数据集里跑,深入阅读开源代码后(https://github.com/deepfakes/faceswap),发现这东西很多值得一说的地方和优化的空间才有了这一篇文章。 本文主要包括以下几方面:   1.解读deepfake的model和预处理与后处理的算法以引用论文。(目前大多文章只是介绍了其中的神经网络,然而这个项目并不是单纯的end-to-end的输出,所以本文还会涉及其他CV的算法以及deepfake的介绍)。   2.引入肤色检测算法,提升换脸的视觉效果。
chaibubble
2019/05/26
8350
传统算法和深度学习的结合和实践,解读与优化 deepfake
前言 前一段时间用于人物换脸的deepfake火爆了朋友圈,早些时候Cycle GAN就可以轻松完成换脸任务,其实换脸是计算机视觉常见的领域,比如Cycle GAN ,3dmm,以及下文引用的论文均可以使用算法实现换脸(一定程度上能模仿表情),而不需要使用PS等软件手工换脸(表情僵硬,不符合视频上下文),只能说deepfake用一个博取眼球的角度切入了换脸算法,所以一开始我并没有太过关注这方面,以为是Cycle GAN干的,后来隐约觉得不对劲,因为GAN系列确实在image to image领域有着非凡的成
AI研习社
2018/03/16
1.7K0
传统算法和深度学习的结合和实践,解读与优化 deepfake
图像配准:从SIFT到深度学习
图像配准(Image Registration)是计算机视觉中的基本步骤。在本文中,我们首先介绍基于OpenCV的方法,然后介绍深度学习的方法。
磐创AI
2019/07/30
8.5K1
图像配准:从SIFT到深度学习
解密Deepfake(深度换脸)-基于自编码器的(Pytorch代码)换脸技术
还记得在2018月3月份火爆reddit的deepfake吗?将视频中的头换成另一个人的头像,虽然可能有些粗糙和模糊,但是在分辨率不要求很高的情况下可以达到以假乱真的效果。
老潘
2019/01/23
4.4K0
深度解密换脸应用 Deepfake
Deepfake 就是前一阵很火的换脸 App,从技术的角度而言,这是深度图像生成模型的一次非常成功的应用,这两年虽然涌现出了很多图像生成模型方面的论文,但大都是能算是 Demo,没有多少的实用价值,除非在特定领域(比如医学上),哪怕是英伟达的神作:渐进生成高清人脸 PGGAN(https://arxiv.org/abs/1710.10196 ) 好像也是学术意义大于实用价值。其实人们一直都在追求更通用的生成技术,我想 Deepfake 算是一例,就让我们由此出发,看看能否从中获取些灵感。 一、基本框架
AI研习社
2018/03/28
3.9K0
深度解密换脸应用 Deepfake
教程 | 如何使用DeepFake实现视频换脸
机器之心发布 作者:冯沁原 不久之前,AV 视频换脸明星的 DeepFake 火了。这篇文章将一步步教你如何实现换脸。 如果你是第一次听说 DeepFake,一定要点击上面的视频,亲自感受一下尼古拉
机器之心
2018/06/08
10.1K1
【每周CV论文】初学深度学习图像风格化要读的文章
欢迎来到《每周CV论文》。在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的。
用户1508658
2020/08/28
5970
【每周CV论文】初学深度学习图像风格化要读的文章
Rethink Deepfakes,浅谈深度学习落地
AI 科技评论按:本文为兔子老大为雷锋网 AI 科技评论撰写的独家稿件,未经许可禁止转载。
AI研习社
2019/05/13
7520
Rethink Deepfakes,浅谈深度学习落地
基于 FPGA 的视频流人脸伪造设备
近年来随着机器学习等技术的发展,人工智能在图像识别、语音处理等方面的能力不断增强、应用范围不断扩大,这极大的方便了人们的生活。然而随之带来的安全问题也变得越来越不可忽视。
FPGA技术江湖
2021/10/22
2.1K0
基于 FPGA 的视频流人脸伪造设备
基于深度学习的图像语义编辑
深度学习在图像分类、物体检测、图像分割等计算机视觉问题上都取得了很大的进展,被认为可以提取图像高层语义特征。基于此,衍生出了很多有意思的图像应用。 为了提升本文的可读性,我们先来看几个效果图。 图1.
CSDN技术头条
2018/02/12
1.3K0
基于深度学习的图像语义编辑
传统CV和深度学习方法的比较
来自《Deep Learning vs. Traditional Computer Vision》
Color Space
2022/12/22
1.9K0
传统CV和深度学习方法的比较
图像处理的仿射变换与透视变换
  这一周主要在研究图像的放射变换与透视变换,目前出现的主要问题是需要正确识别如下图中的编码标志点圆心。 1.当倾斜角较小时:
3D视觉工坊
2020/12/11
1.5K0
图像处理的仿射变换与透视变换
基于深度学习的图像超分辨率重建技术的研究
图像分辨率是一组用于评估图像中蕴含细节信息丰富程度的性能参数,包括时间分辨率、空间分辨率及色阶分辨率等,体现了成像系统实际所能反映物体细节信息的能力。相较于低分辨率图像,高分辨率图像通常包含更大的像素密度、更丰富的纹理细节及更高的可信赖度。
全栈程序员站长
2022/07/25
1.7K0
基于深度学习的图像超分辨率重建技术的研究
去雾算法总结(传统+深度学习)
1.Single Image Haze Removal Using Dark Channel Prior  何凯明  2009 CVPR
狼啸风云
2020/07/06
16.5K0
第七章 AI数据质量-2
数据增强是机器学习中的一项重要技术,用于生成大量高质量、多样化的训练数据集的方法。这种方法的出现背景主要是由于以下几个原因。
bettermanlu
2025/04/15
4860
第七章 AI数据质量-2
使用Pytorch和OpenCV实现视频人脸替换
“DeepFaceLab”项目已经发布了很长时间了,作为研究的目的,本文将介绍他的原理,并使用Pytorch和OpenCV创建一个简化版本。
deephub
2023/08/30
6330
使用Pytorch和OpenCV实现视频人脸替换
光流估计综述:从传统方法到深度学习
近年来,深度学习技术,作为一把利剑,广泛地应用于计算机视觉等人工智能领域。如今时常见诸报端的“人工智能时代”,从技术角度看,是“深度学习时代”。
小白学视觉
2020/09/22
3.9K0
光流估计综述:从传统方法到深度学习
OpenCV 几何变换-图像旋转
OpenCV提供了warpAffine函数实现图片仿射变换功能,我们可以利用这个函数实现图像旋转,函数原型为:
chaibubble
2022/05/07
2890
OpenCV 几何变换-图像旋转
图像配准的前世今生:从人工设计特征到深度学习
图像配准是计算机视觉领域的一个基础步骤。在本文深入探讨深度学习之前,我们先展示一下 OpenCV 中基于特征的方法。
机器之心
2019/08/09
1.8K0
图像配准的前世今生:从人工设计特征到深度学习
图像数据增强——谈谈Opencv
Opencv是一个计算机视觉库,Opencv所提供的函数能非常高效的实现计算机视觉算法。
算法与编程之美
2019/07/17
1.7K0
图像数据增强——谈谈Opencv
相关推荐
传统算法和深度学习的结合和实践,解读与优化 deepfake
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档