父亲去世查询银行存款。遗留个一千元活期存m(无密码)。怎样才能

谁清楚松原江北房价如何?3个回答大饼小铺手工烘焙5
紫御江山 均价: 12500 元/平方米 三居(145㎡)
楼盘地址: 江北北滨二路537号(江北嘴CBD重庆大剧院附近)
紫御江山所处的江北嘴CBD是两江新区的区域,未来将成为长江中上游金融及商务中心,其中规划有约360万方商业及文化娱乐项目,包括多个五星级及酒店,写字楼,以及由中海九龙仓共同开发的包含约9万方的购物广场的国金中心等等。同时紧邻解放碑商圈、江北商圈。
配有香港博瀚双语幼儿园,为业主的宝宝提供与国际化接轨的双语学前教育;配有羽毛球场、篮球场等。
周边公共交通:大湾站(距离约500米)111路、119路、121路、135路、141路、151路、152路、153路、323路、419路、421路、439路、616路、620路、841路、866路。 两条轨道:轻轨6号线(大剧院、江北城站)、9号线(江北城站) 两条隧道:江北城隧道、两江隧道(待建) 三座大桥:朝天门大桥、黄花园大桥、千厮门大桥 四座立交:五里店立交、对山立交、江北城立交、江州立交
价格来源网络,仅供参考。
3个回答ccccxyl
1. 楼盘地址: 江北北滨路(紧邻江北嘴CBD),均价: 10000 元/平方米,很不错的,首先周边的环境良好,设施什么的还是很齐全的
2. 住宅 8353元/m?,地址[ 江北 - 北滨路 ] 黄花园大桥往嘉陵江大桥方向,绿化也是不错的,要说方便,周边的店面很多,所以你出个门买个东西还是很方便的
以上价格来自网络,具体价格以购买时为准。
先在江北的房价一直在涨,三年前的房价是3000都没人要,现在有的都一两万了,正好现在各地都在修地铁和隧道,以后的交通会很方便的,我相信以后江北一定会繁华起来的,
江北要看你是哪一块了。。等5月1号过江隧道通了很可能全部破万。。。 现在主要是靠近江浦珠江镇的房价很高。。。下桥附近的房价也高。。。 其他楼盘也都是7,8千以上。。。就砍5月1号以后怎么说了。。。价格来自网络仅供参考
3个回答juanyin8
松原公积金贷款流程
1、借款人应当向“中心”提出借款申请,并提供相关证明材料
2、借款人按要求提交全部文件资料后,“中心”应当在7个工作日内办完贷款手续。
3、“中心”准予贷款的,同借款人签定借款合同,借款人到受托银行办理相关手续。
4、受托银行依据贷款委托书、借款合同约定的时间和金额发放贷款。
松原住房公积金贷款抵押和担保须知
新政策贷款费用规定(未实施)
现行中:公积金贷款相关收费主要集中在评估费和担保服务费。据了解,这些中间费用一般占公积金贷款总额的3‰至4‰,最高可达8‰。
改革后:取消申请公积金贷款过程中办理贷款保险、公证、评估等多项费用。
3个回答怎么lover
江北房交所办理。 重庆这边买二手房都是卖方净收,不管谁的费用都是你出。给你详细说下,卖方:营业税,证没满五年5.6%,满了就没有,个人所得税1%。
买方:契税,首套房建筑面积90平方以下1%,外地只要是首套也是这样,如果是重庆农村户口首套90平方以下可以免。90以上144以下1.5%。二套都是和超了144的都是3%。一般那边都是10000,以上价格来源于网络,仅供参考。
3个回答至尊宝天神
南京江北房价的具体价格在:22300元每平米,地址在浦口江浦街道浦口大道路28号,拥有大型商业,五星级酒店,甲级办公楼、城市公寓等,户型紧凑、方正实用、实用率高达90%,为低密度、低容积率、高绿化度的高品质社区,很好的地段的,值得拥有哦。
价格来源网络,仅供参考。
3个回答有的鱼要离开水
你好,宁波江北二手房价格7000元,江北渝北也分了很多板块,我想你问的应该不包括回兴两路区域,就目前来说几个主要板块比如:冉家坝、龙头寺、五黄版块、金岛龙溪、加州板块、北滨板块、观音桥板块、金开板块。房价都是有差异的,其中观音桥和北滨的最贵,也以中高端产品为主。价格来源网络,仅供参考
3个回答qzuser_
江北-万象府 均价:22000元/平米 位置:湾头大闸路和环城北路交叉口
江北-九龙仓铂悦府 均价:15000元/平米 位置:康庄南路与北环西路交汇处东南面
价格来源网络,仅供参考
3个回答soufun-a1021923
我觉得松原大众搬家公司不错,我朋友搬家就是找他们的,干活挺细心的,也不会磨洋工,搬得挺快的,态度也不错,有问题会跟你及时沟通,费用也不贵,总的来说不错
3个回答如意心经
最近金华江北楼盘房价走势:
永利华都花苑 13507元/m? ↑31.52%
新华街 12827元/m? ↑24.12%
江南翠庭 8474元/m? ↑14.51%
锦巷花园 6995元/m? ↑13.28%
青春苑 7192元/m? ↑13.08%
金东区海关公寓 5131元/m? ↓14.38%
华缔家园 9757元/m? ↓11.84%
婺州城市广场 5207元/m? ↓7.87%
仙源欧境 10214元/m? ↓7.27%
怡景·聚贤庭 4753元/m? ↓7.04%
&img src=&//p0.meituan.net/wedding/5bf0cb20c1cbafa94.png%4h_0e_1l%7Cwatermark%3D1%26%26r%3D1%26p%3D9%26x%3D2%26y%3D2%26relative%3D1%26o%3D20& alt=&& class=&common-answer-img& cardid=&2699& index=&-1&&
热门问答123456789101112131415161718192021222324252627282930马桶更换方法哪位可以说说?3个回答那年夏天XS02
你好,马桶盖可以更换的,准备材料:马桶盖连配件一套(包括马桶盖一副、2个螺丝、2个方形卡榫、2组螺帽)
换马桶盖的步骤:
1,马桶两边后侧下方固定马桶盖的螺丝先松开,将旧的马桶盖拆卸下来。
2,配件中的两个螺丝,分别先插入方形的卡榫中,然后再套入马桶盖两侧的铁轴上。
3,两侧的螺丝对准马桶后两侧的螺丝孔,按照螺丝帽的上下位置将螺丝锁紧就完成了。
3个回答倈哥
xerox 打印机是激光打印机,如果是碳粉用完了,就可以直接加碳粉就行了。
如果不想加碳粉,嫌麻烦,那就直接购买一个新的硒鼓,可以买原装硒鼓,但价格贵,建议买一个国产的硒鼓。
希望回答能帮到你
3个回答shy
苹果5s home键50块.
主屏尺寸:4英寸
主屏分辨率:像素
后置摄像头:800万像素
前置摄像头:120万像素
电池容量:1560mAh
电池类型:不可拆卸式电池
3个回答saury76615
据了解:回气孔就是马桶里面在靠近回水弯底下的位置有个孔,直径3公分,回气孔就是马桶里面的“大洞”在靠底下的位置有个孔,就是--回气孔,方向一般与大孔的走水方向相反
在坐便器的底部。出场时应该已经补好了。这个孔是生产时必须有的,烧制完之后会用速塑钢土补好。
以上希望对你有帮助!
3个回答撸管都没兴趣了
1、马桶轻微堵塞
一般是手纸或卫生巾、毛巾抹布等造成的马桶堵塞,这种直接使用管道疏通机或简易疏通工具就可以疏通了。
2、马桶硬物堵塞
使用的时候不小心掉进塑料刷子、瓶盖、肥皂、梳子等硬物。这种堵塞轻微的可以直接使用管道疏通机或简易疏通器直接疏通,严重的时候必须拆开马桶疏通,这种情况只有把东西弄出来才能彻底解决。
3、马桶老化堵塞
马桶使用的时间长了,难免会在内壁上结垢,严重的时候会堵住马桶的出气孔而造成马桶下水慢,解决方法就是:找到通气孔刮开污垢就可以让马桶下水畅通了。
4、马桶安装失误
一般分为底部的出口跟下水口没有对准位置、马桶底部的螺丝孔完全封死会造成马桶下水不畅通、马桶水箱水位不够高影响冲水效果。
5、通气不畅
如果马桶的通气不够顺畅的话,也会使马桶容易堵塞。遇到这种情况可以撕掉马桶与地面接触部分黑色的胶条,然后漏一个小口,从而使得马桶内外通气。
6、座便器进水孔漏水
进水阀螺母松动:把进水阀螺母拧紧,再装上过滤器即可。
过滤器安装不当:在安装过滤器时,还应当注意放好里面的密封圈,同时要拧紧过滤器蓝盖,否则也会造成漏水。
7、检查水箱球形浮漂与进水开关的连接处是否松动,浮漂到位而开关是否未关,致使进水不停,水满后从直立的泄水管流出,只要将浮漂和水阀开关连接处拧紧即可。
8、若橡皮球阀损坏,密封不严,出现漏水,需要立即更换。
9、水箱漏水,基本上是排水阀的问题,查看水箱出水口胶塞的情况,出水口胶塞如有破损或是有异物阻塞而导致胶塞封堵不严,也会造成马桶流水不止。若水箱内补水管放置不正确,或多或少也会有所影响。
希望能帮到您哦。
3个回答厑覂亾綨
个人意见。不要自己动手,这些事情还是交给专业的工人师傅做比较好。更容易出你想要的效果。真要自己做的话,你直接将旧的壁纸撕下来,后需要清理一下墙面,再刷基膜。再来贴纸。贴纸时记得对缝非常重要。就是这块壁纸与另外一块壁纸拼缝。
3个回答流年似水s
你的设备(iPhone、iPad、Touch)里面已经安装了一些应用程序,而且它们不是你用自己的Apple ID下载的。在设备上按住其中一个的图标,等图标全都晃动起来后,把带小叉叉的全都点叉叉卸载删除,之后你用自己ID下载的应用程序就能同步安装到设备了。
希望我的回答对您有所帮助。
1个回答滕春雪
燃气灶炉盘更换与维修方法如下:
1、先买一根原来灶牌子的点火针回来,一定要相同的型号,不对型号放不进的。打开外盖,拉出来换上新的就可以了。
2、更换燃气灶点火针最好找厂家售后人员上门,自己外面买的点火针长度高度及安装后与火盖之间的距离都不一定合适。
4个回答hfh7788123
为了安全起见还是等宝宝能足够站稳了宝宝才能坐马桶。一般在十个月的时候。开始的时候要多照看。等宝宝能够很自然的是用马桶了,就可以了。
3个回答chengxuanshen
你好,根据个人了解,
1、先将网线插路由器的WAN口,电脑插路由器的LAN口;
2、再在电脑中设置IP地址为192.168.3.66(或自动获取)(该地址最后一位为非1都可),子网掩码为255.255.255.0,网关为192.168.3.1;
3、重启后打开IE,在地址栏里输入:192.168.3.1在所打开的页面中输入账号admin,密码admin;
4、一般宽带都是pppoe拨号上网,将“WAN口连接类型”选为“PPPoE”,填入服务商提供的上网账号和上网口令,并选择“自动连接,在开机和断线后自动进行连接”;
5、点击“保存”后选择页面中的“DHCP服务器”,点选“启用”,填入开始地址(最小为192.168.3.2)和结束地址(最大为192.168.3.254),地址租期直接填入最大值,然后点击“保存”后选择页面中的“系统工具”下的“重启路由器”,这样便完成了路由器的设置。
希望我的回答对您有所帮助
热门问答123456789101112131415161718192021222324252627282930建设用地拍卖相关消息谁有?3个回答装修小菜1
下面是土地拍卖公示最新消息,希望能帮到你
根据《土地管理法》、《城市房地产管理法》、国土资源部39号令等文件的规定,报经彭州市人民政府批准,彭州市国土资源局决定于日上午10:00,在彭州市国土资源局五楼会议室,以拍卖方式出让一宗国有建设用地使用权。现将有关事项公告如下:
一、拍卖出让地块的基本情况和规划指标要求
二、拍卖地块,中华人民共和国境内外的法人、自然人和其他组织,除法律、法规另有规定外,均可申请参加竞买。申请人可以独立竞买,也可以联合竞买。
三、拍卖以增价方式竞价,自由竞价,以最高报价且报价不低于出让底价,并符合竞买条件的竞买人,为竞得人。
四、拍卖出让的详细资料和具体要求,详见拍卖出让文件。申请人可到彭州市国土资源局地产交易中心领取拍卖出让文件。
五、申请人请于购买第二日,到国土资源局凭竞买保证金缴款凭据,经核准竞买保证金到账后及拍卖文件规定的相关资料办理竞买手续。
3个回答阳泉金博士
南京限价房试行期为2年,如今这一时限将至。2012年底,保障性限价房出现在南京购房人视野。其供应对象是城市住房“夹心层”,套型面积以65、75、85平方米左右的中小户型为主,以同地段商品房价格的90%确定供应基准价格,满5年方可上市转让。
3个回答我是小贝尔
地址: 山东省济宁市邹城市太平东路
均价:4500.0
途经公交车:25路,311路,48路,510路,快21路,650路
邹城碧桂园
地址: 济宁市邹城市峄山北路3199号
均价:4500.0
途经公交:510路,979路,653路,210路,214路
以上价格来源于网络,仅供参考
3个回答sandzco
新世界名镌起价:150000元/平方米,新世界名镌(A012-0091宗地)位于宝安尖岗山片区,2009年7月核发《建设用地规划许可证》(深规许HQ-号),核定建筑容积率≤0.76。价格来自于网络,仅供参考。
3个回答香江水暖
天津房价走势:
天津12月新房均价 10932 元/m? 环比上月增长 ↑ 0.38%
天津11月新房均价 10891 元/m?
天津当前在售楼盘 555 个
当前待售楼盘 52 个
希望我的回答对你有帮助,望采纳,谢谢!
3个回答爪机送粉195
装饰工程结算单
工程名称:大观装饰工程有限公司年装饰工程
序号 项目内容 核算金额 签字确认
1 乳胶漆 67000.00
2 木工人工费 14000.00
8 合同总金额 81000.00
9 变更项目增加额 0.00
10 变更项目减少额 0.00
11 发包人已付金额 44500.00
12 发包人结算应付金额 36500.00
其他事项说明:截止日已付工程款44500.00(肆万肆仟伍佰元),还欠36500.00(叁万陆仟伍佰元)
注:所有金额结算完毕,双方代表签字、盖章
发包方: 承包方
年 月 日 年 月 日
3个回答小涵系列960
家装报价技巧1、有尺寸的详细房屋平面图,最好是官方(物业等部门)出具的;2.、将各个房间的功能初步确定下来,拿不定主意的可以留待与设计师讨论,就这些问题要尽量与家人统一思想;3、 分析自己的经济情况,根据经济能力确定装修预算。重点考虑:装修所需的费用,更换家具、洁具、厨具、灯具等费用,向物业管理部门缴纳的费用等。
1个回答网吧0095
据2015长春公租房最新消息:长春市近3000套公租房已基本建设完成,拟年底前配租。目前,小区内各项工程基本竣工,外围配套设施正在紧张有序地加速建设,室内配套完备可拎包入住。这次分配的西城家园公租房租金标准初步拟定为高层基础租金每月每平方米10元,多层基础租金每月每平方米11元,交通比较便利。根据《长春市保障性住房实物配租与租赁补贴分配管理办法》规定,公共租赁住房保障采取实物配租方式,首先保障城镇中等偏下收入无房家庭、新就业中专以上学历无房职工和有稳定职业的无房外来务工人员,并逐步向城镇中等偏下收入住房困难家庭和符合条件的其他人员保障。城镇中等偏下收入家庭申请公共租赁住房应同时满足以下条件:具有本市城镇户口;在本市没有住房;家庭人均收入符合规定的收入标准。在本市新就业的中专以上学历职工申请公共租赁住房应当同时满足以下条件:具有中专以上学历,与用人单位签订劳动合同;在本市没有住房;家庭人均收入符合规定的收入标准。在本市稳定就业的外来务工人员申请公共租赁住房应当同时满足以下条件:在本市缴纳养老保险累计2年以上(含2年);在本市没有住房;家庭人均收入符合规定的收入标准。本专题包含的2015长春公租房申请条件与2015长春公租房最新消息均来源于网络,仅供您参考
3个回答leonchen820318
由于烂尾楼没有竣工,因此只能以合同约定竣工之日作为起算点,这样施工单位往往在提起诉讼时发现早已过了合同约定竣工之日起6个月,已丧失行使优先权
3个回答晨曦小一m78
一些大型的拍卖行,比如国际上著名的佳士得拍卖行,还有一些私人晚宴,慈善晚宴也有可能会有明代青花瓷拍卖,现在还有一些电商平台也在线拍卖东西,但像明代青花瓷这样贵重的东西在网上竞拍一定要小心谨慎才行,最好还是选择正规有知名度的拍卖行
热门问答123456789101112131415161718192021222324252627282930&p&前几天,答了个题,有同学在评论里写道:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&现在我才刚开始实习...
唯一的感觉就是忙
每天在公司写代码,(需求多,一个接一个不是我写的慢)
一点学新东西的时间都没有。
到家八九点洗完澡都快十点了
又累 就想早点睡觉 感觉这样下去很不得劲
希望前辈指点一下
&/code&&/pre&&/div&&p&首先,恭喜你在实习期已经具备产能了,迈出了从学生到职业程序员的第一步。这段时间的经历会给你两个好处:&/p&&ul&&li&因为有了这段工作经历,你知道了软件开发是怎么回事,具备了一定的经验,将来找工作时你的简历不再是一张白纸,现在行情这么好,正式找工作不会太难;&/li&&li&这一段时期的工作经历会折磨你,将来任何一个轻松一些的工作你都会感觉非常爽,某一天你再回顾这段时期的时候,会觉得有很多收获。&/li&&/ul&&p&&br&&/p&&p&但是,有很多程序员在工作了几年以后,仍然是这种状态——白天的工作已经耗尽了自己全部的体力,没有精力提升技术,每年按部就班地涨一点工资,回顾过去——疲惫,展望未来——迷茫,听上去好像是无法解脱。&/p&&p&我想了一会儿你的问题,发现——我们搞技术的,还是单纯了。&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&我们追求的是什么?是提升自己的技术,还是提升自己在公司、行业里的地位和收入水平?或者说,提升自己在公司、行业里的地位的唯一方法就是提升技术吗?&/b&&/p&&p&&br&&/p&&p&年轻的时候,我认为自己可以改变世界,到后来,我发现——人唯一可以控制和改变的是自己,我只能让自己改变和提升,从而改变周围的一小块世界。&/p&&p&&br&&/p&&p&作为一个老一些的程序员,我开始工作的时候就是国内IT行业起步和蓬勃发展的年代,我们的工作成果被社会和产业广泛需要,而程序员的工作并不是人人能干的,所以我们能获得比普通行业高一些的薪酬。在这种情况下,年轻的程序员往往高估了个人的能力和价值,我当年就是这样的,曾经被老爷子教育——“不要以为有点技术工资高一点就看不起这个看不起那个,你根本没有进入主流社会!”当时年轻,不屑一顾,现在想来,字字珠玑。&/p&&p&当然,在软件或者互联网公司,技术是安身立命最可靠的一种方式,因为一个人的技术强弱、产能高低是可以被明显地量化和评估,有技术能力去哪里都会被使用,都能获得不错的薪酬。注意我这里用的是“&b&使用&/b&”,而不是“&b&重用&/b&”。&/p&&p&前几天给我一个不错的学生推荐工作,我对朋友说“这个小子产能、为人都非常不错,比我之前给你推荐的XX强,但是工资大约得18K以上”。朋友回复“XX在我这里拿的是10K, 他又不能带团队,开发他能顶两个XX吗?”,我就没法接话了。&/p&&p&所以我们说——个人的能力终归是有限的。在公司里,只有被授予了更多的权限,被分配更多的资源来开展工作才可以干出更大的业绩、获得更多的认可和收入。于个人而言才会有更多的时间,生活质量才会提升上去。&/p&&p&&br&&/p&&p&那么,怎样才能被授予更多的权限、获得更多的资源呢?我年轻的时候一直认为是技术和业务能力强的人并以此为目标孜孜不倦了好多年。后来发现凡是冲锋陷阵的时候老板都能第一时间想起我,哪怕一段时间我不忙也高薪养着我。但是每到提拔负责人的时候从来没有我的份,评个内部的“职称”都故意压我一下(但收入并没有受到影响),后来好不容易当了个校区负责人没过一个月就被撸了(原因是干了点违规的事情被同事“告发”),唉。&/p&&p&&br&&/p&&p&到后来,自己开了公司,才认真思考“老板”们会重用什么样的人,才发现还是自己不成熟,当年的问题在于自己,老板没有错,而且很厚道。&/p&&p&虽然我并不鼓励大家一味“媚上”,但既然在一个公司里工作,获得上级信任和重用,总归不是一件坏事吧。&/p&&p&我司有一小伙,89年的,比我小11岁。代码写的那叫一个稀烂,if ...elseif ... elseif
能写200行的那种,但是他的工资是最高的。为什么?&/p&&p&&b&工资高不一定意味着他的生产劳动价值高,而是因为他的不可替代性强。&/b&&/p&&p&虽然代码写的烂,但是他还能干别的,比如我去跟客户吵架的时候,我一拍桌子起身走人他就立刻知道他的任务是接着跟客户缓和一下,把局面控制住等我抽烟回来再继续跟客户吵...&/p&&p&或者客户一提过分的需求他就两眼一瞪,客户的原话是“*总的牛眼一瞪,我哪儿还敢提啊”,你看——会写程序的解决客户需求,不会写程序的直接枪毙客户需求。&/p&&p&有时候当着客户我怂了他也瞪眼“老何你搞的定我们开发搞不定,你答应你来做”,配合相当完美,看来一切尽在不言中的默契不仅限于男女之间。跟他搭档以后我能理解同性恋了,真的。&/p&&p&今年他开始负责项目以后,我就基本上很少插手项目了,他带的几个小伙子对他也很满意,客户满意度也很高(比我自己操刀的高),至于说他会不会写代码,写的好不好,有那么重要吗?&/p&&p&&br&&/p&&p&&b&技术人员不要把自己的能力提升局限在技术层面的提升,其他方面可能更重要。&/b&&/p&&p&当然大家也不要误解,认为技术就不重要了,咱们程序员之所以显得情商低是因为用智商谋生就够了,有了一定阅历以后提高所谓情商是不是一件难事,但技术的学习过了一定阶段恐怕就再也没有机会了,而在IT行业没有技术基础,哪怕做销售也会有局限性。&/p&&p&&br&&/p&&p&哪些方面呢?接触过不少年轻程序员,我想说三点:&/p&&p&1.做事要靠谱&/p&&p&2.做人要有服务意识&/p&&p&3.不要拒绝成长&/p&&p&&br&&/p&&p&&b&做事要靠谱&/b&&/p&&blockquote&&b&靠谱的第一个含义是——要尽量追求达到交付标准&/b&&/blockquote&&p&一件事情交给你,你要知道你做的东西不是给上级看的,而是上级要拿给他的上级、他的客户看的。如果你的工作成果经常让你的上级被打脸,那你是无法获取上级信任的。&/p&&p&我们总是认为把最新的技术研究透、把程序写到“最好”才是对的,&b&但是那是你的需求&/b&。技术层面7分的程序和9分的程序市场价值并不会有太大的差别。&/p&&p&比如,在UI上出现错别字,很多程序员看来那是小事情,改一改就好了。但是如果在我们给客户做汇报的时候,就很丢人了,比如我们见过多少“请稍后...”这样的提示文字?甚至我在给程序员指出这个问题的时候被回复“看得懂就行了”。&/p&&p&有次被用户批评“你们程序写的怎么样我不懂,但是错别字只能说明两个可能,一是你们文化水平低,二是你们工作态度不端正”。还有很多程序员在填写测试数据的时候,填的都是“111,222,ABC,ASDF,QWERTY”这样很不专业的内容,这样展示给客户看的时候就是个玩具。&/p&&p&更有甚者,有一次我告诉程序员不要这样填,到网上去找点真实的人名填上去,偏偏这个小子找到一个很不雅的名字(容易让人引起猥琐的联想),关键是他还重复了10次!&/p&&p&各位,你们想象一下在客户宽敞明亮高端大气上档次的会议室里,这个名字占据了30%的投影面积的时候,我站在那里做汇报的感受。至于Copy别人的东西连别人的单位名称都不去掉,代码都是网上找的,稍作修改就不能这样的事情我就不想再提了。&/p&&p&我在想是不是有少数程序员的工作目标是在公司坐够足够的时间,应付上级交付的任务,而不是&b&尽量使自己的产品达到交付标准&/b&,后者是上级对研发岗工作人员最基本的要求和信任的前提。说实话我并不喜欢不评估自己的工作质量、速度和产能,只是因为工作时间比较长就认为必须要有加班费的程序员,这句话在知乎说可能有些得罪人。&/p&&blockquote&&b&靠谱的第二个含义是——事情如果没做好,对上级要诚实&/b&&/blockquote&&p&不是所有的工作我们都有能力做好的,有时候捅娄子的事情也常有,接受教训下次改进就好了。&/p&&p&但是上级最怕的下属就是——为了避免被追究责任,而夸大事实、隐匿错误。你犯错了或者事情没有做好,上级知道了,他更有资源和能力来降低损失或者逃避责任。不要担心被上级骂,骂你说明你还有存在的价值,不骂的话就危险了。&/p&&p&上级的利益和你的利益是一致的,因为上级的上级只会追究他的管理责任,而如果你对上级掩盖了错误或者缺陷同时上级又相信了,最后被发现的时候他的责任就大了,因为事先不知道所以没有采取补救措施,麻烦会很大。&/p&&blockquote&说个题外话,我们很多同学抱怨上级——做对了都是他的,做错了都是我们背锅。&br&相信我,这是基本的职业伦理。哪怕你的上级在老板面前说是你没做好,但是稍有智商的老板仍然会认为那是他的管理问题。拉你出来背锅只是为了大家面子上好看一点而已,并不会真正责怪你,因为你小,板子打不到你身上。&br&当年公司运维的小伙一迷糊把生产服务器上的数据库给删了,公司三个副总半夜赶到机房应对,市场旺季呼叫中心200多人闲着没事干一个多星期,最后飞到北京大几万才恢复了客户数据,对这个小伙的处罚也不过是1000元而已,他的主管可就惨了。所以,我们不要太计较一时的得失,不傻的上级在让你背锅的时候,同时也会保护或者补偿你,因为他的权限比你大,承担责任的能力比你大。当然我们也见过一些厚颜无耻的小人领导,遇到这种领导,我们可以选择离开他。&/blockquote&&p&对于上级来说,只是技术或者业务能力特别强的人反而不一定靠谱,我们可以好好体会一下。&/p&&p&&br&&/p&&p&&b&做事情靠谱了,下一个就是“服务意识”&/b&&/p&&p&人在社会上,归根结底都是要为社会服务的,这里的服务对象可以是你的上级、你的客户、你的同事,也包括你的家人。为社会服务好了,自然就能得到回报。&/p&&p&服务意识的有无,直接影响待人接物的态度,换句话说就是服务态度好不好,凡事以自己的需求为标准,把工作当成单纯的买卖关系,忽视服务意识和服务态度的重要性,到头来吃亏的还是自己。&/p&&p&接触过不少公务员,虽然这个群体现在被很多人诟病和不信任。但我发现越是高阶的公务员在为人处世上越有值得我们学习的地方。比如某领导,在接上级电话的时候,虽然只有我们两个人,但他是站起来接电话的,让看不到他的对方感受到自己的尊重。与对方的通话中有“您的吩咐我记住了,明天我再向您汇报”,这就是服务意识的典型表现。我们的同学呢,做事情“及时回话”都不一定做得到吧。&/p&&p&服务意识的极致是什么呢:&/p&&figure&&img src=&http://pic4.zhimg.com/v2-84daeddd424b7f51db2f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&690& data-rawheight=&517& class=&origin_image zh-lightbox-thumb& width=&690& data-original=&http://pic4.zhimg.com/v2-84daeddd424b7f51db2f_r.jpg&&&/figure&&p&&br&&/p&&p&年轻的时候,我可能会“鄙视”这种标语,认为是拍马屁,认为是奴颜媚骨、令人不齿。现在我会思考这种标语出现的环境,以及部分的合理性。&/p&&p&如果你把这里的“长官”换成“女朋友”或“男朋友”呢,换成“客户”呢,换成“父母”呢?我相信会在很多问题上顺利很多。&/p&&p&在公司里,特别是我们这种几个人的小公司,我并不提倡这样的上下级观念,都是老百姓家孩子,没必要。但是!去客户那里,发现客户会议桌投影信号线在桌子底下我钻进去接线的时候,旁边的小朋友可不可以帮帮忙而不是干坐着啊,哥讲了俩小时茶杯空了能不能溜出去添点水啊.....真的很渴好不好!&/p&&p&有同学会说,“你又没说让我倒水,你让我倒你就说嘛”,一般来说我们并不会这样做。因为倒水并不是你的工作,使唤你倒水多少有些不尊重,所以我们不会说出来,就像当年我的老板亲手擦马桶一样,我们没有这么做上级并不会怪我们,但你&b&主动&/b&做了就会被记在心里形成对你的看法,在某一个你不知道的时刻发挥作用。&/p&&p&我这些话,在我自己带开发队伍的时候是不会写出来的,现在写出来了我也会尽量避免被公司的同事看到。为什么?因为他们会觉得我在洗脑。&/p&&p&&br&&/p&&p&尊重别人是自己的修养,与对方是不是值得尊重、地位高低并没有必然的联系。反过来当别人对我客气和尊重的时候,我要告诉自己这是别人的修养,并不是因为我自己多么值得尊重。&/p&&p&所以主动为别人提供服务并不会降低自己的人格,是有修养的表现。比如有没有同学有意识地为同行的女同事打开车门,等别人坐好了自己再上车?这都做不到难怪你没有女朋友。&/p&&p&有意思的是很多年轻人在给同龄人服务的时候很热情,给长辈或者上级服务的时候就很扭捏,这其实是奇怪的自尊心在作怪,而过于自尊反而是一种自卑的表现。&/p&&p&&br&&/p&&p&更重要的服务意识体现在对客户的服务意识,这个和第一点“交付标准”有很大的关系,但也不全是交付的产品本身,可能你对目前的薪酬待遇并不满意,可能女朋友跟自己吵架这两天心情很不好或者正愁着上哪儿找个女朋友带回家过年,但是既然做一个工作,就尽量把它做好、把客户服务好。在这个过程中养成的习惯,今后到哪里都会给自己带来价值。&/p&&p&对年轻人发展最有害的思维方式就是认为公司是老板开的,老板是资本家,一个项目几十上百万才给自己发几千一个月,自己是被剥削的受害者,把自己摆在公司的对立面,真是有百害而无一利。去年阿里月饼事件,其实就是这种思维方式的典型表现。很多事情只有自己当过公司经营者,才会明白其中的原因。&/p&&p&&br&&/p&&p&&br&&/p&&p&不管在哪里工作,与工作伙伴(包括你的老板)结成利益共同体,事半功倍!这句话值得读一百遍。&/p&&p&分清楚什么是拍马屁,什么是服务意识,很重要!&/p&&p&&br&&/p&&p&&b&第三点,不要拒绝成长&/b&&/p&&p&我见过最典型的拒绝成长的例子是在客户的公司,某个小伙对老板说“我签的劳动合同里并没有规定我要做这个事”,当场我就呵呵了。&/p&&p&至于我自己的公司,有一次安排一个小伙写个文档,被回复“我又不是学文科的”,我很想怼他一句“你以为你理科学的很好吗”,想想还是算了。&/p&&p&被分配原有工作范围以外的工作任务很可能是个机会,你并不用担心自己做砸了,因为上级在安排这个工作任务给你的时候是有你做不好的心理准备的,如果你没做好,成本和风险是由公司承担的。&/p&&p&而对于个人而言,做一些以前没做过的工作是非常好的提升,勇于尝试新事物总归是个优点,不要因为怕难、怕做不好或者单纯因为懒而拒绝它。我有一个体验就是——所有的经历在未来都会成为财富,只是当时不知道它的价值而已。&/p&&p&很多事是不少程序员厌恶的,比如写文档、做计划、做汇报、带队友,你在拒绝做这些事的时候,就拒绝了很多真正有价值的成长。&/p&&p&&br&&/p&&p&作为一个从十几岁开始学编程的程序员,我认为我的“情商”是偏低的,经常被老婆批评到这个岁数都不知道怎么说话和做事,个人和公司发展其实并不是很成功,这篇文章也只是总结一下自己的经验和教训,算是与大家共勉了。&/p&&p&&br&&/p&&p&这篇文章很容易被当做黑心资本家的洗脑文,但是我始终认为——我们不会在一家公司打工一辈子,也没有必要对公司忠诚(但是要诚实),不停地完善自己并使得自己能够适应社会,更好地为社会服务、被社会所接纳,是我们终其一生要做的事。&/p&&p&&br&&/p&&p&最后,用10年以前一位做HR的大姐送我的话来结尾:&/p&&p&&br&&/p&&p&&b&认识社会的规律和规则,理解它们产生的背景和原因,心甘情愿地接受它却又不苟且——是一个人成熟的开始。&/b&&/p&&p&&br&&/p&&p&&br&&/p&&p&好了,我要去给今晚通宵干公众号的小伙服务了,大家周末愉快!&/p&&p&&br&&/p&&p&&br&&/p&&a href=&https://zhuanlan.zhihu.com/p/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-75f5aff515d1945a99eceed061a45d5b_180x120.jpg& data-image-width=&1242& data-image-height=&516& class=&internal&&Tony He:「换个姿势学编程」2018年1月班开始接受报名&/a&&p&&/p&
前几天,答了个题,有同学在评论里写道:现在我才刚开始实习...
唯一的感觉就是忙
每天在公司写代码,(需求多,一个接一个不是我写的慢)
一点学新东西的时间都没有。
到家八九点洗完澡都快十点了
又累 就想早点睡觉 感觉这样下去很不得劲
希望前辈指点一…
&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=&http://pic3.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=&http://pic3.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=&http://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=&http://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=&http://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=&http://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=&http://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=&http://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=&http://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=&http://www.zhihu.com/equation?tex=%5Cdelta%28%5Ccdot%29& alt=&\delta(\cdot)& eeimg=&1&&是狄拉克&img src=&http://www.zhihu.com/equation?tex=%5Cdelta& alt=&\delta& eeimg=&1&&函数,把这项替换到上面公式的P(x):&/p&&p&&br&&/p&&p&&img src=&http://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=&http://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=&http://www.zhihu.com/equation?tex=x%3Dx_i& alt=&x=x_i& eeimg=&1&&的时候狄拉克&img src=&http://www.zhihu.com/equation?tex=%5Cdelta& alt=&\delta& eeimg=&1&&函数才为1,所以考虑&img src=&http://www.zhihu.com/equation?tex=x%3Dx_i& alt=&x=x_i& eeimg=&1&&时这项直接化为1:&/p&&p&&br&&/p&&p&&img src=&http://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=&http://pic3.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=&http://pic3.zhimg.com/v2-6fee20494f50baae2c1dc5fc_r.jpg&&&/figure&&p&所以虽然GAN里面同时包含了生成网络和判别网络,但本质来说GAN的目的还是生成模型。从生成式模型的角度,Ian Goodfellow总结过一个和神经网络相关生成式方法的“家谱”[1]:&/p&&figure&&img src=&http://pic3.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=&http://pic3.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=&http://pic4.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=&http://pic4.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=&http://pic2.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=&http://pic2.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=&http://pic1.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=&http://pic1.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=&http://pic2.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=&http://pic2.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=&http://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=&http://pic3.zhimg.com/v2-331e02e394cfd04e7114a_r.jpg&&&/figure&&p&生成细节adversarial loss就是GAN用来判别是原始图还是生成图的loss:&/p&&figure&&img src=&http://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=&http://pic2.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=&http://pic2.zhimg.com/v2-17861edeb4bcfae4e9f369_r.jpg&&&/figure&&p&正是上篇文章中讲过的C-GAN,条件C就是低分辨率的图片。SRGAN生成的超分辨率图像虽然PSNR等和原图直接比较的传统量化指标并不是最好,但就视觉效果,尤其是细节上,胜过其他方法很多。比如下面是作者对比bicubic插值和基于ResNet特征重建的超分辨率的结果:&/p&&figure&&img src=&http://pic2.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=&http://pic2.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=&http://pic4.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=&http://pic4.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=&http://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=&http://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=&http://pic3.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=&http://pic3.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=&http://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=&http://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=&http://pic2.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=&http://pic2.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=&http://pic2.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=&http://pic2.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=&http://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=&http://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=&http://pic1.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=&http://pic1.zhimg.com/v2-cbefa39dc983f2645dd8_r.jpg&&&/figure&&h2&去除(爱情)动作片中的马赛克&/h2&&p&这没什么好说的了,一行代码都不用改,只需要按照前面的步骤把数据准备好,然后按照pix2pix官方的使用方法训练就可以了:&/p&&p&Torch版pix2pix:&a href=&http://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=&http://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=&http://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=&http://pic2.zhimg.com/v2-9f52b17c0e1296767cbfbfafc290a5bd_r.jpg&&&/figure&&p&什么?你问说好给女优去马赛克呢?女优照片呢?&/p&&figure&&img src=&http://pic1.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=&http://pic4.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=&http://pic4.zhimg.com/v2-c4b1eeda364fb6c9bada02f3_r.jpg&&&/figure&&p&左边的灰衣男只懂英语,右边的黑衣女只懂中文,现在的任务就是,要学习如何翻译英语到中文。对偶学习解决这个问题的思路是:给定一个模型&img src=&http://www.zhihu.com/equation?tex=f%3Ax%5Crightarrow+y& alt=&f:x\rightarrow y& eeimg=&1&&一上来无法知道f翻译得是否正确,但是如果考虑上&img src=&http://www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&&的对偶问题&img src=&http://www.zhihu.com/equation?tex=g%3Ay%5Crightarrow+x& alt=&g:y\rightarrow x& eeimg=&1&&,那么我可以尝试翻译一个英文句子到中文,再翻译回来。这种转了一圈的结果&img src=&http://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=&http://www.zhihu.com/equation?tex=x%3D%28x_1%2Cx_2%29& alt=&x=(x_1,x_2)& eeimg=&1&&,并且假设&img src=&http://www.zhihu.com/equation?tex=x_1& alt=&x_1& eeimg=&1&&和&img src=&http://www.zhihu.com/equation?tex=x_2& alt=&x_2& eeimg=&1&&互相独立,那么这时候训练两个分类器&img src=&http://www.zhihu.com/equation?tex=f_1%28%5Ccdot%29& alt=&f_1(\cdot)& eeimg=&1&&和&img src=&http://www.zhihu.com/equation?tex=f_2%28%5Ccdot%29& alt=&f_2(\cdot)& eeimg=&1&&对于任意样本x应该有&img src=&http://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=&http://www.zhihu.com/equation?tex=f_1& alt=&f_1& eeimg=&1&&和&img src=&http://www.zhihu.com/equation?tex=f_2& alt=&f_2& eeimg=&1&&其实是两个不同,但是domain指向相同的任务。而Dual Learning中&img src=&http://www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&&和&img src=&http://www.zhihu.com/equation?tex=g& alt=&g& eeimg=&1&&是对偶任务,利用的隐含约束是&img src=&http://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=&http://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=&http://pic4.zhimg.com/v2-9e7396ebccb7c42302fc97_r.jpg&&&/figure&&p&X和Y分别是两种不同类型图的集合,比如穿衣服的女优和没穿衣服的女优。所以给定一张穿了衣服的女优,要变成没穿衣服的样子,就是个图片翻译问题。CycleGAN示意图中(b)和(c)就是Dual Learning:&/p&&figure&&img src=&http://pic3.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=&http://www.zhihu.com/equation?tex=D_X& alt=&D_X& eeimg=&1&&和&img src=&http://www.zhihu.com/equation?tex=D_Y& alt=&D_Y& eeimg=&1&&用来进行对抗训练,让翻译过来的图片尽量逼近当前集合中的图片:&/p&&p&&br&&/p&&figure&&img src=&http://pic4.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=&http://pic4.zhimg.com/v2-e0ea7a6b38bf2a20cea4ea6f741a4c67_r.jpg&&&/figure&&p&全考虑一起,最终的loss是:&/p&&p&&br&&/p&&figure&&img src=&http://pic2.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=&http://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=&http://pic2.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=&http://pic2.zhimg.com/v2-309fce6329592babb784ed_r.jpg&&&/figure&&p&上边的是真实分布,下边的是学习到的分布,可以看到学习到的分布只是完整分布的一部分,这个叫做partial mode collapse,是训练不收敛情况中常见的一种。如果是完全的mode collapse,就是说生成模型得到的都是几乎一样的输出。而加入Cycle-consistency会让一个domain里不同的样本都尽量映射到另一个domain里不同的地方,理想情况就是双射(bijection)。直观来理解,如果通过&img src=&http://www.zhihu.com/equation?tex=X%5Crightarrow+Y& alt=&X\rightarrow Y& eeimg=&1&&都映射在Y中同一个点,那么这个点y通过&img src=&http://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=&http://www.zhihu.com/equation?tex=X%5Crightarrow+Y& alt=&X\rightarrow Y& eeimg=&1&&和&img src=&http://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=&http://pic1.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=&http://pic1.zhimg.com/v2-57eaadc8cec5190bfd30_r.jpg&&&/figure&&p&其实就是两个GAN结构,其中生成网络和判别网络中比较高层的部分都采用了权值共享(虚线相连的部分),没有全职共享的部分分别处理不同的domain。这样每次就可以根据训练的domain生成一个样本在两个domain中不同的对应,比如戴眼镜和没戴眼镜:&/p&&p&&br&&/p&&figure&&img src=&http://pic4.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=&http://pic4.zhimg.com/v2-356a6118ccf3e8e3bf1c7_r.jpg&&&/figure&&p&分别有了共有特征和各自domain特征,那么做mapping的思路也就很直接了[14]:&/p&&p&&br&&/p&&figure&&img src=&http://pic2.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=&http://pic2.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=&http://pic4.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=&http://pic4.zhimg.com/v2-612e9cf5e125fd626be7db_r.jpg&&&/figure&&p&还有个巧妙的思路,是把CoGAN拆开,不同domain作为C-GAN条件的更加显式的做法[15]:&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&http://pic2.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=&http://pic2.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=&http://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=&http://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=&http://pic1.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=&http://pic1.zhimg.com/v2-fee34d66c386e0e01e5804_r.jpg&&&/figure&&figure&&img src=&http://pic2.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=&http://pic2.zhimg.com/v2-de57c5ebefa4251ee3caa1_r.jpg&&&/figure&&p&虽然都有些突兀,但好歹是穿上衣服了。注意马赛克不是图片里就有的,是我后来加上去的。&/p&&p&那么,脱衣服的例子在哪里?&/p&&figure&&img src=&http://pic1.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=&http://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=&http://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&没想到这两天内突然有大量回复/评论(估计是大佬引流话题的作用),感谢大家对本答案的关注。学业繁忙,可能无法一一回复,也请见谅。暑假前参加了个学校活动,其中有个主讲人提到了这本书,暑假买来看了,很受触动,加之个人观点上一直是偏向关注弱势群体,自然也会偏向UBI,知道自己难免偏颇。来知乎浏览这个问题,就是希望找到点不同意见,无奈当时这个}

我要回帖

更多关于 梦见父亲去世 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信