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%