Files
digit-cracker/PROJECT_STRUCTURE.md
2025-10-30 15:40:56 +08:00

8.9 KiB
Raw Blame History

项目结构说明

📁 目录结构

digit_cracker/
├── README.md                              # 完整项目文档
├── QUICKSTART.md                          # 快速开始指南
├── FINAL_REPORT.md                        # 项目完成报告
├── PROJECT_STRUCTURE.md                   # 本文件
├── run.sh                                 # 交互式运行脚本
├── .gitignore                             # Git忽略文件配置
│
├── scripts/                               # Python脚本目录
│   ├── prepare_yolo_dataset.py            # [1] COCO→YOLO数据集转换
│   ├── train_yolo.py                      # [2] YOLO模型训练
│   ├── predict_digits.py                  # [3] 基础数字识别
│   ├── predict_digits_improved.py         # [4] 改进版数字识别 ⭐推荐
│   ├── preprocess_images.py               # [5] 图片预处理工具
│   ├── train_with_preprocessing.py        # [6] 预处理+训练流程
│   ├── compare_results.py                 # [7] 结果对比工具
│   └── run_all.py                         # [8] 完整流程自动化
│
├── digit-validation/                      # 原始训练数据COCO格式
│   ├── coco.json                          # COCO标注文件
│   └── images/                            # 训练图片49张
│
├── valid/                                 # 待识别图片15张
│   ├── YZM.jpeg
│   ├── YZM-2.jpeg
│   └── ...
│
├── yolo_dataset/                          # YOLO格式数据集
│   ├── dataset.yaml                       # 数据集配置文件
│   ├── images/                            # 图片(训练集+验证集)
│   │   ├── train/                         # 训练集图片39张
│   │   └── val/                           # 验证集图片10张
│   └── labels/                            # YOLO格式标注
│       ├── train/                         # 训练集标注(.txt
│       └── val/                           # 验证集标注(.txt
│
├── runs/                                  # 训练输出目录
│   └── digit_yolo/                        # YOLO训练实验
│       ├── exp1/                          # 基础模型100轮无预处理
│       │   ├── weights/
│       │   │   ├── best.pt                # 最佳权重
│       │   │   └── last.pt                # 最后权重
│       │   ├── results.csv                # 训练指标
│       │   └── args.yaml                  # 训练参数
│       │
│       └── exp_preprocessed_color_150/    # 优化模型150轮CLAHE预处理⭐最佳
│           ├── weights/
│           │   ├── best.pt                # 最佳权重5.9MB)⭐⭐⭐
│           │   └── last.pt                # 最后权重5.9MB
│           ├── results.csv                # 训练指标
│           └── args.yaml                  # 训练参数
│
├── results/                               # 识别结果目录
│   ├── predictions.txt                    # 最新识别结果
│   ├── predictions_improved.txt           # 改进版识别结果
│   └── visualizations/                    # 可视化标注图片
│
└── yolov8n.pt                             # YOLOv8n预训练模型6.2MB

📝 文件说明

核心脚本

1. prepare_yolo_dataset.py - 数据集准备

功能: 将COCO格式数据集转换为YOLO格式 输入: digit-validation/coco.json 输出: yolo_dataset/ (包含images和labels) 用法:

python scripts/prepare_yolo_dataset.py

2. train_yolo.py - 模型训练

功能: 训练YOLO模型 参数:

  • --data: 数据集配置文件dataset.yaml
  • --model: 预训练模型yolov8n.pt
  • --epochs: 训练轮数
  • --batch: 批次大小
  • --name: 实验名称 用法:
python scripts/train_yolo.py --epochs 150 --name my_experiment

3. predict_digits.py - 基础识别

功能: 基础版数字识别(无智能过滤) 参数:

  • --model: 模型路径
  • --source: 图片目录
  • --conf: 置信度阈值默认0.25
  • --save-vis: 保存可视化结果 用法:
python scripts/predict_digits.py --model runs/digit_yolo/exp1/weights/best.pt

4. predict_digits_improved.py - 改进版识别

