FlanChanXwO commited on
Commit
41a0d64
·
verified ·
1 Parent(s): 5e14b6c

Upload docs/zh/TRAINING.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. docs/zh/TRAINING.md +86 -0
docs/zh/TRAINING.md ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 训练与微调
2
+
3
+ ## 环境
4
+
5
+ ```bash
6
+ pip install torch onnx onnxscript pillow numpy opencv-python
7
+ ```
8
+
9
+ ## 从零训练
10
+
11
+ ### 1. 准备数据
12
+
13
+ 标签格式 `labels.json`:
14
+ ```json
15
+ {
16
+ "captcha_001.png": {"label": "4821"},
17
+ "captcha_002.png": {"label": "9037"}
18
+ }
19
+ ```
20
+
21
+ 图片目录:150x60 左右的 RGB 验证码 PNG,文件名与标签键一致。
22
+
23
+ ### 2. 训练
24
+
25
+ ```bash
26
+ python scripts/train_fixed.py \
27
+ <labels.json> <图片目录> <输出.onnx> \
28
+ 0.08 # val 比例
29
+ 500 # epochs
30
+ 1 # 增强开关 (1=开)
31
+ rgb # 输入 RGB (关键: 不要用灰度)
32
+ ```
33
+
34
+ 示例:
35
+ ```bash
36
+ python scripts/train_fixed.py \
37
+ data/1000_labels.json data/1000_raw \
38
+ models/my_model.onnx \
39
+ 0.08 500 1 rgb
40
+ ```
41
+
42
+ 产物:
43
+ - `<输出>.onnx` — 最终 ONNX 模型
44
+ - `<输出>.onnx.pt` — 最优 epoch 的 PyTorch 权重 (best val)
45
+
46
+ ### 3. 推理验证
47
+
48
+ ```python
49
+ import numpy as np, onnxruntime as ort
50
+ from PIL import Image
51
+ sess = ort.InferenceSession("my_model.onnx", providers=["CPUExecutionProvider"])
52
+ im = Image.open("captcha.png").convert("RGB").resize((160,64), Image.BILINEAR)
53
+ x = np.asarray(im, dtype=np.float32).transpose(2,0,1)[None] / 255.0
54
+ logits = sess.run(None, {"input": x})[0]
55
+ code = "".join(str(int(logits[0,p].argmax())) for p in range(4))
56
+ ```
57
+
58
+ ## 微调
59
+
60
+ 从 checkpoint 续训(`train_fixed.py` 检测到 `<输出>.onnx.pt` 存在会自动加载权重):
61
+
62
+ ```bash
63
+ cp models/captcha_1000_raw.onnx.pt models/finetuned.onnx.pt
64
+ python scripts/train_fixed.py <新标签.json> <新图目录> models/finetuned.onnx 0.08 200 1 rgb
65
+ ```
66
+
67
+ - 只标少量新样本(50-200 张)即可适配小幅变化
68
+ - 生成器变化大时建议新旧数据混合训练,避免灾难性遗忘
69
+ - 保持同样的预处理(RGB 160x64 /255,不去噪)和增强配置
70
+
71
+ ## 参数说明
72
+
73
+ | 参数 | 默认 | 说明 |
74
+ |---|---|---|
75
+ | val_frac | 0.1 | 验证集比例 |
76
+ | epochs | 400 | 总训练轮数 |
77
+ | aug | 1 | 增强开关 |
78
+ | rgb | - | 传 `rgb` 启用 3 通道输入(推荐) |
79
+
80
+ ## 关键经验
81
+
82
+ 1. **必须用 RGB,不要灰度** — 验证码数字是彩色的,灰度丢信息。
83
+ 2. **不要图像去噪** — 形态学开运算砍掉细笔画,val 从 88.6% 掉到 79.8%。数据量足够时模型自己学会过滤干扰线。
84
+ 3. **位置保留架构,不要 Global Average Pooling** — GAP 丢空间位置导致 val 归零;按列分组池化(20列→4位置)后立即泛化。
85
+ 4. **人类标注 >> 视觉模型自动标注** — 自动标注 ~35% 噪声会把模型带崩到 0% 命中;手工 100% 干净标签才能学到真实分布。
86
+ 5. **增强不要加高斯噪声** — 验证码本身有干扰线,再加随机噪声会让训练样本面目全非。