提交 d1322af3 编写于 作者: littletomatodonkey's avatar littletomatodonkey

fix conflicts

...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力使用者训练出更好的模型,并应用落地。 PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力使用者训练出更好的模型,并应用落地。
**近期更新** **近期更新**
- 2020.10.19 [FAQ](./doc/doc_ch/FAQ.md)新增5个高频问题,共计89个常见问题及解答,并且计划以后每周一都会更新,欢迎大家持续关注。 - 2020.10.26 [FAQ](./doc/doc_ch/FAQ.md)新增5个高频问题,共计94个常见问题及解答,并且计划以后每周一都会更新,欢迎大家持续关注。
- 2020.9.22 更新PP-OCR技术文章,https://arxiv.org/abs/2009.09941 - 2020.9.22 更新PP-OCR技术文章,https://arxiv.org/abs/2009.09941
- 2020.9.19 更新超轻量压缩ppocr_mobile_slim系列模型,整体模型3.5M(详见[PP-OCR Pipeline](#PP-OCR)),适合在移动端部署使用。[模型下载](#模型下载) - 2020.9.19 更新超轻量压缩ppocr_mobile_slim系列模型,整体模型3.5M(详见[PP-OCR Pipeline](#PP-OCR)),适合在移动端部署使用。[模型下载](#模型下载)
- 2020.9.17 更新超轻量ppocr_mobile系列和通用ppocr_server系列中英文ocr模型,媲美商业效果。[模型下载](#模型下载) - 2020.9.17 更新超轻量ppocr_mobile系列和通用ppocr_server系列中英文ocr模型,媲美商业效果。[模型下载](#模型下载)
...@@ -84,7 +84,7 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力 ...@@ -84,7 +84,7 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力
- [基于pip安装whl包快速推理](./doc/doc_ch/whl.md) - [基于pip安装whl包快速推理](./doc/doc_ch/whl.md)
- [基于Python脚本预测引擎推理](./doc/doc_ch/inference.md) - [基于Python脚本预测引擎推理](./doc/doc_ch/inference.md)
- [基于C++预测引擎推理](./deploy/cpp_infer/readme.md) - [基于C++预测引擎推理](./deploy/cpp_infer/readme.md)
- [服务化部署](./deploy/hubserving/readme.md) - [服务化部署](./doc/doc_ch/serving_inference.md)
- [端侧部署](./deploy/lite/readme.md) - [端侧部署](./deploy/lite/readme.md)
- [模型量化](./deploy/slim/quantization/README.md) - [模型量化](./deploy/slim/quantization/README.md)
- [模型裁剪](./deploy/slim/prune/README.md) - [模型裁剪](./deploy/slim/prune/README.md)
...@@ -98,8 +98,8 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力 ...@@ -98,8 +98,8 @@ PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力
- [效果展示](#效果展示) - [效果展示](#效果展示)
- FAQ - FAQ
- [【精选】OCR精选10个问题](./doc/doc_ch/FAQ.md) - [【精选】OCR精选10个问题](./doc/doc_ch/FAQ.md)
- [【理论篇】OCR通用21个问题](./doc/doc_ch/FAQ.md) - [【理论篇】OCR通用23个问题](./doc/doc_ch/FAQ.md)
- [【实战篇】PaddleOCR实战58个问题](./doc/doc_ch/FAQ.md) - [【实战篇】PaddleOCR实战61个问题](./doc/doc_ch/FAQ.md)
- [技术交流群](#欢迎加入PaddleOCR技术交流群) - [技术交流群](#欢迎加入PaddleOCR技术交流群)
- [参考文献](./doc/doc_ch/reference.md) - [参考文献](./doc/doc_ch/reference.md)
- [许可证书](#许可证书) - [许可证书](#许可证书)
......
...@@ -18,5 +18,4 @@ TestReader: ...@@ -18,5 +18,4 @@ TestReader:
infer_img: infer_img:
img_set_dir: ./train_data/icdar2015/text_localization/ img_set_dir: ./train_data/icdar2015/text_localization/
label_file_path: ./train_data/icdar2015/text_localization/test_icdar2015_label.txt label_file_path: ./train_data/icdar2015/text_localization/test_icdar2015_label.txt
test_image_shape: [736, 1280]
do_eval: True do_eval: True
...@@ -51,7 +51,7 @@ Optimizer: ...@@ -51,7 +51,7 @@ Optimizer:
PostProcess: PostProcess:
function: ppocr.postprocess.db_postprocess,DBPostProcess function: ppocr.postprocess.db_postprocess,DBPostProcess
thresh: 0.3 thresh: 0.3
box_thresh: 0.6 box_thresh: 0.5
max_candidates: 1000 max_candidates: 1000
unclip_ratio: 1.5 unclip_ratio: 1.6
...@@ -59,7 +59,7 @@ public: ...@@ -59,7 +59,7 @@ public:
class ClsResizeImg { class ClsResizeImg {
public: public:
virtual void Run(const cv::Mat &img, cv::Mat &resize_img, virtual void Run(const cv::Mat &img, cv::Mat &resize_img,
const std::vector<int> &rec_image_shape = {3, 32, 320}); const std::vector<int> &rec_image_shape = {3, 48, 192});
}; };
} // namespace PaddleOCR } // namespace PaddleOCR
\ No newline at end of file
...@@ -21,7 +21,7 @@ cv::Mat Classifier::Run(cv::Mat &img) { ...@@ -21,7 +21,7 @@ cv::Mat Classifier::Run(cv::Mat &img) {
img.copyTo(src_img); img.copyTo(src_img);
cv::Mat resize_img; cv::Mat resize_img;
std::vector<int> rec_image_shape = {3, 32, 100}; std::vector<int> rec_image_shape = {3, 48, 192};
int index = 0; int index = 0;
float wh_ratio = float(img.cols) / float(img.rows); float wh_ratio = float(img.cols) / float(img.rows);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
PaddleOCR提供2种服务部署方式: PaddleOCR提供2种服务部署方式:
- 基于PaddleHub Serving的部署:代码路径为"`./deploy/hubserving`",按照本教程使用; - 基于PaddleHub Serving的部署:代码路径为"`./deploy/hubserving`",按照本教程使用;
- 基于PaddleServing的部署:代码路径为"`./deploy/pdserving`",使用方法参考[文档](../pdserving/readme.md) - 基于PaddleServing的部署:代码路径为"`./deploy/pdserving`",使用方法参考[文档](../../doc/doc_ch/serving_inference.md)
# 基于PaddleHub Serving的服务部署 # 基于PaddleHub Serving的服务部署
......
...@@ -2,7 +2,7 @@ English | [简体中文](readme.md) ...@@ -2,7 +2,7 @@ English | [简体中文](readme.md)
PaddleOCR provides 2 service deployment methods: PaddleOCR provides 2 service deployment methods:
- Based on **PaddleHub Serving**: Code path is "`./deploy/hubserving`". Please follow this tutorial. - Based on **PaddleHub Serving**: Code path is "`./deploy/hubserving`". Please follow this tutorial.
- Based on **PaddleServing**: Code path is "`./deploy/pdserving`". Please refer to the [tutorial](../pdserving/readme_en.md) for usage. - Based on **PaddleServing**: Code path is "`./deploy/pdserving`". Please refer to the [tutorial](../../doc/doc_ch/serving_inference.md) for usage.
# Service deployment based on PaddleHub Serving # Service deployment based on PaddleHub Serving
......
...@@ -65,11 +65,11 @@ If you have prepared the model file ending in `.nb`, you can skip this step. ...@@ -65,11 +65,11 @@ If you have prepared the model file ending in `.nb`, you can skip this step.
The following table also provides a series of models that can be deployed on mobile phones to recognize Chinese. The following table also provides a series of models that can be deployed on mobile phones to recognize Chinese.
You can directly download the optimized model. You can directly download the optimized model.
|Version|Introduction|Model size|Detection model|Text Direction model|Recognition model|Paddle Lite branch | | Version | Introduction | Model size | Detection model | Text Direction model | Recognition model | Paddle Lite branch |
|-|-|-|-|-|-| | - | - | - | - | - | - | - |
|V1.1|extra-lightweight chinese OCR optimized model|8.1M|[Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_det_opt.nb)|[Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_cls_opt.nb)|[Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_rec_opt.nb)|develop| | V1.1 | extra-lightweight chinese OCR optimized model | 8.1M | [Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_det_opt.nb) | [Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_cls_opt.nb) | [Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_rec_opt.nb) | develop |
|[slim] V1.1|extra-lightweight chinese OCR optimized model|3.5M|[Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_det_prune_opt.nb)|[Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_cls_quant_opt.nb)|[Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_rec_quant_opt.nb)|develop| | [slim] V1.1 | extra-lightweight chinese OCR optimized model | 3.5M | [Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_det_prune_opt.nb) | [Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_cls_quant_opt.nb) | [Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.1_rec_quant_opt.nb) | develop |
|V1.0|lightweight Chinese OCR optimized model|8.6M|[Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.0_det_opt.nb)|---|[Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.0_rec_opt.nb)|develop| | V1.0 | lightweight Chinese OCR optimized model | 8.6M | [Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.0_det_opt.nb) | - | [Download](https://paddleocr.bj.bcebos.com/20-09-22/mobile/lite/ch_ppocr_mobile_v1.0_rec_opt.nb) | develop |
If the model to be deployed is not in the above table, you need to follow the steps below to obtain the optimized model. If the model to be deployed is not in the above table, you need to follow the steps below to obtain the optimized model.
......
...@@ -51,6 +51,7 @@ from paddleslim.quant import quant_aware, convert ...@@ -51,6 +51,7 @@ from paddleslim.quant import quant_aware, convert
from paddle.fluid.layer_helper import LayerHelper from paddle.fluid.layer_helper import LayerHelper
from eval_utils.eval_det_utils import eval_det_run from eval_utils.eval_det_utils import eval_det_run
from eval_utils.eval_rec_utils import eval_rec_run from eval_utils.eval_rec_utils import eval_rec_run
from eval_utils.eval_cls_utils import eval_cls_run
def main(): def main():
...@@ -105,6 +106,8 @@ def main(): ...@@ -105,6 +106,8 @@ def main():
if alg_type == 'det': if alg_type == 'det':
final_metrics = eval_det_run(exe, config, quant_info_dict, "eval") final_metrics = eval_det_run(exe, config, quant_info_dict, "eval")
elif alg_type == 'cls':
final_metrics = eval_cls_run(exe, quant_info_dict)
else: else:
final_metrics = eval_rec_run(exe, config, quant_info_dict, "eval") final_metrics = eval_rec_run(exe, config, quant_info_dict, "eval")
print(final_metrics) print(final_metrics)
......
...@@ -178,9 +178,12 @@ def main(): ...@@ -178,9 +178,12 @@ def main():
if train_alg_type == 'det': if train_alg_type == 'det':
program.train_eval_det_run( program.train_eval_det_run(
config, exe, train_info_dict, eval_info_dict, is_slim="quant") config, exe, train_info_dict, eval_info_dict, is_slim="quant")
else: elif train_alg_type == 'rec':
program.train_eval_rec_run( program.train_eval_rec_run(
config, exe, train_info_dict, eval_info_dict, is_slim="quant") config, exe, train_info_dict, eval_info_dict, is_slim="quant")
else:
program.train_eval_cls_run(
config, exe, train_info_dict, eval_info_dict, is_slim="quant")
if __name__ == '__main__': if __name__ == '__main__':
......
...@@ -9,43 +9,45 @@ ...@@ -9,43 +9,45 @@
## PaddleOCR常见问题汇总(持续更新) ## PaddleOCR常见问题汇总(持续更新)
* [近期更新(2020.10.19](#近期更新) * [近期更新(2020.10.26](#近期更新)
* [【精选】OCR精选10个问题](#OCR精选10个问题) * [【精选】OCR精选10个问题](#OCR精选10个问题)
* [【理论篇】OCR通用21个问题](#OCR通用问题) * [【理论篇】OCR通用23个问题](#OCR通用问题)
* [基础知识3](#基础知识) * [基础知识5](#基础知识)
* [数据集4题](#数据集) * [数据集4题](#数据集)
* [模型训练调优6题](#模型训练调优) * [模型训练调优6题](#模型训练调优)
* [预测部署8题](#预测部署) * [预测部署8题](#预测部署)
* [【实战篇】PaddleOCR实战58个问题](#PaddleOCR实战问题) * [【实战篇】PaddleOCR实战61个问题](#PaddleOCR实战问题)
* [使用咨询17](#使用咨询) * [使用咨询20](#使用咨询)
* [数据集10题](#数据集) * [数据集10题](#数据集)
* [模型训练调优15题](#模型训练调优) * [模型训练调优15题](#模型训练调优)
* [预测部署16题](#预测部署) * [预测部署16题](#预测部署)
<a name="近期更新"></a> <a name="近期更新"></a>
## 近期更新(2020.10.19 ## 近期更新(2020.10.26
#### Q3.3.14:使用之前版本的代码加载最新1.1版的通用检测预训练模型,提示在模型文件.pdparams中找不到bn4e_branch2a_variance是什么情况?是网络结构发生了变化吗? #### Q2.1.4 印章如何识别
**A**: 1. 使用带tps的识别网络或abcnet,2.使用极坐标变换将图片拉平之后使用crnn
**A**:1.1版的轻量检测模型去掉了mv3结构中的se模块,可以对比下这两个配置文件:[det_mv3_db.yml](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/configs/det/det_mv3_db.yml)[det_mv3_db_v1.1.yml](https://github.com/PaddlePaddle/PaddleOCR/blob/develop/configs/det/det_mv3_db_v1.1.yml)
#### Q3.3.15: 训练中使用的字典需要与加载的预训练模型使用的字典一样吗? #### Q2.1.5 多语言的字典里是混合了不同的语种,这个是有什么讲究吗?统一到一个字典里会对精度造成多大的损失?
**A**:统一到一个字典里,会造成最后一层FC过大,增加模型大小。如果有特殊需求的话,可以把需要的几种语言合并字典训练模型,合并字典之后如果引入过多的形近字,可能会造成精度损失,字符平衡的问题可能也需要考虑一下。在PaddleOCR里暂时将语言字典分开。
**A**:是的,训练的字典与你使用该模型进行预测的字典需要保持一致的。
#### Q3.2.10: crnn+ctc模型训练所用的垂直文本(旋转至水平方向)是如何生成的 #### Q3.3.16: 如何对检测模型finetune,比如冻结前面的层或某些层使用小的学习率学习
**A**:方法与合成水平方向文字一致,只是将字体替换成了垂直字体。 **A**:如果是冻结某些层,可以将变量的stop_gradient属性设置为True,这样计算这个变量之前的所有参数都不会更新了,参考:https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/faq/train_cn.html#id4
如果对某些层使用更小的学习率学习,静态图里还不是很方便,一个方法是在参数初始化的时候,给权重的属性设置固定的学习率,参考:https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/fluid/param_attr/ParamAttr_cn.html#paramattr
实际上我们实验发现,直接加载模型去fine-tune,不设置某些层不同学习率,效果也都不错
#### Q3.4.15: hubserving、pdserving这两种部署方式区别是什么? #### Q3.3.17: 使用通用中文模型作为预训练模型,更改了字典文件,出现ctc_fc_b not used的错误
**A**:修改了字典之后,识别模型的最后一层FC纬度发生了改变,没有办法加载参数。这里是一个警告,可以忽略,正常训练即可。
**A**:hubserving原本是paddlehub的配套服务部署工具,可以很方便的将paddlehub内置的模型部署为服务,paddleocr使用了这个功能,并将模型路径等参数暴露出来方便用户自定义修改。paddle serving是面向所有paddle模型的部署工具,文档中可以看到我们提供了快速版和标准版,其中快速版和hubserving的本质是一样的,而标准版基于rpc,更稳定,更适合分布式部署。
#### Q3.4.16: hub serving部署服务时如何多gpu同时利用起来,export CUDA_VISIBLE_DEVICES=0,1 方式吗?
**A**:hubserving的部署方式目前暂不支持多卡预测,除非手动启动多个serving,不同端口对应不同卡。或者可以使用paddleserving进行部署,部署工具已经发布:https://github.com/PaddlePaddle/PaddleOCR/tree/develop/deploy/pdserving ,在启动服务时--gpu_id 0,1 这样就可以
#### Q3.1.18:如何加入自己的检测算法?
**A**:1. 在ppocr/modeling对应目录下分别选择backbone,head。如果没有可用的可以新建文件并添加
2. 在ppocr/data下选择对应的数据处理处理方式,如果没有可用的可以新建文件并添加
3. 在ppocr/losses下新建文件并编写loss
4. 在ppocr/postprocess下新建文件并编写后处理算法
5. 将上面四个步骤里新添加的类或函数参照yml文件写到配置中
<a name="OCR精选10个问题"></a> <a name="OCR精选10个问题"></a>
## 【精选】OCR精选10个问题 ## 【精选】OCR精选10个问题
...@@ -151,6 +153,11 @@ ...@@ -151,6 +153,11 @@
**A**:端到端在文字分布密集的业务场景,效率会比较有保证,精度的话看自己业务数据积累情况,如果行级别的识别数据积累比较多的话two-stage会比较好。百度的落地场景,比如工业仪表识别、车牌识别都用到端到端解决方案。 **A**:端到端在文字分布密集的业务场景,效率会比较有保证,精度的话看自己业务数据积累情况,如果行级别的识别数据积累比较多的话two-stage会比较好。百度的落地场景,比如工业仪表识别、车牌识别都用到端到端解决方案。
#### Q2.1.4 印章如何识别
**A**: 1. 使用带tps的识别网络或abcnet,2.使用极坐标变换将图片拉平之后使用crnn
#### Q2.1.5 多语言的字典里是混合了不同的语种,这个是有什么讲究吗?统一到一个字典里会对精度造成多大的损失?
**A**:统一到一个字典里,会造成最后一层FC过大,增加模型大小。如果有特殊需求的话,可以把需要的几种语言合并字典训练模型,合并字典之后如果引入过多的形近字,可能会造成精度损失,字符平衡的问题可能也需要考虑一下。在PaddleOCR里暂时将语言字典分开。
### 数据集 ### 数据集
...@@ -329,6 +336,13 @@ ...@@ -329,6 +336,13 @@
|8.6M超轻量中文OCR模型|MobileNetV3+MobileNetV3|det_mv3_db.yml|rec_chinese_lite_train.yml| |8.6M超轻量中文OCR模型|MobileNetV3+MobileNetV3|det_mv3_db.yml|rec_chinese_lite_train.yml|
|通用中文OCR模型|Resnet50_vd+Resnet34_vd|det_r50_vd_db.yml|rec_chinese_common_train.yml| |通用中文OCR模型|Resnet50_vd+Resnet34_vd|det_r50_vd_db.yml|rec_chinese_common_train.yml|
#### 3.1.18:如何加入自己的检测算法?
**A**:1. 在ppocr/modeling对应目录下分别选择backbone,head。如果没有可用的可以新建文件并添加
2. 在ppocr/data下选择对应的数据处理处理方式,如果没有可用的可以新建文件并添加
3. 在ppocr/losses下新建文件并编写loss
4. 在ppocr/postprocess下新建文件并编写后处理算法
5. 将上面四个步骤里新添加的类或函数参照yml文件写到配置中
### 数据集 ### 数据集
...@@ -388,6 +402,7 @@ ...@@ -388,6 +402,7 @@
**A**:方法与合成水平方向文字一致,只是将字体替换成了垂直字体。 **A**:方法与合成水平方向文字一致,只是将字体替换成了垂直字体。
### 模型训练调优 ### 模型训练调优
#### Q3.3.1:文本长度超过25,应该怎么处理? #### Q3.3.1:文本长度超过25,应该怎么处理?
...@@ -465,6 +480,18 @@ return paddle.reader.multiprocess_reader(readers, False, queue_size=320) ...@@ -465,6 +480,18 @@ return paddle.reader.multiprocess_reader(readers, False, queue_size=320)
**A**:是的,训练的字典与你使用该模型进行预测的字典需要保持一致的。 **A**:是的,训练的字典与你使用该模型进行预测的字典需要保持一致的。
#### Q3.3.16: 如何对检测模型finetune,比如冻结前面的层或某些层使用小的学习率学习?
**A**
**A**:如果是冻结某些层,可以将变量的stop_gradient属性设置为True,这样计算这个变量之前的所有参数都不会更新了,参考:https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/faq/train_cn.html#id4
如果对某些层使用更小的学习率学习,静态图里还不是很方便,一个方法是在参数初始化的时候,给权重的属性设置固定的学习率,参考:https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/fluid/param_attr/ParamAttr_cn.html#paramattr
实际上我们实验发现,直接加载模型去fine-tune,不设置某些层不同学习率,效果也都不错
#### Q3.3.17: 使用通用中文模型作为预训练模型,更改了字典文件,出现ctc_fc_b not used的错误
**A**:修改了字典之后,识别模型的最后一层FC纬度发生了改变,没有办法加载参数。这里是一个警告,可以忽略,正常训练即可。
### 预测部署 ### 预测部署
#### Q3.4.1:如何pip安装opt模型转换工具? #### Q3.4.1:如何pip安装opt模型转换工具?
......
...@@ -95,5 +95,5 @@ python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_mode ...@@ -95,5 +95,5 @@ python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_mode
此外,文档教程中也提供了中文OCR模型的其他预测部署方式: 此外,文档教程中也提供了中文OCR模型的其他预测部署方式:
- [基于C++预测引擎推理](../../deploy/cpp_infer/readme.md) - [基于C++预测引擎推理](../../deploy/cpp_infer/readme.md)
- [服务部署](../../deploy/pdserving/readme.md) - [服务部署](./serving_inference.md)
- [端侧部署](../../deploy/lite/readme.md) - [端侧部署](../../deploy/lite/readme.md)
PaddleOCR提供2种服务部署方式:
- 基于PaddleServing的部署:代码路径为"`./deploy/pdserving`",按照本教程使用。。
- 基于PaddleHub Serving的部署:代码路径为"`./deploy/hubserving`",使用方法参考[文档](../../deploy/hubserving/readme.md)
# 使用Paddle Serving预测推理 # 使用Paddle Serving预测推理
阅读本文档之前,请先阅读文档 [基于Python预测引擎推理](./inference.md) 阅读本文档之前,请先阅读文档 [基于Python预测引擎推理](./inference.md)
......
...@@ -98,5 +98,5 @@ For more text detection and recognition tandem reasoning, please refer to the do ...@@ -98,5 +98,5 @@ For more text detection and recognition tandem reasoning, please refer to the do
In addition, the tutorial also provides other deployment methods for the Chinese OCR model: In addition, the tutorial also provides other deployment methods for the Chinese OCR model:
- [Server-side C++ inference](../../deploy/cpp_infer/readme_en.md) - [Server-side C++ inference](../../deploy/cpp_infer/readme_en.md)
- [Service deployment](../../deploy/pdserving/readme_en.md) - [Service deployment](../../deploy/hubserving/readme_en.md)
- [End-to-end deployment](../../deploy/lite/readme_en.md) - [End-to-end deployment](../../deploy/lite/readme_en.md)
doc/joinus.PNG

356.3 KB | W: | H:

doc/joinus.PNG

405.4 KB | W: | H:

doc/joinus.PNG
doc/joinus.PNG
doc/joinus.PNG
doc/joinus.PNG
  • 2-up
  • Swipe
  • Onion skin
...@@ -65,6 +65,7 @@ class ClsModel(object): ...@@ -65,6 +65,7 @@ class ClsModel(object):
labels = None labels = None
loader = None loader = None
image = fluid.data(name='image', shape=image_shape, dtype='float32') image = fluid.data(name='image', shape=image_shape, dtype='float32')
image.stop_gradient = False
return image, labels, loader return image, labels, loader
def __call__(self, mode): def __call__(self, mode):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册