PortraitMatting深度学习实践探索之路(对肖像进行罩层抠图)

入门深度学习的教材都看了一些,但缺乏实践理解的都不是很深刻,只能反复看一些比较好的教材来加深印象。

正好导师给我布置了一个入门深度学习的小任务:输入人脸照片->提取前景->换背景,最后以软件应用的形式呈现出现。

1. 入门准备

由于我学深度学习之前是做全栈开发的,并且这个实践任务最后要以软件应用的形式呈现出来,正好过年刚回家,家里琐事很多,没有一个长时间段可以让我专注的学习。我便先发挥自己的长处,利用碎片的时间将该应用简易地搭建好。(为了快捷,我这里选择了SpringBoot+Wechat小程序的形式)如图所示:

这里使用了百度人像分割的API来帮助我完成,主要利用其分割返回给我的labelmap二值图来做Matting的操作。

2. 开始动手

正值疫情期间,可以安心在家做该项目。

首先捋清楚思路,现在应用是做好了,但是利用的是百度的接口,这显然是不行的,得把百度接口提供的服务拿掉,利用自己做的功能来将其替换,才能算是完成该项任务,毕竟主要目的也就是为了训练自己在DNN方面的能力。

考虑我在此之前从没有碰过深度学习,所以完全靠自己空手做出来是不太可能的,我也没有如何去做的思路。

于是我把我的思路改成这样:

 (1)在Google、Github上找已经搭建好的相关项目(最好是Pytorch版)

 (2)跑通它的预训练模型,剖析源码,了解并走通整个深度学习的流程

 (3)对其进行修改,使其满足自己的需求,最后替换掉百度接口

2.1 找现成项目

2.1.1 Deep-Image-Matting

这是我找到的第一个项目:开源地址,复现的是该论文:论文地址(访问需梯子)

跑通该项目花了点时间:

 (1)项目依赖论文作者的数据集,向作者索取数据集的时候花了一周时间

 (2)我电脑存储和内存都不够,最后根据现状升级设备:外接移动硬盘,加了根内存条扩到12G(我电脑允许的最大值)

最后勉强把该项目的预训练模型跑了起来,跑通效果:

项目的效果是十分好的,但是在我解读源码的时候,发现该项目并不满足我的要求。因为该项目的良好效果依赖于用户提供的Trimap图(通过侵蚀分割出的Alpha图生成),我再细看一遍论文,发现Trimap图是作者通过手动PS获取的,这显然不满足我的需求,手动的成本太高了,遂放弃。

2.1.2 再读论文

除了Deep Image Matting,我还拜读了其它几篇论文。

       (1)沈小勇的Automatic Portrait Segmentation for Image StylizationDeep Automatic Portrait Matting

       (2)Alibaba的Semantic Human Matting(访问需梯子)

这三篇论文都有一个共同的特点,不依赖于与用户的交互,根据上传的照片自动分割出前景,无需用户提供Trimp图,这人性化多了。

这下思路就有了,找找Github上这几个论文的复现项目,试试效果。

1.复现沈小勇论文效果的项目

原论文是用MATLAB来写的,我看不太明白,遂接着找有没有人用Pytorch复现该论文效果的。

但是只找到一篇用Chainer和一篇用Tensorflow的:

portrait_matting(开源地址) 和AutoPortraitMatting(开源地址)

我花了一个多礼拜的时间,尝试去跑通这两个项目中的某一个,但是都失败了。。。

这两个项目都是两三年前的了,且都已经被作者抛弃,所有issues里没有我遇见的error。

2.复现Alibaba论文效果的项目

Semantic_Human_Matting(开源地址)

还是跑不通。。。这几个开源项目,要么就是缺少预训练模型,要么就是一堆的errors遗留着没解决,而我暂时无法靠一己之力解决所有的问题。

2.1.3 重整思路

一两周的时间没一点成效,我开始反思自己的方向。于是又重新拜读了沈小勇的两篇论文,再次明确需求:我现在需要的效果不是Mating,而是能够根据用户上传的肖像图自动分割出前景,生成Alpha图。像这样:

要达到这种效果,也就是做Portrait Segmentation 或者 Image Segmentation,反正重点就在于自动分割

2.1.4 再度尝试

再次明确需求后,我把重点从Matting转移到Segmentation上。

于是我在Github上找到了Pytorch-UNet这个项目,该项目高达2K+的star,100+的issues,且作者似乎还在继续更新中。该项目提供的模型是分割汽车的,且在自述文件中,作者也说明可以更换数据集去训练其它模型,用于分割其它物体。

相比之前没几个issues和star,并且被作者废弃的项目,我仿佛看到了春天,终于从没人的小角落到了人堆里来了!!

(1)第一次尝试

跑该项目只需要如下几个环境:

matplotlib  numpy  Pillow  torch   torchvision  tensorboard

我很快开始了尝试,但是我跑失败了。。

于是我接着尝试了该项目以前的版本并且别人fork过去的版本。但还是失败了。。。

得到的结果都是:

Stack Overflow查出来的结果是添加strict=False参数

net.load_state_dict(torch.load(args.model, map_location=device), strict=False)

但是这样得到的效果却是一张全黑的图片:

在100+的issues里没有相关的问题出现,于是我提了个issue,希望能得到作者的解答。

(2)第二次尝试

我考虑可能是我电脑的问题,正好前几天入手了一台阿里云2核4G的服务器(无GPU)

于是我我便尝试配置一台Linunx的Ubuntu16.04系统,配置Pytorch的环境去跑该项目。

搞了两天服务器整顿好了,最后运行 

python predict.py -i image.jpg -o output.jpg

然而还是得到了相同的报错。。。本以为即使报错也会是另一个错误的,相同的报错让我不知所措。。。

(3)第三次尝试

前两次尝试都是用pytorch的cpu版本跑的,我又再想,可能是需要GPU的原因?我的电脑显卡是950M 2G显存,姑且尝试一下吧。于是配置了CUDA和CUDNN,装了一个pytorch 1.2.0 的gpu版本。

matplotlib 3.0.3      numpy 1.18.1      Pillow 6.2.0      tensorboard 1.6.0

torch 1.2.0+cu92   torchvision 0.4.0+cu92

再度尝试:failed again...

好几天过去了,也没没得到作者对issue的答复...

问题是版本不兼容问题,作者更新了代码,但是没有更新模型,要么用旧版本代码和旧版本模型。要么用新版本代码训练新模型

3.训练模型

细致内容请查看项目链接:GitHub - leijue222/portrait-matting-unet-flask: Portrait Mating implementation in UNet with PyTorch.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352