logo
0
0
WeChat Login

🐕 Dog Breed Recognition - CNN Classifier

CNB Python PyTorch Streamlit

项目地址: https://cnb.cool/code_free/dogs-cnn

基于深度学习的细粒度犬种识别系统,支持11种常见犬种的精准分类,提供现代化的Web界面和完整的训练推理流水线。

✨ 核心特性

  • 高精度识别: 采用ConvNeXt-Tiny骨干网络,支持11种犬种的细粒度分类
  • 现代化界面: 基于Streamlit的响应式Web应用,支持暗色主题
  • 增强训练: 集成Mixup、RandAugment、EMA、LLRD等先进训练技术
  • 多推理后端: 支持PyTorch原生推理,可选TTA多尺度增强
  • 批量处理: 支持多图批量预测和结果导出
  • 性能优化: 自动GPU内存管理、混合精度训练、torch.compile加速

🐶 支持的犬种类别

中文名英文名类别ID
吉娃娃Chihuahua0
中华田园犬Chinese Rural Dog1
杜宾犬Doberman2
法国斗牛犬French Bulldog3
德国牧羊犬German Shepherd4
金毛寻回犬Golden Retriever5
哈士奇Husky6
拉布拉多猎犬Labrador7
萨摩耶犬Samoyed8
柴犬Shiba Inu9
藏獒Tibetan Mastiff10

🏗️ 项目架构

dogs-cnn/ ├── src/ # 源代码目录 │ ├── app/ # 应用模块 │ ├── core/ # 核心功能 │ │ ├── training/ # 训练相关 │ │ ├── inference/ # 推理相关 │ │ ├── models/ # 模型定义 │ │ └── data/ # 数据处理 │ ├── utils/ # 工具函数 │ ├── config/ # 配置文件 │ ├── __init__.py │ ├── model.py # 模型定义与加载 │ ├── predict.py # 推理接口 │ ├── train.py # 训练入口 │ ├── dataProcess.py # 数据预处理 │ ├── My_dataLoader.py # 数据加载器 │ └── labels.py # 标签映射 ├── models/ # 模型权重目录 ├── data_split/ # 处理后的数据集 │ ├── train/ # 训练集 │ ├── val/ # 验证集 │ └── test/ # 测试集 ├── pet_dog/ # 原始数据目录 ├── scripts/ # 脚本目录 │ ├── train.sh # 训练脚本 │ └── run_app.sh # 应用启动脚本 ├── requirements.txt # Python依赖 ├── README.md # 项目说明 └── .cnb.yml # 部署配置

🚀 快速开始

环境配置

# 安装依赖 pip install -r requirements.txt # 或使用conda创建环境 conda create -n dog-cnn python=3.9 conda activate dog-cnn pip install -r requirements.txt

数据准备

# 自动分割数据集(训练/验证/测试) python -m src.dataProcess # 查看数据统计 python -c " from src.dataProcess import print_split_stats print_split_stats('data_split') "

模型训练

# 使用默认配置训练 bash ./scripts/train.sh # 或手动训练 python -m src.train --epochs 50 --batch-size 32 --lr 1e-4

启动应用

# 启动Streamlit应用 bash ./scripts/run_app.sh # 或直接运行 streamlit run src/app/app.py ## 🌐 在线访问 项目已部署在 CNB 平台,可直接访问使用: - **应用地址**: https://cnb.cool/code_free/dogs-cnn - **Git 仓库**: https://cnb.cool/code_free/dogs-cnn.git

🎯 模型详情

架构选择

  1. EnhancedDogBreedCNN (推荐)

    • 骨干网络: ConvNeXt-Tiny (ImageNet预训练)
    • 输入尺寸: 224×224
    • 参数量: ~28M
    • 特点: 迁移学习、更好的泛化能力
  2. DogBreedCNN (基础)

    • 自定义CNN架构
    • 4个卷积块 + 3个全连接层
    • 参数量: ~35M
    • 特点: 从头训练、完全可控

训练特性

  • 数据增强: RandomResizedCrop, HorizontalFlip, ColorJitter, RandAugment
  • 优化策略: AdamW + CosineAnnealingWarmRestarts
  • 正则化: Label Smoothing, Weight Decay, Gradient Clipping
  • 高级技术: Mixup, EMA, Layer-wise Learning Rate Decay
  • 性能优化: Automatic Mixed Precision, torch.compile, GPU内存动态分配

📊 性能表现

在标准测试集上的表现:

指标数值
训练准确率~98.5%
验证准确率~92.3%
测试准确率~91.8%
推理速度 (GPU)~15ms/张
推理速度 (CPU)~120ms/张

🔧 高级用法

批量预测

from src.predict import batch_predict # 批量处理图片列表 image_paths = ['dog1.jpg', 'dog2.jpg', 'dog3.jpg'] results = batch_predict(image_paths, model_path='models/best_model.pth')

TTA增强推理

from src.predict import tta_predict # 使用测试时增强 probs = tta_predict('dog.jpg', hflip=True, scales=[1.0, 1.2])

模型导出

from src.model import export_to_onnx # 导出为ONNX格式 model = load_model('models/best_model.pth') export_to_onnx(model, 'models/model.onnx')

🐛 常见问题

Q: 训练时显存不足?

A: 启用自动批次大小调整,或减小--batch-size参数

Q: 识别结果不准确?

A: 确保训练数据充足,尝试启用TTA增强

Q: 如何添加新的犬种?

A: 在src/labels.py中添加映射,重新准备数据并训练

Q: 模型加载失败?

A: 检查模型路径,确保使用兼容的PyTorch版本

📝 开发指南

代码规范

  • 遵循PEP8规范
  • 使用类型注解
  • 模块化设计,高内聚低耦合

扩展开发

  1. 添加新的数据增强策略
  2. 实现新的模型架构
  3. 集成其他推理后端(TensorRT, OpenVINO)
  4. 添加模型解释性功能

🤝 贡献

欢迎提交Issue和合并请求!

  1. 克隆本项目 (git clone https://cnb.cool/code_free/dogs-cnn.git)
  2. 创建特性分支 (git checkout -b feature/你的功能名称)
  3. 提交更改 (git commit -m 描述你的更改(如:Add new dog breed label))
  4. 推送到分支 (git push origin feature/你的功能名称)
  5. 申请合并到主分支

📄 许可证

本项目采用MIT许可证,详见LICENSE文件。

🙏 致谢

  • 感谢PyTorch团队提供的深度学习框架
  • 感谢Streamlit团队提供的Web应用框架
  • 感谢所有贡献者和用户的支持
  • 感谢清华团队提供的训练图片

注意: 本项目仅供学习和研究使用。商业使用请确保遵守相关法律法规。

About

基于深度学习的细粒度犬种识别系统,支持11种常见犬种的精准分类,提供现代化的Web界面和完整的训练推理流水线。

DOGCNN
Language
Python78.5%
Markdown14.4%
Dockerfile3.3%
Shell1.6%
Others2.2%