[OCR Phase3] 实现 OCR 专有数据集微调
## 任务描述
在 OCR 专有数据集上微调 Qwen2-VL 模型,提升特定场景(如表格、公式、手写体)的识别精度。
**关联主 Issue**: #2348 Phase 3: 模型微调与优化
## 任务目标
- [ ] 准备 OCR 微调数据集(包括数据标注和格式转换)
- [ ] 实现 LoRA/QLoRA 微调脚本
- [ ] 实现全参数微调脚本(可选)
- [ ] 实现模型评估和对比流程
- [ ] 提供微调最佳实践文档
## 技术方案
### 1. 数据集准备
**数据来源**:
- 公开数据集:ICDAR 2015, SROIE, FUNSD, DocVQA
- 合成数据集:使用 TextRenderer 生成
- 自定义数据集:业务场景数据(营业执照、身份证、发票等)
**数据格式**:
```json
{
"image": "path/to/image.jpg",
"conversations": [
{
"role": "user",
"content": "<image>\n请识别图像中的所有文字"
},
{
"role": "assistant",
"content": "识别结果:..."
}
]
}
```
**数据规模**:
- 训练集:10,000+ 样本
- 验证集:2,000+ 样本
- 测试集:2,000+ 样本
### 2. LoRA 微调
- 使用 PEFT 库实现 LoRA
- 微调参数:q_proj, v_proj, k_proj, o_proj
- LoRA rank: 8-64(根据任务复杂度调整)
- LoRA alpha: 16-128
- Learning rate: 1e-4 ~ 5e-4
### 3. QLoRA 微调(低资源场景)
- 4-bit 量化 + LoRA
- 适用于显存 < 24GB 场景
- 使用 bitsandbytes 实现
### 4. 全参数微调(可选)
- 仅在大规模数据集(100K+)时使用
- 需要分布式训练支持
- Learning rate: 1e-5 ~ 5e-5
### 5. 训练配置
- Batch size: 4-8 per GPU
- Gradient accumulation: 4-8 steps
- Epochs: 3-10
- Warmup ratio: 0.1
- Weight decay: 0.01
- Max length: 2048 tokens
## 测试要求
### 数据集测试
- [ ] 验证数据集加载正常
- [ ] 检查数据分布和质量
- [ ] 测试数据增强效果
### 训练测试
- [ ] 测试 LoRA 微调流程
- [ ] 测试 QLoRA 微调流程
- [ ] 测试分布式训练(多卡)
- [ ] 测试训练过程中的 checkpoint 保存和恢复
### 评估测试
- [ ] 在验证集上评估模型性能
- [ ] 计算 CER (Character Error Rate)
- [ ] 计算 WER (Word Error Rate)
- [ ] 对比微调前后的精度提升
### 场景测试
- [ ] 表格识别精度测试
- [ ] 公式识别精度测试
- [ ] 手写体识别精度测试
- [ ] 多语言混合文本测试
## 验收标准
- ✅ LoRA 微调在目标数据集上 CER 降低 20% 以上
- ✅ 表格识别精度提升至 95% 以上
- ✅ 公式识别精度提升至 90% 以上
- ✅ 提供完整的训练和评估脚本
- ✅ 提供微调模型权重和配置文件
- ✅ 提供详细的微调文档和最佳实践
## 依赖项
- peft >= 0.7.0 (LoRA 实现)
- bitsandbytes >= 0.41.0 (QLoRA 量化)
- datasets (数据加载)
- accelerate (分布式训练)
## 数据集资源
- [ICDAR 2015](https://rrc.cvc.uab.es/?ch=4)
- [SROIE](https://rrc.cvc.uab.es/?ch=13)
- [FUNSD](https://guillaumejaume.github.io/FUNSD/)
- [DocVQA](https://www.docvqa.org/)
## 优先级
**P1** - 重要功能,提升特定场景的识别精度
## 预计工时
10-15 天(包括数据准备)
0 条评论