PaddlePaddle

技术栈
AI 框架
deep-learningbaiduchinese-nlpindustrialeast-asia

概览

PaddlePaddle

PaddlePaddle(飞桨)是百度于 2016 年开源的产业级深度学习平台,是中国市场占有率最高的深度学习框架。它以中文 NLP 见长,提供从开发、训练到部署的端到端产业方案,尤其在 OCR、语音、工业质检等领域有丰富的预训练模型。

核心价值:

  • 中文 NLP 最强:ERNIE 系列模型、PaddleNLP 套件中文理解能力一流
  • 端到端部署:PaddleLite(移动端)、PaddleServing(服务端)、Paddle.js(浏览器)
  • 产业套件:PaddleOCR(OCR)/ PaddleSpeech(语音)/ PaddleDetection(检测)
  • 动静态图统一:动态图开发 + 静态图部署一键切换
  • 国产硬件适配:华为昇腾 / 寒武纪 / 昆仑芯全支持

适用场景: 中文 NLP 应用、OCR 识别、工业质检、国产化部署。

安装

环境准备

  • Python:>= 3.8(推荐 3.10)
  • 系统:Linux 最佳(Windows/macOS 也支持)
  • GPU:NVIDIA CUDA 10.2+ / 11.2 / 11.6 / 11.7 / 12.0

安装命令

CPU 版

pip install paddlepaddle

GPU 版(按 CUDA 版本选择)

# CUDA 11.7
pip install paddlepaddle-gpu==2.6.1.post117 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

# CUDA 12.0
pip install paddlepaddle-gpu==2.6.1.post120 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

# CUDA 11.2
pip install paddlepaddle-gpu==2.6.1.post112 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

完整工具链

# NLP 套件
pip install paddlenlp

# OCR 套件
pip install paddleocr

# 语音套件
pip install paddlespeech

验证安装

import paddle
print(paddle.__version__)
print("GPU 可用:", paddle.is_compiled_with_cuda())
paddle.set_device("gpu:0" if paddle.is_compiled_with_cuda() else "cpu")
print("当前设备:", paddle.get_device())

常见安装问题

Q1: No module named 'paddle'

包名是 paddlepaddle 而非 paddle。运行 pip install paddlepaddle

Q2: GPU 版安装后 paddle.is_compiled_with_cuda() 返回 False

CUDA 版本不匹配。飞桨对 CUDA 版本敏感,确认 GPU 驱动 CUDA 版本与安装的 whl 严格一致。

Q3: Mac M 系列芯片

飞桨目前对 Apple Silicon 支持有限。建议用 Docker:docker run -it paddlepaddle/paddle:latest-dev-cpu

示例

PaddleOCR:三行代码搞定中文 OCR

目标

用 PaddleOCR 一键识别图片中的中文/英文文字,体验飞桨产业级套件的开箱即用。

完整代码

from paddleocr import PaddleOCR
import cv2
import numpy as np

# ─── 1. 初始化(自动下载模型) ───
ocr = PaddleOCR(
    use_angle_cls=True,  # 文字方向分类
    lang='ch',           # 中英文混合
    use_gpu=False,       # CPU
)

# ─── 2. 识别图片 ───
result = ocr.ocr("test_chinese.jpg", cls=True)

# ─── 3. 输出结果 ───
for line in result[0]:
    bbox, (text, confidence) = line
    print(f"[{confidence:.2%}] {text}")
    print(f"  位置: ({int(bbox[0][0])}, {int(bbox[0][1])}) → ({int(bbox[2][0])}, {int(bbox[2][1])})")

# ─── 画框可视化 ───
img = cv2.imread("test_chinese.jpg")
for line in result[0]:
    bbox, (text, confidence) = line
    pts = np.array(bbox, dtype=np.int32).reshape((-1, 1, 2))
    cv2.polylines(img, [pts], True, (0, 255, 0), 2)
    cv2.putText(img, text, (int(bbox[0][0]), int(bbox[0][1]) - 10),
                cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2)

cv2.imwrite("result.jpg", img)
print("结果已保存到 result.jpg")

运行步骤

pip install paddlepaddle paddleocr opencv-python
python paddleocr_demo.py

首次运行自动从 PaddleHub 下载检测 + 识别模型(~100 MB)。

