各位朋友,大家新年好。
2015年的第一天,我还是想继续谈谈EasyPR。不过,今天我不想说代码,也不想聊算法,而是想想谈谈数据的事情。尤其是关于“数据开放”这个对于车牌识别系统未来发展至关重要的主题。
中国的车牌识别系统的现状是商业和私有化,无论你愿不愿意承认,开源远远不是主流。这一方面有历史发展的原因,另一个主要原因就是车牌数据的稀缺,研究者和团体很难找到开放的数据进行学习与研究。举个例子,在google和百度里搜索“车牌数据”,很少能得到有用的内容。而仅有的一些网站,车牌数据更是被明码标价。譬如,国内的一个网站“数据堂”(http://www.datatang.com/data/29148 ),对500张车牌图片的标价是300元,折合一张图片就要6毛钱!。
图1 数据堂,一个数据的交易网站,里面的车牌数据非常“昂贵”
我对这样标价的感觉是“匪夷所思”(如果按照这样的价格计算,在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,可以有效地对不同的车牌识别系统与算法进行区分与评判。
“开放共享数据集”则包含海量的数据,它的主要目标是提供一个机器学习算法足够充足的训练数据。
本篇文章对于“数据开放”的探讨仅是一个抛砖引玉,未来“数据开放”的真正形态以及生态圈或模式是否就是如此,现在还无法确定。但这是一个尝试,作者认为,未来“数据利用”会分化成两个世界,一个世界是大公司主导的数据界,例如支付宝,微信等等,它们拥有的大量数据来自于民众,私有而不开放,通过这些海量数据,这些企业会成为未来世界的掌控者。另外一个就是社会圈里的开放数据,例如政府开放出来的,民众自发组成的,研究团队发布的。这些数据通过再开发,再利用,会产生数据的重新流通价值,促进生产效率的大幅优化。而车牌识别数据,则是属于第二世界中的一个小者,同时也是数据共享界的一个尝试。
未来的世界属于数据的世界。