各位朋友,你们新年好。git
2015年的第一天,我仍是想继续谈谈EasyPR。不过,今天我不想说代码,也不想聊算法,而是想一想谈谈数据的事情。尤为是关于“数据开放”这个对于车牌识别系统将来发展相当重要的主题。github
中国的车牌识别系统的现状是商业和私有化,不管你愿不肯意认可,开源远远不是主流。这一方面有历史发展的缘由,另外一个主要缘由就是车牌数据的稀缺,研究者和团体很难找到开放的数据进行学习与研究。举个例子,在google和百度里搜索“车牌数据”,不多能获得有用的内容。而仅有的一些网站,车牌数据更是被明码标价。譬如,国内的一个网站“数据堂”(http://www.datatang.com/data/29148 ),对500张车牌图片的标价是300元,折合一张图片就要6毛钱!。算法
图1 数据堂,一个数据的交易网站,里面的车牌数据很是“昂贵” apache
我对这样标价的感受是“匪夷所思”(若是按照这样的价格计算,在EasyPR里已经开放的100多张测试图片岂不是价值60元人民币?每一个下载了EasyPR的人实际上都挣得了60元钱 :) )。从这里能够看出车牌数据是多么的不易弄到,至关稀缺。相反,数据开放的价值也就更大。微信
一个车牌识别系统的核心分为机器学习算法与车牌训练数据两个部分。目前机器学习算法已经至关成熟(有不少现成的开源库可使用),可是,数据仍然是一个从0到1的问题。对于没有数据的人来讲,开发一个车牌识别系统是“无米之炊”。而对于有数据的人来讲,他们不想开发,也不肯将之分享。因而车牌识别界进入了一个怪圈:大量的人拥有数据但不利用这些数据,想利用这些数据的人找不到数据,而一些稍微可以利用这些数据的人,则赶忙开发一个系统,而后圈上一大笔钱,再而后把算法闭源,数据闭源,不断坐吃山空。从发展趋势来讲,这些是不利于中国的车牌识别系统长远发展的。网络
我在六个月前发布了EasyPR这个开源车牌识别系统,意图打破闭源体系的第一部分--代码体系,可是第二部分--数据仍然是未解决的问题。从某种程度上来讲,实现了代码开源,那就OK了,为何还要须要作数据开源?根本缘由在于,决定你系统好很差的,不是取决于算法,而是取决于数据。这个论断,已经在“从机器学习谈起”里论述过。在不少地方已经体现的很是明显(例如搜索引擎),在不少地方即将体现(例如金融与社交)。机器学习
随着我对EasyPR工做研究的进一步深刻,我愈来愈发现两个重要的问题。一个是训练的数据永远不够,没法跟上算法的须要,另外一个是不一样识别系统使用的数据不一样,没法进行比较。就第二点而言,哪怕是同一个系统,不一样人开发的算法所针对的测试数据不同,都没法进行比较。所以,若是想从根本上改变目前车牌识别系统的效果,让开源车牌识别系统能够发展的更加好,开放的数据集是必要的。这个数据集应该包括两个部分:一个是通用的测试系统效果的数据集用来横向比较不一样系统或者纵向比较新老算法的区别差别,这些数据集没必要很是多,但要有足够大表明性以及区分度;另外一个是训练用的数据集,这些数据集用来提供足够多的训练数据,这个数据集要足够的大,足够的全。学习
固然,要想收集这些数据是很困难的,尤为是一我的的状况,但众多集力就不会那么困难了。假设一个闭源的系统有100万的训练数据,那么只要咱们有1000我的,每一个人贡献1000张图片就能够超过它。可是,为了把你们的力量集合到一块儿,首先就不能基于商业目的。若是为了商业目的,那么主流的思想是竞争与垄断,而不是共享。所以必须非商业化。同时你们之间的关系应该是以学习,研究为主,这样才可以充分发挥网络协做的精神。测试
毫无疑问,我一我的来是确定不够的。但即使是一个团队,也很难收集与处理这么多的数据。所以,它应该是一个众筹项目。为了保证这样的一个过程,须要一个合理的协议来约束。优化
这也是我在EasyPR中提出GDSL(General Data Share License,通用数据共享协议)的缘由。相比开发一个项目,完成一个协议的困难更大。但这个过程至关有必要,由于这是开源车牌识别系统想在国内茁壮发展下去,基于数据分析的思想在国内可以普遍流传的基石。一个协议须要考虑多种因素,目前的协议也仅仅只是0.1版本,还有不少待完善的空间,欢迎任何有想法的朋友跟我交流。
从无到有的建立一个协议的困难是不可思议的,并且也会抛弃掉不少前人的精华。基于他人的经验才是“从机器学习谈起”中智慧的方式。若是前人已经有类似的协议,那么拿来直接用是最好的了。既然是参考开源项目,天然首先看的就是开源协议,例如apache,mit,GPL等。可是,开源协议保护的对象通常是代码,或者经过这些代码产生的“work”(能够理解为训练出的模型)。开源协议并无说起对数据的保护。那么数据界是否已经有了成熟的开放数据相关的协议内容?国外有一个开放数据的协议ODL(http://opendatacommons.org/licenses/),里面有很多借鉴的内容,但那个协议的保护对象主要是结构化数据,而非图片这种非结构化数据,再加上ODL协议对“商业”友好。所以这是我起草一个新协议的缘由,固然这个新协议应该充分借鉴原先协议的优势。
图2 ODL官网,国外的很早提倡数据开放的一个协议,其数据以格式化数据为主
在协议起草过程当中,我参考了ImageNet(一个知名的测试机器学习与图像识别的图片库,http://www.image-net.org/ )里数据使用的方式。在ImageNet里存储有1400万图片,但这些图片的版权都不属于ImageNet自己。使用者必须赞成一些非商用的条款而且经过“研究人员认证”才能下载这些图片。
ImageNet经过严格的审核保证了数据的有效使用,但也所以限制了不少业余开发者的机会。我决定让GDSL协议面向业余开发者友好。
图3 ImageNet,深度学习近年来的多项进展离不开ImageNet里的数据
综合了以上的信息,GDSL协议的一个初稿诞生了。在这个初稿中,借鉴了GPL协议的“传染性”以及ODL协议的“开放性”,同时,因为数据是网友“捐赠”过来的,所以数据的使用者拥有复制与分享的权利(可是商用目的仍然是不容许的)。对于数据的“商用”的解释为经过这些数据牟利,例如像上文提到的“数据堂”那样将数据兜售,或者将数据做为车牌识别产品的赠品(产品自己要收钱)。与之相对的是,数据的“非商业使用”则是例如经过机器学习算法经过这些数据训练出一个模型或者系统,而后销售这个模型,这个属于GDSL协议容许的范畴。从这个角度上说,本协议鼓励对于数据的研究利用,而不是对数据的转卖。固然,车牌图片有必定的隐私性,这也是前面若干数据拥有者不开放数据的一个缘由,所以GDSL协议对于数据的隐私有必定的处理要求与策略,具体能够看协议内部的说明。
最后,简单介绍一下基于GDSL协议的“通用数据测试集”(GDTS)和“开放共享数据集”。
“通用数据测试集”(GDTS)是一个包含各种车牌图片的数据集。它的目标是提供一个判断车牌识别系统的通用集合。所以,集合里的图片来源普遍,包括各类环境下,不一样角度里,以及恶劣环境下的车牌图片。经过GDTS,能够有效地对不一样的车牌识别系统与算法进行区分与评判。
“开放共享数据集”则包含海量的数据,它的主要目标是提供一个机器学习算法足够充足的训练数据。
本篇文章对于“数据开放”的探讨仅是一个抛砖引玉,将来“数据开放”的真正形态以及生态圈或模式是否就是如此,如今还没法肯定。但这是一个尝试,做者认为,将来“数据利用”会分化成两个世界,一个世界是大公司主导的数据界,例如支付宝,微信等等,它们拥有的大量数据来自于民众,私有而不开放,经过这些海量数据,这些企业会成为将来世界的掌控者。另一个就是社会圈里的开放数据,例如政府开放出来的,民众自发组成的,研究团队发布的。这些数据经过再开发,再利用,会产生数据的从新流通价值,促进生产效率的大幅优化。而车牌识别数据,则是属于第二世界中的一个小者,同时也是数据共享界的一个尝试。
将来的世界属于数据的世界。