Skip to content

Commit 44229dc

Browse files
marsenclaude
andcommitted
新增 AI 模型上傳至 Hugging Face 教學文章
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent ea9170c commit 44229dc

File tree

1 file changed

+236
-0
lines changed

1 file changed

+236
-0
lines changed
Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
---
2+
title: " [實作筆記] PaddleOCR ONNX 模型發布到 Hugging Face Hub"
3+
date: 2025/09/05 17:43:51
4+
tags:
5+
- 實作筆記
6+
---
7+
8+
## 前情提要
9+
10+
專案需要使用 PaddleOCR 進行文字辨識,但原始模型檔案需要從 PaddlePaddle 框架轉換成 ONNX 格式才能在不同環境中使用。
11+
12+
轉換完成後,面臨一個選擇:這些模型檔案要怎麼發布?放在專案內部?還是公開分享?
13+
14+
經過一番討論,決定將轉換後的 ONNX 模型公開發布到 Hugging Face Hub,一方面解決內部使用需求,另一方面也讓社群受益。
15+
16+
這篇記錄整個發布流程的實作過程與踩雷經驗。
17+
18+
## 目標
19+
20+
- 將 5 個 PaddleOCR ONNX 模型檔案 (208MB) 發布到 Hugging Face
21+
- 建立完整的使用文檔與授權聲明
22+
- 提供簡單的下載方式給其他開發者
23+
- 確保版權合規 (原始模型為 Apache 2.0 授權)
24+
25+
## 模型檔案清單
26+
27+
轉換完成的檔案包含:
28+
29+
- `PP-OCRv5_server_det_infer.onnx` (84MB) - 文字檢測
30+
- `PP-OCRv5_server_rec_infer.onnx` (81MB) - 文字識別
31+
- `UVDoc_infer.onnx` (30MB) - 文檔矯正
32+
- `PP-LCNet_x1_0_doc_ori_infer.onnx` (6.5MB) - 文檔方向
33+
- `PP-LCNet_x1_0_textline_ori_infer.onnx` (6.5MB) - 文字方向
34+
- `PP-OCRv5_server_rec_infer.yml` (145KB) - 配置檔案
35+
36+
## 平台選擇:為什麼是 Hugging Face?
37+
38+
本來考慮幾個選項:
39+
40+
- **GitLab**:現有平台,整合容易
41+
- **GitHub**:開發者友好,但大檔案處理麻煩
42+
- **Hugging Face**:AI 模型專業平台
43+
44+
最終選擇 Hugging Face 的原因:
45+
46+
- ✅ 完全免費,50GB 額度綽綽有餘
47+
- ✅ 原生支援 ONNX 格式
48+
- ✅ 內建 Git LFS,大檔案處理無痛
49+
- ✅ 全球 CDN,下載速度快
50+
- ✅ 社群友好,可能吸引貢獻者
51+
52+
## 實作過程
53+
54+
### Phase 1: 準備階段
55+
56+
首先建立 Hugging Face 帳號並設定環境:
57+
58+
```bash
59+
# 安裝 HF CLI
60+
uv add huggingface_hub
61+
62+
# 設定 Token (需要 Write 權限)
63+
export HF_TOKEN="your_token_here"
64+
```
65+
66+
建立模型 Repository:
67+
68+
```python
69+
from huggingface_hub import create_repo, whoami
70+
71+
# 驗證登入
72+
user = whoami()
73+
print(f"登入用戶: {user['name']}")
74+
75+
# 建立 repository
76+
repo_url = create_repo(
77+
repo_id="paddleocr-test",
78+
repo_type="model",
79+
private=False
80+
)
81+
print(f"Repository 建立成功: {repo_url}")
82+
```
83+
84+
### Phase 2: 上傳模型檔案
85+
86+
```bash
87+
export HF_TOKEN=your_token
88+
hf upload marsena/paddleocr-test ./model_cache/paddleocr_onnx/ --repo-type=model
89+
```
90+
91+
實際上傳時間約 3 分鐘,比預期快很多。
92+
93+
### Phase 3: 撰寫文檔
94+
95+
Hugging Face 的 README.md 比一般 GitHub 專案更重要,因為它就是模型的門面。
96+
97+
撰寫重點:
98+
99+
1. **清晰的模型說明**:每個檔案的用途
100+
2. **具體的使用範例**:Python 程式碼示範
101+
3. **完整的授權聲明**:避免版權爭議
102+
4. **技術細節**:系統需求、相容性
103+
104+
```markdown
105+
# PaddleOCR ONNX Models
106+
107+
本倉庫提供 PaddleOCR v5 的 ONNX 格式模型檔案...
108+
109+
## 快速開始
110+
111+
```python
112+
from huggingface_hub import hf_hub_download
113+
114+
# 下載檢測模型
115+
det_model = hf_hub_download(
116+
repo_id="marsena/paddleocr-test",
117+
filename="PP-OCRv5_server_det_infer.onnx"
118+
)
119+
```
120+
121+
需要注意 YAML metadata 的格式問題,HF 會檢查語法:
122+
123+
```yaml
124+
---
125+
tags:
126+
- onnx
127+
- ocr
128+
- paddleocr
129+
- computer-vision
130+
license: apache-2.0
131+
---
132+
```
133+
134+
### Phase 4: 測試驗證
135+
136+
上傳完成後務必測試下載功能:
137+
138+
```bash
139+
# 測試單檔下載
140+
hf download marsena/paddleocr-test PP-OCRv5_server_det_infer.onnx
141+
142+
# 測試整包下載
143+
hf download marsena/paddleocr-test --local-dir ./test_download \
144+
--exclude "README.md" --exclude ".gitattributes"
145+
```
146+
147+
## 一些要注意的小問題
148+
149+
### HF Token 權限設定
150+
151+
- **Read**:只能下載
152+
- **Write**:可以上傳模型
153+
- **Admin**:可以刪除 repo
154+
155+
建立 token 時記得選擇 **Write** 權限。
156+
157+
### Git LFS 檔案大小限制
158+
159+
Hugging Face 對單檔大小有限制:
160+
161+
- 一般檔案:< 10MB
162+
- LFS 檔案:< 50GB
163+
164+
我們的最大檔案 84MB,自動走 LFS 沒問題。
165+
166+
### 背景上傳的重要性
167+
168+
大檔案上傳可能需要 10-30 分鐘,SSH 連線容易斷開。務必使用 `nohup``screen`
169+
170+
### README 的 YAML 語法檢查
171+
172+
Hugging Face 會檢查 YAML metadata 語法,格式錯誤會有警告(但不影響功能)。
173+
174+
## 使用方式
175+
176+
發布完成後,其他開發者可以這樣使用:
177+
178+
```bash
179+
# 下載所有模型到專案目錄
180+
hf download marsena/paddleocr-test \
181+
--local-dir ./model_cache/paddleocr_onnx \
182+
--exclude "README.md" \
183+
--exclude ".gitattributes"
184+
```
185+
186+
或在 Python 中:
187+
188+
```python
189+
from huggingface_hub import hf_hub_download
190+
import os
191+
192+
model_files = [
193+
"PP-OCRv5_server_det_infer.onnx",
194+
"PP-OCRv5_server_rec_infer.onnx",
195+
"UVDoc_infer.onnx",
196+
"PP-LCNet_x1_0_doc_ori_infer.onnx",
197+
"PP-LCNet_x1_0_textline_ori_infer.onnx",
198+
"PP-OCRv5_server_rec_infer.yml"
199+
]
200+
201+
cache_dir = "model_cache/paddleocr_onnx"
202+
os.makedirs(cache_dir, exist_ok=True)
203+
204+
for file in model_files:
205+
hf_hub_download(
206+
repo_id="marsena/paddleocr-test",
207+
filename=file,
208+
local_dir=cache_dir
209+
)
210+
```
211+
212+
## 小結
213+
214+
整個發布流程花費約 5-8 小時:
215+
216+
- **準備和上傳**:2 小時
217+
- **文檔撰寫**:3 小時
218+
- **系統整合**:2 小時
219+
- **測試驗證**:1 小時
220+
221+
Hugging Face Hub 確實是發布 AI 模型的好選擇,特別是:
222+
223+
1. **無痛 LFS**:大檔案處理完全自動化
224+
2. **全球加速**:下載速度比自建服務快
225+
3. **社群生態**:容易被發現和使用
226+
4. **版本控制**:Git-based,開發者熟悉
227+
228+
如果你也有 ONNX 模型需要分享,不妨考慮 Hugging Face Hub。畢竟專業的事交給專業的平台來做,我們專注在模型本身就好。
229+
230+
## 參考連結
231+
232+
- [發布的模型](https://huggingface.co/marsena/paddleocr-test)
233+
- [Hugging Face 文檔](https://huggingface.co/docs)
234+
- [PaddleOCR 原始專案](https://github.com/PaddlePaddle/PaddleOCR)
235+
236+
(fin)

0 commit comments

Comments
 (0)