From 6eb7dd5563f7f02732ff12f1e0778486e946d272 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Mon, 25 May 2020 16:29:20 +0800 Subject: [PATCH] solve det eval bug and optimize doc --- README.md | 13 +++++++------ configs/det/det_mv3_db.yml | 2 +- doc/installation.md | 23 ++++++++++++++++++++++- ppocr/postprocess/db_postprocess.py | 7 +++++-- 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index fa17693b..b803ac77 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,6 @@ python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_mode 更多的文本检测、识别串联推理使用方式请参考文档教程中[基于预测引擎推理](./doc/inference.md)。 - ## 文档教程 - [快速安装](./doc/installation.md) - [文本检测模型训练/评估/预测](./doc/detection.md)(持续更新中) @@ -64,12 +63,14 @@ PaddleOCR开源的文本检测算法列表: 在ICDAR2015文本检测公开数据集上,算法效果如下: -|模型|骨干网络|Hmean|下载链接| +|模型|骨干网络|Hmean|precision|recall|下载链接| |-|-|-|-| -|EAST|ResNet50_vd|85.85%|[下载链接](https://paddleocr.bj.bcebos.com/det_r50_vd_east.tar)| -|EAST|MobileNetV3|79.08%|[下载链接](https://paddleocr.bj.bcebos.com/det_mv3_east.tar)| -|DB|ResNet50_vd|83.30%|[下载链接](https://paddleocr.bj.bcebos.com/det_r50_vd_db.tar)| -|DB|MobileNetV3|73.00%|[下载链接](https://paddleocr.bj.bcebos.com/det_mv3_db.tar)| +|EAST|ResNet50_vd|86.82%|88.18%|85.51|[下载链接](https://paddleocr.bj.bcebos.com/det_r50_vd_east.tar)| +|EAST|MobileNetV3|80.74%|81.67%|79.83%|[下载链接](https://paddleocr.bj.bcebos.com/det_mv3_east.tar)| +|DB|ResNet50_vd|82.19%|83.79%|80.65%|[下载链接](https://paddleocr.bj.bcebos.com/det_r50_vd_db.tar)| +|DB|MobileNetV3|74.53%|75.92%|73.18%|[下载链接](https://paddleocr.bj.bcebos.com/det_mv3_db.tar)| + +* 注: 上述模型的训练和评估,设置后处理参数box_thresh=0.6,unclip_ratio=1.5,使用不同数据集、不同模型训练时,可调整这两个参数进行优化 PaddleOCR文本检测算法的训练和使用请参考文档教程中[文本检测模型训练/评估/预测](./doc/detection.md)。 diff --git a/configs/det/det_mv3_db.yml b/configs/det/det_mv3_db.yml index 37e5dc59..8efa66a9 100755 --- a/configs/det/det_mv3_db.yml +++ b/configs/det/det_mv3_db.yml @@ -50,4 +50,4 @@ PostProcess: thresh: 0.3 box_thresh: 0.7 max_candidates: 1000 - unclip_ratio: 1.5 \ No newline at end of file + unclip_ratio: 2.0 \ No newline at end of file diff --git a/doc/installation.md b/doc/installation.md index 1c6fead8..833bdba3 100644 --- a/doc/installation.md +++ b/doc/installation.md @@ -1,7 +1,14 @@ ## 快速安装 +经测试PaddleOCR可在glibc 2.23上运行,您也可以测试其他glibc版本或安装glic 2.23 +PaddleOCR 工作环境 +- PaddlePaddle1.7 +- python3 +- glibc 2.23 + 建议使用我们提供的docker运行PaddleOCR,有关docker使用请参考[链接](https://docs.docker.com/get-started/)。 -1. 准备docker环境。第一次使用这个镜像,会自动下载该镜像,请耐心等待。 + +1. (建议)准备docker环境。第一次使用这个镜像,会自动下载该镜像,请耐心等待。 ``` # 切换到工作目录下 cd /home/Projects @@ -20,6 +27,20 @@ sudo nvidia-docker run --name ppocr -v $PWD:/paddle --network=host -it hub.baidu sudo nvidia-docker container exec -it ppocr /bin/bash ``` +注意:如果docker pull过慢,可以按照如下步骤手动下载后加载docker,以cuda9 docker为例,使用cuda10 docker只需要将cuda9改为cuda10即可。 +``` +# 下载CUDA9 docker的压缩文件,并解压 +wget https://paddleocr.bj.bcebos.com/docker/docker_pdocr_cuda9.tar.gz +# 为减少下载时间,上传的docker image是压缩过的,需要解压使用 +tar zxf docker_pdocr_cuda9.tar.gz +# 创建image +docker load < docker_pdocr_cuda9.tar +# 完成上述步骤后通过docker images检查是否加载了下载的镜像 +docker images +# 执行docker images后如果有下面的输出,即可按照按照 步骤1 创建docker环境。 +hub.baidubce.com/paddlepaddle/paddle latest-gpu-cuda9.0-cudnn7-dev f56310dcc829 +``` + 2. 安装PaddlePaddle Fluid v1.7(暂不支持更高版本,适配工作进行中) ``` pip3 install --upgrade pip diff --git a/ppocr/postprocess/db_postprocess.py b/ppocr/postprocess/db_postprocess.py index b8e18e66..f115f12e 100644 --- a/ppocr/postprocess/db_postprocess.py +++ b/ppocr/postprocess/db_postprocess.py @@ -35,6 +35,7 @@ class DBPostProcess(object): self.thresh = params['thresh'] self.box_thresh = params['box_thresh'] self.max_candidates = params['max_candidates'] + self.unclip_ratio = params['unclip_ratio'] self.min_size = 3 def boxes_from_bitmap(self, pred, _bitmap, dest_width, dest_height): @@ -46,7 +47,8 @@ class DBPostProcess(object): bitmap = _bitmap height, width = bitmap.shape - outs = cv2.findContours((bitmap * 255).astype(np.uint8), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) + outs = cv2.findContours((bitmap * 255).astype(np.uint8), cv2.RETR_LIST, + cv2.CHAIN_APPROX_SIMPLE) if len(outs) == 3: img, contours, _ = outs[0], outs[1], outs[2] elif len(outs) == 2: @@ -83,7 +85,8 @@ class DBPostProcess(object): scores[index] = score return boxes, scores - def unclip(self, box, unclip_ratio=2.0): + def unclip(self, box): + unclip_ratio = self.unclip_ratio poly = Polygon(box) distance = poly.area * unclip_ratio / poly.length offset = pyclipper.PyclipperOffset() -- GitLab