首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(Keras/监督学习)15分钟搞定最新深度学习车牌OCR

(Keras/监督学习)15分钟搞定最新深度学习车牌OCR

作者头像
机器学习算法工程师
发布2018-03-30 16:33:57
3.3K0
发布2018-03-30 16:33:57
举报

作者:石文华

编辑:祝鑫泉

前 言

文章来源:https://hackernoon.com/latest-deep-learning-ocr-with-keras-and-supervisely-in-15-minutes-34aecd630ed8

大家好,本教程在15分钟之内为大家介绍如果使用深度学习来构建现代文本识别系统,你将学会如何使用keras和监督学习解决这个问题,本指南适合对深度学习进行图像文本识别技术感兴趣的人们。 思考现实世界中一个简单的例子:车牌识别,这是一个很好的起点,你可以轻松的使用它来定制你的任务,关于车牌识别简单的教程,你可以在这里找到它:https://towardsdatascience.com/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c

当我们进入这个领域时,面临着网上资源缺乏的问题,通过长期的研究和阅读很多论文,对构建有效的识别系统的原理我们有了自己的理解,我们在社区中用了2个小时的视频讲座分享了我们的想法,并用简单的语言解释了它是如何工作的,我们觉得这个内容是非常有价值的,因为你很难找到关于如何构建现代识别系统方面好的资源和浅析,我们强烈建议你在开始这篇文章之前观看它,因为它会给你很多直观的认识。 要顺利完成本教程,你需要Ubuntu, GPU 和 Docker. 所有的资源都可以在github(https://github.com/DeepSystems/supervisely-tutorials)上找到。源代码位于一个单独的jupyther笔记本上(https://github.com/DeepSystems/supervisely-tutorials/blob/master/anpr_ocr/src/image_ocr.ipynb),并带有解释和必要的可视化。

1

在哪里获得训练数据

对于本教程,我们人工生成了超过10k的图像数据集,它们跟真实的车牌非常相似,这些图片如下:

你可以很容易的从Supervisely(https://supervise.ly/)获取数据集,我们也在DeepSyetems(https://deepsystems.ai/)上做了很多像自动驾驶汽车,收据识别系统,道路缺陷检测等计算机视觉开发的案例。作为数据科学家,我们花费了很多时间处理训练数据集:创建自定义图像注释,将数据与公共数据集合并在一起,进行数据增强等,Supervisely这个网站简化了你使用训练数据,并自动执行许多日常任务。我们相信你会发现它真的很有用。 第一步是在Supervisely中注册。下一步是进入“导入” - >“数据集库”选项卡并单击“anpr_ocr”项目。

接着键入名称“anpr_ocr”并单击“下一步”按钮。

然后点击“上传”按钮,项目“anpr_ocr”就被添加到您的帐户。

它由两个数据集组成:“训练集”和“测试集”。

如果你想预览图像,只需点击数据集,你会立即进入注释工具。对每张图片,我们都会有一段文字说明,将用作地面实况来训练我们的系统。要查看它,只需点击所选图像对应的小图标(红色框所示)。

现在我们必须以特定格式下载它。要做到这一点,只需点击“导出”页面,并将此配置插入文本区域。如下图所示:

在上面的截图中,你可以看到说明导出步骤的方案,我们不会深入研究技术细节(如果需要,你可以阅读官方文档https://docs.supervise.ly/)但是你要认真理解下面的过程:在“anpr_ocr”项目中,有两个数据集,“测试”数据集按照原样导出,“Train”数据集被分为两组,“训练集”和“验证集”,“Train”中95%的作为训练集,5%作为验证集。 现在你可以点击“开始导出”按钮,等待两分钟,系统准备存档下载。点击下图红色框的按钮获取训练数据(以红色标记)。

2

开始我们的实验

我们在git仓库中准备了所有需要用到的东西。用下面的命令克隆它。 git clone https://github.com/DeepSystems/supervisely-tutorials.git cd supervisely-tutorials/anpr_ocr 目录结构如下: . ├── data ├── docker │ ├── build.sh │ ├── Dockerfile │ └── run.sh └── src ├── architecture.png ├── export_config.json └── image_ocr.ipynb 将下载的压缩文件放入“data”这个目录并运行下面的命令。 unzip .zip -d . 我的例子中使用: unzip test1–1703.zip -d . 现在让我们构建并运行准备好的工作环境(tensorflow和keras)。只需转到“docker”目录并运行以下命令: ./build.sh ./run.sh 之后,你将在容器内。运行下一个命令启动Jupyther笔记本 jupyter notebook 在终端,你将看到:

你必须复制选定的链接并将其粘贴到Web浏览器中。请注意,你的链接与我的略有不同。

最后一步是运行整个“image_ocr.ipynb”笔记本。点击“单元格” - >“全部运行”。

image_ocr.ipyn笔记本由几个主要部分组成:数据加载和可视化,模型训练,模型评估以及测试。此数据集训练过程大约需要30分钟。

如果运行正常,你会看到下面的输出:

正如你所看到的,预测的字符串将与地面实况相同。因此,我们在一个非常清晰的jupyther笔记本(https://github.com/DeepSystems/supervisely-tutorials/blob/master/anpr_ocr/src/image_ocr.ipynb)中构建了现代OCR系统。接下来,我们将介绍并解释它的工作原理。

3

它是怎样工作的

对我们来说,理解神经网络架构是关键。

首先,将图像输入到CNN以提取图像特征。 接着将这些特征输入到循环神经网络中,然后经过特殊的解码算法。 这种解码算法从每个时间步获得lstm输出并产生最终标签。 详细的架构如下。 FC - 完全连接层,SM - softmax层。

图片的维度是高度为64,长度为128,通道数为3 上图可以看出我们的原始图片经过CNN特征提取之后,维度变成了4*8*4,在实际应用中,我们的输出特征图可能有很多,也就是图片长宽在缩小,但是我们的特征图的深度在增加。 接着进行维度转换操作。得到16*8的向量序列,上图所示,有8个列向量,每个列有16个元素。 我们将这8个列向量输入LSTM网络并获得输出。 然后,我们使用全连接层+softmax层,并获得6个元素的向量。 该向量里面元素的含义是每个LSTM步骤预测的字母符号的概率。 在实际问题中,CNN输出向量的数量可以达到32,64甚至更多。所以最好使用多层双向LSTM。 如何解析得到的预测结果呢?如下图所示,我们输出了8个概率值,我们将连续的重复字符去掉,以及删除空格等特殊的字符,最后合并成一个字符串输出,也就是我们的预测结果。

我们在训练网络的时候,使用了CTC损失层代替了解码算法,我们在第二个幻灯片上提到过,虽然现在只有俄语版本,但是我们有英文幻灯片,并且很快发布英文版。 在实际中我们使用了更加复杂的NN价架构,如下图所示,但是原理的基本思想是相同的。

训练好模型之后,模型在测试集上也得到了很高的准确率, 我们将每个RNN步骤的概率分布可视化为一个矩阵。如下图所示:

上图的纵坐标是预测的符号和空白,横坐标表示时序。也就是输出结果的顺序。

总结

我们很高兴在社区分享我们的经验。我们希望视频讲座和本教程,以及我们的数据和源代码将带你入门图像文字识别,并且希望每个人都可以从头开始构建现代OCR系统。

end

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习算法全栈工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章来源:https://hackernoon.com/latest-deep-learning-ocr-with-keras-and-supervisely-in-15-minutes-34aecd630ed8
相关产品与服务
AI 应用产品
文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档