我们如何没有赢得黑客马拉松

从11月30日到12月2日, PicsArt AI黑客马拉松在莫斯科举行,奖金为100,000美元。 主要任务是制作一个用于处理照片或视频的AI解决方案,该解决方案可在PicsArt应用程序中使用。 当时的一位工作同事Arthur Kuzin提出参加,让我对用保留细节(面部表情等)匿名化用户个人照片的想法感兴趣。 Arthur还称呼Ilya Kibardin-莫斯科物理技术学院的学生(其他人必须写代码)。 这个名字很快就诞生了:DeepAnon。



这将是关于我们的决定的故事,他的 退化 开发,黑客马拉松以及如何 你必须适应陪审团。


参加黑客马拉松


有三种方法可以参加黑客马拉松。 首先是进入“人脸分割”任务的前50名排行榜-“数据科学天才”。 第二个是立即联合一个由最多4个人组成的小组,并向他们展示一个正在运作的MVP-“小强人团队”。 在后一版本中,有必要简单地描述他的绝妙想法。 我们决定不浪费时间,在黑客马拉松比赛的前一周立即进行MVP。 好吧,总的来说,我们认为它们很酷,因此Tima所有人都进入了排行榜的前10名,因此也成为了inzeman。



我们产品的主要思想如下:人们在社交网络上不加思索地与自己分享照片(有时并不完全合法),他们以后可能会后悔,或者将来甚至会受到惩罚。 为了保护自己,您可以使用“正方形”检查您的脸,并在背景上进行遮罩。 但是,不仅将隐藏脸部,还将隐藏其上的情感,并破坏背景。 为了使脸部和背景中的物体保持情感,我们的应用程序更改了照片中的所有脸部,并使背景具有卡通色彩。 为了使一个人无法被衣服识别,它被另一个代替。



在一周内,我们设法完成了我们计划的所有工作。 在每个阶段,都使用一个单独的神经网络(有时甚至是几个)。 首先,所有面孔都在图像上,并用同一名人面孔替换-为此,使用了与DeepFake类似的解决方案。 然后,在人类分割的帮助下,背景被分离,并且将样式转换为卡通(Rick和Morty)。 在最后阶段,对衣服的不同部分及其变化进行了细分-HSV空间中颜色的随机变化,因为陪审团没有时间在展示MVP之前转移样式。



在每个阶段,都会出现技术难题。 例如,github上的所有DeepFake实现都只能将某个特定的面孔X转换为特定的面孔Y。在这种问题的表达方式中,需要两人的许多照片。 收集此类数据集的最简单方法是,找到一个人的表演的视频,大多数时间只在一个人的位置上表演他,然后使用脸部侦测功能来裁剪照片。 我们的想法主要强调的是,任何人都可以制作相同的面孔Y,我们尝试使用CelebA数据集中的许多面孔代替一个人X,幸运的是,它开始了。 下面是我们使用的实现中的DeepFake方案。



将结果包裹在flask web演示中并运行以进行显示。 这是我们陪审团利润中心的描述。


引入一项服务,使您可以匿名化媒体内容(照片和视频)。 在基本版本中,该服务隐藏面孔。 在进阶功能中,它可以将用户的面孔更改为其他人的面孔(DeepFake),更改衣服和背景(细分+样式转移)。 作为一种替代用途,该服务可以用来创建有趣的病毒视频或替换名人的照片。

在黑客马拉松开始之前,还剩下几天,我们设法改善了衣服的更换。 如果在此之前是HSV的颜色变化,那么现在针对每种类型的服装都应用了不同的样式(由各种艺术家使用)。 提出了另一个想法,那就是最好不要将面孔更改为名人,而是先按性别分类,然后以不同的方式转移男人和女人的面孔(例如,在Navalny和Sobchak中)。 最后,他们设法在Web演示中添加了各种级别的匿名化-可以选择要使用的匿名化元素。




我们以脱机的方式进入离线部分,这是一个有用的,不寻常的用户案例,而不仅仅是病毒性面膜。 我们团队聊天中的消息之一:


是的,如果您考虑一下,每个人都需要它。 他们只是还没有意识到这一点,许多人在欢呼,喝酒,触犯法律并认为国家不关心他们时对他们的内容之以鼻。
5年后,AI就会出现,看看以前的帖子,事实上,这个术语将被焊接。

在黑客马拉松上