功能: 带智能过滤的数字识别(推荐使用) 特性:

  • 置信度过滤
  • 位置异常检测
  • 数量异常处理(<4或>4个数字
  • 从左到右排序 用法:
python scripts/predict_digits_improved.py \
    --model runs/digit_yolo/exp_preprocessed_color_150/weights/best.pt \
    --source valid \
    --conf 0.2 \
    --save-vis

5. preprocess_images.py - 图片预处理

功能: 对图片进行预处理以提升识别效果 预处理方法:

  • auto: 自动增强(去噪+锐化)
  • clahe: 对比度限制自适应直方图均衡化 推荐
  • binary: 自适应二值化
  • denoise: 去噪
  • sharpen: 锐化
  • combined: 组合方法 参数:
  • --input-dir: 输入图片目录
  • --output-dir: 输出目录
  • --method: 预处理方法
  • --keep-color: 保持彩色(重要!) 用法:
python scripts/preprocess_images.py \
    --input-dir digit-validation/images \
    --output-dir digit-validation-processed \
    --method clahe \
    --keep-color

6. train_with_preprocessing.py - 完整训练流程

功能: 自动化预处理+训练+测试流程 流程:

  1. 预处理训练图片
  2. 准备YOLO数据集
  3. 训练模型
  4. 测试识别效果 用法:
python scripts/train_with_preprocessing.py \
    --preprocess-method clahe \
    --keep-color \
    --epochs 150 \
    --exp-name my_experiment

7. compare_results.py - 结果对比

功能: 对比不同模型的识别效果 输出: Markdown格式的对比报告 用法:

python scripts/compare_results.py \
    --original results/predictions_improved.txt \
    --preprocessed results/predictions_exp_preprocessed_150.txt

8. run_all.py - 完整流程自动化

功能: 一键运行完整训练+识别流程 用法:

python scripts/run_all.py --epochs 100

配置文件

yolo_dataset/dataset.yaml

YOLO数据集配置文件定义了

  • 数据集路径
  • 类别数量10个0-9
  • 类别名称

runs/digit_yolo/*/args.yaml

每次训练的参数记录

输出文件

训练输出

  • runs/digit_yolo/*/weights/best.pt: 最佳模型权重
  • runs/digit_yolo/*/weights/last.pt: 最后轮次权重
  • runs/digit_yolo/*/results.csv: 训练指标loss, mAP等

识别输出

  • results/predictions*.txt: 识别结果(制表符分隔)
  • results/visualizations*/: 带标注的可视化图片

🚀 使用流程

场景1: 直接使用最佳模型识别

# 1. 激活环境
source ~/venv/bin/activate

# 2. 运行识别
python scripts/predict_digits_improved.py \
    --model runs/digit_yolo/exp_preprocessed_color_150/weights/best.pt \
    --source valid \
    --conf 0.2 \
    --save-vis

# 3. 查看结果
cat results/predictions_improved.txt

场景2: 重新训练模型

# 使用CLAHE预处理 + 150轮训练
python scripts/train_with_preprocessing.py \
    --preprocess-method clahe \
    --keep-color \
    --epochs 150 \
    --exp-name my_retrain

场景3: 使用交互式脚本

./run.sh
# 然后根据菜单选择操作

📊 数据流向

原始COCO数据
    ↓
[prepare_yolo_dataset.py]
    ↓
YOLO格式数据 (yolo_dataset/)
    ↓
[preprocess_images.py] (可选)
    ↓
预处理数据
    ↓
[train_yolo.py]
    ↓
训练好的模型 (runs/digit_yolo/)
    ↓
[predict_digits_improved.py]
    ↓
识别结果 (results/)

🎯 关键文件

  1. 最佳模型: runs/digit_yolo/exp_preprocessed_color_150/weights/best.pt
  2. 推荐脚本: scripts/predict_digits_improved.py
  3. 完整流程: scripts/train_with_preprocessing.py
  4. 快速运行: run.sh

💡 文件命名规范

  • 训练实验: exp_<方法>_<轮数> (如 exp_preprocessed_color_150)
  • 识别结果: predictions_<配置>.txt (如 predictions_improved.txt)
  • 可视化: visualizations_<配置>/ (如 visualizations_improved/)

🧹 已清理文件

以下文件已被清理(不再需要):

  • 失败的灰度预处理实验数据
  • 早期验证实验exp1_val, exp1_valid
  • 过时的预测结果
  • 临时预处理文档
  • 初始待办清单

📦 依赖安装

pip install ultralytics opencv-python numpy tqdm matplotlib

🔗 相关文档


最后更新: 2025-10-30