3D ResNet-101 PyTorch 复现指南:从 2D 到 3D 卷积的 5 个关键改动点
3D ResNet-101 PyTorch 复现指南从 2D 到 3D 卷积的 5 个关键改动点1. 理解 3D 卷积的核心差异在视频分析和医学影像处理中传统 2D 卷积神经网络无法捕捉时序信息。3D 卷积通过在空间维度H×W基础上增加时间维度 T形成真正的三维卷积核K×K×K。这种结构能同时提取空间和时间特征但对计算资源的需求呈指数级增长。关键参数对比表参数类型2D 卷积3D 卷积输入维度(C, H, W)(C, D, H, W)卷积核形状(K, K)(K, K, K)输出特征图(C, H, W)(C, D, H, W)计算复杂度O(K²·C·C·H·W)O(K³·C·C·D·H·W)提示在 PyTorch 中3D 卷积使用nn.Conv3d其参数顺序为 (in_channels, out_channels, kernel_size, stride, padding)2. 基础结构改造卷积与池化层2.1 卷积层升级将原始 ResNet-101 的所有nn.Conv2d替换为nn.Conv3d特别注意第一个卷积层的改动# 原始 2D 版本 self.conv1 nn.Conv2d(3, 64, kernel_size7, stride2, padding3) # 3D 改造版本 self.conv1 nn.Conv3d(3, 64, kernel_size(3,7,7), stride(1,2,2), padding(1,3,3))这里的时间维度 stride 设为 1避免过早压缩时序信息。2.2 池化层适配最大池化层需要同步升级# 2D 池化 nn.MaxPool2d(kernel_size3, stride2, padding1) # 3D 池化 nn.MaxPool3d(kernel_size(1,3,3), stride(1,2,2), padding(0,1,1))3. 残差块的时空改造3.1 Bottleneck 结构调整ResNet-101 的核心是 Bottleneck 块其 3D 改造需要特别注意维度匹配class Bottleneck3D(nn.Module): expansion 4 def __init__(self, in_planes, planes, stride1, downsampleNone): super().__init__() self.conv1 nn.Conv3d(in_planes, planes, kernel_size1, biasFalse) self.bn1 nn.BatchNorm3d(planes) self.conv2 nn.Conv3d(planes, planes, kernel_size3, stridestride, padding1, biasFalse) self.bn2 nn.BatchNorm3d(planes) self.conv3 nn.Conv3d(planes, planes*self.expansion, kernel_size1, biasFalse) self.bn3 nn.BatchNorm3d(planes*self.expansion) self.relu nn.ReLU(inplaceTrue) self.downsample downsample3.2 下采样处理当需要进行维度匹配时下采样模块也需要 3D 化downsample nn.Sequential( nn.Conv3d(self.in_planes, planes * block.expansion, kernel_size1, stridestride, biasFalse), nn.BatchNorm3d(planes * block.expansion) )4. 批归一化与初始化调整4.1 3D 批归一化所有nn.BatchNorm2d需替换为nn.BatchNorm3dself.bn1 nn.BatchNorm3d(64) # 替换原 bn14.2 参数初始化3D 卷积建议使用 Kaiming 初始化for m in self.modules(): if isinstance(m, nn.Conv3d): nn.init.kaiming_normal_(m.weight, modefan_out) elif isinstance(m, nn.BatchNorm3d): nn.init.constant_(m.weight, 1) nn.init.constant_(m.bias, 0)5. 输出层与全局池化5.1 时空池化策略3D 特征图需要特殊处理全局池化last_duration int(math.ceil(sample_duration / 16)) # 时间维度下采样 last_size int(math.ceil(sample_size / 32)) # 空间维度下采样 self.avgpool nn.AvgPool3d((last_duration, last_size, last_size))5.2 全连接层调整输出特征需要展平为 (batch_size, features)x x.view(x.size(0), -1) # 保持 batch 维度 x self.fc(x)完整模型实现以下是整合后的 3D ResNet-101 核心代码class ResNet3D(nn.Module): def __init__(self, block, layers, sample_size112, sample_duration16, num_classes400): super().__init__() self.in_planes 64 self.conv1 nn.Conv3d(3, 64, kernel_size(3,7,7), stride(1,2,2), padding(1,3,3), biasFalse) self.bn1 nn.BatchNorm3d(64) self.relu nn.ReLU(inplaceTrue) self.maxpool nn.MaxPool3d(kernel_size(1,3,3), stride(1,2,2), padding(0,1,1)) self.layer1 self._make_layer(block, 64, layers[0]) self.layer2 self._make_layer(block, 128, layers[1], stride2) self.layer3 self._make_layer(block, 256, layers[2], stride2) self.layer4 self._make_layer(block, 512, layers[3], stride2) last_duration math.ceil(sample_duration / 16) last_size math.ceil(sample_size / 32) self.avgpool nn.AvgPool3d((last_duration, last_size, last_size)) self.fc nn.Linear(512 * block.expansion, num_classes) for m in self.modules(): if isinstance(m, nn.Conv3d): nn.init.kaiming_normal_(m.weight, modefan_out) elif isinstance(m, nn.BatchNorm3d): nn.init.constant_(m.weight, 1) nn.init.constant_(m.bias, 0) def _make_layer(self, block, planes, blocks, stride1): downsample None if stride ! 1 or self.in_planes ! planes * block.expansion: downsample nn.Sequential( nn.Conv3d(self.in_planes, planes * block.expansion, kernel_size1, stridestride, biasFalse), nn.BatchNorm3d(planes * block.expansion) ) layers [] layers.append(block(self.in_planes, planes, stride, downsample)) self.in_planes planes * block.expansion for _ in range(1, blocks): layers.append(block(self.in_planes, planes)) return nn.Sequential(*layers)实际应用建议输入预处理视频数据建议采样固定帧数如16/32帧医学影像需保持切片间距一致显存优化使用梯度检查点gradient checkpointing尝试混合精度训练减小初始输入分辨率迁移学习2D 预训练权重可通过重复扩展至3D时间维度权重初始化为均值或中心高斯分布def inflate_2d_to_3d(conv2d, time_dim3, centerTrue): weight_2d conv2d.weight.data if center: weight_3d torch.zeros(*((time_dim,) weight_2d.shape)) middle time_dim // 2 weight_3d[middle] weight_2d.clone() else: weight_3d weight_2d.unsqueeze(2).repeat(1,1,time_dim,1,1) / time_dim return weight_3d

