Skip to content
PiggyHanHanPublic

About

这是一个基于 PyTorch 实现的 CIFAR-10 图像分类项目

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

CIFAR-10 图像分类项目

这是一个基于 PyTorch 实现的 CIFAR-10 图像分类项目。项目从零开始搭建了一个卷积神经网络(CNN),在 CIFAR-10 数据集上训练并达到了约 75% 的测试准确率。模型能够对真实照片、卡通、油画、像素画等多种风格的图片进行识别,并提供了单张图片预测和批量预测的功能。

📌 项目概述

  • 任务:10 类彩色图像分类(飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车)
  • 框架:PyTorch
  • 模型:自定义 CNN(4 个卷积层 + 2 个全连接层,含 BatchNorm 和 Dropout)
  • 最终性能:
    • CIFAR-10 测试集准确率:75.24%
    • 真实照片测试集准确率:80%
    • 风格化图片(卡通/油画/像素)准确率:67%

🚀 环境配置

本项目在以下环境中开发和测试:

  • Python 3.12
  • CUDA 12.8(支持 RTX 5060 等新一代显卡)
  • PyTorch 2.10+cu128
  • torchvision, torchaudio
  • numpy, matplotlib, pillow, tqdm

安装步骤

  1. 创建 Conda 环境(指定路径):

    conda create --prefix E:\conda_env\cifar10_env python=3.12 -y
    conda activate E:\conda_env\cifar10_env
  2. 安装 PyTorch 和依赖:

    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
    pip install numpy matplotlib pillow tqdm
  3. 验证 GPU 可用性:

    python -c "import torch; print(torch.cuda.is_available())"

    输出应为 True。

📂 数据集

项目使用 CIFAR-10 数据集,包含 60,000 张 32x32 彩色图像,分为 10 类,每类 6,000 张。训练集 50,000 张,测试集 10,000 张。

数据会在第一次运行训练脚本时自动下载到 ./data 目录。

🧠 模型结构

CIFAR10CNN(
  (conv1): Conv2d(3, 32, kernel_size=3, padding=1)
  (bn1): BatchNorm2d(32)
  (conv2): Conv2d(32, 64, kernel_size=3, padding=1)
  (bn2): BatchNorm2d(64)
  (pool): MaxPool2d(2)
  (conv3): Conv2d(64, 128, kernel_size=3, padding=1)
  (bn3): BatchNorm2d(128)
  (conv4): Conv2d(128, 128, kernel_size=3, padding=1)
  (bn4): BatchNorm2d(128)
  (pool2): MaxPool2d(2)
  (fc1): Linear(128*4*4 -> 256)
  (fc2): Linear(256 -> 10)
  (dropout): Dropout(0.25)
)

🏋️ 训练与评估

训练脚本 train_cifar10.py

  • 数据增强:随机水平翻转、随机裁剪(padding=4)
  • 优化器:Adam(lr=0.001, weight_decay=1e-4)
  • 学习率调度:StepLR(每 20 轮衰减一半)
  • 训练轮数:30
  • 保存策略:保存测试集准确率最高的模型为 cifar10_cnn_best.pth

运行训练:

python train_cifar10.py

训练过程中会输出每个 epoch 的损失和准确率,并保存最佳模型。

训练结果示例

Epoch 6 用时: 16.98秒,当前学习率: 0.001000
*** 保存最佳模型,准确率: 75.24% ***
...
训练完成,最佳准确率: 75.24%

🔍 预测

提供了两种预测模式:单张图片预测和批量文件夹预测。脚本 batch_predict_cifar10.py 会自动加载最佳模型。

单张图片预测(支持拖拽)

python batch_predict_cifar10.py 图片路径

例如:

python batch_predict_cifar10.py C:\Users\user\Desktop\cat.jpg

批量预测文件夹(默认 test_imgs)

python batch_predict_cifar10.py

脚本会扫描当前目录下的 test_imgs 文件夹,识别所有图片并输出结果。

预测结果示例

模型加载成功
找到 40 张图片,开始识别...

airplane_cartoon.jpg -> airplane (置信度: 1.0000)
bird_oil.jpg -> frog (置信度: 0.9511)
cat_real.jpg -> cat (置信度: 0.3991)
...
识别完成!

📁 项目结构

CIFAR10/
├── train_cifar10.py            # 训练脚本
├── batch_predict_cifar10.py    # 预测脚本(支持单张/批量)
├── cifar10_cnn_best.pth        # 训练好的最佳模型(生成)
├── test_imgs/                  # 存放测试图片的文件夹(用户自建)
├── data/                       # CIFAR-10 数据集存放位置(自动下载)
└── README.md                   # 项目说明

📊 性能评估

在自行收集的 40 张风格化测试图片(含真实照片、卡通、油画、像素画)上,模型表现如下:

图片类型 准确率
真实照片 80%
卡通 70%
油画 60%
像素画 70%
总体 70%
  • 强类别:飞机、青蛙、鸟等识别稳定。
  • 易混淆:汽车 vs 卡车、猫 vs 狗、鹿 vs 卡车(尤其在艺术风格下)。
  • 低置信度正确:部分真实照片虽然正确,但置信度较低(如猫 0.399),说明特征不够显著。

🚧 后续改进方向

  • 使用更强的数据增强(如颜色抖动、灰度化)提升风格泛化能力。
  • 尝试更深的模型(如 ResNet-18、VGG)以获得更高准确率。
  • 针对特定误分类情况收集少量样本进行微调。

📝 致谢

本项目参考了 PyTorch 官方教程和 CIFAR-10 相关开源项目,并在实际调试中解决了一系列环境兼容性问题(如 CUDA 版本匹配、Windows 多进程数据加载等),最终形成完整可复现的代码。


欢迎 Star 和 Fork! 如有问题,请提交 Issue。

About

这是一个基于 PyTorch 实现的 CIFAR-10 图像分类项目

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages