写点什么

腾讯冯牮:基于卷积神经网络在手机端实现文档检测

  • 2017-10-10
  • 本文字数:2303 字

    阅读完需:约 8 分钟

2017 年 10 月 17 日至 19 日,有 InfoQ 举办的全球软件开发大会QCon 将在上海举办。大会吸引了来自世界各地的技术专家及开发者。本文采访了QCon 大会的参会讲师,来自腾讯的的iOS 高级开发工程师冯牮,本次大会他的演讲题目为《基于卷积神经网络在手机端实现文档检测》。

在手机端运行模型并不容易,手机端计算能力有限,在技术方案中还需要权衡考虑多种因素,比如 TensorFlow 静态库的裁剪,模型大小的控制。首先,冯牮老师为我们介绍了利用卷积神经网络在手机端实现文档检测的流程。

在用神经网络技术解决实际业务问题的时候,通常要做的事情都是准备样本数据,选择网络结构,网络参数调优,这几件事情很有可能都是需要重复很多遍的,会经历各种失败,也正是因为有这些失败,才会促使开发者去进一步的思考,去寻找能取得更好结果的最优方案。

冯牮表示,在做这套文件检测方案的时候,也是符合这种基本的套路的,只不过在完整的技术方案里面,还包含了一部分用OpenCV 实现的算法,这部分算法也是配合着神经网络部分一步一步优化出来的。有一些比较关键的技术节点,按照时间先后顺序,简单记录一下,大致如下:

A:初始版本 HED + 公开通用样本集 + findContours API

B:公开样本图片集是通用意义上的边缘检测线,效果不够好,所以采用人工合成的思路,分别收集前景图和背景图,用 OpenCV 粘贴合成,模拟旋转、平移和透视变换

C:HED 网络的输入图片的尺寸是 224 * 224, 提升到 256 * 256 有助于得到更高精度的边缘检测线,但是训练难度大增,检测效果不升反降,为了改善这一点,先使用少量样本图片训练网络,当 HED 网络开始收敛,并且每一个尺度的输出 image 都开始对最终结果产生贡献后,才使用完整的训练样本集合继续训练网络

D:findContours 过于理想化,针对 HED 的边缘检测效果,把边缘线段延长到整个图片区域,在此基础上寻找四边形的顶点

E:OpenCV 并没有图层的概念,在旋转和透视变换等需要插值的时候,会在边缘区域直接用黑色像素进行插值,为了降低这种黑色像素干扰,只能使用精读最低的插值算法,这就使得合成的样本图片的清晰度也很低,为了改善这一点,把 OpenCV 替换成了 iOS 上的 UIView,也就是利用 OpenGL 来合成训练样本,提高了图片的清晰度

F:改进了 cost 函数,得到了更细的边缘检测线,降低了整体误差

G:在训练样本集中添加了 1200 张人工标注的真实图片

H:结合测试和体验用户的反馈信息,对一些识别率低的场景进行分析,刻意合成了一批这类场景的样本图片,比如杂乱背景、A4 纸白色背景等,最终总共合成了 80000 多张训练样本图片

I:在对低识别率场景的分析过程中发现,之前 D 步骤中设计的数学模型对其中一种场景很容易误判,所以重新设计了这部分的数学模型,不再把边缘线段延长到整个图片区域,另外在对四边形进行合理性判断的时候,重新设计了一组过滤策略

这其中的 B、C、E、G、H,是对训练样本的优化,C 和 F 是对 HED 网络的优化,D 和 I 是对数学模型的优化,从这里也能看出来,训练样本的重要性是很高的。

VGG 与 HED 神经网络算法 在冯牮的训练过程中,主要使用了两种神经网络算法:VGG 与 HED。

这两个神经网络算法,冯牮觉得是很难可以『简单』介绍清楚的:“我并不是说 VGG 和 HED 网络很难,其实正好相反,这两个网络结构,在卷积神经网络大家族里面其实反而是两个最简单最基础的网络结构了。”

冯牮解释说:比如 VGG,作为一个分类网络,和 ResNet、Inception model 这些新的分类网络相比,它的结构就是很简单的,因为它的层和层之间的关系很简洁,前一层的输出就是后一层的输入,HED 网络就是以 VGG 为基础,把其中一些卷积层的输出单独取了出来,再通过某些策略融合到一起,就得到了最终的输出。想学习 VGG 和 HED 的话,最好的资料还是第一手的论文和认可度比较高的参考代码。

然而一开始的时候,冯牮是想要仿照 face alignment 的思路,用一个端到端的神经网络结构直接拟合得到 4 个点的坐标,训练网络的时候虽然可以收敛,但是得到的结果是不可用的,网络计算出来的 4 个点的坐标是趋向于四个固定位置的。后来他也尝试用 YOLO 网络做过对象检测,用 FCN 网络做过图像切割,但是结果都很不理想,要么就是检测精度太低,要么就是计算量太大做不到实时检测。最终冯牮选用了 HED 网络,其实也就是前面提到的这几个原因,既要保证一定的精度也要保证实时计算的运行速度。

如何选择深度学习框架 在选择深度学习框架这一点上,冯牮有自己的一些想法,他认为:对于初学者来说,在挑选框架的时候,不需要纠结太多问题,选一个工业界主流的框架就可以了,TensorFlow、MXNet、Caffe2 这些都是可以的,这些主流的框架,配套的开发文档、demo 程序等等都是比较齐全的。而且,重点要学习的还是神经网络的各种算法,框架只是实现这些算法的一种手段。

“当然,TensorFlow 官方就支持手机端,这是我选择 TensorFlow 的原因之一。”冯牮补充说。

苹果于今年推出了自家的移动端深度学习框架 CoreML,冯牮表示,虽然没有尝试使用过 CoreML,但是就他看来,这是一种技术趋势,框架只是工具,只是一种实现手段,工具之间可能会多少有一些差异,但是神经网络结构与工具无关,同一个算法,用不同的框架也是都可以实现出来的。

CoreML 和 TensorFlow 相比,最明显的优势就是它是 iOS 平台原生支持的,有硬件加速,运算速度快,系统整合度高。但是 CoreML 只是做前向运算的工具,冯牮表示,在用反向传播算法训练网络的时候,还是要用 TensorFlow 或其他框架的。

除了 TensorFlow 之外,冯牮还给希望尝试移动端深度学习训练的开发者们推荐了一些其他框架,MXNet 和 Caffe2 都是官方支持 mobile 端的,有兴趣的同学也可以从这两个框架入门学习。

2017-10-10 19:002237
用户头像
陈思 InfoQ编辑

发布了 576 篇内容, 共 280.1 次阅读, 收获喜欢 1301 次。

关注

评论

发布
暂无评论
发现更多内容

如何在VMMask指纹浏览器中设置代理

Geek_bf375d

爬虫 IP 代理IP 跨境电商 #HTTP

Logii 指纹浏览器中如何设置代理

Geek_bf375d

爬虫 IP 代理IP 代理IP设置 #HTTP

FFA 2023 「生产实践」专场:Flink 大规模技术优化与生产实践

Apache Flink

大数据 flink 实时计算

华为亮相OpenInfra Days China 2023,分享开源基础设施的实践和技术展望

彭飞

“粤”见昇腾AI,昇腾AI开发者创享日·广州站即将开启

彭飞

想转行学计算机,但现在听说互联网裁员太严重?

代码生成器研究

IT外包服务广泛应用于哪些行业?

Ogcloud

外包 IT 外包公司 外包项目 IT 运维

AI大模型,如何破圈而出?

脑极体

直播预约|FFA 2023 主会场,12 月 8 日正式上线!

Apache Flink

flink

智能联动第三方告警中心,完美实现故障响应全闭环

观测云

人工智能 监控 智能告警

数据挖掘与低代码开发应用:加速业务创新的黄金组合

快乐非自愿限量之名

数据挖掘 低代码 数据应用

FFA 2023 专场解读:AI 特征工程、数据集成

Apache Flink

大数据 flink 实时计算

热点浅谈:低代码开发平台是什么?低代码具备什么特点?

代码生成器研究

非典型“技术写作者”

escray

技术人写作 21 天技术人写作行动营 21 天

释放潜能:IT外包服务对业务增长的强大推动

Ogcloud

外包 IT 外包公司 外包项目 IT 运维

现在好用的零代码开发平台或者低代码开发平台有哪些?

代码生成器研究

《21 天技术人写作行动营》--怎么做个人定位?

IT蜗壳-Tango

终于,AWS Aurora 也走向了融合架构,这一次阿里云 PolarDB-X 确实遥遥领先

小猿姐

数据库 阿里云 AWS

香橙派联合华为发布全新Orange Pi AIpro 开发板,起售价799元

彭飞

除了Trello软件,这4款项目管理看板也值得推荐!

彭宏豪95

项目管理 科技 在线白板 效率软件 看板工具

程序员世界破破烂烂,低代码总在缝缝补补

伤感汤姆布利柏

Java Vue 前端 低代码

为什么要做ERP集成?ERP系统如何与其他业务应用程序集成

RestCloud

ETL ERP

FFA 2023 专场解读:流批一体&平台建设&云原生

Apache Flink

大数据 flink 实时计算

从HumanEval到CoderEval: 你的代码生成模型真的work吗?

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 代码生成大模型

低代码如何降低门槛、快速交付、实现可持续IT架构?

树上有只程序猿

软件开发 低代码平台 JNPF

如何转行互联网?

代码生成器研究

JNPF低代码开发平台高效赋能开发者

互联网工科生

开发者工具 低代码开发 JNPF

AI 辅助编程后,主流开发方式都有哪些变化?

代码生成器研究

当代程序员的一天怎么过?

代码生成器研究

腾讯冯牮:基于卷积神经网络在手机端实现文档检测_Android/iOS_陈思_InfoQ精选文章