refactor: replace custom Bottleneck model with standard ResNet-34 + Dropout

This commit is contained in:
2026-05-12 15:56:28 +08:00
parent cb17be247e
commit 4575f3390f
2 changed files with 47 additions and 79 deletions
+13 -14
View File
@@ -4,7 +4,7 @@
> 同济大学 Python 人工智能程序设计课程小组作业
基于自定义 ResNet 风格 Bottleneck 架构的 CNN 模型(约 80M 参数),将生活垃圾分为厨余垃圾、可回收物、其他垃圾、有害垃圾四个类别,输入为 256×256 RGB 图像。
基于 ResNet-34 架构的 CNN 模型(约 21M 参数),将生活垃圾分为厨余垃圾、可回收物、其他垃圾、有害垃圾四个类别,输入为 256×256 RGB 图像。
---
@@ -25,7 +25,7 @@
## 项目特点
- **四类垃圾分类**:厨余垃圾(1)、可回收物(2)、其他垃圾(3)、有害垃圾(4)
- **自定义 ResNet Bottleneck 架构**:约 80M 参数,50 层深度残差网络
- **ResNet-34 架构**:约 21M 参数,34 层深度残差网络,含 Dropout 正则化
- **数据增强**:训练时使用随机裁剪、水平翻转、旋转、色彩抖动
- **Macro-F1 评估**:采用宏平均 F1 分数作为主要评估指标,兼顾各类别表现
- **类别加权损失**:自动计算类别权重,缓解类别不平衡问题
@@ -35,28 +35,27 @@
## 模型架构
模型基于残差网络(ResNet)的 Bottleneck 构建块设计
模型基于标准 ResNet-34 架构,使用 BasicBlock 构建。
### Bottleneck 块
### BasicBlock 块
每个 Bottleneck 包含三个卷积层
每个 BasicBlock 包含两个 3x3 卷积层 + 跳跃连接
| 层 | 卷积 | 作用 |
|---|---|---|
| 1x1 Conv | 降维 | 减少通道数,降低计算量 |
| 3x3 Conv | 特征提取 | 核心卷积操作 |
| 1x1 Conv | 升维 (x4) | 恢复通道数至输入的 4 倍 |
| 3x3 Conv | 特征提取 | 第一层卷积 |
| 3x3 Conv | 特征提取 | 第二层卷积 |
### 网络结构
| 阶段 | 块数 | 输出通道数 | 说明 |
|---|---|---|---|
| 初始层 | - | 64 | 7x7 Conv, stride=2 + MaxPool |
| Stage 1 | 3 | 256 | 第一个残差阶段 |
| Stage 2 | 4 | 512 | - |
| Stage 3 | 14 | 1024 | 最深阶段(比 ResNet-50 加深) |
| Stage 4 | 3 | 2048 | 最终残差阶段 |
| 分类头 | - | 4 | 全局平均池化 + 全连接层 |
| Layer1 | 3 | 64 | 第一个残差阶段 |
| Layer2 | 4 | 128 | - |
| Layer3 | 6 | 256 | - |
| Layer4 | 3 | 512 | 最终残差阶段 |
| 分类头 | - | 4 | 全局平均池化 + Dropout + 全连接层 |
## 数据集
@@ -111,7 +110,7 @@
|---|---|
| `Train.py` | 训练主脚本,包含训练循环、验证、评估 |
| `Dataloader.py` | 数据加载模块,包含 RobustImageFolder 和 DataLoader 创建 |
| `Model.py` | 模型定义,Bottleneck 残差块 + Net 主模型 |
| `Model.py` | 模型定义,ResNet-34BasicBlock+ Dropout |
| `Merge_classes.py` | 数据集预处理,265 类合并为 4 类 |
| `best_model.pth` | 训练好的最佳模型权重(约 125 MB) |
| `AGENTS.md` | AI 助手指南(开发辅助) |