构建深度学习图像分类模型识别 37 种猫狗品种 猫狗品种分类数据集的训练及应用
构建深度学习图像分类模型识别 37 种猫狗品种 猫狗品种分类数据集的训练及应用文章目录✅ 一、项目目标✅ 二、系统环境搭建1. 安装 Anaconda推荐2. 创建虚拟环境3. 安装依赖项✅ 三、数据集结构与预处理推荐目录结构数据划分脚本8:1:1✅ 四、使用 YOLOv8 进行图像分类训练推荐1. 创建 data.yaml2. 训练代码调用官方预训练模型✅ 五、推理与评估代码1. 单图推理2. 批量推理3. 模型评估✅ 六、模型导出ONNX / TensorRT✅ 七、应用场景与拓展✅ 八、进阶功能建议1. 增加“猫/狗”一级分类器2. 构建 Web 服务Flask Gradio3. 添加品种百科知识库4. 视频流实时识别以下文字及代码仅供参考学习。数据集描述猫狗品种分类数据集含37个不同类别的猫狗品种每个品种下包含上千张该类猫或狗的图像1非常适合用于训练一个高精度的细粒度图像分类模型可用于宠物识别 App、智能宠物医疗系统、宠物社交平台、宠物店自动化服务等场景。以下是从环境搭建 → 数据准备 → 模型训练 → 推理部署 → 应用拓展的完整技术方案与应用场景指南。✅ 一、项目目标构建深度学习图像分类模型能够准确识别 37 种猫狗品种支持单图/批量/视频流输入可部署于 Web、移动端或边缘设备✅ 二、系统环境搭建1. 安装 Anaconda推荐前往 https://www.anaconda.com/products/distribution 下载并安装。2. 创建虚拟环境conda create-npet_classifierpython3.9conda activate pet_classifier3. 安装依赖项# 安装 PyTorchGPU 版pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118# 安装其他必要库pipinstallultralytics opencv-python numpy matplotlib tqdm scikit-learn pandas pillow tensorboard streamlit gradio flask# 验证 GPUpython-cimport torch; print(torch.cuda.is_available())# 应输出 True✅ 三、数据集结构与预处理推荐目录结构pet_dataset/ ├── train/ │ ├── golden_retriever/ │ ├── siamese_cat/ │ ├── german_shepherd/ │ └── ...共 37 类 ├── val/ │ ├── golden_retriever/ │ └── ... └── test/ ├── golden_retriever/ └── ...✅ 你的数据已经是按类别分文件夹组织直接使用❌ 不是用脚本自动分类。数据划分脚本8:1:1# split_data.pyimportosimportrandomimportshutilfrompathlibimportPath data_dirraw_pets# 原始数据目录output_dirpet_datasetforsplitin[train,val,test]:os.makedirs(os.path.join(output_dir,split),exist_okTrue)# 获取所有子类品种classes[dfordinos.listdir(data_dir)ifos.path.isdir(os.path.join(data_dir,d))]forclsinclasses:cls_pathos.path.join(data_dir,cls)images[fforfinos.listdir(cls_path)iff.lower().endswith((.jpg,.jpeg,.png))]random.shuffle(images)nlen(images)train_filesimages[:int(0.8*n)]val_filesimages[int(0.8*n):int(0.9*n)]test_filesimages[int(0.9*n):]forfiles,subsetinzip([train_files,val_files,test_files],[train,val,test]):dst_diros.path.join(output_dir,subset,cls)os.makedirs(dst_dir,exist_okTrue)forfinfiles:srcos.path.join(cls_path,f)dstos.path.join(dst_dir,f)shutil.copy(src,dst)print(✅ 数据划分完成8:1:1)✅ 四、使用 YOLOv8 进行图像分类训练推荐Ultralytics YOLOv8 支持classify模式适合多类别图像分类任务。1. 创建data.yaml# data.yamltrain:./pet_dataset/trainval:./pet_dataset/valtest:./pet_dataset/test# 类别数量nc:37# 类别名称自动从文件夹名读取也可手动指定names:-golden_retriever-siamese_cat-german_shepherd-bulldog-persian_cat-husky-...共 37 个✅ 提示可用脚本自动提取类别名print([dfordinos.listdir(pet_dataset/train)])2. 训练代码调用官方预训练模型# train.pyfromultralyticsimportYOLO# 加载官方预训练分类模型基于 ImageNetmodelYOLO(yolov8m-cls.pt)# 推荐 medium 模型# 开始训练resultsmodel.train(datadata.yaml,epochs100,# 图像分类通常 50~150 足够batch32,# 显存允许下尽量大imgsz224,# 分类模型标准输入尺寸optimizerAdamW,lr00.001,weight_decay0.0005,momentum0.9,# 数据增强augmentTrue,hsv_h0.015,hsv_s0.7,hsv_v0.4,degrees10.0,translate0.1,scale0.5,flipud0.0,fliplr0.5,# 学习率调度cos_lrTrue,# 早停patience20,# 保存projectruns/classify,namepet_breed_37,saveTrue,save_period10,exist_okFalse,# 缓存cacheTrue) 模型选择建议yolov8s-cls.pt轻量级适合移动端yolov8m-cls.pt平衡精度与速度推荐yolov8l-cls.pt高精度适合服务器端✅ 五、推理与评估代码1. 单图推理modelYOLO(runs/classify/pet_breed_37/weights/best.pt)resultsmodel(dog.jpg)# 获取预测结果probsresults[0].probs.data.cpu().numpy()top5_idxprobs.argsort()[-5:][::-1]namesmodel.namesforiintop5_idx:print(f{names[i]}:{probs[i]:.4f})2. 批量推理resultsmodel.predict(sourcepet_dataset/test,saveTrue,projectruns/predict/classify,nametest_results,imgsz224)3. 模型评估metricsmodel.val(datadata.yaml,splittest)print(fTop-1 Accuracy:{metrics.top1:.4f})print(fTop-5 Accuracy:{metrics.top5:.4f})✅ 六、模型导出ONNX / TensorRT# 导出为 ONNX支持 Web / 移动端model.export(formatonnx,dynamicTrue,opset13,imgsz224)# 导出为 TensorRT高性能部署model.export(formatengine,halfTrue,dynamicTrue,imgsz224)✅ 七、应用场景与拓展应用场景技术实现宠物识别 App用户拍照 → 返回品种 置信度智能宠物医院自动识别品种 → 推荐常见疾病护理方案宠物社交平台上传照片自动打标签增强互动宠物店智能导购识别顾客宠物品种 → 推荐适配商品流浪动物救助快速识别品种 → 匹配领养信息✅ 八、进阶功能建议1. 增加“猫/狗”一级分类器先判断是猫还是狗再进入对应子模型提升准确率。2. 构建 Web 服务Flask GradioimportgradioasgrfromultralyticsimportYOLO modelYOLO(best.pt)defclassify_pet(img):resultsmodel(img)probsresults[0].probs.data.cpu().numpy()return{model.names[i]:float(probs[i])foriinrange(len(probs))}gr.Interface(fnclassify_pet,inputsimage,outputslabel).launch()3. 添加品种百科知识库结合 Wikipedia 或宠物数据库返回品种特征、寿命、习性等。4. 视频流实时识别用 OpenCV 实时识别摄像头中的宠物品种。