预期输出

[2024/06/01 10:23:45] ppocr INFO: 检测模型加载完成
[2024/06/01 10:23:48] ppocr INFO: 识别模型加载完成

[99.87%] 人工智能正在改变世界
  位置: (120, 35) → (580, 85)
[98.52%] PaddleOCR 是最佳中文 OCR 工具
  位置: (100, 120) → (620, 170)
[97.31%] PaddlePaddle 飞桨框架
  位置: (140, 210) → (500, 260)

结果已保存到 result.jpg

高级用法

# 仅检测文字位置(不识别)
ocr = PaddleOCR(use_angle_cls=True, lang='ch', det=True, rec=False)

# 英文
ocr = PaddleOCR(use_angle_cls=True, lang='en')

# GPU 加速
ocr = PaddleOCR(use_angle_cls=True, lang='ch', use_gpu=True)

教程

PaddlePaddle 入门教程:ERINE 与产业套件全景

1. PaddlePaddle 的"双引擎"

PaddlePaddle 的核心差异化在于产业套件 > 基础框架

PaddlePaddle 核心框架
    ├── 动态图开发(dygraph)
    ├── 静态图部署(static graph)
    └── 自动混合精度(AMP)
    
产业套件(开箱即用)
    ├── PaddleOCR    —— OCR 识别全场景
    ├── PaddleNLP    —— 中文 NLP 全任务(ERNIE 3.0)
    ├── PaddleSpeech —— 语音合成/识别
    ├── PaddleDetection —— 目标检测
    ├── PaddleSeg    —— 图像分割
    └── PaddleGAN    —— 图像生成

2. 动态图 ↔ 静态图一键切换

这是飞桨最独特的设计:

import paddle

# 动态图模式(开发阶段)
paddle.disable_static()

@ paddle.jit.to_static  # 👈 一个装饰器即可
def model(x):
    return paddle.nn.functional.relu(paddle.nn.Linear(10, 5)(x))

# 训练:动态图
x = paddle.randn([3, 10])
out = model(x)

# 部署:自动转为静态图,享受图优化
model = paddle.jit.save(model, "inference_model")

动态图用于调试,静态图用于部署——无需重写代码。

3. PaddleNLP + ERNIE:中文 NLP 最强组合

from paddlenlp.transformers import ErnieForSequenceClassification, ErnieTokenizer

tokenizer = ErnieTokenizer.from_pretrained("ernie-3.0-base-zh")
model = ErnieForSequenceClassification.from_pretrained(
    "ernie-3.0-base-zh", num_classes=2
)

texts = ["这部电影太棒了!", "服务态度很差,不推荐。"]
inputs = tokenizer(texts, padding=True, return_tensors="pd")
logits = model(**inputs)
predictions = paddle.argmax(logits, axis=-1)
print(predictions)  # [1, 0]

ERNIE 3.0 在中文理解任务上长期霸榜 CLUE 榜单。

4. 部署三件套

套件 目标平台 特点
PaddleServing 服务端 高性能推理服务
PaddleLite 移动/嵌入式 ARM 优化,端侧推理
Paddle.js 浏览器 WebGL 加速,不用后端

5. PaddlePaddle vs PyTorch vs TensorFlow

维度 PaddlePaddle PyTorch TensorFlow
中文生态 ⭐⭐⭐ 最强 ⭐⭐ ⭐⭐
产业套件 ⭐⭐⭐ 最多 ⭐⭐
国际社区 ⭐⭐ ⭐⭐⭐ ⭐⭐⭐
国产硬件 ⭐⭐⭐
学术论文 ⭐⭐ ⭐⭐⭐ ⭐⭐

6. 选 PaddlePaddle 的理由

  • 你的业务场景以中文为主(OCR/NLP)
  • 需要国产硬件适配(昇腾/昆仑)
  • 需要完整产业方案而非从头搭积木
  • 公司技术栈在百度云生态内

思考题

  1. 飞桨的动静态图一键切换与 TensorFlow 的 @tf.function 有何异同?
  2. 为什么飞桨在中文 OCR 上比 Tesseract + EasyOCR 表现更好?
  3. 飞桨的产业套件模式与 HuggingFace 的模型 Hub 模式各有什么优劣?

参考资料

暂无参考文献