写点什么

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

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

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

关注

评论

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

常见性能瓶颈分析方法

穿过生命散发芬芳

8月月更 性能瓶颈

数据、算力强支撑,佳格天地联合华为云打造农业农村大数据解决方案

IT资讯搬运工

1. 操作系统—概述

小呆鸟

操作系统 8月月更

深入分析JVM执行引擎

架构 Java、

K-进制数(简洁 图解)

Five

算法题 8月月更

隗华:OceanBase 企业服务助力客户实现业务无忧

OceanBase 数据库

长安链源码分析启动(5)

长安链

Prometheus 实战 (1):容器安装

Grafana 爱好者

Prometheus

前端食堂技术周刊第 50 期:TypeScript 4.8、Deno 1.25、Terminal Gif Maker、CSS :has() 伪类、Deno ch

童欧巴

在线图片隐写术解密解码传递数据

入门小站

工具

每日一R「19」网络编程(一)

Samson

学习笔记 8月月更 ​Rust

Sring源码解析(一)Spring是怎么读取配置Xml文件的

石臻臻的杂货铺

spring 源码 8月月更

长安链源码分析启动(4)

长安链

2. 操作系统—中断、异常、系统调用

小呆鸟

操作系统 操作 8月月更

测试需求平台2-搭建前后端分离github托管项目

MegaQi

测试平台开发 9月月更

易周金融分析 | 银行理财市场渐趋理性;“睡眠信用卡”持续清退

易观分析

金融 银行 信用卡

真值和机器数及机器数的相互转换关系

乌龟哥哥

8月月更

【小程序项目开发-- 京东商城】uni-app之首页商品楼层

计算机魔术师

8月月更

前端高频面试题(附答案)

helloworld1024fd

JavaScript 前端

拒绝裸奔,SpringBoot集成Jasypt加密敏感信息

IT学习日记

jasypt 8月月更 Springboot配置文件加密 敏感信息加密

在线XML转YAML工具

入门小站

工具

3. 操作系统—物理内存管理

小呆鸟

操作系统 操作 8月月更

YonBuilder移动开发 AVM框架 封装车牌号输入键盘组件

YonBuilder低代码开发平台

程序员 App 移动开发 多端开发

【小程序项目开发-- 京东商城】uni-app开发之分包配置

计算机魔术师

8月月更

【小程序项目开发-- 京东商城】uni-app开发之轮播图

计算机魔术师

8月月更

【小程序项目开发-- 京东商城】uni-app之分类导航区域

计算机魔术师

8月月更

【机器学习】向量化计算 -- 机器学习路上必经路

计算机魔术师

8月月更

Spring源码分析(二)Spring怎么扩展解析xml接口的

石臻臻的杂货铺

spring 源码 8月月更

后疫情时代,传统制造业如何打破生产协同瓶颈?

IT资讯搬运工

二层交换机与路由器的区别

阿柠xn

计算机网络 交换机 路由器 8月月更

在线图片隐写术加密传递数据

入门小站

工具

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