Skip to content

Commit

Permalink
docs: 优化博客OCR推理引擎选择指南
Browse files Browse the repository at this point in the history
  • Loading branch information
SWHL committed Jul 11, 2024
1 parent 133d612 commit 253ee91
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 12 deletions.
33 changes: 23 additions & 10 deletions docs/blog/posts/inference_engine/which_inference.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: 选择哪个推理引擎?
title: OCR推理引擎选择指南
authors: [SWHL]
slug: which-inference
date:
Expand All @@ -10,13 +10,13 @@ categories:
comments: true
---

主要介绍一下当前阶段,CPU端和GPU端推理引擎选择问题
介绍在CPU端和GPU端,OCR模型的推理引擎选择问题

<!-- more -->

### CPU端推理引擎选择
## CPU端推理引擎选择

☆ 推荐:`rapidocr_onnxruntime`
### ☆ 推荐:`rapidocr_onnxruntime`

目前可用的推理库有:`rapidocr_onnxruntime``rapidocr_openvino``rapid_paddle`。这三个库均可在CPU上推理,除推理引擎不同外,其他接口均相同。

Expand All @@ -37,17 +37,30 @@ paddlepaddle推理引擎,并未测试与其他两个速度差异。但是相
|`rapidocr_onnxruntime`|||
|`rapidocr_openvino`|||

### GPU端推理引擎选择
## GPU端推理引擎选择

#### ☆ 推荐:`rapidocr_paddle`
### ☆ 推荐:`rapidocr_paddle`

#### 推荐理由
### 推荐理由[link](../../../install_usage/rapidocr_paddle/usage.md)

参见文档 → [link](../../../install_usage/rapidocr_paddle/usage.md)

#### 其他不推荐原因
### 其他不推荐原因

`rapidocr_openvino`: 出自英特尔,只适配自家GPU,因此,肯定不支持其他家的。如果支持了,烦请留言告知。

`rapidocr_onnxruntime`: onnxruntime-gpu版对动态图支持较差,推理速度很慢。OCR中文本检测部分输入就是动态的。详细参见文档 → [link](./onnxruntime/onnxruntime-gpu.md)

## 如果遇到内存泄露怎么办?

### 内存泄露问题是什么?

内存泄露问题指的是推理引擎在提取较大图像文字时,会申请较多内存。而在提取完成之后,不释放这些临时申请的内存。如果后续再遇到一张更大尺寸的图像,当前内存不够用的话,推理引擎会申请更多内存。同样,这些内存也不会被推理引擎释放。

这样,后续如果再遇到更大尺寸图像,则机器很容易内存溢出。

### 哪些推理引擎有这个问题?

已知的是OpenVino和PaddlePaddle存在这个问题,ONNXRuntime没有。

### 可能的解决方案

总结自群友:**多进程/线程 + 定时重启**
4 changes: 3 additions & 1 deletion docs/blog/posts/rec_dict_onnx.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@ comments: true
<!-- more -->

### 引言

在文本识别时,识别的每一种语言,都有一个对应的字典,用来还原识别的文本内容。例如英文识别模型的字典就是26个英文字母的大小写以及常用符号,中文识别模型的字典一般包括常用汉字、字母和符号等。

受启发于[issue #42](https://github.com/RapidAI/RapidOCR/issues/42),目前基于ONNXRuntime的推理引擎`rapidocr_onnxruntime`库已经将字典写入到onnx模型中,无需额外指定字典TXT文件。

以下将对这一部分做详细讲解,感兴趣小伙伴,可自行取用。

### 将字典内容写入到ONNX中

!!! note

在PaddleOCRModelConvert工具中已经将上述操作写到了包中,使用该工具可自动将字典写入到ONNX中。源码位于:[link](https://github.com/RapidAI/PaddleOCRModelConvert/blob/64a66ebe8c6147f0bacc5e0dd22a0809cad332e6/paddleocr_convert/main.py#L51)
Expand All @@ -42,6 +44,7 @@ onnx.save_model(model, '/path/to/model.onnx')
```

### 获取字典内容

!!! note

该部分已经在rapidocr_onnxruntime上实现,详情参见:[link](https://github.com/RapidAI/RapidOCR/blob/37e49c6ae25135a339b208f9ac64382ee7d4d688/python/rapidocr_onnxruntime/ch_ppocr_v3_rec/text_recognize.py#L31-L32)
Expand All @@ -59,4 +62,3 @@ chars = metamap['dictionary'].splitlines()
# 读取shape键对应的值
input_shape = json.loads(metamap['shape'])
```

6 changes: 5 additions & 1 deletion docs/install_usage/rapidocr_paddle/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@ comments: true

#### 简介

`rapidocr_paddle`系列包是基于PaddlePaddle框架作为推理引擎的,支持CPU和GPU上推理。推荐GPU上用这个,CPU端还是以`rapidocr_onnxruntime``rapidocr_openvino`为主。毕竟PaddlePaddle的CPU端还是比较重的。
PaddleOCR模型本身就是由PaddlePaddle框架训练而来的,PaddlePaddle框架原生支持在CPU和GPU上推理PaddleOCR相关模型。

`rapidocr_paddle`包是基于PaddlePaddle框架作为推理引擎的,支持CPU和GPU上推理,推荐GPU端使用。原因是ONNXRuntime和OpenVINO在GPU上支持较差。

CPU端还是以`rapidocr_onnxruntime``rapidocr_openvino`为主。毕竟PaddlePaddle的CPU端还是比较重的。

值得说明的是,这个包和PaddleOCR相比,代码基本都是一样的,只不过这个库将里面核心推理代码抽了出来,更加精简而已。

Expand Down

0 comments on commit 253ee91

Please sign in to comment.