程序小哥 Vijish Madhavan 刚刚开源了他搞的去纹身模型 SkinDeep,下面是这个 AI 应用到那个 AI 身上的效果,看起来效果杠杠的。
这么屌的项目显然跟 JB 有点渊源,作者 Madhavan 看了贾斯汀·比伯(Justin Bieber)的音乐短片《Anyone》,鹅妹子嘤啊。我们都知道比伯满身纹身,可是短片中是一点纹身痕迹都没有,这是两个化妆师在他身上刷了几个小时来掩盖的效果。作者一想这成本也太高了吧,眉头一皱,计上心头,是时候展示一身真正的深度学习技术了。用深度学习可以很好的去纹身吗?能和 photoshop 相媲美吗?事不宜迟,干就完了,嗯,输出视频看起来比较难呀,那先从图片搞起吧。
Photoshop 可以产生非常好的效果,但它需要专业知识和数小时的工作修饰整个图像。
阿伦艾弗森(美国篮球运动员),使用这个模型清除了纹身
要做这样一个项目,需要大量的图像对,但是作者找不到任何这样的数据集,所以他选择了合成数据。
(1)叠加 APDrawing 数据集图像对和一些去除了背景的纹身设计,这使用 Python OpenCV 可以很容易地完成。
(2) APDrawing 数据集具有线条艺术(line art)对,可以模拟纹身线条,这有助于模型学习和去除这些线条。
(3) APDrawing 数据集只有肖像头部照片,对于全身照片,运行了以前的 ArtLine 项目(https://github.com/vijishmadhavan/ArtLine),并叠加输出图像到输入图像。
(4) ImageDraw.Draw 和森林绿颜色码一起使用,并随机放置在放大的身体图像上,类似 fast.ai 的 Crappify。
(5)在需要变形和改变角度的物体上也可以使用 Photoshop 来放置纹身。
满脸纹身的脸
这个项目的亮点在于生成合成数据,这要感谢 pyimagesearch.com 博客。
https://www.pyimagesearch.com/2016/03/07/transparent-overlays-with-opencv/
https://www.pyimagesearch.com/2016/04/25/watermarking-images-with-opencv-and-python/
https://www.pyimagesearch.com/2015/01/26/multi-scale-template-matching-using-python-opencv/
https://arxiv.org/abs/1805.08318
)。生成器是有光谱归一化和自注意的预训练 UNET。我从 Jason Antic 的 DeOldify (https://github.com/jantic/DeOldify
)中学到了一些东西,这发挥了很大的作用,突然之间面部特征有了正确的细节。https://arxiv.org/abs/1710.10196
) ,(https://arxiv.org/pdf/1707.02921.pdf
)。渐进调整大小(Progressive resizing)采用了逐渐增加图像大小的思想,在这个项目中,图像大小逐渐增加,学习率被调整。fast.ai 集成了渐进式大小调整,这有助于模型更好地泛化,因为它可以看到更多不同的图像。https://arxiv.org/pdf/1603.08155.pdf
)。这个项目是基于 Fast.AI 库创建的。
这个项目还在改进中,不过作者想把它拿出来,这样可以得到一些好的建议。我们也可以尝尝鲜。
最简单的开始方法就是试一下 Colab:
https://colab.research.google.com/github/vijishmadhavan/SkinDeep/blob/master/SkinDeep.ipynb
输出被限制在500px,并且要想效果好需要输入高质量的图像。
作者表示模型还需要改进,如果感兴趣一起改进它。
好的,让我们马上 clone 一下看看:
GitHub地址: https://github.com/vijishmadhavan/SkinDeep