带你「周游世界」的 MODNet 算法
来源 | Jack Cui
责编 | 晋兆雨
头图 | CSDN下载自视觉中国
最近又有一个算法火了,不知道你们看到没?直接看效果!
效果这么稳定的人像 Image Matting 算法真的不多,并且还能进行实时处理!
处理视频、图像,不在话下。人在家中坐,录段视频,你就可以把自己放到世界各地的美景中。
这类的抠图 AI 算法,已经出现过不少,但这一款确实让人觉得很惊艳。
打工人的周游世界梦,还能靠 AI 算法实现,泪目!
MODNet
当前对人像 Matting 的研究主要围绕这两点:
不使用 trimap 情况下提高精度
实时与准确性兼顾
MODNet 都做到了,作者充分利用 Ground Truth 的信息,将模型学习分为三个部分:语义估计、细节预测和语义细节融合。
语义估计(Semantic Estimation):采用 MobileNetV2 架构,通过编码器(即 MODNet 的低分辨率分支)来提取高层语义。对 high-level 的特征结果进行监督学习,标签使用的是下采样及高斯模糊后的GT,损失函数用的 L2-Loss。
细节预测(Detail Prediction):结合了输入图像的信息和语义部分的输出特征,通过 encoder-decoder 对人像边缘进行单独地约束学习,用的是交叉熵损失函数。为了减小计算量,encoder-decoder 结构较为 shallow ,同时处理的是原图下采样后的尺度。
语义细节融合(Semantic-Detail Fusion):把语义输出和细节输出结果拼起来后得到最终的 alpha 结果,这部分约束用的是 L1-Loss。
另外,基于以上底层框架,该研究还提出了一种自监督学习方法 SOC(Sub-Objectives Consistency)和帧延迟处理方法 OFD(One-Frame Delay )。
其中,SOC 策略可以保证 MODNet 架构在处理未标注数据时,让输出的子目标之间具有一致性;OFD 方法在执行人像抠像视频任务时,可以在平滑视频序列中预测 alpha 遮罩。
自监督学习以适应现实数据(SOC):
为了让输入图像的 alpha 输出与语义、细节输出相一致,分别用 L2 和 L1 损失进行约束。
其中 Loss 第一项 L2 约束语义部分,第二项 L1 约束边缘细节部分。
另一方面,为了保持原有的细节信息不被丢失,又将自监督的细节输出和原本全监督训练下的细节输出进行 L1 约束。
SOC 这一步不需要标注数据,只是网络模型的自监督学习。
帧延迟处理方法以增强时序稳定性(OFD):
这部分主要解决视频分割结果的闪烁等问题,提高时序稳定性。后处理操作需要满足一定条件:
即连续三帧中,首尾两帧差异小且中间帧与首尾两帧差异大。
如上图所示,只有红框像素满足处理条件。后处理方式也简单,中间帧结果取首尾两帧平均。
对应到整图的处理效果:
研究人员创建了一个摄影人像基准数据集 PPM-100(Photographic Portrait Matting)。
它包含了 100 幅不同背景的已精细注释的肖像图像。
为了保证样本的多样性,PPM-100 还被定义了几个分类规则,来平衡样本类型。
比如是否包括整个人体;图像背景是否模糊;是否持有其他物体。
PPM-100 中的样图具有丰富的背景和人物姿势,可以被看做一个较为全面的基准。
采用 PPM-100 评估集,看下 MODNet 的效果:
MODNet 在 MSE(均方误差)和 MAD(平均值)上都优于其他无 Trimap 的方法。
虽然它的性能不如采用 Trimap 的 DIM ,但如果将 MODNet 修改为基于 Trimap 的方法。
即以 Trimap 作为输入,它的性能会优于基于 Trimap 的 DIM,这也再次表明显示 MODNet 算法的优越性。
此外,研究人员还进一步证明了 MODNet 在模型大小和执行效率方面的优势。
其中,模型大小通过参数总数来衡量,执行效率采用 NVIDIA GTX1080 Ti GPU 测试。
MODNet 的推理时间为 15.8ms(63fps),比 FDMPA(31fps)快两倍。
总之,MODNet 提出了一个简单、快速稳定的实时人像抠图处理算法。
论文地址:
https://arxiv.org/pdf/2011.11961.pdf
代码
我猜,有些读者,早已迫不及待地跳过算法原理说明,直接来找代码了。
遗憾的是,算法还没有开源。
但是项目仓库已经创建了:
https://github.com/ZHKKKe/MODNet
写稿截图的时候,项目只有一个 README,但是 Star 都快 500 了,足以看出人们对算法效果的认可,以及对算法代码实现的关注。
作者在 issues 中提到,两周后放代码和模型!
心急吃不了热豆腐,好饭不怕晚,咱可以等一等!
絮叨
MODNet 没开源,周末没得玩了?
我早已想到,当然不会让你们空手而归!
navigan 也是一个新鲜出炉的算法。能变脸,改变人的鼻子大小、眼睛大小、眼睛朝向、嘴巴的位置、眉毛高低、甚至让人吸血鬼化。
也可以改变汽车轮子的大小,马的胖瘦。一个挺好玩的 GAN,感兴趣可以周末玩一玩。
项目地址:
https://github.com/yandex-research/navigan
官方权重文件放在了 Dropbox ,下载费事,所以我将代码和权重文件打包放到了百度网盘,有的需要自取(提取码:jack ):
https://pan.baidu.com/s/1U2SrSguDaPwncMw0TgPXtA
更多精彩推荐
GitHub标星7000+,快速恢复像素化图像,效果惊人
升级版APDrawing,人脸照秒变线条肖像画,细节呈现惊人
中科大“九章”历史性突破,但实现真正的量子霸权还有多远?
区块链赋能物流行业:“圈子文化”下,网络货运的数字化转型之路
一文聊“图”,从图数据库到知识图谱
相关文章:

