求LOL亡者联盟6月25日剑姬死亡华尔兹视频里面的BGM 是英文电音 一个女生唱的 开都

&p&&b&“我总希望出现一个软件神器能够解决我们所有的问题”&/b&这句话是从著名的物理学家霍金教授观点中改编的,霍金教授一直在探索并且认为宇宙间有一个简单而又优美的公式能够统一物理学上所有的定律。&/p&&p&当然这目前来说是不可能的,因为本身繁忙的工作的原因,所以平时一有空就搜集着那些能够提高大幅度提高工作的效率的工具。&/p&&p&现在从我的收藏夹里面挑出几个功能强大方便快捷而且还比较冷门的神器分享给大家,希望可以解决大家工作生活中遇到的小问题哈。&/p&&p&&b&下面会介绍五款神器给大家,它们的共同点在于体积小巧功能强大&/b&(文末有压缩包)&b&。&/b&&/p&&p&刚大学毕业做论文的时候,总是需要在网上找很多文献和知识,但是大部分百度的学术和资料都需要金币和积分才能下载啊,虽然工作以后接触的搜索引擎多了起来,可百度搜索资料和资源的能力也经常用得上啊&/p&&p&---------------------------------------------正文------------------------------------------------------------------------------&/p&&p&&b&一、今天分享的第一款神器就是冰点文库下载器(&/b&&a href=&///?target=http%3A///%3Fcat%3D2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&冰点软件 - 冰点软件官方网站&i class=&icon-external&&&/i&&/a&&b&)&/b&&/p&&p&&br&&/p&&p&&b&这是一款能够下载百度文库、道客巴巴、max、mbalib、book118和丁香等的所有文档资料和学术论文的神器,它的强大功能在于不用积分无需登录就可下载所有的这些文库资料&/b&,操作效果展示图如下:&/p&&p&以百度文库为例,其他网站可自行尝试&/p&&img src=&/v2-b48be2d58ae7cee0ebef4_b.jpg& data-rawwidth=&1016& data-rawheight=&604& class=&origin_image zh-lightbox-thumb& width=&1016& data-original=&/v2-b48be2d58ae7cee0ebef4_r.jpg&&&p&这是篇优质的关于量子物理的学术论文,但是收费需要3元,如果想要下载为我所用怎么办呢?&/p&&p&复制要下载的文档网址到冰点文库下载器&/p&&img src=&/v2-cbeac899f0cd814fa5bab6a8d37e7e09_b.jpg& data-rawwidth=&989& data-rawheight=&693& class=&origin_image zh-lightbox-thumb& width=&989& data-original=&/v2-cbeac899f0cd814fa5bab6a8d37e7e09_r.jpg&&&p&&br&&/p&&img src=&/v2-63e9e09bdf83d4e5087490bead35fd73_b.jpg& data-rawwidth=&939& data-rawheight=&546& class=&origin_image zh-lightbox-thumb& width=&939& data-original=&/v2-63e9e09bdf83d4e5087490bead35fd73_r.jpg&&&p&就这样,价值3元的文档就这么被你免费下载出来了,很强大,有没有!&/p&&p&&br&&/p&&p&&b&二、下面介绍第二款软件神器 INpaint(&/b&&a href=&///?target=http%3A//.cn/download/56818.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&去水印软件免费版下载&i class=&icon-external&&&/i&&/a&&b&)&/b&&/p&&p&写作时常常为寻找素材为难,一手素材需要耗费大量的时间和精力,二手素材水印、广告以及营销信息一大堆,PS太复杂又不会,第二款神器INpaint就是解决这个问题的,据说80%上的水印都能消除,最最最关键的是这款强大的功能软件只有442kb哟,比神马PS美图秀秀小巧多了&/p&&p&看看具体的实例吧,我们找两张我女神田馥甄的水印照片&/p&&img src=&/v2-0595acc45cc9509dadc049_b.jpg& data-rawwidth=&567& data-rawheight=&850& class=&origin_image zh-lightbox-thumb& width=&567& data-original=&/v2-0595acc45cc9509dadc049_r.jpg&&&p&我馥甄沉沦在歌声里的一张美美的照片,可惜打了一个大众娱网的水印,我们来消除这个水印吧&/p&&img src=&/v2-bdfdca6cb15f0b_b.jpg& data-rawwidth=&416& data-rawheight=&621& class=&content_image& width=&416&&&p&消除前&/p&&img src=&/v2-708d962c4d0bbafea40e7e0e29474adb_b.jpg& data-rawwidth=&570& data-rawheight=&686& class=&origin_image zh-lightbox-thumb& width=&570& data-original=&/v2-708d962c4d0bbafea40e7e0e29474adb_r.jpg&&&p&分两步消除,消除过程&/p&&img src=&/v2-59537b8afbccaa8_b.jpg& data-rawwidth=&567& data-rawheight=&850& class=&origin_image zh-lightbox-thumb& width=&567& data-original=&/v2-59537b8afbccaa8_r.jpg&&&p&一键消除后,是不是很简单呢,下面我们换个难点的,操作差不多&/p&&img src=&/v2-d0b177f9cd38b4a198b9b4caf4e10212_b.jpg& data-rawwidth=&1062& data-rawheight=&490& class=&origin_image zh-lightbox-thumb& width=&1062& data-original=&/v2-d0b177f9cd38b4a198b9b4caf4e10212_r.jpg&&&p&还有这样的&/p&&img src=&/v2-f08fdffd7ae822fe74651ec2def4047c_b.jpg& data-rawwidth=&931& data-rawheight=&304& class=&origin_image zh-lightbox-thumb& width=&931& data-original=&/v2-f08fdffd7ae822fe74651ec2def4047c_r.jpg&&&p&&br&&/p&&p&当然PS也能做到,可是毕竟我觉得动不动去个水印就动用PS这么大的家伙电脑会卡不要不要的吧&/p&&p&&br&&/p&&p&&b&三、第三款神器Ditto&/b&&/p&&p&这款软件究竟有什么样的神奇功能呢?&b&能够储存你所有的复制粘贴记录,能够将分散复制的文字合并在一起,能够进行多设备多系统之间的云推送和切换&/b&,就是你换了N台电脑后,第一台电脑复制粘贴的消息还可以找到,关键大小只有10M,这是一个超级方便实用的功能性软件&/p&&p&开启Ditto后,不会有任何的程序界面出现,它只是默默地在系统右下角弹出了一个蓝色的托盘图标,&b&这个时候你复制的任何内容到剪贴板都会被Ditto一一记录&/b&,如果你什么时候想用到这个它,就可以按Ctrl+,当中的每条内容都可以供你选择性的重新复制&/p&&p&Ditto本身实现的网络剪贴板同步是基于两台计算机直连的,既同个局域网或者网盘同步都是可以的,&b&只要两台电脑都安装了Ditto,配置好了以后就可以方便的同步剪贴板了&/b&&/p&&p&下载安装包安装启动了以后,就会在后台的程序里默默收集着你每一次复制粘贴的信息&/p&&img src=&/v2-eceb3d76b7dda8c_b.jpg& data-rawwidth=&994& data-rawheight=&423& class=&origin_image zh-lightbox-thumb& width=&994& data-original=&/v2-eceb3d76b7dda8c_r.jpg&&&p&占用屏幕面积不大,体积小巧,Search可搜索以前你复制的任何信息关键词,再也不用过重复复制粘贴的日子啦!&/p&&p&&br&&/p&&p&&b&四、接下来是第四款神器了,PC端名叫ABBYY
FineReader 、移动端的同款Textgrabber&/b&&/p&&p&这款软件属于俄罗斯开发的文字识别OCR功能,这家公司专注文字识别领域,PC端名字叫ABBYY
FineReader,移动端产品名叫Textgrabber,直接拍照或上传图片便可识别提取,当然这个软件的强大在于所有文字识别和翻译均可在离线状态下完成,比起来很多耗流量的翻译软件,其强大之处不言而喻&/p&&p&以Textgrabber为例,&b&文字截图或者随意用相机拍到的到的有用的文字信息都可以读取,准确率在95%左右,对所有非个人手写的印刷字体均实用&/b&,下面是某公众号的文字截成图片做测试实例&/p&&img src=&/v2-c069d8c0abb54e7a7ed8163_b.jpg& data-rawwidth=&665& data-rawheight=&665& class=&origin_image zh-lightbox-thumb& width=&665& data-original=&/v2-c069d8c0abb54e7a7ed8163_r.jpg&&&p&&b&可以对识别结果进行翻译,可识别超过60种语言,并且识别和翻译语言随时可以切换,然后无论是识别还是翻译后的结果都可以复制合分享到微信、qq等国内主流的社交平台上&/b&&/p&&img src=&/v2-9038ffc17d570fe079b1e65cecd39e86_b.jpg& data-rawwidth=&665& data-rawheight=&665& class=&origin_image zh-lightbox-thumb& width=&665& data-original=&/v2-9038ffc17d570fe079b1e65cecd39e86_r.jpg&&&p&该应用的最新版本还更新添加了Voiceover系统功能识别并将文本翻译成语音功能,以帮助视力有障碍的用户,当然语音转换功能目前是需要联网的&/p&&p&&br&&/p&&p&&b&五、第五款神器Internet
Manager(IDM) &/b&&/p&&p&传说中的下载神器下载神器,速度甚至比迅雷更快,这款软件被称为世界排名第一的下载软件,凭借着下载计算的速度优势在外媒网站中均受好评,尤其是在美国使用甚广,但这么好的下载软件并不为国内大部分人所知&/p&&img src=&/v2-cdf0c1c79baaeaaddf451cb_b.jpg& data-rawwidth=&1339& data-rawheight=&694& class=&origin_image zh-lightbox-thumb& width=&1339& data-original=&/v2-cdf0c1c79baaeaaddf451cb_r.jpg&&&p&关于它的下载速度,我们一会来个文件测试一下,&b&支持HTTP、FTP、HTTPS和MMS协议,支持多线程、多任务、断点续传,提升下载速度多达5倍&/b&,这里速度是指平均速度&/p&&img src=&/v2-d167dd0602933bfbdd121c_b.jpg& data-rawwidth=&1315& data-rawheight=&645& class=&origin_image zh-lightbox-thumb& width=&1315& data-original=&/v2-d167dd0602933bfbdd121c_r.jpg&&&p&随便找一个下载测试一下,测试第一部分&/p&&img src=&/v2-ed59c318a47d15f6df09660_b.jpg& data-rawwidth=&627& data-rawheight=&494& class=&origin_image zh-lightbox-thumb& width=&627& data-original=&/v2-ed59c318a47d15f6df09660_r.jpg&&&p&我这里平时下载速度十分不稳定,普通浏览器下载速度会处于300k到1M之间漂浮,IDM将任务分为多个节点下载,下载速度非常之稳定,不会出现网速时慢时快的下载的速度现象&/p&&p&但强大的软件功能可能不止这一点点哈,&b&除了下载速度飞快,它还提供了各种主流浏览器的插件,及其方便的替换了浏览器的内置下载功能。其次,它能够完美的捕捉网页中的真实地址,类似于&/b&&/p&&p&&b&硕鼠这款软件&/b&&/p&&p&这意味着什么呢?你在网络上听到一首好听的音乐(网页的背景音乐或者博客的插曲)、看到一段喜欢的视频(腾讯视频、秒拍、美拍等等),想下载但是网页不提供下载功能,这个时候IDM就能派上用场了,他会自动在音视频播放器旁边出现一个“&b&下载此视频&/b&”的小按钮,你点击一下就可以下载下来了。&/p&&p&比如我很喜欢田馥甄唱小幸运帮助粉丝求婚的这个小视频,美拍里面可以找得到&/p&&img src=&/v2-03e79cc0bf9ed31541af7ddd47b1f757_b.jpg& data-rawwidth=&1086& data-rawheight=&661& class=&origin_image zh-lightbox-thumb& width=&1086& data-original=&/v2-03e79cc0bf9ed31541af7ddd47b1f757_r.jpg&&&p&&br&&/p&&p&左下角就是IDM生成的下载链接,点一下就能下载了,是不是很方便&/p&&img src=&/v2-da4a4c6cf162_b.jpg& data-rawwidth=&1216& data-rawheight=&656& class=&origin_image zh-lightbox-thumb& width=&1216& data-original=&/v2-da4a4c6cf162_r.jpg&&&p&多点同时下载,基本上这个小视频5秒内就可以下好了。&/p&&p&以上软件均已打包整理好,可通过网址自行下载,也可以关注公众号【&b&流年有约&/b&】,后台回复关键字【&b&神器&/b&】获取19款实用小工具(包括但不限于以上介绍神器在内)&/p&&p&&b&收集不易,点个赞再走呗!&/b&&/p&&img src=&/v2-155ce587dd4c_b.jpg& data-rawwidth=&425& data-rawheight=&448& class=&origin_image zh-lightbox-thumb& width=&425& data-original=&/v2-155ce587dd4c_r.jpg&&
“我总希望出现一个软件神器能够解决我们所有的问题”这句话是从著名的物理学家霍金教授观点中改编的,霍金教授一直在探索并且认为宇宙间有一个简单而又优美的公式能够统一物理学上所有的定律。当然这目前来说是不可能的,因为本身繁忙的工作的原因,所以平…
&figure&&img src=&/50/v2-da6e908fbff06e8e14c60d86d776d225_b.jpg& data-rawwidth=&768& data-rawheight=&576& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&/50/v2-da6e908fbff06e8e14c60d86d776d225_r.jpg&&&/figure&&figure&&img src=&/v2-abd42bbb61ee_b.jpg& data-rawwidth=&558& data-rawheight=&315& class=&origin_image zh-lightbox-thumb& width=&558& data-original=&/v2-abd42bbb61ee_r.jpg&&&/figure&&p&作为一名久经片场的老司机,早就想写一些探讨驾驶技术的文章。这篇就介绍利用生成式对抗网络(GAN)的两个基本驾驶技能:&br&&/p&&p&1) 去除(爱情)动作片中的马赛克&/p&&p&2) 给(爱情)动作片中的女孩穿(tuo)衣服&/p&&br&&h2&生成式模型&/h2&&p&上一篇《&a href=&/p/& class=&internal&&用GAN生成二维样本的小例子&/a&》中已经简单介绍了GAN,这篇再简要回顾一下生成式模型,算是补全一个来龙去脉。&/p&&p&生成模型就是能够产生指定分布数据的模型,常见的生成式模型一般都会有一个用于产生样本的简单分布。例如一个均匀分布,根据要生成分布的概率密度函数,进行建模,让均匀分布中的样本经过变换得到指定分布的样本,这就可以算是最简单的生成式模型。比如下面例子:&/p&&figure&&img src=&/v2-d11b5fb26d3cc8e942f841bafe010cd8_b.png& data-rawwidth=&1021& data-rawheight=&443& class=&origin_image zh-lightbox-thumb& width=&1021& data-original=&/v2-d11b5fb26d3cc8e942f841bafe010cd8_r.png&&&/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&&img src=&/equation?tex=%5Chat%7B%5Ctheta%7D%3D%5Coperatorname%2A%7Bargmax%7D_%7B%5Ctheta%7D+P%28%5Cbm%7Bx%7D%7C%5Ctheta%29%0A+%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&&&br&&p&MLE是一个最基本的思路,实践中用得很多的还有KL散度(Kullback–Leibler divergence),假设真实分布是P,采样分布是Q,则KL散度为:&/p&&img src=&/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&&&br&&p&从公式也能看出来,KL散度描述的是两个分布的差异程度。换个角度来看,让产生的样本和原始分布接近,也就是要让这俩的差异减小,所以最小化KL散度就等同于MLE。从公式上来看的话,我们考虑把公式具体展开一下:&/p&&br&&img src=&/equation?tex=%5Cbegin%7Balign%7D%0AD_%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%0A%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%0A%26+%3D-%5Csum_%7Bx%5Cin%5COmega%7DP%28%7Bx%7D%29%5Clog%7BQ%28x%29%7D+%2BH%28P%29%0A%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&&&br&&p&公式的第二项就是熵,先不管这项,用H(P)表示。接下来考虑一个小trick:从Q中抽样n个样本&img src=&/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&&img src=&/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&&&br&&p&其中&img src=&/equation?tex=%5Cdelta%28%5Ccdot%29& alt=&\delta(\cdot)& eeimg=&1&&是狄拉克&img src=&/equation?tex=%5Cdelta& alt=&\delta& eeimg=&1&&函数,把这项替换到上面公式的P(x):&/p&&br&&img src=&/equation?tex=%5Cbegin%7Balign%7D%0AD_%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%0A%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%0A%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&&&br&&p&因为是离散的采样值,所以&img src=&/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=&/equation?tex=x%3Dx_i& alt=&x=x_i& eeimg=&1&&的时候狄拉克&img src=&/equation?tex=%5Cdelta& alt=&\delta& eeimg=&1&&函数才为1,所以考虑&img src=&/equation?tex=x%3Dx_i& alt=&x=x_i& eeimg=&1&&时这项直接化为1:&/p&&br&&img src=&/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&&&br&&p&第一项正是似然的负对数形式。&/p&&p&说了些公式似乎跑得有点远了,其实要表达还是那个简单的意思:通过减小两个分布的差异可以让一个分布逼近另一个分布。仔细想想,这正是GAN里面adversarial loss的做法。&/p&&p&很多情况下我们面临的是更为复杂的分布,比如&a href=&/p/& class=&internal&&上篇文章&/a&中的例子,又或是实际场景中更复杂的情况,比如生成不同人脸的图像。这时候,作为具有universal approximation性质的神经网络是一个看上去不错的选择[1]:&br&&/p&&figure&&img src=&/v2-6fee20494f50baae2c1dc5fc_b.jpg& data-rawwidth=&1561& data-rawheight=&549& class=&origin_image zh-lightbox-thumb& width=&1561& data-original=&/v2-6fee20494f50baae2c1dc5fc_r.jpg&&&/figure&&p&所以虽然GAN里面同时包含了生成网络和判别网络,但本质来说GAN的目的还是生成模型。从生成式模型的角度,Ian Goodfellow总结过一个和神经网络相关生成式方法的“家谱”[1]:&/p&&figure&&img src=&/v2-8c6f1d8ee39dfbb4fcfb2_b.png& data-rawwidth=&771& data-rawheight=&498& class=&origin_image zh-lightbox-thumb& width=&771& data-original=&/v2-8c6f1d8ee39dfbb4fcfb2_r.png&&&/figure&&p&在这其中,当下最流行的就是GAN和&b&V&/b&ariational &b&A&/b&uto&b&E&/b&ncoder(VAE),两种方法的一个简明示意如下[3]:&/p&&figure&&img src=&/v2-380cde71a2f6ece28b4a97_b.png& data-rawwidth=&568& data-rawheight=&274& class=&origin_image zh-lightbox-thumb& width=&568& data-original=&/v2-380cde71a2f6ece28b4a97_r.png&&&/figure&&p&本篇不打算展开讲什么是VAE,不过通过这个图,和名字中的autoencoder也大概能知道,VAE中生成的loss是基于重建误差的。而只基于重建误差的图像生成,都或多或少会有图像模糊的缺点,因为误差通常都是针对全局。比如基于MSE(Mean Squared Error)的方法用来生成超分辨率图像,容易出现下面的情况[4]:&/p&&br&&p&&figure&&img src=&/v2-78f53b142fab51b0c09a1_b.png& data-rawwidth=&892& data-rawheight=&598& class=&origin_image zh-lightbox-thumb& width=&892& data-original=&/v2-78f53b142fab51b0c09a1_r.png&&&/figure&在这个二维示意中,真实数据分布在一个U形的流形上,而MSE系的方法因为loss的形式往往会得到一个接近平均值所在的位置(蓝色框)。&/p&&p&GAN在这方面则完爆其他方法,因为目标分布在流形上。所以只要大概收敛了,就算生成的图像都看不出是个啥,清晰度常常是有保证的,而这正是去除女优身上马赛克的理想特性!&/p&&br&&h2&马赛克-&清晰画面:超分辨率(Super Resolution)问题&/h2&&p&说了好些铺垫,终于要进入正题了。首先明确,去马赛克其实是个图像超分辨率问题,也就是如何在低分辨率图像基础上得到更高分辨率的图像:&/p&&figure&&img src=&/v2-31c84b42ad_b.png& data-rawwidth=&784& data-rawheight=&324& class=&origin_image zh-lightbox-thumb& width=&784& data-original=&/v2-31c84b42ad_r.png&&&/figure&&p&视频中超分辨率实现的一个套路是通过不同帧的低分辨率画面猜测超分辨率的画面,有兴趣了解这个思想的朋友可以参考我之前的一个答案:&a href=&/question//answer/& class=&internal&&如何通过多帧影像进行超分辨率重构? &/a&&br&&/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
&b&N&/b&etwork》。这个工作的思路是:基于像素的MSE loss往往会得到大体正确,但是高频成分模糊的结果。所以只要重建低频成分的图像内容,然后靠GAN来补全高频的细节内容,就可以了:&/p&&figure&&img src=&/v2-128029dfc7c470b07a4a1_b.png& data-rawwidth=&446& data-rawheight=&131& class=&origin_image zh-lightbox-thumb& width=&446& data-original=&/v2-128029dfc7c470b07a4a1_r.png&&&/figure&这个思路其实和最早基于深度网络的风格迁移的思路很像(有兴趣的读者可以参考我之前文章&a href=&/p/& class=&internal&&瞎谈CNN:通过优化求解输入图像&/a&的最后一部分),其中重建内容的content loss是原始图像和低分辨率图像在VGG网络中的各个ReLU层的激活值的差异:&p&&figure&&img src=&/v2-331e02e394cfd04e7114a_b.png& data-rawwidth=&529& data-rawheight=&150& class=&origin_image zh-lightbox-thumb& width=&529& data-original=&/v2-331e02e394cfd04e7114a_r.png&&&/figure&生成细节adversarial loss就是GAN用来判别是原始图还是生成图的loss:&/p&&figure&&img src=&/v2-fa5af2a10fe9a4dadfb04_b.png& data-rawwidth=&394& data-rawheight=&89& class=&content_image& width=&394&&&/figure&&p&把这两种loss放一起,取个名叫perceptual loss。训练的网络结构如下:&/p&&figure&&img src=&/v2-17861edeb4bcfae4e9f369_b.png& data-rawwidth=&780& data-rawheight=&400& class=&origin_image zh-lightbox-thumb& width=&780& data-original=&/v2-17861edeb4bcfae4e9f369_r.png&&&/figure&&p&正是上篇文章中讲过的C-GAN,条件C就是低分辨率的图片。SRGAN生成的超分辨率图像虽然PSNR等和原图直接比较的传统量化指标并不是最好,但就视觉效果,尤其是细节上,胜过其他方法很多。比如下面是作者对比bicubic插值和基于ResNet特征重建的超分辨率的结果:&/p&&figure&&img src=&/v2-f3b4376938ffcbd23c42d_b.png& data-rawwidth=&981& data-rawheight=&392& class=&origin_image zh-lightbox-thumb& width=&981& data-original=&/v2-f3b4376938ffcbd23c42d_r.png&&&/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&&figure&&img src=&/v2-e2ea753b7b0d7f18abee3_b.png& data-rawwidth=&485& data-rawheight=&437& class=&origin_image zh-lightbox-thumb& width=&485& data-original=&/v2-e2ea753b7b0d7f18abee3_r.png&&&/figure&就是一个Conditional GAN,条件C是输入的图片。除了直接用C-GAN,这项工作还有两个改进:&/p&&p&1)&b&利用U-Net结构生成细节更好的图片&/b&[6]&/p&&figure&&img src=&/v2-beb074bebbfa0db_b.png& data-rawwidth=&907& data-rawheight=&612& class=&origin_image zh-lightbox-thumb& width=&907& data-original=&/v2-beb074bebbfa0db_r.png&&&/figure&&p&U-Net是德国Freiburg大学模式识别和图像处理组提出的一种全卷积结构。和常见的先降采样到低维度,再升采样到原始分辨率的编解码(Encoder-Decoder)结构的网络相比,U-Net的区别是加入skip-connection,对应的feature maps和decode之后的同样大小的feature maps按通道拼(concatenate)一起,用来保留不同分辨率下像素级的细节信息。U-Net对提升细节的效果非常明显,下面是pix2pix文中给出的一个效果对比:&/p&&p&&figure&&img src=&/v2-2fb4ddb2fdc24eea31eea_b.png& data-rawwidth=&563& data-rawheight=&307& class=&origin_image zh-lightbox-thumb& width=&563& data-original=&/v2-2fb4ddb2fdc24eea31eea_r.png&&&/figure&可以看到,各种不同尺度的信息都得到了很大程度的保留。&/p&&p&2)&b&利用马尔科夫性的判别器(PatchGAN)&br&&/b&&/p&&p&pix2pix和SRGAN的一个异曲同工的地方是都有用重建解决低频成分,用GAN解决高频成分的想法。在pix2pix中,这个思想主要体现在两个地方。一个是loss函数,加入了L1 loss用来让生成的图片和训练的目标图片尽量相似,而图像中高频的细节部分则交由GAN来处理:&/p&&figure&&img src=&/v2-cb180ad03d8a72e7883285b_b.png& data-rawwidth=&447& data-rawheight=&51& class=&origin_image zh-lightbox-thumb& width=&447& data-original=&/v2-cb180ad03d8a72e7883285b_r.png&&&/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=&/v2-5172ca51efb4ee3e453b15_b.png& data-rawwidth=&842& data-rawheight=&107& class=&origin_image zh-lightbox-thumb& width=&842& data-original=&/v2-5172ca51efb4ee3e453b15_r.png&&&/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&&figure&&img src=&/v2-fd28f0b871bd_b.png& data-rawwidth=&660& data-rawheight=&314& class=&origin_image zh-lightbox-thumb& width=&660& data-original=&/v2-fd28f0b871bd_r.png&&&/figure&上图是一个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&&a href=&/?target=https%3A///yahoo/open_nsfw& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&yahoo/open_nsfw&i class=&icon-external&&&/i&&/a&&p&CAM的实现并不难,结合Open NSFW自动打码的代码和使用放在了这里:&/p&&a href=&/?target=https%3A///frombeijingwithlove/dlcv_for_beginners/tree/master/random_bonus/generate_mosaic_for_porno_images& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&给XX图片生成马赛克&i class=&icon-external&&&/i&&/a&&br&&br&(成功打码的)效果差不多是下面这样子:&figure&&img src=&/v2-cbefa39dc983f2645dd8_b.png& data-rawwidth=&768& data-rawheight=&256& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&/v2-cbefa39dc983f2645dd8_r.png&&&/figure&&h2&去除(爱情)动作片中的马赛克&/h2&&p&这没什么好说的了,一行代码都不用改,只需要按照前面的步骤把数据准备好,然后按照pix2pix官方的使用方法训练就可以了:&/p&&p&Torch版pix2pix:&a href=&/?target=https%3A///phillipi/pix2pix& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&phillipi/pix2pix&i class=&icon-external&&&/i&&/a&&/p&&p&pyTorch版pix2pix(Cycle-GAN二合一版):&a href=&/?target=https%3A///junyanz/pytorch-CycleGAN-and-pix2pix& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&junyanz/pytorch-CycleGAN-and-pix2pix&i class=&icon-external&&&/i&&/a&&/p&&p&从D盘里随随便便找了几千张图片,用来执行了一下自动打码和pix2pix训练(默认参数),效果是下面这样:&/p&&br&&figure&&img src=&/v2-9f52b17c0e1296767cbfbfafc290a5bd_b.png& data-rawwidth=&814& data-rawheight=&691& class=&origin_image zh-lightbox-thumb& width=&814& data-original=&/v2-9f52b17c0e1296767cbfbfafc290a5bd_r.png&&&/figure&&p&什么?你问说好给女优去马赛克呢?女优照片呢?&/p&&figure&&img src=&/v2-480fb8a4dcfc7a4f92ec_b.png& 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=&/v2-c4b1eeda364fb6c9bada02f3_b.png& data-rawwidth=&866& data-rawheight=&399& class=&origin_image zh-lightbox-thumb& width=&866& data-original=&/v2-c4b1eeda364fb6c9bada02f3_r.png&&&/figure&左边的灰衣男只懂英语,右边的黑衣女只懂中文,现在的任务就是,要学习如何翻译英语到中文。对偶学习解决这个问题的思路是:给定一个模型&img src=&/equation?tex=f%3Ax%5Crightarrow+y& alt=&f:x\rightarrow y& eeimg=&1&&一上来无法知道f翻译得是否正确,但是如果考虑上&img src=&/equation?tex=f& alt=&f& eeimg=&1&&的对偶问题&img src=&/equation?tex=g%3Ay%5Crightarrow+x& alt=&g:y\rightarrow x& eeimg=&1&&,那么我可以尝试翻译一个英文句子到中文,再翻译回来。这种转了一圈的结果&img src=&/equation?tex=x%27%3Dg%28f%28x%29%29& alt=&x'=g(f(x))& eeimg=&1&&,灰衣男是可以用一个标准(BLEU)判断x'和x是否一个意思,并且把结果的一致性反馈给这两个模型进行改进。同样的,从中文取个句子,这样循环翻译一遍,两个模型又能从黑衣女那里获取反馈并改进模型。其实这就是强化学习的过程,每次翻译就是一个action,每个action会从环境(灰衣男或黑衣女)中获取reward,对模型进行改进,直至收敛。&p&也许有的人看到这里会觉得和上世纪提出的Co-training很像,这个在知乎上也有讨论:&/p&&a href=&/question/& class=&internal&&如何理解刘铁岩老师团队在NIPS 2016上提出的对偶学习(Dual Learning)?&/a&&p&个人觉得还是不一样的,Co-Training是一种multi-view方法,比如一个输入x,如果看作是两个拼一起的特征&img src=&/equation?tex=x%3D%28x_1%2Cx_2%29& alt=&x=(x_1,x_2)& eeimg=&1&&,并且假设&img src=&/equation?tex=x_1& alt=&x_1& eeimg=&1&&和&img src=&/equation?tex=x_2& alt=&x_2& eeimg=&1&&互相独立,那么这时候训练两个分类器&img src=&/equation?tex=f_1%28%5Ccdot%29& alt=&f_1(\cdot)& eeimg=&1&&和&img src=&/equation?tex=f_2%28%5Ccdot%29& alt=&f_2(\cdot)& eeimg=&1&&对于任意样本x应该有&img src=&/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=&/equation?tex=f_1& alt=&f_1& eeimg=&1&&和&img src=&/equation?tex=f_2& alt=&f_2& eeimg=&1&&其实是两个不同,但是domain指向相同的任务。而Dual Learning中&img src=&/equation?tex=f& alt=&f& eeimg=&1&&和&img src=&/equation?tex=g& alt=&g& eeimg=&1&&是对偶任务,利用的隐含约束是&img src=&/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=&/v2-9e7396ebccb7c42302fc97_b.png& data-rawwidth=&838& data-rawheight=&216& class=&origin_image zh-lightbox-thumb& width=&838& data-original=&/v2-9e7396ebccb7c42302fc97_r.png&&&/figure&&p&X和Y分别是两种不同类型图的集合,比如穿衣服的女优和没穿衣服的女优。所以给定一张穿了衣服的女优,要变成没穿衣服的样子,就是个图片翻译问题。CycleGAN示意图中(b)和(c)就是Dual Learning:&/p&&figure&&img src=&/v2-de51cac58b_b.png& data-rawwidth=&347& data-rawheight=&62& class=&content_image& width=&347&&&/figure&&p&在Dual Learning基础上,又加入了两个判别器&img src=&/equation?tex=D_X& alt=&D_X& eeimg=&1&&和&img src=&/equation?tex=D_Y& alt=&D_Y& eeimg=&1&&用来进行对抗训练,让翻译过来的图片尽量逼近当前集合中的图片:&/p&&p&&figure&&img src=&/v2-e0ea7a6b38bf2a20cea4ea6f741a4c67_b.png& data-rawwidth=&442& data-rawheight=&59& class=&origin_image zh-lightbox-thumb& width=&442& data-original=&/v2-e0ea7a6b38bf2a20cea4ea6f741a4c67_r.png&&&/figure&全考虑一起,最终的loss是:&/p&&p&&figure&&img src=&/v2-e6d99e7edea969da3dad_b.png& data-rawwidth=&357& data-rawheight=&87& class=&content_image& width=&357&&&/figure&也许有人会问,那不加cycle-consistency,直接用GAN学习一个&img src=&/equation?tex=X%5Crightarrow+Y& alt=&X\rightarrow Y& eeimg=&1&&的映射,让生成的Y的样本尽量毕竟Y里本身的样本可不可以呢?这个作者在文中也讨论了,会产生GAN训练中容易发生的mode collapse问题。mode collapse问题的一个简单示意如下[1]:&/p&&p&&figure&&img src=&/v2-309fce6329592babb784ed_b.png& data-rawwidth=&842& data-rawheight=&262& class=&origin_image zh-lightbox-thumb& width=&842& data-original=&/v2-309fce6329592babb784ed_r.png&&&/figure&上边的是真实分布,下边的是学习到的分布,可以看到学习到的分布只是完整分布的一部分,这个叫做partial mode collapse,是训练不收敛情况中常见的一种。如果是完全的mode collapse,就是说生成模型得到的都是几乎一样的输出。而加入Cycle-consistency会让一个domain里不同的样本都尽量映射到另一个domain里不同的地方,理想情况就是双射(bijection)。直观来理解,如果通过&img src=&/equation?tex=X%5Crightarrow+Y& alt=&X\rightarrow Y& eeimg=&1&&都映射在Y中同一个点,那么这个点y通过&img src=&/equation?tex=Y%5Crightarrow+X& alt=&Y\rightarrow X& eeimg=&1&&映射回来显然不可能是多个不同的x,所以加入cycle-consistency就帮助避免了mode collapse。这个问题在另一篇和CycleGAN其实本质上没什么不同的方法DiscoGAN中有更详细的讨论[11],有兴趣的话可以参考。&/p&&br&&p&有一点值得注意的是,虽然名字叫CycleGAN,并且套路也和C-GAN很像,但是其实只有adversarial,并没有generative。因为严格来说只是学习了&img src=&/equation?tex=X%5Crightarrow+Y& alt=&X\rightarrow Y& eeimg=&1&&和&img src=&/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&&figure&&img src=&/v2-57eaadc8cec5190bfd30_b.png& data-rawwidth=&758& data-rawheight=&207& class=&origin_image zh-lightbox-thumb& width=&758& data-original=&/v2-57eaadc8cec5190bfd30_r.png&&&/figure&其实就是两个GAN结构,其中生成网络和判别网络中比较高层的部分都采用了权值共享(虚线相连的部分),没有全职共享的部分分别处理不同的domain。这样每次就可以根据训练的domain生成一个样本在两个domain中不同的对应,比如戴眼镜和没戴眼镜:&/p&&p&&figure&&img src=&/v2-356a6118ccf3e8e3bf1c7_b.png& data-rawwidth=&791& data-rawheight=&267& class=&origin_image zh-lightbox-thumb& width=&791& data-original=&/v2-356a6118ccf3e8e3bf1c7_r.png&&&/figure&分别有了共有特征和各自domain特征,那么做mapping的思路也就很直接了[14]:&/p&&p&&figure&&img src=&/v2-8ac50600e40feaac345e09bd7e05a83d_b.png& data-rawwidth=&771& data-rawheight=&210& class=&origin_image zh-lightbox-thumb& width=&771& data-original=&/v2-8ac50600e40feaac345e09bd7e05a83d_r.png&&&/figure&在GAN前边加了个domain encoder,然后对每个domain能得到三种样本给判别器区分:直接采样,重建采样,从另一个domain中transfer后的重建采样。训练好之后,用一个domain的encoder+另一个domain的generator就很自然的实现了不同domain的转换。用在图像翻译上的效果如下:&/p&&p&&figure&&img src=&/v2-612e9cf5e125fd626be7db_b.png& data-rawwidth=&444& data-rawheight=&544& class=&origin_image zh-lightbox-thumb& width=&444& data-original=&/v2-612e9cf5e125fd626be7db_r.png&&&/figure&还有个巧妙的思路,是把CoGAN拆开,不同domain作为C-GAN条件的更加显式的做法[15]:&/p&&br&&p&&figure&&img src=&/v2-ddec16d502c94f91ea35_b.png& data-rawwidth=&883& data-rawheight=&398& class=&origin_image zh-lightbox-thumb& width=&883& data-original=&/v2-ddec16d502c94f91ea35_r.png&&&/figure&第一步用噪声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&&br&&h2&给女优穿上衣服&/h2&&p&其实同样没什么好说的,Cycle-GAN和pix2pix的作者是一拨人,文档都写得非常棒,准备好数据,分成穿衣服的和没穿衣服的两组,按照文档的步骤训练就可以:&/p&&p&Torch版Cycle-GAN:&a href=&/?target=https%3A///junyanz/CycleGAN& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&junyanz/CycleGAN&i class=&icon-external&&&/i&&/a&&/p&&p&pyTorch版Cycle-GAN(pix2pix二合一版):&a href=&/?target=https%3A///junyanz/pytorch-CycleGAN-and-pix2pix& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&junyanz/pytorch-CycleGAN-and-pix2pix&i class=&icon-external&&&/i&&/a&&/p&&p&Cycle-GAN收敛不易,我用了128x128分辨率训练了穿衣服和没穿衣服的女优各一千多张,同样是默认参数训练了120个epoch,最后小部分成功“穿衣服”的结果如下:&/p&&figure&&img src=&/v2-fee34d66c386e0e01e5804_b.jpg& data-rawwidth=&1117& data-rawheight=&192& class=&origin_image zh-lightbox-thumb& width=&1117& data-original=&/v2-fee34d66c386e0e01e5804_r.jpg&&&/figure&&figure&&img src=&/v2-de57c5ebefa4251ee3caa1_b.jpg& data-rawwidth=&1117& data-rawheight=&192& class=&origin_image zh-lightbox-thumb& width=&1117& data-original=&/v2-de57c5ebefa4251ee3caa1_r.jpg&&&/figure&&p&虽然都有些突兀,但好歹是穿上衣服了。注意马赛克不是图片里就有的,是我后来加上去的。&/p&&p&那么,脱衣服的例子在哪里?&/p&&figure&&img src=&/v2-480fb8a4dcfc7a4f92ec_b.png& 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=&/?target=http%3A//torch.ch/blog//gan.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Torch | Generating Faces with Torch&i class=&icon-external&&&/i&&/a&&/p&&p&[3] A. B. L. Larsen, S. K. S?nderby, H. Larochelle, and O. Winther. Autoencoding beyond pixels using a
learned similarity metric. In ICML, pages , 2016.
&/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&&br&&p&[9] &a href=&/?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&i class=&icon-external&&&/i&&/a&&br&&/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&&br&&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&&br&&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&&br&&p&&b&3)&/b&预训练模型有没有?有,但是我研读了中华人民共和国刑法第三百六十三、三百六十四和三百六十六条,完全读不懂,所以还是不提供。再说就算我提供了,根据1)和2),看到你想看的内容也是需要运气的。&/p&&p&另外特别感谢赞赏的知友们,这篇文章是想说&b&书中自有颜如玉&/b&,而知友们的赞赏让我知道&b&书中真有黄金屋&/b&,古人诚不我欺…&/p&
作为一名久经片场的老司机,早就想写一些探讨驾驶技术的文章。这篇就介绍利用生成式对抗网络(GAN)的两个基本驾驶技能: 1) 去除(爱情)动作片中的马赛克2) 给(爱情)动作片中的女孩穿(tuo)衣服 生成式模型上一篇《》中已经简单介…
这个国家的东方是世界上最广阔的海洋,西方是世界上最高的山脉,北方是世界上最广袤的冰原,南方是世界上最大的群岛。如果是500年以前出生的人,穷尽一生也不会理解,这片土地为什么不叫做中国。这个国家的文明没有起点,也没有终点,自古以来似乎横亘不灭。她完全不像是一个国家而更像是一种自然现象,如太阳般东升西落,如大海般潮涨潮歇。她是一种周而复始的物理定律永远存在于世界的东方。她是如此独特,如此优雅,以至于对世界上其他普世的定律没有一个能套用在中国身上。&br&基辛格在他的《论中国》里有一段非常精辟的论述:&br&&img src=&/v2-5de9e190a88e4f6f52ca146da2d5c76f_b.png& data-rawwidth=&660& data-rawheight=&612& class=&origin_image zh-lightbox-thumb& width=&660& data-original=&/v2-5de9e190a88e4f6f52ca146da2d5c76f_r.png&&&img src=&/v2-8bacdab69063e2dba30a2ed4dcaa86ac_b.png& data-rawwidth=&644& data-rawheight=&424& class=&origin_image zh-lightbox-thumb& width=&644& data-original=&/v2-8bacdab69063e2dba30a2ed4dcaa86ac_r.png&&&img src=&/v2-cbcf7aaadd6df3fe56a0ede_b.png& data-rawwidth=&645& data-rawheight=&608& class=&origin_image zh-lightbox-thumb& width=&645& data-original=&/v2-cbcf7aaadd6df3fe56a0ede_r.png&&&img src=&/v2-49fe02374ca_b.png& data-rawwidth=&644& data-rawheight=&573& class=&origin_image zh-lightbox-thumb& width=&644& data-original=&/v2-49fe02374ca_r.png&&&img src=&/v2-ac3fb0bed29cf40d515e2e7f8904854e_b.png& data-rawwidth=&639& data-rawheight=&272& class=&origin_image zh-lightbox-thumb& width=&639& data-original=&/v2-ac3fb0bed29cf40d515e2e7f8904854e_r.png&&&img src=&/v2-25df5f8dad_b.png& data-rawwidth=&638& data-rawheight=&553& class=&origin_image zh-lightbox-thumb& width=&638& data-original=&/v2-25df5f8dad_r.png&&&br&&img src=&/v2-1d0be5ee5_b.png& data-rawwidth=&642& data-rawheight=&135& class=&origin_image zh-lightbox-thumb& width=&642& data-original=&/v2-1d0be5ee5_r.png&&在基辛格的眼里,中国似乎是孤立主义的鼻祖,正像美国可以利用其地缘政治优势搅乱欧亚大陆一样,中国也一样有这样的优势,只要稳定住朝鲜半岛和中南半岛,世界其他地方的战乱都无法蔓延到中国。&br&&img src=&/v2-55ba90fef576ce7b3bef15_b.png& data-rawwidth=&652& data-rawheight=&519& class=&origin_image zh-lightbox-thumb& width=&652& data-original=&/v2-55ba90fef576ce7b3bef15_r.png&&&img src=&/v2-3f245aa9e2b2ea4dfc0eb31_b.png& data-rawwidth=&650& data-rawheight=&374& class=&origin_image zh-lightbox-thumb& width=&650& data-original=&/v2-3f245aa9e2b2ea4dfc0eb31_r.png&&&img src=&/v2-12be5f5534_b.png& data-rawwidth=&660& data-rawheight=&328& class=&origin_image zh-lightbox-thumb& width=&660& data-original=&/v2-12be5f5534_r.png&&中国人利用所处的地缘优势,不仅过着富饶的生活,也蕴蓄了伟大的文明。这套文明远比西方的文明更加世俗化,在中国人的宗教里,始终没有一个掌握万物的神存在。&br&&img src=&/v2-726b0f6e43f7c51e055b86a1ee674eda_b.png& data-rawwidth=&648& data-rawheight=&229& class=&origin_image zh-lightbox-thumb& width=&648& data-original=&/v2-726b0f6e43f7c51e055b86a1ee674eda_r.png&&中国没有建立一神教,取而代之的是中国建立了独特的儒家文化社会。&br&&img src=&/v2-420b7759aa4ffdbb381f1856a4dda5c0_b.png& data-rawwidth=&646& data-rawheight=&521& class=&origin_image zh-lightbox-thumb& width=&646& data-original=&/v2-420b7759aa4ffdbb381f1856a4dda5c0_r.png&&中国在二千年前就废除了西方直到近代才废除的分封制,其所采用的科举制度、官僚制度和今天的西方现代政府的架构极其相似。&br&&img src=&/v2-71630cee27ddc7ade056b58be8f0bc63_b.png& data-rawwidth=&640& data-rawheight=&327& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-71630cee27ddc7ade056b58be8f0bc63_r.png&&&br&中国文化非常内敛,于是中国从来都没有想要将自己的价值观强加于别人。&br&&img src=&/v2-c8e423cfaf5ac_b.png& data-rawwidth=&656& data-rawheight=&513& class=&origin_image zh-lightbox-thumb& width=&656& data-original=&/v2-c8e423cfaf5ac_r.png&&因为中国的地理特殊性,中国从来没有建立过现代的外交制度。&br&&img src=&/v2-82ae148ac64f5d46d7ab_b.png& data-rawwidth=&645& data-rawheight=&223& class=&origin_image zh-lightbox-thumb& width=&645& data-original=&/v2-82ae148ac64f5d46d7ab_r.png&&&br&&img src=&/v2-1ef517ceda79_b.png& data-rawwidth=&671& data-rawheight=&174& class=&origin_image zh-lightbox-thumb& width=&671& data-original=&/v2-1ef517ceda79_r.png&&在基辛格看来,中国的例外主义是文化性的,中国不试图改变他国的信仰,不对海外推行本国的现行体制。任何普世价值到了中国都会成为例外。&br&&img src=&/v2-f04ed70e8_b.png& data-rawwidth=&653& data-rawheight=&417& class=&origin_image zh-lightbox-thumb& width=&653& data-original=&/v2-f04ed70e8_r.png&&&img src=&/v2-38bab5ce52fcdddc7ec5f5_b.png& data-rawwidth=&648& data-rawheight=&92& class=&origin_image zh-lightbox-thumb& width=&648& data-original=&/v2-38bab5ce52fcdddc7ec5f5_r.png&&&img src=&/v2-b39fb8d0e15ba37d0ad47d_b.png& data-rawwidth=&639& data-rawheight=&181& class=&origin_image zh-lightbox-thumb& width=&639& data-original=&/v2-b39fb8d0e15ba37d0ad47d_r.png&&中国人称自己的国家为&middle kingdom&
或者 &central country&。我们从中国历史的角度看过去,任何一个中国人都会变得微不足道。随着时间的拉长,某个人某件事情的对与错都会变得不重要,所有由此而生的爱与恨都会变成中国人价值观和道德准则的一部分,融于血脉加以传承。当这个国家被人欺凌的时候,中华儿女便驱除鞑虏复兴中华;当这个国家贫弱不堪的时候,中华儿女则卧薪尝胆自强不息。因为他们始终相信,自己的国家终究会站在世界的中央。这是人类万年历史的物理定律,无人可破。&br&这样一个国家便是中国。
这个国家的东方是世界上最广阔的海洋,西方是世界上最高的山脉,北方是世界上最广袤的冰原,南方是世界上最大的群岛。如果是500年以前出生的人,穷尽一生也不会理解,这片土地为什么不叫做中国。这个国家的文明没有起点,也没有终点,自古以来似乎横亘不灭…
&figure&&img src=&/50/v2-9dd99ac6ef_b.jpg& data-rawwidth=&516& data-rawheight=&300& class=&origin_image zh-lightbox-thumb& width=&516& data-original=&/50/v2-9dd99ac6ef_r.jpg&&&/figure&&p&最近后台留言,很多读者都想让我谈一谈雄安新区和《人民的名义》。雄安新区现在还没什么好谈的,国家只是提出了这样一个概念性的纲领,真要看怎样还要等到时候详细的配套政策,至少得等个一年半载,现在这点信息量说不出个子丑寅卯来。如果非要“硬”分析那就是“纯属推测,如有出入,概不负责”了,我们唯物主义者不搞这些。&/p&&p&至于《人民的名义》,毫无疑问在剧本、表演、制作、题材上,都是近几年国产剧中的佼佼者,但是我看了十一二集,我能隐约感觉到这部戏可深入分析的地方并不是特别多。我又往后追了十几集,脑海中总是挥之不去另一部国产剧中的一个情节。我终于想明白了,《人民的名义》长长几十集想说却并未说透的内涵,这部剧用短短半集二十分钟、寥寥几个镜头,就讲透彻了。让我们走进国产帝王剧第一、永恒的经典《雍正王朝》第三十二集:&/p&&figure&&img src=&/v2-6fe9adb6dc6e87950dfe8d_b.jpg& data-rawwidth=&640& data-rawheight=&3299& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-6fe9adb6dc6e87950dfe8d_r.jpg&&&/figure&&p&我看《人民的名义》,脑海里浮现的就是这一集这个剧情。仔细体会一下,道理就是这么个道理:所有的反腐剧从来都是“官斗官”,而绝对不会“民斗官”;任何反腐都是权力的倾轧、特权的较量,人民嘛,能有一个脸谱化的青天大老爷带着你的“名义”就不错了。这道理有些剧说透了,自然就跨过了这个羁绊,思想境界更上一层楼;有些剧没有,但是也不妨碍它成为非常优秀的影视作品。没说透,但有这种思想体现的佳作,例如《人民的名义》《九品芝麻官》,可以数出来很多;而说透的,就跻身于神剧的行列了,目前为止只有两部剧达到了这种境界,一部《雍正王朝》,一部《大明王朝1566》。&/p&&br&&p&我们今天主要谈一谈《雍正王朝》,有时间我会详细分析一下《大明王朝1566》。反腐这个话题不是《雍正王朝》的重头戏,《雍正王朝》的重头戏可谓前无古人后无来者,我们后文中会详细说。“反腐”这个题材在它整部戏的构架里占了很小的分量,但就这很小的分量,也依然足够的深刻、足够的透彻。本剧前部有几集讲了一个刑事舞弊案,不过背后牵扯到了“大老虎”。当康熙皇帝要求彻查到底的时候,当朝“宰相”、文官领袖佟中堂如是说道:&/p&&p&&figure&&img src=&/v2-24de3d032a635e06a49fccbddb39993c_b.jpg& data-rawwidth=&640& data-rawheight=&1418& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-24de3d032a635e06a49fccbddb39993c_r.jpg&&&/figure&佟中堂不愧为百官之首,深谙政治之道:“倘若牵涉到朝廷的根本,投鼠忌器,又将无功而返。”但是康熙爷何等的英明神武,完全不容佟中堂和稀泥,直接一句话怼下去:&br&&/p&&figure&&img src=&/v2-c7972c1edf96c3fe059b61d5bc176b35_b.jpg& data-rawwidth=&640& data-rawheight=&1422& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-c7972c1edf96c3fe059b61d5bc176b35_r.jpg&&&/figure&&p&我看这一段笑的不行。是啊,投鼠忌器这个“器”是忌的谁啊,“又”无功而返这个“又”打的谁的脸啊?康熙爷何尝不明白“器”是什么,“又”是第几次了,但他一定要问出来,为什么,因为……编剧想让他这样问(大误)。因为如果不戳破这层潜规则,如果不大力反腐,建立一个高效清廉的官僚集团,那大清就要完啊。&/p&&p&在历史上,康熙晚年,经济、军事、赋税、刑狱等均已出现危机,哪一件都颇为为棘手。这一方面与康熙皇帝年纪大了,想更多地用“仁道”“恕道”来处理和臣下的关系;另一方面诸子夺嫡,朝廷派系斗争严重,甚至影响到了政府的日常运行。&/p&&p&一直以来,雍正皇帝夹在乾隆、康熙两帝之间,总是容易被人忽略,便如“康乾盛世”也是取了爷爷和孙子的名号,跟他这个爸爸没什么太大关系。而看一些晚清、民国时期士大夫们的评论,雍正的形象多半是一个严酷、苛刻、吝啬的暴君,而乾隆则是一个慷慨、宽厚、仁慈的明主。谈起雍正,多半跟宫廷八卦有关,包括他继位是否正当,对自己兄弟多么残酷,但极少有人对他的治国理政的政策有一个应当的重视,雍正时代的政治一向以严猛著称,其诸多政治与经济的改革亦向被学界视为开启康乾盛世的重要举措。可以说,雍正的坏名声很大程度上是他得罪了一个阶层——一个即便如皇帝的他也得罪不起的阶层——官僚和封建士大夫集团。&/p&&p&据史书记载,继位伊始,雍正破例将内阁草拟的《登基恩诏》中有关豁免官员亏空的条例删除,要知道新皇登基大赦天下可是中华帝国自古以来的惯例。一个月后,雍正谕令全面清理钱粮,除陕西省因用兵外,“限以三年,各省督抚将所属钱粮严行稽查。凡有亏空,无论己经参出及未经参出者,三年之内务期如数补足。毋得苛派民间,毋得借端遮饰,如限满不完,定行从重治罪。三年补完之后,若再有亏空者,决不宽贷”。一时间,在康熙帝睁一只眼,闭一只眼的宽大政策下舒坦惯了的官员们被闹得鸡飞狗跳、人心惶惶,多年来被熟视无睹的一个个贪污挪用公款钱粮的大窟窿被纷纷刨开。不论涉及多大的贵戚,雍正都严厉查处。一时间被革职、抄家,乃至斩首、自杀的比比皆是。&/p&&p&雍正另两项“丧尽天良”“令人发指”的政策也雷厉风行地执行开:“火耗归公”“官绅纳粮,一体当差”——这两项空前绝后的改革与“摊丁入亩”并称为雍正王朝的三大政策,其巨大意义堪比明朝张居正改革。“摊丁入亩”我们都知道,一直被人提起并赋予重要历史意义意义。但是这一政策推行之初同样遇到重重阻力。因为改革,既然有改有革,肯定是要动一部分既得利益集团的利益的:&/p&&figure&&img src=&/v2-bfa47cbb2316ecb80ac12_b.jpg& data-rawwidth=&720& data-rawheight=&763& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&/v2-bfa47cbb2316ecb80ac12_r.jpg&&&/figure&&p&若是连摊丁入亩都遇到这样的阻力,更不要提“火耗归公”“官绅一体当差纳粮”了。这两项政策,再加上前文所说的追查钱粮亏空,雍正帝得罪了皇帝也得罪不起的阶层——封建社会中的官僚、士大夫阶层。没错,就是皇帝也得罪不起。皇帝,只不过是一个半神化的“天下共主”式的精神符号,而这些人,才是封建国家真正的主人。&/p&&p&“火耗归公”是指碎银加火铸成银锭时的折耗,亦称耗羡。实行中官员任意加派,一两可加至数钱。因不在上交正额之内,官员从中任意侵贪,成为官场公行的陋习。雍正帝改政,将各地加派的火耗由上级官府依定额发给官员,火耗一分为三:一份给地方官养廉,一份弥补地方亏空,一份留地方公用。这样,既增加了财政收入,又有助于廉政。但是毫无疑问,官吏的灰色收入大大减少——确切的说减少了三分之二。&/p&&p&“官绅纳粮,一体当差”更了不得,此政策指官员地主也必须缴纳赋税。即废除贵族免税特权。康熙四十余年开始了国家财政危机,固有的公差、贵族免徭役赋税的制度,不但使财政负担落在穷苦百姓身上,而且国库空虚。中国历史上,长期以来绅衿士大夫阶层一直享有经济上的特权,如以儒户、宦户的名义不用当差服徭役、不用缴纳耗羡钱粮等等。雍正帝的改革为了缓解财政压力,却也让整个地主士大夫阶层炸了锅——什么!难道要我和阿Q们一起纳粮、当差!?还有没有王法了!?还有没有法律了!!??&/p&&figure&&img src=&/v2-0cb6dad4be2_b.jpg& data-rawwidth=&725& data-rawheight=&700& class=&origin_image zh-lightbox-thumb& width=&725& data-original=&/v2-0cb6dad4be2_r.jpg&&&/figure&&p&为什么封建朝代中儒家思想是整个社会的“指导思想”,从周公到孔孟再到董仲舒等人,中国逐渐摸索出了一套适合“大一统+小农经济”的社会基层组织方法。事实证明,就是儒家思想指导下的“宗族+礼教”的基层组织形式是封建中国最适合的选择。在地主阶级的主导下,一部分靠血缘的力量,一部分靠道德的约束,能够给这个幅员辽阔的大一统帝国提供较为稳固的根基。在基层社会这样一种儒家“宗族+礼教”的规定性下,年长者的地位比年幼者高、男人比女人地位高、有知识的人比没有知识的人地位高。担任基层中国社会领导者其身份往往涵盖了很多的元素,从经济上讲,他们是大地主;从行政上讲,他们是乡长、里长;从民俗上讲,他们是士绅、乡贤;从国家选拔考试上讲,他们是秀才、贡生、举人。这些人共同构成了封建社会金字塔的上层部分,是统治阶级,而不向国家缴税、纳粮,不服兵役、徭役,也是作为统治阶级理所应当的事情。&/p&&p&因此,可想而知,当雍正帝推行一体纳粮当差的政策时,会遇到多么巨大的阻力:&/p&&p&&figure&&img src=&/v2-bc65f462e95bab83da06446f_b.jpg& data-rawwidth=&640& data-rawheight=&1416& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-bc65f462e95bab83da06446f_r.jpg&&&/figure&《雍正王朝》中有一位优秀的大清官、大学者——李绂。雍正帝也十分倾佩李绂的学识、人品,把他从一个门客一路提拔到直隶总督的位置,可谓是皇恩浩荡。在科场舞弊案中,他冲破重重阻力挺身而出匡扶正义,是一个典型的上报君恩下惠黎民的“青天大老爷”形象。然而对雍正帝的“官绅一体纳粮当差”的政策,他是什么反应呢?反对。激烈的反对。带头激烈的反对。&br&&/p&&figure&&img src=&/v2-51f7c92a4deaaf8bf0d86d45_b.jpg& data-rawwidth=&720& data-rawheight=&535& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&/v2-51f7c92a4deaaf8bf0d86d45_r.jpg&&&/figure&&figure&&img src=&/v2-eadd760f0197_b.jpg& data-rawwidth=&722& data-rawheight=&536& class=&origin_image zh-lightbox-thumb& width=&722& data-original=&/v2-eadd760f0197_r.jpg&&&/figure&&p&好一个“读书人”好一个“诤臣”,多么大义凛然多么铁骨铮铮。我在《马克思主义道德观》一文中就分析过,道德具有鲜明的意识形态特征。而李绂的道德观毫无疑问是封建士大夫的道德观,是站在自身阶级利益立场出发的——什么?让我们斯文人跟那群泥腿子一样纳粮当差?这让读书人颜面扫地啊,这让我们圣人门生何以为人啊,这是不道德的啊,这是要批判一番的啊。什么读书人,说到底就是四个字——特权阶级!看明白了吧,知道为什么雍正这么难了吧,因为他反的不是腐,而是要削了特权阶级的特权!&/p&&p&这部剧拍得好啊,李绂这个形象设计得好啊。前面用大量篇幅描述李绂怎样正直、怎样公正无私、怎样大义凛然,就是为了来后面这个反转,让他与雍正的矛盾势同水火不可调和,最后罢官回家。&/p&&p&贪官能怎样,清官又如何。清官,说到底,也是特权阶级。能拍到这种程度,这部剧的思想高度基本就睥睨一切了。能想到这一层面,基本分析其他的影视作品也都是轻车熟路了。&/p&&p&毫无疑问,雍正的新政损了特权阶层的牙眼,那么老百姓呢?剧里专门有一幕交代,河南试行新政一年,人民生活水平大幅提高:&figure&&img src=&/v2-ef1c0e1cf6f43d0b54c4d37_b.jpg& data-rawwidth=&640& data-rawheight=&1388& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-ef1c0e1cf6f43d0b54c4d37_r.jpg&&&/figure&&/p&&p&说白了这就是一个特权阶级的利益和整体利益的取舍,所以说很多问题都是屁股决定脑袋的事情。而就“一体纳粮”这个政策来说,其远大的意义远不止提高民生而已。&/p&&p&通读中国历史,我们不难发现,不难发现,中国封建朝代总会进入这样的毅♂种循环:“土地兼并一一土地危机一一农民起义一一战争消灭大量人口、出现大量荒地——土地所有权的调整( 再分配) 一一安抚流民、开垦荒地——劝课农桑、发展经济、休养生息一一恢复和繁荣一一土地兼并”。是不是有点眼熟?这不就是马克思的资本主义经济周期理论嘛:“繁荣——危机——萧条——复苏——繁荣”。&/p&&p&历史课本告诉我们:中国封建社会存在着互相对立、彼此消长的两种土地所有制: 一是封建地主土地所有制( 包含地主阶级的国有土地制) , 一是农民小块土地所有制。前者占支配地位, 后者为其补充。这样中国封建土地所有制实质就是封建地主土地所有制, 基本特点是土地所有权高度集中在地主阶级手中。小农经济具有其抗风险能力差的特点,普通农户家庭一旦遇到水旱蝗灾、年景歉收或是婚丧嫁娶、疾病,就不得不以土地作为抵押,从地主乡绅那里获取高利贷。&/p&&p&然而就像马克思和无数学者所证明的那样,历来资本的边际收益要高于劳动的边际收益,因此这就注定了在许多情况下,农民辛苦劳作所取得的收益是无法偿还高利贷的利息的。这样就在利息的“驴打滚”中恶性循环,直至将被抵押的土地偿还给地主,成为佃农,更惨一点的,就是流民。万历年间一份奏折指出:“或因水旱饥荒,及粮差繁并,或被势要相侵,及钱债驱迫,不得已将起科腴田,减其价直,典卖……”。相关的文学作品可以参考《白毛女》和茅盾先生的《春种》《秋收》。&/p&&p&然而,问题就来了,地主兼并农民土地,是一个线性增长财富集中愈演愈烈的趋势,但是问题就来了,因为地主士绅兼并的这些土地是不向国家交税的:&/p&&figure&&img src=&/v2-68c402c8fda06f075de5d_b.jpg& data-rawwidth=&640& data-rawheight=&1872& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-68c402c8fda06f075de5d_r.jpg&&&/figure&&p&这就是造成中国封建王朝兴衰周期律的根本原因之一。土地越来越多地集中在特权阶层手中,国家能得到的赋税也就越来越少;另一方面失地流民越来越多,镇压、安抚农民起义又需要大量的财政收入,这对于封建王朝来说是一个死局。土地越集中在这些特权阶层的手中,国家受到的利益损失就越大,这就是历史上的所谓“ 锄豪强, 抑兼并”的经济思想和政策产生的经济根源。但是从公元前七年汉哀帝绥和二年颁布的封建史上的第一次限田令以来, 诸如王莽的王田制、晋初的占田制、北魏的均田制等等, 无不在既得利益的缙绅、官僚、豪强的反对下,成为一纸空文, 不能实施。大明朝为什么亡?不是亡于流寇,也不是亡于鞑虏,而是亡于东南的税收不上来。明朝末期,一条鞭法算是给大明续了一命,魏公公别管这个人多混蛋吧,魏公公的税收政策也给大明续了一命。然而魏公公这个死人妖被搞掉之后,东南士绅为基本盘的东林党全面得势,魏公公的税收政策自然也被废除了,东南的税就更收不上来了。但是东北还在跟后金打仗啊,打仗有多损国力看看美国打伊拉克、苏联打阿富汗就知道了,大明朝最富庶的一块地方税收不上来,只好靠盘剥中原、西北的农民了。加一遍辽饷,加一遍剿饷,加一遍练饷,再加上天灾,老百姓们不反也得反了。&/p&&p&可以说,雍正帝的“官绅一体纳粮当差”可谓是封建王朝的千年大计,但是,那又如何,还不是要被官僚集团反攻倒算,还不是要被特权阶层踩上一万只脚。“读书人”们还有最后一个杀招——话语权:&/p&&figure&&img src=&/v2-f28f77d5b4cc3d646d91ec7c3cc1a592_b.jpg& data-rawwidth=&640& data-rawheight=&950& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-f28f77d5b4cc3d646d91ec7c3cc1a592_r.jpg&&&/figure&&p&好一个千秋万代留下骂名啊。“秦王扫六合,虎视何雄哉! 挥剑决浮云,诸侯尽西来。”秦始皇用铁锤把六国贵族敲的粉碎,同时废分封、行郡县,把贵族制变成了官僚制,把邦国制变成了帝国制,彻底绝了六国贵族们的根。秦朝二世而亡,除了因为严刑峻法、横征暴敛,跟六国贵族的反攻倒算有很大的关系。按理说秦始皇大一统,废分封、行郡县,车同轨、书同文,多大的功绩,但在历朝历代士大夫笔下永远是一个“暴君”的形象,还不是因为他坑了三百个儒生。“祖龙魂死秦犹在,孔学名高实秕糠。百代都行秦政法,十批不是好文章。”这里面的味道,值得琢磨。&/p&&p&至于壮哉我魏武挥鞭的曹丞相,陈寅恪先生给他下的定义是“法家寒族之曹魏政权”。彼时正处在士族地主阶级全面夺权的阶段,我曹丞相凭借自己强大的军事实力、高超的政治觉悟、凶狠的斗争手段,一己之力打压士族三十年。曹操不是一个残酷暴戾的人,他可以宽容指着他鼻子骂的祢衡、宽容骂他祖宗三代的陈琳,但他一定要杀孔融、杀崔琰,因为前二者只是一个桀骜不驯的个人,后二者背后则是代表了恐怖庞大的士族集团。也正因为此,曹丞相世世代代都注定是一个“白脸奸臣”的形象出现。我一直在说,历史不是胜利者书写的,历史是写历史的人书写的,所以也就不奇怪雍正帝的形象会成为了严苛、冷酷、神经质式暴君形象了。&/p&&p&《大明王朝1566》最后的高潮是嘉靖和海瑞在牢房中来了一场一对一的solo,异彩纷呈。编剧们只是借这二人之口说出自己想说的话、表达自己的思想。《雍正王朝》的最后一集有异曲同工之妙,湖南一位老“读书人”派自己的学生去煽动岳钟琪造反,说当今皇上弑父杀母,是千古第一暴君balabala,然后刑部、大理寺无人敢审,最后雍正跟他也来了一段别开生面的solo,虽然说不及《大明王朝1566》中的山呼海啸般的气场,却也非常有意思:&/p&&figure&&img src=&/v2-0c7920ce20bcbe0eac4576ffe32d8909_b.jpg& data-rawwidth=&640& data-rawheight=&2443& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/v2-0c7920ce20bcbe0eac4576ffe32d8909_r.jpg&&&/figure&&p&说得好啊,说得太好了。“读书人的好处”,说白了就是阶级利益。}

我要回帖

更多关于 英雄联盟s8剑姬 的文章

更多推荐

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

点击添加站长微信