离线部分开始于星期五。 每个团队都分配了一个单独的桌子,自助餐无休止 速食碳水化合物 饼干。 正式开幕之后,我们决定不浪费时间,立即从评审团中了解参与者的要求。 与一些组织者进行了非正式的交谈之后,我们感到他们的匿名性并没有引起他们的注意。 但是我喜欢将照片的各个部分进行分割并进行更改的想法。 也很明显,他们希望我们提供一些可以在PicsArt中实现的东西。 尽管如此,晚上,我们的团队还是对项目进行了描述,其中谈到了匿名化,但重点是对照片的各个部分进行分割和编辑。


周五晚上陪审团的项目描述:


我们提供一项服务,可让您简单而自动地处理照片以将其匿名化。 通过分割衣服,配件,头部的头发以及背景元素,该服务使您可以独立处理每个对象,而无需手动选择。 该服务还允许您在保持面部表情和表情的同时换脸。

根据黑客马拉松的格式,那些在技术委员会中表现出色的团队将被允许捍卫。 这些委员会与陪审团和PicsArt技术团队进行了实时沟通,并演示了他的作品。



在周六的第一个委员会,我们无法将匿名出售给陪审团,但看到他们喜欢编辑照片中单个对象的想法。 此外,陪审团非常热情地接受了可移动发型的想法,方法是单击头发(事实证明他们现在正在尝试做类似的事情)。


我们的团队无法忍受这种压力(不幸的是),并同意改变产品的愿景。 决定将重点放在衣服的质量变化上。


在主屏幕上的演示中,计划显示原始照片的几个选项(理想情况下,通过在屏幕上轻按即可更改衣服):


外套:


  • 照原样离开
  • 牛仔裤
  • 豹子

裤子:


  • 照原样离开
  • 牛仔裤
  • 豹子

鞋子:


  • 照原样离开
  • 有趣的鞋子

在带有头发的基本版本中,决定将转换设置为“光头-非光头”。 为此,从CelebA名人数据集中选择了秃头和其他所有秃头。 在这两个小组中,将研究CycleGAN ,它可以将域A的图片转换为域B,反之亦然(另一个例子是将一匹马变成斑马)。


我们设法认识了PicsArt的开发人员之一,并了解了一些有关其内部厨房的知识。 他并不真正相信我们的头发实验会成功,但他将链接指向了哪个方向。 令我们失望的是,神经元确实没有学会如何增加或减少头发。 但是她学会了改变肤色(猜测原因)。



与这些委员会进行每次沟通之后,产品的愿景都会改变。 这些计划包括改善天空和改变单个物体(最初只是衣服)的样式:建筑物,汽车以及公共场所的装饰品。 重点越来越多地来自匿名化。 对于最后的演示文稿,我们决定坚持以下4张幻灯片的结构:


  1. 衣服的细分。 照片:原始照片,分割的衣服,4种处理衣服的选项。
  2. 场景分割。 昏暗的照片与曝光过度的天空。 天空是艺术的,建筑物是卡通的。
  3. 换脸和换发。 然后,将开始。
  4. 在一起 一张幻灯片,显示单击三个即可完成。

但是事实证明,不需要演示文稿。 到周六晚上,每个人都被告知辩护应进行3分钟的表演,而无需发言。 从场景中,您将需要实时显示演示。 组织者希望看到有效的技术,而不是精美的演示文稿,这很酷。 与其他黑客马拉松比赛(演示破损团队赢得比赛)相比,我们喜欢这个概念。 唯一的问题是,那时我们的模型是单独启动的,而且时间很长。 为了炫耀舞台,需要进行优化。


在开发过程中,技术委员会的导师在大厅里走来走去,看了看进度。 在与一位导师进行另一次交谈后,我们得到了反馈,认为对他而言,专注于一件事情对换衣服会更好。 PicsArt希望结果是真实的并向用户显示。 实际上,对于理想的项目来说,不同的导师和陪审团成员有不同的观点。


当时团队聊天的几条消息
他们对黑客马拉松网站产生了病毒式的影响,那么他们是一个认真的编辑

Ble不是黑客马拉松,而是坚实的基础:“这是一种新的infa,可重做我们拥有的一切”

在CycleGAN没解决头发变化问题之后,我们决定尝试另一种方法。 首先将头发分段,然后在其上涂上油漆。 修复任务是从周围上下文还原图像的隐藏部分。 根据我们的计划,我们隐藏了头发,然后神经网络将尝试恢复头发。 但是由于网络看不到此人的头发类型,它将恢复另一种发型。 问题在于,即使是在人脸上训练的模型也无法正常还原头发(如果仅绘制一部分头发,则可以正常工作)。



主要的困难是各种各样的发型。 有一个想法是只在秃头的人上训练绘画,然后模型可能会学会由于缺少头发而改变任何发型。 我们从该存储库中实现了神经网络。


