做者介绍:李雨珂博士,网易易盾资深算法专家,毕业于浙江大学信息与电子工程学系,研究方向包括数据挖掘、机器学习以及计算机视觉,目前在网易易盾主导内容安全领域多媒体信息相关人工智能算法研发。
深度学习图像算法近年来在学术领域经历了爆发式的发展,目前已经在工业界多个实际场景取得了较完整的应用落地,例如安防、营销、娱乐、金融等场景。其中内容安全也是很是典型的落地案例,深度学习图像算法在鉴黄鉴暴、广告识别、违禁拦截、敏感人物过滤等方向都取得了不错的应用效果。html
算法自动识别一方面能够全面减轻人工审核投入,另外一方面能够更有效率、更快速地对信息进行判断。本篇分享将会介绍如何快速搭建深度学习图像算法服务以及易盾在图像算法优化方面的经验。python
1、内容安全难点ios
内容安全领域是一个相对特殊的场景,咱们面对的问题每每目标定义不明确,数据种类繁杂多变、图像质量差距大,还会常常面临对抗攻击,这一场景对算法能力的要求较高。git
相比较而言,在2C营销场景中,例如手机扫描商品/图标,对用户来讲召回能力相对重要一些,误判在使用过程当中不容易被发现;在门禁考勤场景中,因为摄像头采集到的图像质量较高,算法须要解决的是限定图片质量范围内的效果问题。github
而在内容安全领域,因为线上数据正常比例较高,且图像类型众多,误判问题很是容易集中体现;另外一方面,因为UGC图像质量良莠不齐,图像敏感特征每每不够明显,小目标、模糊、形变等问题较常出现。算法
伴随易盾内容安全业务的发展,咱们深刻探索了深度学习图像算法在这个领域内的应用,在实际场景中取得了预期效果。api
2、小试牛刀:教你快速搭建深度学习图像算法服务安全
深度学习算法已经成为图像算法中的重要组成部分,深度学习相关公开资源已经很是丰富,针对图像任务建立一个简单模型是十分容易上手的,这里将会展现如何快速搭建一个深度学习图像分类服务。网络
咱们以场景识别为例子,即根据图像全局信息判断拍摄场景,例如泳池、车内、公寓等。咱们能够选取公开数据集places365用于模型训练、数听说明和下载连接参见[1],经过tensorflow-slim接口进行图像分类模型训练[2],最终使用常见服务框架将算法服务进行透出。架构
其中数据方面仅以公开数据为例,实际应用中须要以业务数据为主。模型训练采用的框架能够选择TensorflowKeras、MxnetGluon、Pytorch、Chainer等。随着深度学习框架的逐步发展,训练便捷性愈来愈高,相比较而言Tensorflow-slim也不算特别友好,但其代码组织思路和拓展性仍是很值得借鉴的。这里咱们将以Tensorflow-slim为例分几个步骤完成这项工做。
2.1 数据处理
原始PLACES365数据集的标签类别较多,为了快速验证代码咱们仅挑选了其中小部分类别,用做示例。数据按以下进行组织,一个文件夹存储一类数据,文件夹为标签名。
参考源码中flowers数据集处理脚本download_and_convert_flowers.py,建立图像数据到tfrecord文件转换的脚本,原始项目中彷佛没有一个通用的数据文件转换工具,建议能够本身简单写一个,将可变参数作成脚本入参,转换数据便可用命令方式执行,便于后续处理其余数据集。
脚本处理结束后,目标图像数据将转换成tfrecord文件,同时标签描述文件label.txt会自动生成。参考源码中flowers数据集描述脚本flowers.py,构建一个对应于场景数据的描述脚本,这里会对数据集的一些基本信息进行定义,以下所示:
经过上面一系列操做,数据准备层面的工做基本完成。
2.2 模型训练和测试
完成数据处理后,咱们将挑选一个模型进行训练,咱们以inception-v3为例,实际工做中模型挑选主要考虑的是性能和效果的平衡,须要经过必定量的实验来评估。
首先咱们根据开源项目中提供的连接将IMAGENET预训练模型下载到本地。tensorflow-slim项目已经对训练功能进行了很是棒的上层包装,咱们在实际使用过程当中直接调用train_image_classifier.py脚本便可。咱们首先以较大的学习率训练最后一层全链接参数,其余参数保持不动,而后以较小的学习率对全部参数进行调整。
训练脚本train_image_classifier.py对数据读取、预处理选择、模型选择、参数配置等都有较好的支持,建议详细阅读其中的代码和组织形式。完成训练后,咱们经过测试脚本eval_image_classifier.py完成效果评估,若是在测试集上取得比较好的效果,咱们就能够进入下一步。
2.3 服务透出
完成训练和评估后,咱们能够简单写一个转换脚本将原始模型文件处理成pb文件,这会带来一系列好处,不但能够只保留inference所需的网络结构,砍掉一些训练辅助结构,将网络参数值进行freeze,减少模型文件大小,并且因为pb文件和框架关联性不大,能够脱离tensorflow进行使用和部署。tensorflow-slim已经提供了pb文件转换支持,但我的建议能够参考其余方式进行编写[3],使用上更加直观和简便。
接下来是算法模型服务化的工做,这一部分能够选择的方案也比较多,可使用基于tensorflow的tf-serving进行完整的服务管理,也能够只经过Flask、Tornado等通用框架建立HTTP服务,还能够选择跨语言RPC框架构建服务。其中Flask方案能够参考[3]。咱们须要写一个服务脚原本启动服务,同时须要建立客户调用脚本对服务进行调用测试。若是有服务并发评估需求,建议能够经过Locust,使用上很是便捷[4]。
以上工做完成后,咱们就基本上完成深度学习图像服务的简单构建,若是有移动端方面的部署需求能够参考tensorflow官方iOS的例子[5]。以上内容以场景识别为例子进行简单说明,实际上模型使用框架、服务使用框架选择的空间都是比较大的,我的比较建议算法模型部分能够按需求灵活挑选,服务部署部分须要有统一的规范进行约束。
3、重装上阵:易盾实际优化经验分享
以上工做很是容易实现,也仅仅是算法工做的小开端,离算法应用到实际场景还有很是遥远的距离。
哪怕经历了业务数据扩充、负样本收集、参数调优、模型结构改造等大量工做以后,算法应用到线上数据后的实际效果仍会很是糟糕,不但会出现大量解释性较差的误判,并且存在困难样例不能召回的困境。
在实际工做中,网易易盾每每会从如下几个角度着手来提高算法真实效果:
尝试新算法、学习新知识每每是很是愉快的,但上述这部分的工做倒是枯燥和痛苦的。真正对线上优化起到最直接帮助的每每不是模型调参,而是枯燥乏味的事前数据工做,以及竭尽全力的过后测试工做。
基于明肯定义、重视大规模测试、造成数据闭环的算法优化思路,易盾图像算法在业务算法上取得了必定的突破,核心算法模块效果在过去的几年中持续稳步提高,基础能力愈来愈厚重,定向优化也取得进展,不断提高识别精准度,并逐渐扩大识别范围。
4、将来展望
易盾内容安全图像算法服务通过多年发展,已经造成了一系列服务,形式多、范围广,维护成本也会逐渐增长。咱们在这些项目经验的基础上凝练出最佳实践方案(平台方向),为快速搭建服务知足客户新需求提供了条件。固然,因为内容安全场景效果要求相对苛刻,解决特定业务问题每每须要经过特殊路径(定制方向),进行长期投入,平台化和定制化之间须要作到必定平衡。
另外一方面,随着业务量不断增长,易盾团队在性能和效果平衡方面也作了很是多的尝试,经过网络剪枝量化、图像预处理优化、模型级联等方法不断减少服务响应时间,算法吞吐能力也会是咱们长期追求的重点目标。
以上分享是网易易盾算法团队在深度图像领域落地探索方面的一些初浅分享,实际上网易易盾在背后作了不少的工做,好比网易易盾人工智能实验室方正研究员在2018年研发出了一种对多视角多模态特征信息进行有效融合的自编码器神经网络,在准确率、NMI、Purity、ARI等各项性能指标上,较当下多项国际先进的多视角多模态信息融合技术有显著性的领先。再好比今年,网易易盾人工智能工程师姚益武在全球计算机多媒体顶级会议ICME 2019展现int8量化新算法,有助于构建端到端的纯整数运算通路,且统一表示层的设计简化了网络结构的拓扑设计,应用于易盾内容安全图像识别上,则在确保业务模型推理精度的前提下,其服务的响应时间能获得显著下降。
展望将来,网易易盾算法团队还将不断研究、创造和创新,持续提高易盾在内容安全服务上的效果,帮助合做伙伴和客户解决其遇到的内容安全问题。
文中资源汇总:
[1].PLACES365数据集说明和下载:http://places2.csail.mit.edu/...
[2].tensorflow-slim官方地址:https://github.com/tensorflow...
[3].模型转换和Flask服务编写:https://blog.metaflow.fr/tens...
[4].压力测试:https://locust.io/
[5].IOS端部署:https://github.com/tensorflow...