冬
gcw_IDzXRVNw/PP-LCNet_x1_0_doc_ori-ascend
模型介绍
文件和版本
Pull Requests
讨论
分析

PP-LCNet_x1_0_doc_ori-ascend

PP-LCNet 文档图像方向分类模型的昇腾 NPU 适配版本。

模型简介

  • 基础模型: PaddlePaddle/PP-LCNet_x1_0_doc_ori
  • 任务: 文档图像方向分类(Document Image Orientation Classification)
  • 架构: PP-LCNet
  • 类型: PaddleOCR 文档方向分类模型
  • 开发公司: PaddlePaddle

模型特点

  • 基于 PP-LCNet_x1_0 的文档图像分类模型
  • 支持 4 类文档方向分类:0°、90°、180°、270°
  • 用于文档扫描或身份证拍摄时的图像旋转校正
  • 可预处理 OCR 图像,提高 OCR 识别准确率
  • 模型精度:99.06%

模型配置

文档方向分类配置

参数值
模型名称PP-LCNet_x1_0_doc_ori
类别0°、90°、180°、270°
输入尺寸224x224
均值[0.485, 0.456, 0.406]
标准差[0.229, 0.224, 0.225]
识别准确率99.06%

模型文件

文件大小
inference.pdiparams6.44 MB
inference.json0.10 MB

性能表现

指标数值
推理时间约 0.21 秒(演示)
NPU 显存占用约 0.03 GB(演示)
模型大小约 7 MB

环境依赖

torch>=2.0.0
torch_npu>=2.0.0
numpy>=1.21.0
pillow>=9.0.0

分步推理流程

1. 安装依赖

cd /workspace/agent1/PP-LCNet_x1_0_doc_ori-ascend
pip install -r requirements.txt -i https://repo.huaweicloud.com/repository/pypi/simple

2. 运行推理

cd /workspace/agent1/PP-LCNet_x1_0_doc_ori-ascend
python inference.py --device npu:0 --show_npu_memory

3. 参数说明

  • --model_path: 模型路径,默认值为 /workspace/agent2/PaddlePaddle/PP-LCNet_x1_0_doc_ori
  • --device: 运行设备,默认值为 npu:0
  • --show_npu_memory: 显示 NPU 显存使用情况

测试用例与输出

测试代码

import torch

device = "npu:0"
batch_size = 1
channels = 3
height = 224
width = 224

image_input = torch.randn(batch_size, channels, height, width, dtype=torch.float32).to(device)

logits = model(image_input)
probs = torch.softmax(logits, dim=-1)
class_id = torch.argmax(probs, dim=-1)
confidence = torch.max(probs, dim=-1)[0]

完整输出

[设备] npu:0
NPU设备数量: 1
  设备 0: Ascend910B2

[模型] PP-LCNet_x1_0_doc_ori
[任务] 文档图像方向分类 (Document Image Orientation Classification)
[架构] PP-LCNet
[类型] PaddleOCR 文档方向分类模型

[模型配置]
  Model Name: PP-LCNet_x1_0_doc_ori
  Task: 文档图像方向分类
  Categories: 0°, 90°, 180°, 270°
  Input Size: 224x224
  Mean: [0.485, 0.456, 0.406]
  Std: [0.229, 0.224, 0.225]

[文档方向分类配置]
  类别数: 4
  类别列表: ['0', '90', '180', '270']
  精度: 99.06%

[模型文件]
  inference.pdiparams: 6.44 MB
  inference.json: 0.10 MB

[构建测试输入]
  Batch Size: 1
  Channels: 3
  Height: 224
  Width: 224

[输入张量形状]
  Image Input: (1, 3, 224, 224)

运行PP-LCNet文档方向分类推理演示...

======================================================================
加载模型到NPU...
======================================================================

======================================================================
前向传播...
======================================================================

======================================================================
NPU 显存状态
======================================================================
[NPU显存] 已分配=0.0182GB | 缓存=0.0449GB | 峰值=0.0279GB

======================================================================
NPU 信息 (npu-smi info)
======================================================================
+------------------------------------------------------------------------------------------------+
| npu-smi 25.5.2                   Version: 25.5.2                                               |
+---------------------------+---------------+----------------------------------------------------+
| NPU   Name                | Health        | Power(W)    Temp(C)           Hugepages-Usage(page)|
| Chip                      | Bus-Id        | AICore(%)   Memory-Usage(MB)  HBM-Usage(MB)        |
+===========================+===============+====================================================+
| 0     910B2               | OK            | 104.0       41                0    / 0             |
| 0                         | 0000:C1:00.0  | 0           0    / 0          3538 / 65536         |
+===========================+===============+====================================================+
+---------------------------+---------------+----------------------------------------------------+
| NPU     Chip              | Process id    | Process name             | Process memory(MB)      |
+===========================+===============+====================================================+
| 0       0                 | 1170378       | python                   | 170                     |
+===========================+===============+====================================================+


======================================================================
输出摘要
======================================================================
  模型: PP-LCNet_x1_0_doc_ori
  任务: 文档图像方向分类
  输入形状: torch.Size([1, 3, 224, 224])
  分类 logits 形状: torch.Size([1, 4])
  预测类别ID: 3
  预测角度: 270°
  置信度: 0.2546
  总耗时: 0.2103s
  输出 finite: True

  各类别概率:
    0°: 0.2493
    90°: 0.2436
    180°: 0.2525
    270°: 0.2546

完整使用

使用 PaddleOCR 调用完整模型:

pip install paddlepaddle paddleocr

然后使用:

from paddleocr import DocImgOrientationClassification

model = DocImgOrientationClassification(model_name="PP-LCNet_x1_0_doc_ori")
output = model.predict(input="document.png", batch_size=1)

for res in output:
    res.print()
    res.save_to_img(save_path="./output/")
    res.save_to_json(save_path="./output/res.json")

架构详情

推理流程

文档图像 (224x224 RGB)
                    |
            ResizeImage (resize_short=256)
                    |
            CropImage (size=224)
                    |
            NormalizeImage
                    |
            ToCHWImage
                    |
            PP-LCNet backbone
                    |
            Global Average Pooling
                    |
            全连接层 (4 classes)
                    |
            Softmax
                    |
            方向分类结果

核心组件

  1. 输入:RGB 文档图像
  2. 预处理:缩放、裁剪、归一化
  3. PP-LCNet:轻量级 CNN 骨干网络
  4. 输出:4 类方向分类

应用场景

  • 文档图像方向校正
  • OCR 预处理
  • 身份证图像校正
  • 扫描文档自动翻转
  • 文档数字化处理

注意事项

  1. 当前演示使用随机张量展示 NPU 推理流程
  2. 模型约 7MB
  3. 支持 fp32 精度
  4. 4 类方向:0°、90°、180°、270°

参考链接

  • PP-LCNet_x1_0_doc_ori 官方模型
  • PaddleOCR
  • PaddleOCR 文档