由于需要实时从现场展示演示,因此我不得不优化管道的速度。 在整个应用过程中,所有神经网络都转移到内存中,从而实现了速度的最大提高。 有一些困难:开始在docker中做所有事情,但在评分过程中,有几次因tensorflow版本而感到痛苦。 实际上,当您尝试每天从github启动十几个存储库时,很难避免遇到这种情况,每个存储库都使用不同版本的tensorflow,并在一个位置更新为所需的版本-您将其分解到另一个位置。 在这种情况下,Docker可以成为好朋友,但是在黑客马拉松中,您想花每一分钟来测试新的假设,而不是创建新的映像。 然而,屈服于这种诱惑,您冒着花费更多时间调试代码并试图找出所需库的哪个版本的风险。


最后一天


在周日的早晨,我们决定了产品的最终愿景(已经到了):换衣服可以改善天空。 我想尽可能地缩小任务范围,但是只换衣服似乎太少了。 这就是我们的Web应用程序的“外观”。



最初,他们希望添加自适应设计,以方便从手机观看。 但是时间已经不多了,我们的设计落到了np.vstack(imgs_list)上。


在最终演出之前,我想将功能部件与衣服一起放入成品状态。 Alpha将衣服和背景混合在一起-急剧的过渡消失了。 只剩下最真实的纹理-牛仔裤和鳄鱼皮。 演出前几个小时,我设法开始了天空分割并将样式从该存储库转移到该样式。 有一些选择可以将天空变成世界末日,有毒的卡通风格。 但是,冬季的天空成为比赛最合适的主题-冬季天空的应用带来了天空“改善者”的效果。



当所有组成部分连成一个整体并获得收益时,剩下的时间非常少。 我们从社交网络下载了很多照片,并计划在它们上启动一个应用程序以选择最成功的案例(涂鸦)。 但是事实证明,我们的团队是第一个,因此一切都尽可能诚实-他们在随机照片中展示了演示。



亚瑟(Arthur)在舞台上发表了讲话,就能够揭示我们的想法,伊利亚(Ilya)在放映机上展示了我们的MVP-所有照片中的衣服都变了,天空也变了。



另一张照片









并非所有参与者都能应付任务-仅显示他们的演示。 添加一些漂亮的幻灯片的诱惑很大。 在国防方面,我们最喜欢的解决方案包括将视频转换为漫画,以及将两张照片合为一体。


结果


结果,根据内部人士的信息,我们的团队距离摩尼仅一步之遥,排名第六。


事后,我们达成了共识(除了前五名中的三支均无缘获得此奖这一事实),有必要坚持不懈并果断地完成匿名化的初衷。 即使到现在,我们仍然相信它是合适的,并将为许多用户带来价值。 整个周末都致力于匿名化的想法,至少我们会得到更多的乐趣。


如果您从未参加过黑客马拉松,请务必尝试-对您自己和您的团队进行出色的考验,让您有机会意识到自己从未有过的事情。 当然,一定要做自己喜欢的事情,因为只有通过在硬核中燃烧才能获得过程中的最大咖啡。


项目现状


我们的团队在GitHub上发布了最终演示的代码。 另外,还有一个单独的存储库可以进行匿名处理 。 将来,有计划开发具有匿名功能的初始版本:重写PyTorch上的所有内容,以更高的分辨率和更低的噪波训练照片(仅一张脸),并以电报形式举起该机器人。


对于那些已经想要尝试hackathon诞生之初的版本的人,以演示模式启动了电报机器人( @DbrainDeepAnon > /unlock dbraindeepanon > /unlock dbraindeepanon )。 它可以在Dbrain服务器上工作(非常感谢),在该服务器上进行了所有面部转换培训,因此请尝试将其关闭。 该服务使用内部包装程序Dbrain-wrappa,它使您可以轻松包装docker容器并启动电报bot。 很快,wrappa将在开源中可用。


我要指出,我们的工作没有白费。 多亏了DeepAnon,一个非常担心自己数据隐私的“匿名人士”最终才得以建立一个有关自己生活的instagram 。 他不再担心城市中的摄像头将能够从社交网络的照片中识别出他的脸,但是,朋友们将能够识别出他。 Instagram上所有人的面孔也都被匿名化了。



链接到我们使用的存储库:


https://github.com/shaoanlu/faceswap-GAN
https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
https://github.com/sacmehta/ESPNet
https://github.com/JiahuiYu/generative_inpainting
https://github.com/NVIDIA/FastPhotoStyle


PS另外,对于粉丝,我尝试重新培训网络,以使用ODS成员之一替换人员。 尝试猜测谁。 这些网络的名称为TestesteroNet。



另一张照片


Source: https://habr.com/ru/post/zh-CN433586/


All Articles