有么有人玩后三乘以ke.zm0618.com?

&p&这个问题等价于,任意给出两个正整数 i,j,问这个数互质的概率。(另外三个象限的情况是完全意一样的)我们设这个概率为p,那么这两个数不互质的概率也就是1-p&/p&&p&两个不互质的正整数,他们一定有一个大于1的最大公因数,所以: &img src=&//www.zhihu.com/equation?tex=1-p%3D%5Csum_%7Bk%3D2%7D%5E%7B%5Cinfty%7Dp%28k%29& alt=&1-p=\sum_{k=2}^{\infty}p(k)& eeimg=&1&&&/p&&p&其中p(k)是这两个正整数的最大公因数为k的概率,它等于这两个正整数均为k的倍数的概率乘以它们除以k的商互质的概率,即为 &img src=&//www.zhihu.com/equation?tex=%5Cfrac%7B1%7D%7Bk%5E%7B2%7D%7Dp& alt=&\frac{1}{k^{2}}p& eeimg=&1&& ,因此: &img src=&//www.zhihu.com/equation?tex=1-p%3D%5Csum_%7Bk%3D2%7D%5E%7B%5Cinfty%7D%5Cfrac%7B1%7D%7Bk%5E%7B2%7D%7Dp& alt=&1-p=\sum_{k=2}^{\infty}\frac{1}{k^{2}}p& eeimg=&1&&&/p&&p&整理一下: &img src=&//www.zhihu.com/equation?tex=1%3D%5Csum_%7Bk%3D1%7D%5E%7B%5Cinfty%7D%5Cfrac%7B1%7D%7Bk%5E%7B2%7D%7Dp%3D%5Cfrac%7B%5Cpi%5E%7B2%7D%7D%7B6%7Dp& alt=&1=\sum_{k=1}^{\infty}\frac{1}{k^{2}}p=\frac{\pi^{2}}{6}p& eeimg=&1&&&/p&&p&故: &img src=&//www.zhihu.com/equation?tex=p%3D%5Cfrac%7B6%7D%7B%5Cpi%5E%7B2%7D%7D& alt=&p=\frac{6}{\pi^{2}}& eeimg=&1&&&/p&
这个问题等价于,任意给出两个正整数 i,j,问这个数互质的概率。(另外三个象限的情况是完全意一样的)我们设这个概率为p,那么这两个数不互质的概率也就是1-p两个不互质的正整数,他们一定有一个大于1的最大公因数,所以: 1-p=\sum_{k=2}^{\infty}p(k)其…
&p&工作了15年,所有体会可以总结为三句话:&/p&&ol&&li&让自己至少有一项别人无法比拟的长处,你的工作会有更多安全感;&/li&&li&要能听到别人没有被说出口的话,看到表面现象之下的利益关系;&/li&&li&工作都是先维持现状不败之后,然后才可以说革新。&/li&&/ol&
工作了15年,所有体会可以总结为三句话:让自己至少有一项别人无法比拟的长处,你的工作会有更多安全感;要能听到别人没有被说出口的话,看到表面现象之下的利益关系;工作都是先维持现状不败之后,然后才可以说革新。
我录制了一套完整的C#视频,非常适合于入门,不是我吹牛,看过的人都说好。全免费全开放。&br&链接在我的个人网站上可以找到:&a href=&//link.zhihu.com/?target=http%3A//jinxuliang.com& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&jinxuliang.com&/span&&span class=&invisible&&&/span&&/a&
我录制了一套完整的C#视频,非常适合于入门,不是我吹牛,看过的人都说好。全免费全开放。 链接在我的个人网站上可以找到:
讲白了感情这玩意是有鄙视链的。贾乃亮,王宝强属于鄙视链的底层。倒不是因为丑,贾乃亮还说丑那简直是睁眼说瞎话。是因为弱。个人魅力分高低,信不信都是私生活比较开放的人,杨幂就看不上PGone。&br&李小璐前些年,一直像怀春的少女。喜欢粉粉嫩嫩小公主风,大概我15,6岁喜欢的风格吧。李小璐虽然在家里能把贾乃亮收拾的服服帖帖,但是她并不是一个有主见,雷厉风行扛得住事的人。贾乃亮更像是一个听姐姐话的小弟弟,他的处事相对偏柔,而且能力一般。并不能让李小璐信服。这点我不是夸pgone,他确实自信,狂傲,从某种角度上来说,是不是初中少女喜欢的那种社会哥?&br&杨幂喜欢什么样的?杨幂其人金刚心,有主见,不怕事,绝对的女强人,穿衣风格如果不是为了有时候迎合大众,她其实是美艳挂的。她注定是上位者,喜欢的男人不是pgone这种没文化的,她看不上。也不是贾乃亮这种,明显精力,智力都比不上她,气场弱于她很多的。除了互相利用有经济价值的炒作,她喜欢的或者说服气的类型,是黄轩那种。黄轩谦谦君子,温润如玉,但是非常的聪明。与杨幂的那种锋芒毕露,努力进取不同。黄轩给人的感觉更是温柔,善良,不争。更让人愿意与之合作。处理问题来更让人容易心悦诚服,他的level比杨幂更高。&br&至于贾乃亮,王宝强。说实话,属于很容易被绿茶搞定。他们的智力不足以看出女人柔情蜜意下的勃勃野心。pgone是属于性格怼天怼地挺屌的。杨幂是聪明,但不太懂收敛锋芒的。黄轩属于那个,在人群中不显眼的,但是做事大方得体,跟所有人关系都很好,就是给人人品好感觉的真正聪明人。
讲白了感情这玩意是有鄙视链的。贾乃亮,王宝强属于鄙视链的底层。倒不是因为丑,贾乃亮还说丑那简直是睁眼说瞎话。是因为弱。个人魅力分高低,信不信都是私生活比较开放的人,杨幂就看不上PGone。 李小璐前些年,一直像怀春的少女。喜欢粉粉嫩嫩小公主风,…
&p&大三冬天的时候,突然从腰部到下肢,开始隐隐作痛。&/p&&p&起初我只当是普普通通的风湿,东北人多少都有一点。&/p&&p&&br&&/p&&p&但吃了几次芬必得,不见起色,疼痛愈演愈烈。&/p&&p&&br&&/p&&p&十几天后,打个喷嚏都能疼似胯骨炸裂,&/p&&p&躺在床上就起不来,坐着就不能动,大喘气都不行,&/p&&p&腰部完全不能用力。&/p&&p&&br&&/p&&p&&br&&/p&&p&我家里只有爸爸一个人上班,是政府的小科员。&/p&&p&我妈有类风湿性关节炎,&/p&&p&当初在生我的时候开始发病,费尽周折,&/p&&p&为了我的健康,她没有做任何激素治疗,&/p&&p&在诞下我后,卧床瘫痪。&/p&&p&&br&&/p&&p&到现在为止,我母亲股骨头坏死,膝关节变形,双腿弯曲,还只能依靠轮椅走路。&/p&&p&&br&&/p&&p&我当时疼痛难耐,昼夜难安,每况愈下,&/p&&p&我妈一下子意识到可能由于她的遗传因素,崩溃大哭,以泪洗面。&/p&&p&&br&&/p&&p&我当时痛的坐卧难安,走路小碎步,上公交车都无比艰难,&/p&&p&在那种情况下,我自己在家这边的医院,省医院,&/p&&p&拍片子,看病,化验风湿因子。&/p&&p&&br&&/p&&p&化验结果出来,大夫说,你的HLA-B27呈阳性,&/p&&p&目前的状况很像强直性脊柱炎,建议你去北京再作确认。&/p&&p&&br&&/p&&p&于是我一个人,背着个小包,拿着我爸给我的三千块钱踏上旅程。&/p&&p&&br&&/p&&p&我爸在政府里一直战战兢兢,艰难立足,言行举止皆受制于人。&/p&&p&&br&&/p&&p&临行前,他说,穷家富路,三千块钱你拿着,爸这边陪不了你,你照顾好自己,该花的钱花,不够了管爸要。&/p&&p&&br&&/p&&p&看着他枯槁的手,握着一沓红票子,我眼泪几乎决堤。&/p&&p&&br&&/p&&p&医院在西单附近,我在胡同里,找了个便宜的旅店,落脚,困了洗洗睡。&/p&&p&饿了去小胡同里吃碗卤煮,&/p&&p&再绝望,再难过的人,一口热乎乎的卤煮下肚,也不自觉地从肚子里生出一股暖意,&/p&&p&后来对卤煮,一直念念不忘,也是来源于此。&/p&&p&&br&&/p&&p&在医院楼下的挂号机上,挂了两天的号,终于算看上了。&/p&&p&&br&&/p&&p&大夫让我做了几个简单的动作,看了看我的从哈尔滨带来的片子,笃定地说,&/p&&p&“你这是强直性脊柱炎,很典型。&/p&&p&生物制剂可以治疗,也存在副作用,治愈可能很小,只能控制。&/p&&p&一年十万左右,你考虑一下。如果不行,就吃药保守治疗。&/p&&p&结婚的话,强脊炎今后对你的生育也可能有影响,&/p&&p&孩子可能遗传,性行为可能会加剧病情。”&/p&&p&&br&&/p&&p&听罢,我如遭雷击。&/p&&p&想到我喜欢的人,我开始生出一种自卑,&/p&&p&想到我母亲生下我瘫痪,我又由心底发出一阵阵悲凉。&/p&&p&我即将是一个,不能生小孩的残疾人,一个饱受病痛折磨的残疾人,一个弓腰驼背,直不起身的残疾人。&/p&&p&&br&&/p&&p&最可悲的是,在初期明明可以控制,而因为经济原因,我不得已要放弃最佳治疗的时机。&/p&&p&&br&&/p&&p&&br&&/p&&p&家里的情况,我是知道的。&/p&&p&我们三口人一直挤在60平米的小房子里,&/p&&p&父亲一个月几千块,母亲卧床不赚钱。&/p&&p&常年高昂的医药费,让我家的积蓄,始终寥寥无几。&/p&&p&&br&&/p&&p&我颤抖着打给我妈,&/p&&p&我妈哭着说,姑娘,咱家没有钱治,咱们不治了,你别怪妈。&/p&&p&我说,没事妈,大夫说了,没那么严重,我还年轻,还行过两年就好了呢。&/p&&p&&br&&/p&&p&&br&&/p&&p&放下电话,我在人来人往的走廊里放声大哭。&/p&&p&在见惯了生离死别的医院里,我的痛哭依然突兀,&/p&&p&以至于,不相识的人,都过来拍拍我的背,&/p&&p&“别哭了,孩子,有病就治,你还年轻呢。”&/p&&p&&br&&/p&&p&我觉得生命真是不公平,花一样的年纪里,别人在山川湖海,厨房与爱。&/p&&p&我窝居在胡同里的旅店求医,还得了一个终生都治不好的病。&/p&&p&&br&&/p&&p&走在大街上,我甚至想着,要不要在来往穿梭的车辆中,一了百了地结束自己的生命。&/p&&p&&br&&/p&&p&我母亲家族里不仅有这种风湿免疫病病史,还遗传了神经性的耳鸣耳聋。&/p&&p&我姥爷,我几个舅舅,我妈,都有不同程度的耳聋耳鸣。&/p&&p&我也不幸,在初中发病,在我逐渐习惯了这种耳鸣的折磨后,屋漏偏逢连夜雨,如今,我又得了这种免疫遗传病。&/p&&p&几个姨,包括他们家的孩子都没事,偏偏是我,偏偏是我们。&/p&&p&一个残疾的母亲,即将有一个残疾的女儿。&/p&&p&&br&&/p&&p&生活公平吗?&/p&&p&&br&&/p&&p&我没遗传父我爸爸超群的智慧,没遗传我妈的情商和美貌,&/p&&p&遗传了一身病,让我在小小年纪,不得已就去体验人生的无常。&/p&&p&&br&&/p&&p&&br&&/p&&p&确诊回家之后,我妈依旧整日泪流满面,还暴躁易怒,朝着我时不时摔锅摔碗,大声叫喊,&/p&&p&“一个瘫吧的妈,摊上一个瘫吧的女儿,我怎么就这么倒霉啊!!”&/p&&p&&br&&/p&&p&我知道她心里未必比我好受,&/p&&p&但这些话,还是像针一样,刺在我心里。&/p&&p&&br&&/p&&p&每日面对她的胡闹,易怒,面对我爸的声声叹息,&/p&&p&我逐渐在痛苦中麻木,&/p&&p&身体疼痛,内心煎熬,就像在我梗满沙的喉咙里,又喂了一捧沙。&/p&&p&&br&&/p&&p&&br&&/p&&p&生物制剂我家是用不起的,于是我爸开始四处搜集偏方,&/p&&p&什么中医疗法,什么三年长的葱胡子拌香灰治大病。&/p&&p&我爸,一个研究生,在绝望中,开始听信这些无稽之谈。&/p&&p&&br&&/p&&p&所以到后来,我对中医和鬼神之论一直持有一个温和的态度,刨除其是否合理,是否真正有效。&/p&&p&&br&&/p&&p&那至少是一些绝望的家庭,最后的慰藉。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&在一片混乱中,我的假期结束,我收拾好行李,带着医院开的抗炎药,对抗着身体内部的斗争,又回学校。&/p&&p&&br&&/p&&p&医生开的药无比伤胃,我连吃了两个月,对疼痛缓解有奇效,只要不着凉,我的腿就完全不疼痛。&/p&&p&只是在那两个月里,我不断的腹泻,恶心,呕吐,体重一路下滑到80斤。&/p&&p&&br&&/p&&p&终于在呕吐物里有淡淡血迹时,我决定停药。&/p&&p&&br&&/p&&p&我的想法幼稚又决绝。&/p&&p&我想,因为病痛的折磨,或许迟早有一天,我会选择自行终结生命。&/p&&p&卖身也好,卖肾也好,卖为数不多的才华也好,&/p&&p&我想留下一笔钱,给父母,略尽孝心,然后一死了之。&/p&&p&&br&&/p&&p&&br&&/p&&p&但只要活着,人生总是有转机,&/p&&p&老天爷开眼,停药之后,我再也没严重地发作过。&/p&&p&虽然胃依旧不好,可我的身体逐渐好起来了,跑跳自如,来去如风。&/p&&p&&br&&/p&&p&快三年过去,我再没有过痛到下不来床的时候,平时早起晨僵都很少,阴天下雨,三九三伏才偶有不适。&/p&&p&适当运动,我变成了一个龙精虎猛的小胖墩。&/p&&p&还敢于去辞掉工作,重新追求梦想,还对生活抱有热烈的期待。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&想到我年迈的父亲,依然在为生活打拼,&/p&&p&我病中的母亲,还在拿我当做她余下人生的希望,&/p&&p&我的眼泪早都流干了。&/p&&p&&br&&/p&&p&当生活已经如此,&/p&&p&我们能做的,只有接住生活抛来的球,然后漂亮的打回去。&/p&&p&打不倒我的,必使我更强大。&/p&&p&&br&&/p&&p&如果说从前,我还渴望生命里能出现一个人,带走我所有的不快,听我那些郁于五内,痛哭流涕的过往,对他说,我需要你,所以我爱你。&/p&&p&&br&&/p&&p&那么现在,我希望,能够拉着爸妈的手,挡住生活里的风雨,来日找到一个生活里的爱人,毫不隐瞒地告诉他我的失败与伟大,然后对他说,“我很强大,跟我走吧。”&/p&
大三冬天的时候,突然从腰部到下肢,开始隐隐作痛。起初我只当是普普通通的风湿,东北人多少都有一点。 但吃了几次芬必得,不见起色,疼痛愈演愈烈。 十几天后,打个喷嚏都能疼似胯骨炸裂,躺在床上就起不来,坐着就不能动,大喘气都不行,腰部完全不能用力…
&p&我自己的硕士论文是用Python做数据分析的 (&a href=&//link.zhihu.com/?target=https%3A//github.com/cqcn1991/Wind-Speed-Analysis& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/cqcn1991/Win&/span&&span class=&invisible&&d-Speed-Analysis&/span&&span class=&ellipsis&&&/span&&/a&)&/p&&p&也做过几篇豆瓣的电影数据分析 (&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&为什么这部电影的豆瓣评分我不认可?- 知乎专栏&/a&, &a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&豆瓣的电影评分靠谱吗? - 知乎专栏&/a&)&/p&&p&这个回答,可能不是很适合题主。题主应该就是想稍微用一下Python. 我这里介绍的是&b&系统性、重度使用的&/b&。&/p&&p&&b&1. 什么样的教程最好,最快、最适合入门&/b& &/p&&p&对于0基础的人来说,最简答的办法是从例子开始。&/p&&p&比如说,一个实际的数据分析案例,你跟着走一边,从读入数据、画图,怎么解释数据,其实就都大概懂了。而不是先去学Python语言特性、看某些库的文档(Numpy, Matplotlib, Pandas等等)。&/p&&p&另外重要的,就是最好能有视频教程。因为你可能也不知道怎么安装、使用Python和相关的库,怎么使用Git, 用什么样的编辑器(IDE)来写代码等等。这些东西,如果有视频的话,其实就一目了然了。看起来比书快很多。&/p&&p&也就是说最理想的教程,应该是以&b&例子入手(而不是从Python基础编程、语法入手),而且最好有视频&/b&。可以按照这个标准自己去找教程&b&。&/b&&/p&&p&&b&2. 具体教程&/b& &/p&&p&满足这个标准的中文的教程不清楚有哪些。英文的话,目前没有碰到过特别优秀的、完全符合上述要求的。&/p&&p&说说我熟悉的教程,都是英文的&/p&&p&&b&①Harvard CS109 Data Science &/b&&/p&&figure&&img src=&https://pic3.zhimg.com/50/eb0ded894d15a41ab5795_b.jpg& data-rawwidth=&1045& data-rawheight=&602& class=&origin_image zh-lightbox-thumb& width=&1045& data-original=&https://pic3.zhimg.com/50/eb0ded894d15a41ab5795_r.jpg&&&/figure&&p&&br&&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//cs109.github.io/2015/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&cs109.github.io/2015/&/span&&span class=&invisible&&&/span&&/a&&br&首推。内容包括&b&最基础的概率、统计分析,到更深的Machine Learning&/b&。既包括理论内容讲解,也包括实际的编程(用的Python)。课堂讲解、程序均有相应视频(而且有英文字幕)。有案例作业,拿数据进行分析,可以仔细的学习参考答案里面的代码(也就是有编程案例)。完全免费。&/p&&p&不过,为什么还要学概率论这些一大堆东西?(这也是我最开始说的,这篇答案不是适合楼主的轻量级需求)&/p&&p&因为,&b&你以为你想要学的是Python, 而实际上是分析数据的方法,这个是任何文档、编程的书无法教给你的。但却是最重要的。&/b&也就是背后的理论、思考等等。&/p&&p&这个教程唯一的缺点,就是没有书。很难去快速查询、复习。比如再学完这门课,碰到一个东西,想要查的时候。无从查起。&/p&&p&&b&②Udemy, Learning Python for Data Analysis and Visualization&/b&&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.udemy.com/learning-python-for-data-analysis-and-visualization/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&udemy.com/learning-pyth&/span&&span class=&invisible&&on-for-data-analysis-and-visualization/&/span&&span class=&ellipsis&&&/span&&/a&&br&当时,按照我对于理想教程的要求,买的。Udemy上评价最好,卖得最好的教程&/p&&p&然而,并不好。不推荐。为什么?&b&因为这里的视频,仅仅是把文档重新讲了一遍&/b&,在最后才有一个例子。没有人需要先学习如何“查询数据”,如何“画柱状图”。这种东西大家都可以搜得到。&b&真正缺乏的,是以问题为导向,把这些东西实际运用起来。&/b&&/p&&p&对我来说,这个教程最大的好处,是知道了Kaggle,可以瞻仰一下真正大牛们是怎样用Data Science来解决问题的&/p&&p&&b&3. 不从0开始学Python语言&/b&&/p&&p&剩下的,就没有什么教程了。也就是开头说了,目前还比较缺乏系统性的教程。只是,再次强调一点,不学什么 —— 不从0开始学Python语言。&/p&&p&为什么?简单的If, For loop这些,其实大家都会。Python的基本语言用法,一看就懂,完全不需要在一开始就系统的学Python(其实一开始单调的学习语法特性,你也未必学得进去)。&b&真正缺的,反而是例子,而且是使用Pandas, Matplotlib等等库的做数据分析的例子。&/b&&/p&&p&只有当你真正发现,Python不会写。或者代码组织很麻烦。或者看到的代码不理解的时候,才需要去认真学Python语言。其实这个时候,也才真正学得进去。&/p&&p&或者,可以读《Data Science from Scratch: First Principles with Python》里的Python Crash Course部分,1个小时就足够了解Python的基本语法和一些特性。(这本书里其他的东西,就完全不要看了。因为是讲的是如何去实现Pandas, Numpy中的某些内容。而没有讲实际Pandas, Numpy等等的使用技巧。)&/p&&p&&b&4. 一些补充&/b&&/p&&p&就像上面说的,Python只是一门语言。一般的数据分析,Python, R, Matlab,甚至Excel都可以做。很多同学可能已经会Matlab了,那么其实直接用Matlab就行了(不过Excel、Matlab的工作效率可能比较低)&/p&&p&--------------------&/p&&p&UPDATE: , 最近出了本书, &/p&&p&&a href=&//link.zhihu.com/?target=https%3A//book.douban.com/subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hands-On Machine Learning with Scikit-Learn and TensorFlow&/a&&/p&&p&或许会是一个好的入手的方式。&/p&&p&不过依然是书,而且偏机器学习和AI。其实作为0基础起步的话,可能关于pandas的操作会更简单实用一些,不过放在这里做参考啦。&/p&
我自己的硕士论文是用Python做数据分析的 ()也做过几篇豆瓣的电影数据分析 (, )这个回答,可能不是很适合题主。题主应该就…
&figure&&img src=&https://pic3.zhimg.com/v2-da6e908fbff06e8e14c60d86d776d225_b.jpg& data-rawwidth=&768& data-rawheight=&576& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&https://pic3.zhimg.com/v2-da6e908fbff06e8e14c60d86d776d225_r.jpg&&&/figure&&p&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-abd42bbb61ee_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&558& data-rawheight=&315& class=&origin_image zh-lightbox-thumb& width=&558& data-original=&https://pic1.zhimg.com/v2-abd42bbb61ee_r.jpg&&&/figure&&p&作为一名久经片场的老司机,早就想写一些探讨驾驶技术的文章。这篇就介绍利用生成式对抗网络(GAN)的两个基本驾驶技能:&br&&/p&&p&1) 去除(爱情)动作片中的马赛克&/p&&p&2) 给(爱情)动作片中的女孩穿(tuo)衣服&/p&&p&&br&&/p&&h2&生成式模型&/h2&&p&上一篇《&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&用GAN生成二维样本的小例子&/a&》中已经简单介绍了GAN,这篇再简要回顾一下生成式模型,算是补全一个来龙去脉。&/p&&p&生成模型就是能够产生指定分布数据的模型,常见的生成式模型一般都会有一个用于产生样本的简单分布。例如一个均匀分布,根据要生成分布的概率密度函数,进行建模,让均匀分布中的样本经过变换得到指定分布的样本,这就可以算是最简单的生成式模型。比如下面例子:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-d11b5fb26d3cc8e942f841bafe010cd8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1021& data-rawheight=&443& class=&origin_image zh-lightbox-thumb& width=&1021& data-original=&https://pic1.zhimg.com/v2-d11b5fb26d3cc8e942f841bafe010cd8_r.jpg&&&/figure&&p&图中左边是一个自定义的概率密度函数,右边是相应的1w个样本的直方图,自定义分布和生成这些样本的代码如下:&br&&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&from&/span& &span class=&nn&&functools&/span& &span class=&kn&&import&/span& &span class=&n&&partial&/span&
&span class=&kn&&import&/span& &span class=&nn&&numpy&/span&
&span class=&kn&&from&/span& &span class=&nn&&matplotlib&/span& &span class=&kn&&import&/span& &span class=&n&&pyplot&/span&
&span class=&c1&&# Define a PDF&/span&
&span class=&n&&x_samples&/span& &span class=&o&&=&/span& &span class=&n&&numpy&/span&&span class=&o&&.&/span&&span class=&n&&arange&/span&&span class=&p&&(&/span&&span class=&o&&-&/span&&span class=&mi&&3&/span&&span class=&p&&,&/span& &span class=&mf&&3.01&/span&&span class=&p&&,&/span& &span class=&mf&&0.01&/span&&span class=&p&&)&/span&
&span class=&n&&PDF&/span& &span class=&o&&=&/span& &span class=&n&&numpy&/span&&span class=&o&&.&/span&&span class=&n&&empty&/span&&span class=&p&&(&/span&&span class=&n&&x_samples&/span&&span class=&o&&.&/span&&span class=&n&&shape&/span&&span class=&p&&)&/span&
&span class=&n&&PDF&/span&&span class=&p&&[&/span&&span class=&n&&x_samples&/span& &span class=&o&&&&/span& &span class=&mi&&0&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&numpy&/span&&span class=&o&&.&/span&&span class=&n&&round&/span&&span class=&p&&(&/span&&span class=&n&&x_samples&/span&&span class=&p&&[&/span&&span class=&n&&x_samples&/span& &span class=&o&&&&/span& &span class=&mi&&0&/span&&span class=&p&&]&/span& &span class=&o&&+&/span& &span class=&mf&&3.5&/span&&span class=&p&&)&/span& &span class=&o&&/&/span& &span class=&mi&&3&/span&
&span class=&n&&PDF&/span&&span class=&p&&[&/span&&span class=&n&&x_samples&/span& &span class=&o&&&=&/span& &span class=&mi&&0&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&mf&&0.5&/span& &span class=&o&&*&/span& &span class=&n&&numpy&/span&&span class=&o&&.&/span&&span class=&n&&cos&/span&&span class=&p&&(&/span&&span class=&n&&numpy&/span&&span class=&o&&.&/span&&span class=&n&&pi&/span& &span class=&o&&*&/span& &span class=&n&&x_samples&/span&&span class=&p&&[&/span&&span class=&n&&x_samples&/span& &span class=&o&&&=&/span& &span class=&mi&&0&/span&&span class=&p&&])&/span& &span class=&o&&+&/span& &span class=&mf&&0.5&/span&
&span class=&n&&PDF&/span& &span class=&o&&/=&/span& &span class=&n&&numpy&/span&&span class=&o&&.&/span&&span class=&n&&sum&/span&&span class=&p&&(&/span&&span class=&n&&PDF&/span&&span class=&p&&)&/span&
&span class=&c1&&# Calculate approximated CDF&/span&
&span class=&n&&CDF&/span& &span class=&o&&=&/span& &span class=&n&&numpy&/span&&span class=&o&&.&/span&&span class=&n&&empty&/span&&span class=&p&&(&/span&&span class=&n&&PDF&/span&&span class=&o&&.&/span&&span class=&n&&shape&/span&&span class=&p&&)&/span&
&span class=&n&&cumulated&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&
&span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&nb&&range&/span&&span class=&p&&(&/span&&span class=&n&&CDF&/span&&span class=&o&&.&/span&&span class=&n&&shape&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&]):&/span&
&span class=&n&&cumulated&/span& &span class=&o&&+=&/span& &span class=&n&&PDF&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span&
&span class=&n&&CDF&/span&&span class=&p&&[&/span&&span class=&n&&i&/span&&span class=&p&&]&/span& &span class=&o&&=&/span& &span class=&n&&cumulated&/span&
&span class=&c1&&# Generate samples&/span&
&span class=&n&&generate&/span& &span class=&o&&=&/span& &span class=&n&&partial&/span&&span class=&p&&(&/span&&span class=&n&&numpy&/span&&span class=&o&&.&/span&&span class=&n&&interp&/span&&span class=&p&&,&/span& &span class=&n&&xp&/span&&span class=&o&&=&/span&&span class=&n&&CDF&/span&&span class=&p&&,&/span& &span class=&n&&fp&/span&&span class=&o&&=&/span&&span class=&n&&x_samples&/span&&span class=&p&&)&/span&
&span class=&n&&u_rv&/span& &span class=&o&&=&/span& &span class=&n&&numpy&/span&&span class=&o&&.&/span&&span class=&n&&random&/span&&span class=&o&&.&/span&&span class=&n&&random&/span&&span class=&p&&(&/span&&span class=&mi&&10000&/span&&span class=&p&&)&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&n&&generate&/span&&span class=&p&&(&/span&&span class=&n&&u_rv&/span&&span class=&p&&)&/span&
&span class=&c1&&# Visualization&/span&
&span class=&n&&fig&/span&&span class=&p&&,&/span& &span class=&p&&(&/span&&span class=&n&&ax0&/span&&span class=&p&&,&/span& &span class=&n&&ax1&/span&&span class=&p&&)&/span& &span class=&o&&=&/span& &span class=&n&&pyplot&/span&&span class=&o&&.&/span&&span class=&n&&subplots&/span&&span class=&p&&(&/span&&span class=&n&&ncols&/span&&span class=&o&&=&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&n&&figsize&/span&&span class=&o&&=&/span&&span class=&p&&(&/span&&span class=&mi&&9&/span&&span class=&p&&,&/span& &span class=&mi&&4&/span&&span class=&p&&))&/span&
&span class=&n&&ax0&/span&&span class=&o&&.&/span&&span class=&n&&plot&/span&&span class=&p&&(&/span&&span class=&n&&x_samples&/span&&span class=&p&&,&/span& &span class=&n&&PDF&/span&&span class=&p&&)&/span&
&span class=&n&&ax0&/span&&span class=&o&&.&/span&&span class=&n&&axis&/span&&span class=&p&&([&/span&&span class=&o&&-&/span&&span class=&mf&&3.5&/span&&span class=&p&&,&/span& &span class=&mf&&3.5&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&n&&numpy&/span&&span class=&o&&.&/span&&span class=&n&&max&/span&&span class=&p&&(&/span&&span class=&n&&PDF&/span&&span class=&p&&)&/span&&span class=&o&&*&/span&&span class=&mf&&1.1&/span&&span class=&p&&])&/span&
&span class=&n&&ax1&/span&&span class=&o&&.&/span&&span class=&n&&hist&/span&&span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&mi&&100&/span&&span class=&p&&)&/span&
&span class=&n&&pyplot&/span&&span class=&o&&.&/span&&span class=&n&&show&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&p&对于一些简单的情况,我们会假设已知有模型可以很好的对分布进行建模,缺少的只是合适的参数。这时候很自然只要根据观测到的样本,学习参数让当前观测到的样本下的似然函数最大,这就是最大似然估计(&b&M&/b&aximum &b&L&/b&ikelihood &b&E&/b&stimation):&br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Chat%7B%5Ctheta%7D%3D%5Coperatorname%2A%7Bargmax%7D_%7B%5Ctheta%7D+P%28%5Cbm%7Bx%7D%7C%5Ctheta%29+%3D+%5Coperatorname%2A%7Bargmax%7D_%7B%5Ctheta%7D+%5Cprod_%7Bi%3D1%7D%5E%7Bn%7DP%28x_i%7C%5Ctheta%29+& alt=&\hat{\theta}=\operatorname*{argmax}_{\theta} P(\bm{x}|\theta) = \operatorname*{argmax}_{\theta} \prod_{i=1}^{n}P(x_i|\theta) & eeimg=&1&&&/p&&p&MLE是一个最基本的思路,实践中用得很多的还有KL散度(Kullback–Leibler divergence),假设真实分布是P,采样分布是Q,则KL散度为:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=D_%7BKL%7D%28P%7C%7CQ%29%3D%5Csum_%7Bx+%5Cin+%5COmega%7DP%28%7Bx%7D%29%5Clog%5Cfrac%7BP%28x%29%7D%7BQ%28x%29%7D+& alt=&D_{KL}(P||Q)=\sum_{x \in \Omega}P({x})\log\frac{P(x)}{Q(x)} & eeimg=&1&&&/p&&p&从公式也能看出来,KL散度描述的是两个分布的差异程度。换个角度来看,让产生的样本和原始分布接近,也就是要让这俩的差异减小,所以最小化KL散度就等同于MLE。从公式上来看的话,我们考虑把公式具体展开一下:&/p&&p&&br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cbegin%7Balign%7D+D_%7BKL%7D%28P%7C%7CQ%29+%26%3D%5Csum_%7Bx+%5Cin+%5COmega%7DP%28%7Bx%7D%29%5Clog%5Cfrac%7BP%28x%29%7D%7BQ%28x%29%7D+%5C%5C+%26+%3D-%5Csum_%7Bx%5Cin%5COmega%7DP%28%7Bx%7D%29%5Clog%7BQ%28x%29%7D+%2B%5Csum_%7Bx%5Cin%5COmega%7DP%28%7Bx%7D%29%5Clog%7BP%28x%29%7D+%5C%5C+%26+%3D-%5Csum_%7Bx%5Cin%5COmega%7DP%28%7Bx%7D%29%5Clog%7BQ%28x%29%7D+%2BH%28P%29+%5Cend%7Balign%7D& alt=&\begin{align} D_{KL}(P||Q) &=\sum_{x \in \Omega}P({x})\log\frac{P(x)}{Q(x)} \\ & =-\sum_{x\in\Omega}P({x})\log{Q(x)} +\sum_{x\in\Omega}P({x})\log{P(x)} \\ & =-\sum_{x\in\Omega}P({x})\log{Q(x)} +H(P) \end{align}& eeimg=&1&&&/p&&p&公式的第二项就是熵,先不管这项,用H(P)表示。接下来考虑一个小trick:从Q中抽样n个样本&img src=&https://www.zhihu.com/equation?tex=%7Bx_1%2Cx_2%2C...%2Cx_n%7D& alt=&{x_1,x_2,...,x_n}& eeimg=&1&&,来估算P(x)的经验值(empirical density function):&br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Chat%7BP%7D%28x%29%3D%5Cfrac+1+n+%5Csum_%7Bi%3D1%7D%5En+%5Cdelta%28x_i-x%29& alt=&\hat{P}(x)=\frac 1 n \sum_{i=1}^n \delta(x_i-x)& eeimg=&1&&&/p&&p&其中&img src=&https://www.zhihu.com/equation?tex=%5Cdelta%28%5Ccdot%29& alt=&\delta(\cdot)& eeimg=&1&&是狄拉克&img src=&https://www.zhihu.com/equation?tex=%5Cdelta& alt=&\delta& eeimg=&1&&函数,把这项替换到上面公式的P(x):&/p&&p&&br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cbegin%7Balign%7D+D_%7BKL%7D%28P%7C%7CQ%29+%26%3D-%5Csum_%7Bx%5Cin%5COmega%7D%5Cfrac+1+n+%5Csum_%7Bi%3D1%7D%5En+%5Cdelta%28x_i-x%29%5Clog%7BQ%28x%29%7D+%2BH%28P%29+%5C%5C+%26+%3D-%5Cfrac+1+n+%5Csum_%7Bi%3D1%7D%5En+%5Csum_%7Bx%5Cin%5COmega%7D+%5Cdelta%28x_i-x%29%5Clog%7BQ%28x%29%7D+%2BH%28P%29+%5Cend%7Balign%7D& alt=&\begin{align} D_{KL}(P||Q) &=-\sum_{x\in\Omega}\frac 1 n \sum_{i=1}^n \delta(x_i-x)\log{Q(x)} +H(P) \\ & =-\frac 1 n \sum_{i=1}^n \sum_{x\in\Omega} \delta(x_i-x)\log{Q(x)} +H(P) \end{align}& eeimg=&1&&&/p&&p&因为是离散的采样值,所以&img src=&https://www.zhihu.com/equation?tex=%5Csum_%7Bx%5Cin%5COmega%7D+%5Cdelta%28x_i-x%29& alt=&\sum_{x\in\Omega} \delta(x_i-x)& eeimg=&1&&中只有&img src=&https://www.zhihu.com/equation?tex=x%3Dx_i& alt=&x=x_i& eeimg=&1&&的时候狄拉克&img src=&https://www.zhihu.com/equation?tex=%5Cdelta& alt=&\delta& eeimg=&1&&函数才为1,所以考虑&img src=&https://www.zhihu.com/equation?tex=x%3Dx_i& alt=&x=x_i& eeimg=&1&&时这项直接化为1:&/p&&p&&br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=D_%7BKL%7D%28P%7C%7CQ%29+%3D-%5Cfrac+1+n%5Csum_%7Bi%3D1%7D%5En+%5Clog%7BQ%28x_i%29%7D+%2BH%28P%29& alt=&D_{KL}(P||Q) =-\frac 1 n\sum_{i=1}^n \log{Q(x_i)} +H(P)& eeimg=&1&&&/p&&p&第一项正是似然的负对数形式。&/p&&p&说了些公式似乎跑得有点远了,其实要表达还是那个简单的意思:通过减小两个分布的差异可以让一个分布逼近另一个分布。仔细想想,这正是GAN里面adversarial loss的做法。&/p&&p&很多情况下我们面临的是更为复杂的分布,比如&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&上篇文章&/a&中的例子,又或是实际场景中更复杂的情况,比如生成不同人脸的图像。这时候,作为具有universal approximation性质的神经网络是一个看上去不错的选择[1]:&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-6fee20494f50baae2c1dc5fc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1561& data-rawheight=&549& class=&origin_image zh-lightbox-thumb& width=&1561& data-original=&https://pic4.zhimg.com/v2-6fee20494f50baae2c1dc5fc_r.jpg&&&/figure&&p&所以虽然GAN里面同时包含了生成网络和判别网络,但本质来说GAN的目的还是生成模型。从生成式模型的角度,Ian Goodfellow总结过一个和神经网络相关生成式方法的“家谱”[1]:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-8c6f1d8ee39dfbb4fcfb2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&771& data-rawheight=&498& class=&origin_image zh-lightbox-thumb& width=&771& data-original=&https://pic1.zhimg.com/v2-8c6f1d8ee39dfbb4fcfb2_r.jpg&&&/figure&&p&在这其中,当下最流行的就是GAN和&b&V&/b&ariational &b&A&/b&uto&b&E&/b&ncoder(VAE),两种方法的一个简明示意如下[3]:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-380cde71a2f6ece28b4a97_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&568& data-rawheight=&274& class=&origin_image zh-lightbox-thumb& width=&568& data-original=&https://pic1.zhimg.com/v2-380cde71a2f6ece28b4a97_r.jpg&&&/figure&&p&本篇不打算展开讲什么是VAE,不过通过这个图,和名字中的autoencoder也大概能知道,VAE中生成的loss是基于重建误差的。而只基于重建误差的图像生成,都或多或少会有图像模糊的缺点,因为误差通常都是针对全局。比如基于MSE(Mean Squared Error)的方法用来生成超分辨率图像,容易出现下面的情况[4]:&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-78f53b142fab51b0c09a1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&892& data-rawheight=&598& class=&origin_image zh-lightbox-thumb& width=&892& data-original=&https://pic1.zhimg.com/v2-78f53b142fab51b0c09a1_r.jpg&&&/figure&&p&在这个二维示意中,真实数据分布在一个U形的流形上,而MSE系的方法因为loss的形式往往会得到一个接近平均值所在的位置(蓝色框)。&/p&&p&GAN在这方面则完爆其他方法,因为目标分布在流形上。所以只要大概收敛了,就算生成的图像都看不出是个啥,清晰度常常是有保证的,而这正是去除女优身上马赛克的理想特性!&/p&&p&&br&&/p&&h2&马赛克-&清晰画面:超分辨率(Super Resolution)问题&/h2&&p&说了好些铺垫,终于要进入正题了。首先明确,去马赛克其实是个图像超分辨率问题,也就是如何在低分辨率图像基础上得到更高分辨率的图像:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-31c84b42ad_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&784& data-rawheight=&324& class=&origin_image zh-lightbox-thumb& width=&784& data-original=&https://pic2.zhimg.com/v2-31c84b42ad_r.jpg&&&/figure&&p&视频中超分辨率实现的一个套路是通过不同帧的低分辨率画面猜测超分辨率的画面,有兴趣了解这个思想的朋友可以参考我之前的一个答案:&a href=&https://www.zhihu.com/question//answer/& class=&internal&&如何通过多帧影像进行超分辨率重构? &/a& &/p&&p&不过基于多帧影像的方法对于女优身上的马赛克并不是很适用,所以这篇要讲的是基于单帧图像的超分辨率方法。&/p&&h2&SRGAN&/h2&&p&说到基于GAN的超分辨率的方法,就不能不提到SRGAN[4]:《Photo-Realistic Single Image &b&S&/b&uper-&b&R&/b&esolution Using a &b&G&/b&enerative &b&A&/b&dversarial&br&&b&N&/b&etwork》。这个工作的思路是:基于像素的MSE loss往往会得到大体正确,但是高频成分模糊的结果。所以只要重建低频成分的图像内容,然后靠GAN来补全高频的细节内容,就可以了:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-128029dfc7c470b07a4a1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&446& data-rawheight=&131& class=&origin_image zh-lightbox-thumb& width=&446& data-original=&https://pic3.zhimg.com/v2-128029dfc7c470b07a4a1_r.jpg&&&/figure&&p&这个思路其实和最早基于深度网络的风格迁移的思路很像(有兴趣的读者可以参考我之前文章&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&瞎谈CNN:通过优化求解输入图像&/a&的最后一部分),其中重建内容的content loss是原始图像和低分辨率图像在VGG网络中的各个ReLU层的激活值的差异:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-331e02e394cfd04e7114a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&529& data-rawheight=&150& class=&origin_image zh-lightbox-thumb& width=&529& data-original=&https://pic3.zhimg.com/v2-331e02e394cfd04e7114a_r.jpg&&&/figure&&p&生成细节adversarial loss就是GAN用来判别是原始图还是生成图的loss:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-fa5af2a10fe9a4dadfb04_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&394& data-rawheight=&89& class=&content_image& width=&394&&&/figure&&p&把这两种loss放一起,取个名叫perceptual loss。训练的网络结构如下:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-17861edeb4bcfae4e9f369_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&780& data-rawheight=&400& class=&origin_image zh-lightbox-thumb& width=&780& data-original=&https://pic1.zhimg.com/v2-17861edeb4bcfae4e9f369_r.jpg&&&/figure&&p&正是上篇文章中讲过的C-GAN,条件C就是低分辨率的图片。SRGAN生成的超分辨率图像虽然PSNR等和原图直接比较的传统量化指标并不是最好,但就视觉效果,尤其是细节上,胜过其他方法很多。比如下面是作者对比bicubic插值和基于ResNet特征重建的超分辨率的结果:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-f3b4376938ffcbd23c42d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&981& data-rawheight=&392& class=&origin_image zh-lightbox-thumb& width=&981& data-original=&https://pic4.zhimg.com/v2-f3b4376938ffcbd23c42d_r.jpg&&&/figure&&p&可以看到虽然很多细节都和原始图片不一样,不过看上去很和谐,并且细节的丰富程度远胜于SRResNet。这些栩栩如生的细节,可以看作是GAN根据学习到的分布信息“联想”出来的。&/p&&p&对于更看重“看上去好看”的超分辨率应用,SRGAN显然是很合适的。当然对于一些更看重重建指标的应用,比如超分辨率恢复嫌疑犯面部细节,SRGAN就不可以了。&/p&&h2&pix2pix&/h2&&p&虽然专门用了一节讲SRGAN,但本文用的方法其实是pix2pix[5]。这项工作刚在arxiv上发布就引起了不小的关注,它巧妙的利用GAN的框架解决了通用的Image-to-Image translation的问题。举例来说,在不改变分辨率的情况下:把照片变成油画风格;把白天的照片变成晚上;用色块对图片进行分割或者倒过来;为黑白照片上色;…每个任务都有专门针对性的方法和相关研究,但其实总体来看,都是像素到像素的一种映射啊,其实可以看作是一个问题。这篇文章的巧妙,就在于提出了pix2pix的方法,一个框架,解决所有这些问题。方法的示意图如下:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e2ea753b7b0d7f18abee3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&485& data-rawheight=&437& class=&origin_image zh-lightbox-thumb& width=&485& data-original=&https://pic1.zhimg.com/v2-e2ea753b7b0d7f18abee3_r.jpg&&&/figure&&p&就是一个Conditional GAN,条件C是输入的图片。除了直接用C-GAN,这项工作还有两个改进:&/p&&p&1)&b&利用U-Net结构生成细节更好的图片&/b&[6]&/p&&figure&&img src=&https://pic4.zhimg.com/v2-beb074bebbfa0db_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&907& data-rawheight=&612& class=&origin_image zh-lightbox-thumb& width=&907& data-original=&https://pic4.zhimg.com/v2-beb074bebbfa0db_r.jpg&&&/figure&&p&U-Net是德国Freiburg大学模式识别和图像处理组提出的一种全卷积结构。和常见的先降采样到低维度,再升采样到原始分辨率的编解码(Encoder-Decoder)结构的网络相比,U-Net的区别是加入skip-connection,对应的feature maps和decode之后的同样大小的feature maps按通道拼(concatenate)一起,用来保留不同分辨率下像素级的细节信息。U-Net对提升细节的效果非常明显,下面是pix2pix文中给出的一个效果对比:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-2fb4ddb2fdc24eea31eea_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&563& data-rawheight=&307& class=&origin_image zh-lightbox-thumb& width=&563& data-original=&https://pic4.zhimg.com/v2-2fb4ddb2fdc24eea31eea_r.jpg&&&/figure&&p&可以看到,各种不同尺度的信息都得到了很大程度的保留。&/p&&p&2)&b&利用马尔科夫性的判别器(PatchGAN)&br&&/b&&/p&&p&pix2pix和SRGAN的一个异曲同工的地方是都有用重建解决低频成分,用GAN解决高频成分的想法。在pix2pix中,这个思想主要体现在两个地方。一个是loss函数,加入了L1 loss用来让生成的图片和训练的目标图片尽量相似,而图像中高频的细节部分则交由GAN来处理:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-cb180ad03d8a72e7883285b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&447& data-rawheight=&51& class=&origin_image zh-lightbox-thumb& width=&447& data-original=&https://pic4.zhimg.com/v2-cb180ad03d8a72e7883285b_r.jpg&&&/figure&&p&还有一个就是&b&PatchGAN&/b&,也就是具体的GAN中用来判别是否生成图的方法。PatchGAN的思想是,既然GAN只负责处理低频成分,那么判别器就没必要以一整张图作为输入,只需要对NxN的一个图像patch去进行判别就可以了。这也是为什么叫Markovian discriminator,因为在patch以外的部分认为和本patch互相独立。&/p&&p&具体实现的时候,作者使用的是一个NxN输入的全卷积小网络,最后一层每个像素过sigmoid输出为真的概率,然后用BCEloss计算得到最终loss。这样做的好处是因为输入的维度大大降低,所以参数量少,运算速度也比直接输入一张快,并且可以计算任意大小的图。作者对比了不同大小patch的结果,对于256x256的输入,patch大小在70x70的时候,从视觉上看结果就和直接把整张图片作为判别器输入没什么区别了:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-5172ca51efb4ee3e453b15_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&842& data-rawheight=&107& class=&origin_image zh-lightbox-thumb& width=&842& data-original=&https://pic1.zhimg.com/v2-5172ca51efb4ee3e453b15_r.jpg&&&/figure&&h2&生成带局部马赛克的训练数据&/h2&&p&利用pix2pix,只要准备好无码和相应的有码图片就可以训练去马赛克的模型了,就是这么简单。那么问题是,如何生成有马赛克的图片?&/p&&p&有毅力的话,可以手动加马赛克,这样最为精准。这节介绍一个不那么准,但是比随机强的方法:利用分类模型的激活区域进行自动马赛克标注。&/p&&p&基本思想是利用一个可以识别需要打码图像的分类模型,提取出这个模型中对应类的CAM(&b&C&/b&lass &b&A&/b&ctivation &b&M&/b&ap)[7],然后用马赛克遮住响应最高的区域即可。这里简单说一下什么是CAM,对于最后一层是全局池化(平均或最大都可以)的CNN结构,池化后的feature map相当于是做了个加权相加来计算最终的每个类别进入softmax之前的激活值。CAM的思路是,把这个权重在池化前的feature map上按像素加权相加,最后得到的单张的激活图就可以携带激活当前类别的一些位置信息,这相当于一种弱监督(classification--&localization):&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-fd28f0b871bd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&660& data-rawheight=&314& class=&origin_image zh-lightbox-thumb& width=&660& data-original=&https://pic4.zhimg.com/v2-fd28f0b871bd_r.jpg&&&/figure&&p&上图是一个CAM的示意,用澳洲梗类别的CAM,放大到原图大小,可以看到小狗所在的区域大致是激活响应最高的区域。&/p&&p&那么就缺一个可以识别XXX图片的模型了,网上还恰好就有个现成的,yahoo于2016年发布的开源色情图片识别模型Open NSFW(&b&N&/b&ot &b&S&/b&afe &b&F&/b&or &b&W&/b&ork):&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//github.com/yahoo/open_nsfw& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&yahoo/open_nsfw&/a&&/p&&p&CAM的实现并不难,结合Open NSFW自动打码的代码和使用放在了这里:&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//github.com/frombeijingwithlove/dlcv_for_beginners/tree/master/random_bonus/generate_mosaic_for_porno_images& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&给XX图片生成马赛克&/a&&/p&&p&&br&&/p&&p&(成功打码的)效果差不多是下面这样子:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-cbefa39dc983f2645dd8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&768& data-rawheight=&256& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&https://pic4.zhimg.com/v2-cbefa39dc983f2645dd8_r.jpg&&&/figure&&h2&去除(爱情)动作片中的马赛克&/h2&&p&这没什么好说的了,一行代码都不用改,只需要按照前面的步骤把数据准备好,然后按照pix2pix官方的使用方法训练就可以了:&/p&&p&Torch版pix2pix:&a href=&https://link.zhihu.com/?target=https%3A//github.com/phillipi/pix2pix& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&phillipi/pix2pix&/a&&/p&&p&pyTorch版pix2pix(Cycle-GAN二合一版):&a href=&https://link.zhihu.com/?target=https%3A//github.com/junyanz/pytorch-CycleGAN-and-pix2pix& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&junyanz/pytorch-CycleGAN-and-pix2pix&/a&&/p&&p&从D盘里随随便便找了几千张图片,用来执行了一下自动打码和pix2pix训练(默认参数),效果是下面这样:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-9f52b17c0e1296767cbfbfafc290a5bd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&814& data-rawheight=&691& class=&origin_image zh-lightbox-thumb& width=&814& data-original=&https://pic2.zhimg.com/v2-9f52b17c0e1296767cbfbfafc290a5bd_r.jpg&&&/figure&&p&什么?你问说好给女优去马赛克呢?女优照片呢?&/p&&figure&&img src=&https://pic4.zhimg.com/v2-480fb8a4dcfc7a4f92ec_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&75& data-rawheight=&60& class=&content_image& width=&75&&&/figure&&p&还是要说一下,在真人照片上的效果比蘑菇和花强。&/p&&h2&对偶学习(Dual Learning)&/h2&&p&去马赛克已经讲完了,接下来就是给女孩穿(tuo)衣服了,动手之前,还是先讲一下铺垫:&b&对偶学习&/b&和&b&Cycle-GAN&/b&。&/p&&p&对偶学习是MSRA于2016年提出的一种用于机器翻译的增强学习方法[8],目的是解决海量数据配对标注的难题,个人觉得算是一种弱监督方法(不过看到大多数文献算作无监督)。以机器翻译为例,对偶学习基本思想如下图[9]:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c4b1eeda364fb6c9bada02f3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&866& data-rawheight=&399& class=&origin_image zh-lightbox-thumb& width=&866& data-original=&https://pic3.zhimg.com/v2-c4b1eeda364fb6c9bada02f3_r.jpg&&&/figure&&p&左边的灰衣男只懂英语,右边的黑衣女只懂中文,现在的任务就是,要学习如何翻译英语到中文。对偶学习解决这个问题的思路是:给定一个模型&img src=&https://www.zhihu.com/equation?tex=f%3Ax%5Crightarrow+y& alt=&f:x\rightarrow y& eeimg=&1&&一上来无法知道f翻译得是否正确,但是如果考虑上&img src=&https://www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&&的对偶问题&img src=&https://www.zhihu.com/equation?tex=g%3Ay%5Crightarrow+x& alt=&g:y\rightarrow x& eeimg=&1&&,那么我可以尝试翻译一个英文句子到中文,再翻译回来。这种转了一圈的结果&img src=&https://www.zhihu.com/equation?tex=x%27%3Dg%28f%28x%29%29& alt=&x'=g(f(x))& eeimg=&1&&,灰衣男是可以用一个标准(BLEU)判断x'和x是否一个意思,并且把结果的一致性反馈给这两个模型进行改进。同样的,从中文取个句子,这样循环翻译一遍,两个模型又能从黑衣女那里获取反馈并改进模型。其实这就是强化学习的过程,每次翻译就是一个action,每个action会从环境(灰衣男或黑衣女)中获取reward,对模型进行改进,直至收敛。&/p&&p&也许有的人看到这里会觉得和上世纪提出的Co-training很像,这个在知乎上也有讨论:&/p&&p&&a href=&https://www.zhihu.com/question/& class=&internal&&如何理解刘铁岩老师团队在NIPS 2016上提出的对偶学习(Dual Learning)?&/a&&/p&&p&个人觉得还是不一样的,Co-Training是一种multi-view方法,比如一个输入x,如果看作是两个拼一起的特征&img src=&https://www.zhihu.com/equation?tex=x%3D%28x_1%2Cx_2%29& alt=&x=(x_1,x_2)& eeimg=&1&&,并且假设&img src=&https://www.zhihu.com/equation?tex=x_1& alt=&x_1& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=x_2& alt=&x_2& eeimg=&1&&互相独立,那么这时候训练两个分类器&img src=&https://www.zhihu.com/equation?tex=f_1%28%5Ccdot%29& alt=&f_1(\cdot)& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=f_2%28%5Ccdot%29& alt=&f_2(\cdot)& eeimg=&1&&对于任意样本x应该有&img src=&https://www.zhihu.com/equation?tex=f_1%28x_1%29%3Df_2%28x_2%29& alt=&f_1(x_1)=f_2(x_2)& eeimg=&1&&。这对没有标注的样本是很有用的,相当于利用了同一个样本分类结果就应该一样的隐含约束。所以Co-Training的典型场景是少量标注+大量未标注的半监督场景。并且&img src=&https://www.zhihu.com/equation?tex=f_1& alt=&f_1& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=f_2& alt=&f_2& eeimg=&1&&其实是两个不同,但是domain指向相同的任务。而Dual Learning中&img src=&https://www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=g& alt=&g& eeimg=&1&&是对偶任务,利用的隐含约束是&img src=&https://www.zhihu.com/equation?tex=x%5Crightarrow+y%5Crightarrow+x& alt=&x\rightarrow y\rightarrow x& eeimg=&1&&的cycle consistency。对输入的特征也没有像Co-Training有那么明确的假设,学习方法上也不一样,Dual Learning算是强化学习。&/p&&h2&CycleGAN和未配对图像翻译(Unpaired Image-to-Image Translation)&/h2&&p&CycleGAN,翻译过来就是:轮着干,是结合了对偶学习和GAN一个很直接而巧妙的想法[10],示意图如下:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-9e7396ebccb7c42302fc97_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&838& data-rawheight=&216& class=&origin_image zh-lightbox-thumb& width=&838& data-original=&https://pic4.zhimg.com/v2-9e7396ebccb7c42302fc97_r.jpg&&&/figure&&p&X和Y分别是两种不同类型图的集合,比如穿衣服的女优和没穿衣服的女优。所以给定一张穿了衣服的女优,要变成没穿衣服的样子,就是个图片翻译问题。CycleGAN示意图中(b)和(c)就是Dual Learning:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-de51cac58b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&347& data-rawheight=&62& class=&content_image& width=&347&&&/figure&&p&在Dual Learning基础上,又加入了两个判别器&img src=&https://www.zhihu.com/equation?tex=D_X& alt=&D_X& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=D_Y& alt=&D_Y& eeimg=&1&&用来进行对抗训练,让翻译过来的图片尽量逼近当前集合中的图片:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-e0ea7a6b38bf2a20cea4ea6f741a4c67_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&442& data-rawheight=&59& class=&origin_image zh-lightbox-thumb& width=&442& data-original=&https://pic3.zhimg.com/v2-e0ea7a6b38bf2a20cea4ea6f741a4c67_r.jpg&&&/figure&&p&全考虑一起,最终的loss是:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e6d99e7edea969da3dad_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&357& data-rawheight=&87& class=&content_image& width=&357&&&/figure&&p&也许有人会问,那不加cycle-consistency,直接用GAN学习一个&img src=&https://www.zhihu.com/equation?tex=X%5Crightarrow+Y& alt=&X\rightarrow Y& eeimg=&1&&的映射,让生成的Y的样本尽量毕竟Y里本身的样本可不可以呢?这个作者在文中也讨论了,会产生GAN训练中容易发生的mode collapse问题。mode collapse问题的一个简单示意如下[1]:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-309fce6329592babb784ed_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&842& data-rawheight=&262& class=&origin_image zh-lightbox-thumb& width=&842& data-original=&https://pic1.zhimg.com/v2-309fce6329592babb784ed_r.jpg&&&/figure&&p&上边的是真实分布,下边的是学习到的分布,可以看到学习到的分布只是完整分布的一部分,这个叫做partial mode collapse,是训练不收敛情况中常见的一种。如果是完全的mode collapse,就是说生成模型得到的都是几乎一样的输出。而加入Cycle-consistency会让一个domain里不同的样本都尽量映射到另一个domain里不同的地方,理想情况就是双射(bijection)。直观来理解,如果通过&img src=&https://www.zhihu.com/equation?tex=X%5Crightarrow+Y& alt=&X\rightarrow Y& eeimg=&1&&都映射在Y中同一个点,那么这个点y通过&img src=&https://www.zhihu.com/equation?tex=Y%5Crightarrow+X& alt=&Y\rightarrow X& eeimg=&1&&映射回来显然不可能是多个不同的x,所以加入cycle-consistency就帮助避免了mode collapse。这个问题在另一篇和CycleGAN其实本质上没什么不同的方法DiscoGAN中有更详细的讨论[11],有兴趣的话可以参考。&/p&&p&&br&&/p&&p&有一点值得注意的是,虽然名字叫CycleGAN,并且套路也和C-GAN很像,但是其实只有adversarial,并没有generative。因为严格来说只是学习了&img src=&https://www.zhihu.com/equation?tex=X%5Crightarrow+Y& alt=&X\rightarrow Y& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=Y%5Crightarrow+X& alt=&Y\rightarrow X& eeimg=&1&&的mapping,所谓的generative network里并没有随机性。有一个和CycleGAN以及DiscoGAN其实本质上也没什么不同的方法叫DualGAN[12],倒是通过dropout把随机性加上了。不过所有加了随机性产生的样本和原始样本间的cycle-consistency用的还是l1 loss,总觉得这样不是很对劲。当然现在GAN这么热门,其实只要是用了adversarial loss的基本都会取个名字叫XXGAN,也许是可以增加投稿命中率。&/p&&p&另外上节中提到了Co-Training,感觉这里也应该提一下CoGAN[13],因为名字有些相似,并且也可以用于未配对的图像翻译。CoGAN的大体思想是:如果两个Domain之间可以互相映射,那么一定有一些特征是共有的。比如男人和女人,虽然普遍可以从长相区分,但不变的是都有两个眼睛一个鼻子一张嘴等等。所以可以在生成的时候,把生成共有特征和各自特征的部分分开,示意图如下:&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-57eaadc8cec5190bfd30_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&758& data-rawheight=&207& class=&origin_image zh-lightbox-thumb& width=&758& data-original=&https://pic4.zhimg.com/v2-57eaadc8cec5190bfd30_r.jpg&&&/figure&&p&其实就是两个GAN结构,其中生成网络和判别网络中比较高层的部分都采用了权值共享(虚线相连的部分),没有全职共享的部分分别处理不同的domain。这样每次就可以根据训练的domain生成一个样本在两个domain中不同的对应,比如戴眼镜和没戴眼镜:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-356a6118ccf3e8e3bf1c7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&791& data-rawheight=&267& class=&origin_image zh-lightbox-thumb& width=&791& data-original=&https://pic2.zhimg.com/v2-356a6118ccf3e8e3bf1c7_r.jpg&&&/figure&&p&分别有了共有特征和各自domain特征,那么做mapping的思路也就很直接了[14]:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-8ac50600e40feaac345e09bd7e05a83d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&771& data-rawheight=&210& class=&origin_image zh-lightbox-thumb& width=&771& data-original=&https://pic3.zhimg.com/v2-8ac50600e40feaac345e09bd7e05a83d_r.jpg&&&/figure&&p&在GAN前边加了个domain encoder,然后对每个domain能得到三种样本给判别器区分:直接采样,重建采样,从另一个domain中transfer后的重建采样。训练好之后,用一个domain的encoder+另一个domain的generator就很自然的实现了不同domain的转换。用在图像翻译上的效果如下:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-612e9cf5e125fd626be7db_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&444& data-rawheight=&544& class=&origin_image zh-lightbox-thumb& width=&444& data-original=&https://pic2.zhimg.com/v2-612e9cf5e125fd626be7db_r.jpg&&&/figure&&p&还有个巧妙的思路,是把CoGAN拆开,不同domain作为C-GAN条件的更加显式的做法[15]:&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-ddec16d502c94f91ea35_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&883& data-rawheight=&398& class=&origin_image zh-lightbox-thumb& width=&883& data-original=&https://pic1.zhimg.com/v2-ddec16d502c94f91ea35_r.jpg&&&/figure&&p&第一步用噪声Z作为和domain无关的共享表征对应的latent noise,domain信息作为条件C训练一个C-GAN。第二步,训练一个encoder,利用和常见的encode-decode结构相反的decode(generate)-encode结构。学习好的encoder可以结合domain信息,把输入图像中和domain无关的共享特征提取出来。第三步,把前两步训练好的encoder和decoder(generator)连一起,就可以根据domain进行图像翻译了。&/p&&p&CoGAN一系的方法虽然结构看起来更复杂,但个人感觉理解起来要比dual系的方法更直接,并且有latent space,可解释性和属性对应也好一些。&/p&&p&又扯远了,还是回到正题:&/p&&p&&br&&/p&&h2&给女优穿上衣服&/h2&&p&其实同样没什么好说的,Cycle-GAN和pix2pix的作者是一拨人,文档都写得非常棒,准备好数据,分成穿衣服的和没穿衣服的两组,按照文档的步骤训练就可以:&/p&&p&Torch版Cycle-GAN:&a href=&https://link.zhihu.com/?target=https%3A//github.com/junyanz/CycleGAN& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&junyanz/CycleGAN&/a&&/p&&p&pyTorch版Cycle-GAN(pix2pix二合一版):&a href=&https://link.zhihu.com/?target=https%3A//github.com/junyanz/pytorch-CycleGAN-and-pix2pix& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&junyanz/pytorch-CycleGAN-and-pix2pix&/a&&/p&&p&Cycle-GAN收敛不易,我用了128x128分辨率训练了穿衣服和没穿衣服的女优各一千多张,同样是默认参数训练了120个epoch,最后小部分成功“穿衣服”的结果如下:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-fee34d66c386e0e01e5804_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1117& data-rawheight=&192& class=&origin_image zh-lightbox-thumb& width=&1117& data-original=&https://pic4.zhimg.com/v2-fee34d66c386e0e01e5804_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-de57c5ebefa4251ee3caa1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1117& data-rawheight=&192& class=&origin_image zh-lightbox-thumb& width=&1117& data-original=&https://pic4.zhimg.com/v2-de57c5ebefa4251ee3caa1_r.jpg&&&/figure&&p&虽然都有些突兀,但好歹是穿上衣服了。注意马赛克不是图片里就有的,是我后来加上去的。&/p&&p&那么,脱衣服的例子在哪里?&/p&&figure&&img src=&https://pic4.zhimg.com/v2-480fb8a4dcfc7a4f92ec_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&75& data-rawheight=&60& class=&content_image& width=&75&&&/figure&&h2&参考文献&/h2&&p&[1] I. Goodfellow. Nips 2016 tutorial: Generative adversarial networks. arXiv preprint arXiv:, 2016.&/p&&p&[2] A. B. L. Larsen, S. K. S?nderby, Generating Faces with Torch. &a href=&https://link.zhihu.com/?target=http%3A//torch.ch/blog//gan.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Torch | Generating Faces with Torch&/a&&/p&&p&[3] A. B. L. Larsen, S. K. S?nderby, H. Larochelle, and O. Winther. Autoencoding beyond pixels using a&br&learned similarity metric. In ICML, pages , 2016.&br&&/p&&p&[4] C. Ledig, L. Theis, F. Huszar, J. Caballero, A. Aitken, A. Tejani, J. Totz, Z. Wang, and W. Shi. Photo-realistic single image super-resolution using a generative adversarial network. arXiv:, 2016.&/p&&p&[5] P. Isola, J.-Y. Zhu, T. Zhou, and A. A. Efros. Image-to-image translation with conditional adversarial networks. arxiv, 2016. &/p&&p&[6] O. Ronneberger, P. Fischer, and T. Brox. U-net: Convolutional networks for biomedical image segmentation. In MICCAI, pages 234–241. Springer, 2015.&/p&&p&[7] B. Zhou, A. Khosla, A. Lapedriza, A. Oliva, and A. Torralba. Learning deep features for discriminative localization. arXiv preprint arXiv:, 2015.&/p&&p&[8] He, D., Xia, Y., Qin, T., Wang, L., Yu, N., Liu, T.-Y., and Ma, W.-Y. (2016a). Dual learning for machine translation. In the Annual Conference on Neural Information Processing Systems (NIPS), 2016.&/p&&p&&br&&/p&&p&[9] &a href=&https://link.zhihu.com/?target=http%3A//www.dsrg.stuorg.iastate.edu/wp-content/uploads/2017/02/dual-learning_-pushing-the-new-frontier-of-artificial-intelligence-tieyan-liu.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&& Tie-Yan Liu, Dual Learning: Pushing the New Frontier of Artificial Intelligence, MIFS 2016&/a& &/p&&p&[10] J.-Y. Zhu, T. Park, P. Isola, and A. A. Efros. Unpaired image-to-image translation using cycle-consistent adversarial networkss. arXiv preprint arXiv:, 2017.&/p&&p&[11] T. Kim, M. Cha, H. Kim, J. Lee, and J. Kim. Learning to Discover Cross-Domain Relations with Generative Adversarial Networks. ArXiv e-prints, Mar. 2017.&/p&&p&&br&&/p&&p&[12] Z. Yi, H. Zhang, P. T. Gong, et al. DualGAN: Unsupervised dual learning for image-to-image translation. arXiv preprint arXiv:, 2017.&/p&&p&&br&&/p&&p&[13] M.-Y. Liu and O. Tuzel. Coupled generative adversarial networks. In Advances in Neural Information Processing Systems (NIPS), 2016.&/p&&p&[14] M.-Y. Liu, T. Breuel, and J. Kautz. Unsupervised image-to-image translation networks. arXiv preprint arXiv:, 2017.&/p&&p&[15] Dong, H., Neekhara, P., Wu, C., Guo, Y.: Unsupervised image-to-image translation with generative adversarial networks. arXiv preprint arXiv:, 2017.&/p&&p&=========== 分割线: ===========&/p&&p&上周日发的时候也想到了可能会有许多人对这个话题感兴趣,但没想到超过了1.5W赞这么多,大概看了看评论,做一些补充:&/p&&p&&b&1) &/b&马赛克训练数据:对于一般的机器学习问题,都是分布越简单越容易,遵循这个原则,我用的约束是单人照片,具体方法是:先找一个Pascal VOC训练好的SSD代码,然后SSD筛选了一批每张图里只能检测到一个人的。&/p&&p&最后在真人照片上的效果看上去还是不错的,我没有做过量化评估,大体来说看上去挺像的要超过一半,非常逼真的可能有5%~10%。两人以上战斗的动作画面我没有评估过。&/p&&p&&b&2)&/b&穿(tuo)衣训练数据:因为收敛很难,所以数据的加了更多约束:只用女性单人正面照片。同样通过SSD检测出单人照片,同时考虑person框的宽高比小于1的且框内能检测到人脸的(OpenCV的人脸检测)。这样尽量筛选出一批面向镜头,身体占画面比接近的照片。&/p&&p&最后的效果我在原文中也提到过,只有小部分能成功穿上(tuo)衣服,具体我也没有量化统计过,大概100张里两三张吧,大部分都是身上出现了看上去有点像衣服的线条或是另一个人的胸部。考虑到我最后筛选出的图片人物占画面比仍然有很大的变化,很可能我的模型就是遇到了文中提到的partial mode collapse的问题。&/p&&p&如果有更好的办法筛选出人物大小差不多的照片,效果应该能提升不少。比如我在用SSD筛选的时候如果考虑宽高比更小一些,筛选出的照片看上去会更加一致,不过我资源不太够,这样做后训练集就只有不到300张,资源够的老司机们有兴趣可以试试。&/p&&p&&br&&/p&&p&&b&3)&/b&预训练模型有没有?有,但是我研读了中华人民共和国刑法第三百六十三、三百六十四和三百六十六条,完全读不懂,所以还是不提供。再说就算我提供了,根据1)和2),看到你想看的内容也是需要运气的。&/p&&p&另外特别感谢赞赏的知友们,这篇文章是想说&b&书中自有颜如玉&/b&,而知友们的赞赏让我知道&b&书中真有黄金屋&/b&,古人诚不我欺…&/p&
作为一名久经片场的老司机,早就想写一些探讨驾驶技术的文章。这篇就介绍利用生成式对抗网络(GAN)的两个基本驾驶技能: 1) 去除(爱情)动作片中的马赛克2) 给(爱情)动作片中的女孩穿(tuo)衣服 生成式模型上一篇《》中已经简单介…
&p&以数学书为例讲一讲:&/p&&p&一本数学书通常前面几章比较浅显,而且实际上&b&前面几章只是在用新的方式讲述那些你已经学过的东西,&/b&所以凭借着基础和一点聪明,即使不看书,做出习题其实也不难。但是你&b&终究没有走到这本书的思路上来,所以当你面对这个这本书的思路方法所要真正解决的问题的时候,当这门学问在你眼里反直觉的东西积累到一定程度的时候你就学不下去了。&/b&&/p&&p&比如你学解析几何,一开始讲的是直线的问题——而这些在初中平面几何都已经说烂了,但是如果你不积极适应解析的方法,到后面圆锥曲线那里,平面几何的方法很难适用的地方,就很难下手了。&/p&&p&这样的亏我吃过好几次,一次是学复分析的时候,觉得复数我学过呀,极限、积分、求导,数分里也学过呀,好像比数分还简单点呢。但是冒出一大堆复分析特有的定理性质的时候我就彻底凌乱了——才发现解析函数我数分里打交道的函数原来是不一样的。&/p&&p&我看信号与系统的时候也遇到过这个问题,因为我看前面几章无非就是一些微积分运算,看上去很容易,连跳几章觉得就是那么回事了,突然到了一章就看不明白了——才发现自己并没有理解信号与系统这门课处理问题的方式。&br&&/p&&p&反而那些学的比你慢的同学,从开始就在适应这本书的思路,不断地接受和适应那些他们觉得反直觉的东西,而你实际上并没有开始这个适应思路的过程,只是在用旧思路解决问题,当旧思路山穷水尽的时候,你就很难深入下去了。&/p&&br&&p&其实编程也是类似的,讲不同编程语言的书,前面近一半的内容也是大同小异的,但是如果你没有充足的练习、深入的了解,只是把新的编程语言当成你学过的一门编程语言的关键词替换的话,到你面临这个编程语言特色的东西的时候,就无从下手了。&/p&&br&&p&不仅是数学、编程这样新事物和旧事物之间联系比较明显的东西,即使是很多看似完全陌生的东西,人往往也会不自觉地借助于已有经验去接受理解,但是过分迁就旧习惯对深入学习必然是不利的。&/p&&br&&p&&b&其实我们都善于发现新事物和我们熟悉的事物之间的共同点,用我们熟悉的事物上的经验辅助我们学习和认识新事物,以至于我们并没有静下心来学习新事物的独有的特性。而学习本来就应该经历共性——特性——再回到共性——这样一个螺旋式上升的过程。&/b&&/p&
以数学书为例讲一讲:一本数学书通常前面几章比较浅显,而且实际上前面几章只是在用新的方式讲述那些你已经学过的东西,所以凭借着基础和一点聪明,即使不看书,做出习题其实也不难。但是你终究没有走到这本书的思路上来,所以当你面对这个这本书的思路方法…
&p&&a href=&//link.zhihu.com/?target=https%3A//www.dataquest.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Dataquest&/a& 这个网站上提供了一系列和数据分析相关的python教程,从python基本语法到data analysis的基本函数,到PANDAS包的使用方法,到machine learning里常用的Python指令,甚至还有手把手教你玩Kaggle,简直不能更贴心~当然这个只是入门级教程,高级技巧就一点点的在实战项目里积累吧~&/p&&figure&&img src=&https://pic1.zhimg.com/50/00fb373ed5c75f07f346cd9b9ff54b93_b.jpg& data-rawwidth=&1091& data-rawheight=&1019& class=&origin_image zh-lightbox-thumb& width=&1091& data-original=&https://pic1.zhimg.com/50/00fb373ed5c75f07f346cd9b9ff54b93_r.jpg&&&/figure&&br&&p&再补充一个coursera上的python课程,&a href=&//link.zhihu.com/?target=https%3A//www.coursera.org/learn/hipython/home/welcome& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&coursera.org/learn/hipy&/span&&span class=&invisible&&thon/home/welcome&/span&&span class=&ellipsis&&&/span&&/a&,&/p&&p&用Python玩转数据,by Nanjing University,也非常方便贴心,而且是中文教程,老师讲的也很风趣幽默~&/p&&figure&&img src=&https://pic4.zhimg.com/50/abb1c6b48b7bd5f944ca_b.jpg& data-rawwidth=&287& data-rawheight=&257& class=&content_image& width=&287&&&/figure&&br&&figure&&img src=&https://pic3.zhimg.com/50/429be83cbfebac_b.jpg& data-rawwidth=&547& data-rawheight=&661& class=&origin_image zh-lightbox-thumb& width=&547& data-original=&https://pic3.zhimg.com/50/429be83cbfebac_r.jpg&&&/figure&&br&&br&&p&对于那些对机器学习以及数据挖掘感兴趣的筒子们,这里还有两个免费的进阶版教程,
&a href=&//link.zhihu.com/?target=https%3A//generalassemb.ly/education/data-science/washington-dc/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Data Science Course&/a& &a href=&//link.zhihu.com/?target=https%3A//github.com/justmarkham/DAT4& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - justmarkham/DAT4: General Assembly's Data Science course in Washington, DC&/a&
You got all the python codes to play with and a very detailed tutorial to understand the material. &/p&&p&如果是想为code interview做快速准备的筒子们,不妨尝试下Udacity的&a href=&//link.zhihu.com/?target=https%3A//www.udacity.com/course/technical-interview--ud513& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&技术面试练习&/a&Algorithm and Data Structure in Python. 这门免费的课程会带着你快速的浏览一遍技术面试中所考察的基本知识.&/p&&p&&img src=&&a href=&//link.zhihu.com/?target=https%3A//pic2.zhimg.com/v2-b30515bad8f725fca4fd7d68f089a299_b.png& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&pic2.zhimg.com/v2-b3051&/span&&span class=&invisible&&5bad8f725fca4fd7d68f089a299_b.png&/span&&span class=&ellipsis&&&/span&&/a&& data-rawwidth=&1657& data-rawheight=&1316& class=&content_image& width=&1657& data-original=&&a href=&//link.zhihu.com/?target=https%3A//pic2.zhimg.com/v2-b30515bad8f725fca4fd7d68f089a299_r.png& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&pic2.zhimg.com/v2-b3051&/span&&span class=&invisible&&5bad8f725fca4fd7d68f089a299_r.png&/span&&span class=&ellipsis&&&/span&&/a&&&感觉这个课程比起LeetCode来指导性要强一些,比较适合入门者.希望对不同需求的筒子们有帮助. :)&/p&
这个网站上提供了一系列和数据分析相关的python教程,从python基本语法到data analysis的基本函数,到PANDAS包的使用方法,到machine learning里常用的Python指令,甚至还有手把手教你玩Kaggle,简直不能更贴心~当然这个只是入门级教程,高级技巧…
&p&过去总觉得便宜没好货,尤其是生活用品,一定要是贵的才好!现在才发现,一个舒服的生活其实也并不一定是靠钱砸出来的。下面这些都是我觉得还不错的好物啦,随意分享一下~&/p&&p&&br&&/p&&p&&b&KISS YOU负离子牙刷&/b&&/p&&p&&br&&/p&&p&被日本COSME大赏种的草,主要是因为负离子这个概念,感觉挺好奇,几个月前就抱着好玩的心态在旗舰店入了,用过后才发现这玩意还真不错~收到后三支牙刷包装得像礼物一样,很贴心呐!(因为买的时间有点久所以找不到原包装了……就从网上找了一张,就是下面这样子:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-cede2a7abb3f9_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&624& data-rawheight=&416& class=&origin_image zh-lightbox-thumb& width=&624& data-original=&https://pic1.zhimg.com/50/v2-cede2a7abb3f9_r.jpg&&&/figure&&p&&br&&/p&&p&拆开包装后,刷头和刷柄是分开的,自己接上去就好。刷柄里自带了电池,听说可以用一年左右。按下牙刷下端的按钮就能看到红灯亮,说明还有电。对了,每三四个月刷头就需要更换哦,口腔卫生可不是小事~&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-bab1df146ba8a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&864& data-rawheight=&864& class=&origin_image zh-lightbox-thumb& width=&864& data-original=&https://pic4.zhimg.com/50/v2-bab1df146ba8a_r.jpg&&&/figure&&p&&br&&/p&&p&刷牙时需要把手沾湿,用湿手摸在牙刷柄中间的金属片上,牙刷就能释放负离子了。我偶尔会牙龈出血,所以对刷毛很挑剔。这款牙刷一放进嘴里,就能感觉到刷毛很柔软软很细腻,牙龈不会受刺激,各个细小的角落也能被照顾到 ~~每次刷完后牙齿确实干净清爽了不少,甚至一些顽固的牙垢也能清掉。一直都是每半年就得去医院洗牙,前不久去洗牙时被告知口腔还算挺干净的。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-f790efabf54a68faee1f3b2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&864& data-rawheight=&862& class=&origin_image zh-lightbox-thumb& width=&864& data-original=&https://pic3.zhimg.com/50/v2-f790efabf54a68faee1f3b2_r.jpg&&&/figure&&p&&br&&/p&&p&普通牙刷和电动牙刷都用过,感觉负离子牙刷比普通的要刷得更干净,比起电动牙刷又更轻巧更方便。价格也才几十块,超友好的呐~~&/p&&p&&br&&/p&&p&&b&USB加热眼罩&/b&&/p&&p&&br&&/p&&p&加热眼罩可不是什么新鲜事物了。现在的办公室一族每天要面对电脑好久,眼睛疲劳是难免的。这时候戴上眼罩休息一下,对于缓解一下眼疲劳来说可是再好不过了!大名鼎鼎的花王蒸汽眼罩也是早就成为了网红款:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-f80de7b7da61_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&864& data-rawheight=&909& class=&origin_image zh-lightbox-thumb& width=&864& data-original=&https://pic3.zhimg.com/50/v2-f80de7b7da61_r.jpg&&&/figure&&p&&br&&/p&&p&但毕竟只是一次性的啦,发热时间也不算长,所以性价比真心不咋地。如果打算在家或办公室里长期用,USB加热眼罩反而更好,几十块钱一个,可以反复用、长期用。是USB插口,插上电源就ok。&/p&&p&&br&&/p&&p&插上电后就能持续发热,想戴多久都可以随自己的喜好来。而且还有两种温度可以调节,春夏季节可以把温度调低一点,秋冬季就高一些~眼罩外面的那一层布套可以拆下来洗,所以干净卫生这一点也不用担心。每天最享受的时刻莫过于,睡前涂完眼霜后躺在床上戴上眼罩,温热的感觉很放松,眼睛不累了,顺带眼霜也能被充分吸收。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-3ecf442ff75e61a5f64ce6c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&864& data-rawheight=&864& class=&origin_image zh-lightbox-thumb& width=&864& data-original=&https://pic1.zhimg.com/50/v2-3ecf442ff75e61a5f64ce6c_r.jpg&&&/figure&&p&&br&&/p&&p&另外,我坐长途车的时候也喜欢带上,插在充电宝上就能用,很贴心呐!一路安睡~(当然,飞机上就用不了了哈哈)&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-b091f23c38e95aeebd40aabae70efd26_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&864& data-rawheight=&864& class=&origin_image zh-lightbox-thumb& width=&864& data-original=&https://pic1.zhimg.com/50/v2-b091f23c38e95aeebd40aabae70efd26_r.jpg&&&/figure&&p&&br&&/p&&p&&b&This Works睡眠喷雾&/b&&/p&&p&&br&&/p&&p&曾经有一段时间被失眠折磨得很头疼,一趟上床就是满脑子的胡思乱想,处于亢奋状态。后来一个在米国的盆友说这款睡眠喷雾挺不错的。反正也才十几磅,试试也可以,所以立马就托人买了一瓶。天然的薰衣草香味,在枕头上喷三四下,闻起来很是舒心。躺

我要回帖

更多关于 sp2 0618 的文章

 

随机推荐