基于视觉注意的张量流光学字符识别模型。
aocr的Python项目详细描述
#基于注意的ocr
用于图像识别的基于视觉注意的ocr模型,以及用于创建tfrecords数据集和将训练后的模型导出为[保存的模型](https://www.tensorflow.org/api-docs/python/tf/saved-model)或冻结图的附加工具。
##致谢
本项目基于[qi guo]和[yuntian deng]的模型(https://github.com/da03)。您可以在[DA03/Attention OCR]存储库(https://github.com/da03/attention-ocr)中找到原始模型。
\高度32,同时保持纵横比)。然后一个LSTM被堆在CNN的上面。最后,注意模型被用作产生最终输出的解码器。
![ocr示例](http://cs.cmu.edu/~yuntiand/ocr-2.jpg)
附加的依赖项是"pil `/'should`"、"distance"和"six"。
您需要一组图像和一个带有各自标签的注释文件。
```
aocr数据集./datasets/annotations-training.txt./datasets/training.tfrecords
aocr数据集./datasets/annotations-testing.txt./datasets/testing.tfrecords
```
包含图像路径(绝对或相对于工作目录)及其相应标签的简单文本文件:
```
datasets/images/hello.jpg hello
datasets/images/world.jpg world
````
./datasets/training.tfrecords
```
注意,要达到一致需要相当长的时间,因为我们同时训练CNN和注意力模型。
`--steps per checkpoint`参数确定保存模型检查点的频率(默认输出目录是'checkpoints/`)。
**重要:**有很多可用的训练选项。请参阅cli帮助或本自述文件的"参数"部分。
\您可以可视化测试期间的注意力结果(默认保存为"out/"):
````
aocr测试--可视化./datasets/testing.tfrecords
````
示例输出"results/correct"中的图像:
image 0(j/j):
![示例图像0](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_0.jpg)
image 1(u/u):
![示例图像1](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_1.jpg)
图像2(n/n):
![示例图像2](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_2.jpg)
图像3(g/g):
![示例图像3](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_3.jpg)
图像4(l/l):
![示例图像4](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_4.jpg)
图像5(e/e):
![示例图像5](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_word_370.png/image_5.jpg)
它可以导出为冻结图或保存模型。
``bash
aocr导出。/导出模型
将模型放入`./exported model`目录中。
使用[tensorflow service]的tp rest api(https://github.com/tensorflow/service)。可以通过运行以下命令启动服务器:
```
tensorflow_model_server--port=9000--rest_api_port=9001--model_name=yourmodelname--model_base_path=。/导出的model
````
**注意**:tensorflow_model_server需要一个子目录,其版本号为显示上一步中导出的文件并将其放在其中。因此,您需要手动将"导出模型"的内容移动到"导出模型/1"。
例如:
```
curl-x post\
http://localhost:9001/v1/models/aocr:predict\
-h'缓存控制:无缓存'\
-h'内容类型:application/json'\
-d'{
"签名名称":"服务于默认值",
"输入":{
"输入":{"b64":"<;编码为base64>;"}
}
}
}
```
将训练数据集放入google云存储桶中,并使用"gcloud"工具开始一项训练工作。
1。设置环境变量:
```
gs_bucket="gs://aocr bucket"
上传训练数据集:
```
gsutil cp./datasets/training.tfrecords$gs_bucket/$dataset_upload_path
```
>3。启动ml引擎作业:
```
立即导出=$(日期+%y%m%d%h%m%s)
导出作业=$job前缀$now"
导出作业目录=$gs_bucket/$job名称"
gcloud ml引擎作业提交培训$job名称\
--作业目录=$job_目录\
--模块名称=aocr \
--包路径=aocr \
--region=$region \
--scale tier=basic\u gpu \
--运行时版本=1.2 \
--br/>train$gs\u bucket/$dataset\u upload\u path \
--每个检查点的步数=500 \
--批处理大小=512 \
--num epoch=20
`````
##参数
*`日志路径`:日志文件的路径。
*`格式`:导出的格式格式(savedmodel或frofrozenggraph`).
` ``可视化` `:输出原始图像上的注意地图。
###training
*`steps per checkpoint`:checkpoint(打印困惑,保存模型)每多少步
*`num epoch`:整个数据通过的次数。
*`batch size`:batch size。
*`initial learning rate`:initial learning rate,注意我们使用的是adadelta,所以初始值无关紧要。
*`target embedding size`:每个目标的嵌入维度。
*`attn num hidden`:注意解码器单元中的隐藏单元数。
*`attn num layers`:注意解码器单元中的层数。(隐藏单元的编码器编号将为"attn num hidden"*"attn num layers")。
*"no resume":即使存在检查点,也创建新权重。
*"max gradient norm":将渐变剪裁到此norm。
*"no gradient clipping":不执行渐变剪裁。
*"gpu id":gpu to使用。
*`use gru`:使用gru单元格而不是lstm。
*`max width`:输入图像的最大宽度。警告:宽度大于最大值的图像将被丢弃。
*`max height`:输入图像的最大高度。
*`max prediction`:最大长度预测单词/短语的第个。
ocr)(https://github.com/da03/torch attention ocr)
用于图像识别的基于视觉注意的ocr模型,以及用于创建tfrecords数据集和将训练后的模型导出为[保存的模型](https://www.tensorflow.org/api-docs/python/tf/saved-model)或冻结图的附加工具。
##致谢
本项目基于[qi guo]和[yuntian deng]的模型(https://github.com/da03)。您可以在[DA03/Attention OCR]存储库(https://github.com/da03/attention-ocr)中找到原始模型。
\高度32,同时保持纵横比)。然后一个LSTM被堆在CNN的上面。最后,注意模型被用作产生最终输出的解码器。
![ocr示例](http://cs.cmu.edu/~yuntiand/ocr-2.jpg)
附加的依赖项是"pil `/'should`"、"distance"和"six"。
您需要一组图像和一个带有各自标签的注释文件。
```
aocr数据集./datasets/annotations-training.txt./datasets/training.tfrecords
aocr数据集./datasets/annotations-testing.txt./datasets/testing.tfrecords
```
包含图像路径(绝对或相对于工作目录)及其相应标签的简单文本文件:
```
datasets/images/hello.jpg hello
datasets/images/world.jpg world
````
./datasets/training.tfrecords
```
注意,要达到一致需要相当长的时间,因为我们同时训练CNN和注意力模型。
`--steps per checkpoint`参数确定保存模型检查点的频率(默认输出目录是'checkpoints/`)。
**重要:**有很多可用的训练选项。请参阅cli帮助或本自述文件的"参数"部分。
\您可以可视化测试期间的注意力结果(默认保存为"out/"):
````
aocr测试--可视化./datasets/testing.tfrecords
````
示例输出"results/correct"中的图像:
image 0(j/j):
![示例图像0](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_0.jpg)
image 1(u/u):
![示例图像1](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_1.jpg)
图像2(n/n):
![示例图像2](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_2.jpg)
图像3(g/g):
![示例图像3](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_3.jpg)
图像4(l/l):
![示例图像4](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_370.png/image_4.jpg)
图像5(e/e):
![示例图像5](http://cs.cmu.edu/~yuntiand/2evaluation_data_icdar13_images_word_370.png/image_5.jpg)
它可以导出为冻结图或保存模型。
``bash
将模型放入`./exported model`目录中。
使用[tensorflow service]的tp rest api(https://github.com/tensorflow/service)。可以通过运行以下命令启动服务器:
```
tensorflow_model_server--port=9000--rest_api_port=9001--model_name=yourmodelname--model_base_path=。/导出的model
````
**注意**:tensorflow_model_server需要一个子目录,其版本号为显示上一步中导出的文件并将其放在其中。因此,您需要手动将"导出模型"的内容移动到"导出模型/1"。
例如:
```
curl-x post\
http://localhost:9001/v1/models/aocr:predict\
-h'缓存控制:无缓存'\
-h'内容类型:application/json'\
-d'{
"签名名称":"服务于默认值",
"输入":{
"输入":{"b64":"<;编码为base64>;"}
}
}
}
```
将训练数据集放入google云存储桶中,并使用"gcloud"工具开始一项训练工作。
1。设置环境变量:
```
gs_bucket="gs://aocr bucket"
上传训练数据集:
```
gsutil cp./datasets/training.tfrecords$gs_bucket/$dataset_upload_path
```
>3。启动ml引擎作业:
```
立即导出=$(日期+%y%m%d%h%m%s)
导出作业=$job前缀$now"
导出作业目录=$gs_bucket/$job名称"
gcloud ml引擎作业提交培训$job名称\
--作业目录=$job_目录\
--模块名称=aocr \
--包路径=aocr \
--region=$region \
--scale tier=basic\u gpu \
--运行时版本=1.2 \
--br/>train$gs\u bucket/$dataset\u upload\u path \
--每个检查点的步数=500 \
--批处理大小=512 \
--num epoch=20
`````
##参数
*`日志路径`:日志文件的路径。
*`格式`:导出的格式格式(savedmodel或frofrozenggraph`).
` ``可视化` `:输出原始图像上的注意地图。
###training
*`steps per checkpoint`:checkpoint(打印困惑,保存模型)每多少步
*`num epoch`:整个数据通过的次数。
*`batch size`:batch size。
*`initial learning rate`:initial learning rate,注意我们使用的是adadelta,所以初始值无关紧要。
*`target embedding size`:每个目标的嵌入维度。
*`attn num hidden`:注意解码器单元中的隐藏单元数。
*`attn num layers`:注意解码器单元中的层数。(隐藏单元的编码器编号将为"attn num hidden"*"attn num layers")。
*"no resume":即使存在检查点,也创建新权重。
*"max gradient norm":将渐变剪裁到此norm。
*"no gradient clipping":不执行渐变剪裁。
*"gpu id":gpu to使用。
*`use gru`:使用gru单元格而不是lstm。
*`max width`:输入图像的最大宽度。警告:宽度大于最大值的图像将被丢弃。
*`max height`:输入图像的最大高度。
*`max prediction`:最大长度预测单词/短语的第个。
ocr)(https://github.com/da03/torch attention ocr)