Skip to content

Repository files navigation

ResNet 论文精读与源码注释报告

> 基于 PyTorch 官方实现(torchvision.models.resnet)的逐行解读与论文核心思想系统梳理。

Python PyTorch License


📖 项目简介

本项目是《Deep Residual Learning for Image Recognition》(CVPR 2016 Best Paper)的精读作业,包含两大核心模块:

  1. 源代码注释报告 —— 对 PyTorch Vision 官方 resnet.py(约 670 行)进行逐段精读与中文注释,覆盖 BasicBlockBottleneckResNet 主类、工厂函数及扩展变体(ResNeXt / Wide ResNet)。
  2. 论文补充章节 —— 系统梳理论文核心方法、网络结构详解、实验结果分析、同期方法横向对比,以及完整的 PyTorch 使用示例(推理 / 微调 / 特征提取)。

🎯 内容概览

一、源码精读(文档 1)

章节 核心内容
辅助函数 conv3x3 / conv1x1 的设计动机(无 bias、分组/空洞卷积支持)
BasicBlock 浅层残差块(ResNet-18/34)的 __init__forward 详解
Bottleneck 深层瓶颈块(ResNet-50+)的降维-卷积-升维策略,ResNet V1.5 改动说明
ResNet 主类 _make_layer 构建逻辑、Kaiming 初始化、zero_init_residual 技巧
工厂函数 resnet18 ~ resnet152 的参数对比表,预训练权重加载机制
扩展变体 ResNeXt(分组卷积)与 Wide ResNet(通道加倍)的参数化实现

二、论文精读与实战(文档 2)

章节 核心内容
退化问题 从 CIFAR-10 实验数据揭示深层网络退化本质(非过拟合,乃优化困难)
残差框架 H(x) = F(x) + x 的数学本质与梯度反传分析
设计选择 BasicBlock vs Bottleneck、三种 shortcut 方案对比、BN 前置规范
结构详解 ResNet-50 层级结构、张量形状变化路径、感受野增长规律
实验结果 ImageNet LSVRC 2015、CIFAR-10 超深网络(1202层)、迁移学习(检测/分割)
横向对比 与 AlexNet / VGG / GoogLeNet / Highway Net / DenseNet 的架构哲学对比
使用示例 预训练模型加载、图像预处理、推理流程、微调(Fine-tuning)、多尺度特征提取
常见问题 model.eval() 遗忘、学习率设置、OOM 排查等工程陷阱

✨ 核心亮点

  • 逐行注释:不仅解释“代码做了什么”,更解释“为什么这样设计”(如 bias=False 与 BN 的关系、inplace=True 的显存优化)。
  • 公式与代码对照:将论文中的残差公式 ∂loss/∂x = ∂loss/∂out · (∂F/∂x + I) 与 PyTorch 的 out += identity 直接映射。
  • 工程细节:涵盖 TorchVision V2 权重 API、zero_init_residual 训练技巧、分层学习率微调策略。
  • 参数化之美:通过 _make_layerblock 类型与 layers 列表,一套代码覆盖 18~152 层所有变体,展现框架设计的扩展性。

🚀 快速开始(示例代码)

from torchvision.models import resnet50, ResNet50_Weights

# 加载最佳预训练权重
weights = ResNet50_Weights.DEFAULT
model = resnet50(weights=weights)
model.eval()

# 获取配套预处理
preprocess = weights.transforms()

# 推理
with torch.no_grad():
    logits = model(batch)
    probs = torch.softmax(logits, dim=1)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors