【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

  • 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:002088
用户头像
陈思 InfoQ编辑

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

关注

评论

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

架构师训练营第二周学习总结

fenix

<<架构师训练营>> 第二周作业

R20114

架构师训练营第二周【作业】

atlasman

架构师第二课总结

Dennis

Python 核心技术与实践 string

Bonaparte

Python string

架构学习第二周总结

乐天

架构师训练营 -week2- 学习总结

暖丶冬

架构师第二周作业

跨域刀

极客大学架构师训练营

架构师训练营第二章作业

吴吴

设计原则之依赖倒置与接口隔离

L001

架构是训练营

ARTS 02 - 解决 Jenkins 中使用代理来执行 npm install 的问题

jerry.mei

算法 大前端 练习 ARTS 打卡计划 ARTS活动

学习总结 - 架构师训练营 - 第二周

走过路过飞过

架构师训练营 - 第二周作业

teslə

第二周总结

跨域刀

极客大学架构师训练营

架构师训练营第二周作业

草原上的奔跑

架构师训练营-第二周作业

清风徐徐

单例模式 极客大学架构师训练营 组合模式

第二周作业

Geek_2b3614

依赖倒置

wei

第二周作业

nihuihua

依赖倒置原则&接口隔离原则优化Cache类

高程

架构师 作业 week2

架构师训练营第二周学习总结

王权富贵

极客大学架构师训练营

设计模式中的依赖倒置原则和接口隔离原则

dongge

2020-06-13-第二周作业

路易斯李李李

架构师训练营 第二周【作业】

小K

Week2作业

王志祥

极客大学架构师训练营

架构师Week2作业

熊威

第二次作业

蒜泥精英

第二周 - 学习总结

molly

极客大学架构师训练营

学习心得

蒜泥精英

架构师训练营Lesson2-Homework

强哥

极客大学架构师训练营 依赖倒置

架构师训练营 - 第二周学习总结

清风徐徐

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