ASP.NET格式化日期
1.绑定时格式化日期方法: <ASP:BOUNDCOLUMN DATAFIELD "JoinTime " DATAFORMATSTRING "{0:yyyy-MM-dd} " > <ITEMSTYLE WIDTH "18% " > </ITEMSTYLE &g…

docker的网络架构配置
http://xiaorenwutest.blog.51cto.com docker 网络架构模默认情况下,容器可以建立到外部网络的连接,但是外部网络无法连接到容器。Docker 允许通过外部访问容器或容器互联的方式来提供网络服务外部访问容器:容器中可以运行一些网络应用,要让外…
【官方福利】CSDN内测师限时申请,参与赢年末礼包
各位程序猿们都下载CSDN官方出品的插件了吧?什么?还有不知道插件是什么的同学??你错过了太多!更酷更高效的浏览器插件,一键万能操作,新标签页极简个性,让你的工作效率UP UP UP&#…

Sql年月日计算方法
通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几…

读《每天懂一点成功概率学》
概率出现某种结果的数量/出现所有结果的数量 所谓“数学概率”,就是理论上计算出来的概率,例如抛硬币时,只有正面和反面两种结果,因此正面出现的概率就是1/2。 另一方面,我们反复抛硬币,根据实际结果计算出…

AV1时代要来了,超高清视频时代视频编码技术的机遇与挑战
近些年随着视频行业的迅猛发展,尤其像短视频、点播、直播、VR等领域的爆发,人们对于高清、超高清视频体验的追求越来越强烈,流媒体平台如何在提升观众观看体验,同时降低播放成本,利用技术降低带宽消耗的同时又能最大化…

