3DCNN概述及3DCNN与2DCNN的区别

前言

由于做课题需要运用到3DCNN的知识,所以需要对3DCNN有关知识进行了解和梳理。这篇博客主要介绍了3DCNN的概念、3DCNN工作原理以及3DCNN与2DCNN的区别。这也是本人第一次编写博客,在内容上如有问题,欢迎指出。

文中图片除特殊标注外其他来自于论文:3D Convolutional Neural Networks for Human Action Recognition

1、3DCNN的概念及3DCNN与2DCNN的区别

2DCNN是输入为高度H*宽度W的二维矩阵,是在单通道的一帧图像上进行滑窗操作,这种方式没有考虑到时间维度的帧间运动信息。

 而3DCNN有三个维度,分别为图像宽度W,图像高度H以及图像通道,过滤器深度<图像深度,卷积核可以在三个方向上移动,使用3D CNN能更好的捕获视频中的时间和空间的特征信息。

注:此图来自于CSDN博主「YOULANSHENGMENG」

如下图所示,a)和b)分别为2D卷积用于单通道图像和多通道图像的情况(此处多通道图像可以指同一张图片的3个颜色通道,也指多张堆叠在一起的图片,即一小段视频),对于一个滤波器,输出为一张二维的特征图,多通道的信息被完全压缩了。而c)中的3D卷积的输出仍然为3D的特征图。也就是说采用2D CNN对视频进行操作的方式,一般都是对视频的每一帧图像分别利用CNN来进行识别,这种方式的识别没有考虑到时间维度的帧间运动信息,而使用3D CNN能更好的捕获视频中的时间和空间的特征信息。

注:此处为CSDN博主「YOULANSHENGMENG」的原创文章
原文链接:https://blog.csdn.net/YOULANSHENGMENG/article/details/121328554

 2、3DCNN工作原理

3D卷积是通过堆叠多个连续的帧为一个立方体,在立方体中运用3D卷积核,在这个结构中,卷积层中每一个特征map都会与上一层中多个邻近的连续帧相连,因此捕捉运动信息。下图则表达了该过程:

注:相同颜色的连线代表了相同的权值,可以采用多种卷积核,以提取多种特征 。

例如黑色连线同时卷积了相邻的两帧图像,并且运用的是相同的权值,得到的输出即可表达两帧之间的运动变化。

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于3D卷积神经网络(3D CNN)的PyTorch实现,以下是一个简单的示例代码: ```python import torch import torch.nn as nn # 定义3D CNN模型 class CNN3D(nn.Module): def __init__(self): super(CNN3D, self).__init__() self.conv1 = nn.Conv3d(1, 16, kernel_size=3, stride=1, padding=1) self.relu = nn.ReLU() self.pool = nn.MaxPool3d(kernel_size=2, stride=2) self.fc = nn.Linear(16 * 8 * 8 * 8, 10) # 假设输入为8x8x8大小的体积数据 def forward(self, x): x = self.conv1(x) x = self.relu(x) x = self.pool(x) x = x.view(x.size(0), -1) x = self.fc(x) return x # 创建模型实例 model = CNN3D() # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) # 假设你有3D体积数据作为输入 input_data = torch.randn(32,1, 8, 8, 8) targets = torch.randint(0, 10, (32,)) # 训练模型 for epoch in range(10): optimizer.zero_grad() outputs = model(input_data) loss = criterion(outputs, targets) loss.backward() optimizer.step() print(f"Epoch {epoch+1}/{10}, Loss: {loss.item():.4f}") ``` 这个示例代码定义了一个简单的3D CNN模型(`CNN3D`),其中包含一个3D卷积层、ReLU激活函数、3D最大池化层和全连接层。你可以根据自己的需求修改模型结构和参数。训练过程中使用交叉熵损失函数和Adam优化器进行模型优化。输入数据的维度为32x1x8x8x8,输出类别数为10。 希望这个示例可以帮助你开始使用PyTorch进行3D CNN的实现。如果有更多问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值