在 iOS 上实现 TensorFlow Attention OCR
Posted
技术标签:
【中文标题】在 iOS 上实现 TensorFlow Attention OCR【英文标题】:Implementing TensorFlow Attention OCR on iOS 【发布时间】:2017-12-12 21:25:38 【问题描述】:我已成功训练(使用 Inception V3 权重作为初始化)此处描述的 Attention OCR 模型:https://github.com/tensorflow/models/tree/master/attention_ocr 并将生成的检查点文件冻结为图表。这个网络如何在 ios 上使用 C++ API 实现?
提前谢谢你。
【问题讨论】:
machinethink.net/blog/tensorflow-on-ios 中的说明是一个好的起点吗? 【参考方案1】:根据其他人的建议,您可以使用一些现有的 iOS 演示(1、2)作为起点,但请密切注意以下细节:
-
确保使用正确的工具来“冻结”模型。 SavedModel 是 Tensorflow 模型的通用序列化格式。
模型导出脚本通常可以进行某种输入规范化。请注意,Model.create_base 函数需要一个形状为 [batch_size, height, width, channels] 的 tf.float32 张量,其值归一化为[-1.25, 1.25]。如果您将图像归一化作为 TensorFlow 计算图的一部分,请确保图像未归一化,反之亦然。
要获取输入/输出张量的名称,您可以简单地打印它们,例如在您的导出脚本中的某处:
data_images = tf.placeholder(dtype=tf.float32, shape=[batch_size, height, width, channels], name='normalized_input_images')
endpoints = model.create_base(data_images, labels_one_hot=None)
print(data_images, endpoints.predicted_chars, endpoints.predicted_scores)
【讨论】:
感谢您的回复,亚历山大。然而,我对如何将输入图像输入网络有点困惑。我看到“拆分”节点接受大小为 32x150x600x3 的张量,然后将其拆分为四个张量并输入 Inception 特征提取器。假设我有一个输入图像,我应该使用哪个节点作为输入?此外,如何使用单个输入图像获得 32 的批量大小? 如果您只有一个视图,请指定 num_views=1 作为模型构造函数的参数。因此,您仍然可以使用答案中的代码 sn-p 并将图像输入 data_images 张量(打印语句将显示名称)。但请注意,您需要使用与培训相同数量的视图。如果您使用了 4 个视图并且需要使用单个视图进行测试,则需要使用随机噪声填充单个 1500x150 视图,类似于对训练数据所做的。以上是关于在 iOS 上实现 TensorFlow Attention OCR的主要内容,如果未能解决你的问题,请参考以下文章
教程 | 用摄像头和Tensorflow.js在浏览器上实现目标检测
资源 | 在TensorFlow 1.0上实现快速图像生成算法Fast PixelCNN++