敏捷软件开发(c#版)文摘
第一部分 敏捷开发 第1章 敏捷实践 第2章 极限编程概述 第3章 计划 第4章 测试 第5章 重构 第6章 一次编程实践 第二部分 敏捷设计 第7章 什么是敏捷设计 第8章 SRP 第9章 OCP 第10章 LSP 第11章 DIP 第12章 ISP 第13章 C#程序员UML概观 第三部分 薪水支付案例研究 第四部分 打…

asp.net 2.0 中GridView里设置日期格式
在asp.net 1.0 中的datagrid 中 设置日期字段格式时用 DataFormatString"{0:yyyy-MM-dd}"即可。在gridview 中设置短日期格式 使用<asp:BoundField HeaderText"发表时间" DataField"PostTime" DataFormatString"{0:yyyy-MM-dd}" &g…

springboot初学
首先苦于用ssh、ssm来搭建一个项目,这个基础搭建工作就大概要用半天的功夫才能弄好,想到就头疼,后面听了实验室一位大神的建议,用springboot啊,简单的不止一点点。就顺便学习了下这个神器,果然厉害。 有一次…

Exchange 2013与OWA13集成
好久没发新文章了,因为工作变动的原因,实在抱歉,今天给大家分享先office web app 2013怎么和最新的Exchange 2013进行集成使用吧,这点还是蛮有特色的,因为我们改变以往在OWA中预览Office的效果,我们先看看默…

判断一个string是否可以为数字
方案一:Try...Catch(执行效率不高)/// <summary>/// 名称:IsNumberic/// 功能:判断输入的是否是数字/// 参数:string oText:源文本/// 返回值: bool true:是 false:否/// </summary>/// <…
CSDN湘苗培优|火热报名中
湘苗培优火热报名中CSDN高校俱乐部在这里,你能获得CSDN技术认证与企业导师零距离技术交流参与线下技术沙龙活动求职简历指导参与项目交付并有机会企业内推现在报名即可选择由企业支付学费的订单式培养,或入职后再支付学费等多种付费模式,Z大程…

安装配置Emacs-rails
首先你的机器上肯定要安装emacs啦,此步略过不表。1、从 http://rubyforge.org/projects/emacs-rails 下载最新emacs-rails,解压文件到~/.emacs.d/rails 目录2、根据README,你需要下载三个依赖库:cd ~/.emacs.d/rails wget http://…
实战|手把手教你用Python爬取存储数据,还能自动在Excel中可视化
来源 | 早起Python大家好,在之前我们讲过如何用Python构建一个带有GUI的爬虫小程序,很多本文将迎合热点,延续上次的NBA爬虫GUI,探讨如何爬取虎扑NBA官网数据,并且将数据写入Excel中同时自动生成折线图,主要…

删除SQL数据库中事务日志方法
DUMP TRANSACTION [数据库名] WITH NO_LOG BACKUP LOG [数据库名] WITH NO_LOG DBCC SHRINKDATABASE([数据库名])

新浪微博应用 IE下面框架嵌套框架的问题解决
新浪微博应用 IE下面框架嵌套框架的问题分为两种:1、回调的参数有误;2、session丢失;第一个问题,需要亲们仔细研读接口文档,App.AuthDialog.show({client_id : <?php echo $this->getParam(sub_appkey);?>,…

corosync+pacemaker+crm简单配置
# 系统 centos7.2 安装版本都是Yum源node1: 192.168.8.111 node2:192.168.8.112 vip :192.168.8.200nfs :192.168.8.113 # 互信~] ssh-keygen~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys~]# chmod go .ssh/authorized_keys~]# scp -p .ssh/i…
给AI系统做“安全体检”,阿里安全提出自动化AI对抗平台CAA | AAAI 2021
出品 | AI科技大本营(ID:rgznai100)安全人员曾为某车企自动驾驶系统做过一次安全测试,用物理对抗攻击欺骗Autopilot车道检测系统,导致汽车在Autopilot不发出警告的情况下驶入错误车道。假如这是一场真实的攻击…

linux新建文件权限问题
touch /etc/init.d/httpdchmod 755 /etc/init.d/httpdtouch可以新建一个空文件,可以修改文件的创建时间。比如:编译时看到提示文件的时间为将来的时间,可以使用touch命令来修改。Linux chmod 755和chmod 777 在linux终端先输入ls -al,可以看到…

基于MMSeg算法的中文分词类库
最近在实现基于lucene.net的搜索方案,涉及中文分词,找了很多,最终选择了MMSeg4j,但MMSeg4j只有Java版,在博客园上找到了*王员外*(http://www.cnblogs.com/land/archive/2011/07/19/mmseg4j.html )基于Java版的翻译代码…
关于git bush 中不能复制黏贴的问题
如果你是一个新手的话,在你使用个git的过程中,你会发现git 竟然不能复制黏贴,这简直是完全不能忍受的事,复制黏贴可以大大的节省了我们敲代码的时间,特别是在github中clone别人的仓库到本地,url地址需要一个…

linux系统proc目录进程信息详解
Proc 文件系统是一个实时的,常驻内存的文件系统,它跟踪进程在你机器上的运行情况和你系统的状态。/proc文件系统是常驻虚拟内存并且维持着操作系统的动态数据。大部分的 /proc文件系统信息被实时更新来与当前操作系统的状态一致。/proc文件系统的内容能被…

AI开源评测基准AI-Rank,为开源建立标准
当前,数字经济已经成为经济发展的活力引擎和促进经济结构转型升级的重要动能,深刻改变着人类的生产生活方式。12月11日,2020中关村大数据日暨数字经济融合创新发展论坛在北京举行。本届中关村大数据日以“开源共享 生态赋能”为主题ÿ…

Linux 汇编语言开发指南
Linux 汇编语言开发指南肖文鹏 (xiaowp263.net), 北京理工大学计算机系硕士研究生本文作者 肖文鹏是北京理工大学计算机系的一名硕士研究生,主要从事操作系统和分布式计算环境的研究,喜爱Linux和Python。你可以通过 xiaowp263.net与他取得联系。 简介&am…

拦截器与filter的区别
在接触拦截器和filter以来,觉得这两者有太多相似之处,都是运用aop的思想处理事情,但是这两者到底有什么区别倒一直很模糊,今天看书的时候,终于看到自己满意的解答了,赶紧记录下来:1.使用范围不同…
湘苗培优 | 从入门到精通
缘起2020年长沙发出软件再出发号召,同时发布了《长沙市软件和信息技术服务业发展三年(2020-2022 年)行动计划》。当软件产业的生态逐渐建立,企业孵化培育的土壤逐渐肥沃,长沙软件产业焕发出前所未有的活力和生机,一大批软件产业项…

HBase scan setBatch和setCaching的区别
2019独角兽企业重金招聘Python工程师标准>>> HBase的查询实现只提供两种方式: 1、按指定RowKey获取唯一一条记录,get方法(org.apache.hadoop.hbase.client.Get) 2、按指定的条件获取一批记录,scan方法&…
3行Python代码就能获取海量数据?
一谈起数据分析,首先想到的就是数据,没有数据,谈何分析。毕竟好的菜肴,没有好的原材料,是很难做的~所以本期小F就给大家分享一个获取数据的方法,只需三行代码就能搞定。「GoPUP」,大…

c语言中int和指针和字符所占字节
Linux下 sizeof(int);int 4字节 sizeof(char);字符1字节 char * p"12345"; sizeof(p);指针占4字节

SCCM 2012 SP1系列(七)分发部署exe软件
2、exe软件分发以skydrive为例,打开SCCM控制台,展开应用程序管理,右键“包”选择“创建包”打开创建包和应用程序向导,填写部署包的相关信息,勾选“此包包含源文件”,然后点击“浏览”选择sykdrive文件位置…