相关新闻

计算机毕业设计Flink+Kafka深圳智慧交通拥堵预测系统 智慧交通可视化大屏 交通实时治理决策系统 交通大数据(源码+LW+PPT+讲解)

计算机毕业设计Flink+Kafka深圳智慧交通拥堵预测系统 智慧交通可视化大屏 交通实时治理决策系统 交通大数据(源码+LW+PPT+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/7/7 6:33:16阅读更多 →
低查重的AI教材生成秘诀!3款AI工具实测,快速编写高质量教材!

低查重的AI教材生成秘诀!3款AI工具实测,快速编写高质量教材!

在教材编写的过程中,找到原创性与合规性之间的平衡点是一个非常重要的问题。许多作者在借鉴优秀教材内容时,总是担心查重率会超过标准;而在尝试原创表述时,又会顾虑逻辑是否严谨以及内容的准确性。引用他人研究成果时,…

2026/7/7 6:33:16阅读更多 →
WaveTools:一键解锁《鸣潮》120FPS高帧率与画质优化完整指南

WaveTools:一键解锁《鸣潮》120FPS高帧率与画质优化完整指南

WaveTools:一键解锁《鸣潮》120FPS高帧率与画质优化完整指南 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 还在为《鸣潮》默认60FPS限制而烦恼吗?你是否拥有高端显卡却无法在游戏…

2026/7/7 6:33:16阅读更多 →
【昇腾】在华为昇腾 910B4 上使用 vllm-ascend 跑通 Gemma 4 31B 全记录

【昇腾】在华为昇腾 910B4 上使用 vllm-ascend 跑通 Gemma 4 31B 全记录

前提:本文写在 vllm-ascend:nightly-releases-v0.22.1rc-openeuler 发布的时候,这个时候 vllm-ascend 官方还没有支持 gemma 4,但官方 github 中已经有关于 gemma 4 的 PR:https://github.com/vllm-project/vllm-ascend/pull/9222…

2026/7/7 7:53:20阅读更多 →
计算机毕业设计之基于yolov8的服装检测识别

计算机毕业设计之基于yolov8的服装检测识别

随着电子商务和智能零售的兴起,服装检测识别技术在提升购物体验和优化供应链管理中扮演着重要角色。yolov8作为一种先进的深度学习目标检测算法,为服装检测识别领域带来了新的突破。本文旨在探讨基于yolov8的服装检测识别技术,概述其算法原理…

2026/7/7 7:53:20阅读更多 →
Ubuntu 22.04 安装 MATLAB R2025a 全流程故障预判与 GUI 稳定性加固

Ubuntu 22.04 安装 MATLAB R2025a 全流程故障预判与 GUI 稳定性加固

1. 为什么在 Ubuntu 22.04 上装 MATLAB R2025a 不是“点下一步”那么简单你搜到这个标题,大概率正卡在某个环节:下载完安装包双击没反应、终端里敲./install报一堆 Java 错误、装完启动时弹出“License Manager Error”、或者更糟——MATLAB 窗口开了但菜…

2026/7/7 7:53:20阅读更多 →
Minecraft基岩版启动器完全指南:如何免费管理多版本游戏

Minecraft基岩版启动器完全指南:如何免费管理多版本游戏

Minecraft基岩版启动器完全指南:如何免费管理多版本游戏 【免费下载链接】BedrockLauncher 项目地址: https://gitcode.com/gh_mirrors/be/BedrockLauncher BedrockLauncher是一款功能强大的Minecraft基岩版启动器,专为Windows平台设计&#xff…

2026/7/7 7:53:20阅读更多 →
打通AI的工具生态-MCP协议实战

打通AI的工具生态-MCP协议实战

一篇文章的Function Calling让AI获得了"做事"的能力。但你可能注意到了一个问题: // Function Calling:工具在编译时就写死了 var options new ChatOptions {Tools [AIFunctionFactory.Create(GetWeatherInfo), // 写死在代码里AIFunction…

2026/7/7 7:53:20阅读更多 →
Agentic AI与低代码平台融合:企业智能体应用构建指南

Agentic AI与低代码平台融合:企业智能体应用构建指南

前言 Fortune Business Insights报告显示,全球Agentic AI市场从2025年72.9亿美元→2026年91.4亿美元→2034年1391.9亿美元。Gartner判断2026年40%企业级应用将内置AI智能体(2025年不到5%),但同时超40%的Agentic AI项目将因成本失控…

2026/7/7 7:48:20阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/7 4:43:43阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/7 2:56:31阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/7 1:03:28阅读更多 →
Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

Acunetix v24.8 深度解析:DAST漏洞扫描器核心原理与DevSecOps实践

1. 项目概述:Acunetix v24.8 高级版漏洞扫描器深度解析作为一名在网络安全领域摸爬滚打多年的老兵,我深知一款趁手的“兵器”对于安全测试工作意味着什么。今天要聊的,就是Web应用安全测试领域里一个响当当的名字——Acunetix。特别是其v24.8…

2026/7/7 0:02:41阅读更多 →
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

2026/7/7 0:02:41阅读更多 →
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

2026/7/7 0:02:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/7 5:11:21阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/7 5:11:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/7 5:11:21阅读更多 →