机器学习-卷积神经网络CNN中的单通道和多通道图片差异

这篇具有很好参考价值的文章主要介绍了机器学习-卷积神经网络CNN中的单通道和多通道图片差异。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

最近在使用CNN的场景中,既有单通道的图片输入需求,也有多通道的图片输入需求,因此又整理回顾了一下单通道或者多通道卷积的差别,这里记录一下探索过程。

结论

直接给出结论,单通道图片和多通道图片在经历了第一个卷积层以后,就没有单通道或者多通道的区别了,剩下的网络可以采取完全一样的结构。这也为我们使用各种各样的网络架构,resnet,Alexnet,vgg提供了方便,因为他们都是为了跑ImageNet而设计的特定输入。

图解

1.成员介绍

机器学习-卷积神经网络CNN中的单通道和多通道图片差异

在CNN中涉及到的主要就是image kernel bias这三个元素。这里image表示是首层的输入,后边卷积层的impute都是前边的output,与首层操作类似,不再多说。

2.单通道图片卷积过程

机器学习-卷积神经网络CNN中的单通道和多通道图片差异

可以看到,通过对应位置相乘再相加,结合bias,最终得到feature map中的一个元素,所以卷积核的一次计算只得到一个数。当卷积核刷遍整张图片以后,得到了一个完整的feature map。这个东西将作为下一层的输入,传递下去。

通常来说,我们的卷积层不会只有一个kernel,因为一个kernel只能提取图片的一类特征,我们使用CNN的目的就在于应用多个kernel学习到多个特征,下面给出使用两个kernel的例子。

机器学习-卷积神经网络CNN中的单通道和多通道图片差异

每一个kernel都会来一遍上图中获得feature map的过程。最终我们会得到2个feature map,与卷积核的数量一致。

2.RGB三通道图片卷积过程

 机器学习-卷积神经网络CNN中的单通道和多通道图片差异

这里可以看到,图片从一个矩阵变为了3个,这时候kernel也变成了3个矩阵,请注意 ,这三个叫做一个kernel,但是这三个kernel共享一个bias。在卷积运算的时候,这个kernel的三个通道分别与对应的图片通道做卷积,过程与单通道处理是一样的,但是这里由于有三个通道,所以会得到3个数字,而不是之前的一个数字,但是这里的三个数字会直接相加,最终还是一个数字,所以这里就是3通道卷积的trick所在,这里是容易疑惑的一个点,搞明白就好。

机器学习-卷积神经网络CNN中的单通道和多通道图片差异

多个kernel可以类比之前的单通道,总之,结论就是,不管是单通道还是三通道的首个卷积层,都会输出与kernel数量相等的feature map。且不管是不是单通道,只要图片宽高是一样的,单通道和多通道的首个卷积层过后,得到的feature map在维度上是一致的。

 

代码验证

选择了pytorch中的torch.nn.Conv2d来做验证。

1.简单介绍网络的输入参数含义

import torch.nn as nn

# 定义一个二维卷积层
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)

# 假设有一个4维的输入张量 x,形状为 (batch_size, in_channels, height, width)
x = torch.randn(1, 3, 32, 32)

# 在输入张量上应用卷积层
output = conv_layer(x)

# 输出张量的形状为 (batch_size, out_channels, output_height, output_width)

其中,in_channels表示输入张量的通道数,out_channels表示输出张量的通道数(即卷积核的数量),kernel_size表示卷积核的大小,stride表示卷积的步长,padding表示边缘填充的大小。在输入张量上应用卷积层后,输出张量的形状为 (batch_size, out_channels, output_height, output_width)。 

2.为单通道图片设计第一个卷积层,并查看该层的输出

# 设计一个单通道的卷积网络结构
import torch
from torch.autograd import Variable
# 单通道图片模拟输入
input=torch.ones(1,1,64,64)
input=Variable(input)
x=torch.nn.Conv2d(in_channels=1,out_channels=5,kernel_size=3,groups=1)
out=x(input)
print(out.shape)
print(list(x.parameters()))

打印结果

torch.Size([1, 5, 62, 62])
[Parameter containing:
tensor([[[[-0.1166,  0.2381, -0.0446],
          [ 0.0855,  0.1347, -0.2986],
          [-0.3251,  0.2721,  0.2473]]],


        [[[-0.1630,  0.2612,  0.1867],
          [-0.1606, -0.2781, -0.1183],
          [ 0.2221, -0.1114, -0.2046]]],


        [[[-0.2414, -0.2379,  0.0680],
          [ 0.1928, -0.0585,  0.1804],
          [ 0.1891, -0.1915,  0.0281]]],


        [[[-0.3227,  0.0911, -0.0136],
          [-0.2742, -0.2246, -0.1227],
          [ 0.1420,  0.3284, -0.0288]]],


        [[[ 0.2173, -0.1299, -0.2056],
          [-0.2324,  0.2499, -0.1909],
          [ 0.2416, -0.1457, -0.1176]]]], requires_grad=True), 
Parameter containing:
tensor([-0.0273,  0.2994,  0.3226, -0.2969,  0.2965], requires_grad=True)]

这里我们可以看到,第一层的输出结果是有5个feature maps,也就是卷积核的数量。随后我们打印出了第一层的卷积参数,可以看到就是5个卷积核的参数,以及对应的五个bias参数。

3.为RGB三通道图片设计第一个卷积层,并给出参数

# 设计一个3通道的卷积网络结构
import torch
from torch.autograd import Variable
# 模拟RGB三通道图片输入
input=torch.ones(1,3,64,64)
input=Variable(input)
x=torch.nn.Conv2d(in_channels=3,out_channels=5,kernel_size=3,groups=1)
out=x(input)
print(out.shape)
print(list(x.parameters()))

打印输出

torch.Size([1, 5, 62, 62])
[Parameter containing:
tensor([[[[-0.0902, -0.0764,  0.1497],
          [-0.0632, -0.1014, -0.0682],
          [ 0.1309,  0.1173,  0.0268]],

         [[-0.0410, -0.1763,  0.0867],
          [ 0.0771, -0.0969,  0.0700],
          [ 0.1446, -0.0159, -0.1869]],

         [[-0.1278,  0.0244,  0.1861],
          [-0.0180,  0.0529, -0.1475],
          [-0.0562, -0.0487,  0.0659]]],


        [[[ 0.0649, -0.1758, -0.0420],
          [ 0.1287,  0.1500,  0.1027],
          [ 0.0033,  0.1565,  0.1461]],

         [[ 0.0645,  0.0515, -0.0729],
          [ 0.0900,  0.0941,  0.1813],
          [ 0.1846, -0.1075,  0.1861]],

         [[ 0.1489,  0.0536,  0.1510],
          [-0.1070,  0.0748,  0.1619],
          [ 0.1812, -0.0722,  0.1492]]],


        [[[-0.0450, -0.0846,  0.0761],
          [ 0.1049,  0.0492,  0.1556],
          [ 0.1301,  0.0494,  0.0136]],

         [[-0.1303, -0.0979, -0.0331],
          [ 0.0435, -0.0201, -0.1207],
          [ 0.1275, -0.0049, -0.0092]],

         [[ 0.1782,  0.1347,  0.0707],
          [-0.0850,  0.0585,  0.1361],
          [ 0.0917, -0.0156,  0.0407]]],


        [[[ 0.0491,  0.0752,  0.0096],
          [ 0.1599, -0.1281, -0.0937],
          [ 0.1029, -0.1467,  0.1238]],

         [[-0.0651, -0.1169,  0.1772],
          [ 0.0180,  0.1491,  0.0145],
          [ 0.0586,  0.1246,  0.1060]],

         [[-0.1220,  0.0525,  0.1046],
          [ 0.0069,  0.0356,  0.0152],
          [-0.0822, -0.1157, -0.0420]]],


        [[[-0.0679,  0.1752,  0.1020],
          [ 0.0018,  0.0721,  0.1708],
          [-0.0201,  0.1753,  0.0620]],

         [[-0.0023, -0.1203, -0.1113],
          [ 0.1765, -0.1914,  0.0836],
          [-0.0526, -0.1803, -0.0656]],

         [[-0.1735,  0.0795, -0.1867],
          [ 0.1757, -0.0261,  0.0198],
          [-0.1756, -0.0549, -0.0018]]]], requires_grad=True), 
Parameter containing:
tensor([-0.1727,  0.1823,  0.1416, -0.0721, -0.1219], requires_grad=True)]

可以看到,对三通道的图片处理后,输出的也是一样的形状,但是具体再看卷积核,会发现,每个卷积核都有3个通道,而且每个通道的参数是不一样的,但是他们共享一个bias。文章来源地址https://www.toymoban.com/news/detail-410748.html

到了这里,关于机器学习-卷积神经网络CNN中的单通道和多通道图片差异的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【人工智能与机器学习】基于卷积神经网络CNN的猫狗识别

    很巧,笔者在几月前的计算机设计大赛作品设计中也采用了猫狗识别,目前已推国赛评选中 但当时所使用的方法与本次作业要求不太一致,又重新做了一遍,下文将以本次作业要求为主,介绍CNN卷积神经网络实现猫狗识别 猫狗识别和狗品种识别是计算机视觉领域中一个重要

    2024年02月13日
    浏览(54)
  • 【AI机器学习入门与实战】CNN卷积神经网络识别图片验证码案例

    👍【 AI机器学习入门与实战 】目录 🍭 基础篇 🔥 第一篇:【AI机器学习入门与实战】AI 人工智能介绍 🔥 第二篇:【AI机器学习入门与实战】机器学习核心概念理解 🔥 第三篇:【AI机器学习入门与实战】机器学习算法都有哪些分类? 🔥 第四篇:【AI机器学习入门与实战】

    2024年02月02日
    浏览(64)
  • Python中的卷积神经网络(CNN)入门

    卷积神经网络(Convolutional Neural Networks, CNN)是一类特别适用于处理图像数据的深度学习模型。在Python中,我们可以使用流行的深度学习库TensorFlow和Keras来创建和训练一个CNN模型。在本文中,我们将介绍如何使用Keras创建一个简单的CNN模型,并用它对手写数字进行分类。 1. 准备

    2024年01月21日
    浏览(45)
  • 深度学习——CNN卷积神经网络

    卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习中常用于处理具有网格结构数据的神经网络模型。它在计算机视觉领域广泛应用于图像分类、目标检测、图像生成等任务。 CNN 的核心思想是通过利用局部感知和参数共享来捕捉输入数据的空间结构信息。相比于传统

    2024年02月15日
    浏览(48)
  • 深度学习|CNN卷积神经网络

    在CNN没有出现前,图像对人工智能来说非常难处理。 主要原因: 图像要处理的数据量太大了。图像由像素组成,每个像素又由不同颜色组成,一张1000×1000彩色RGB图像需要的参数是1000×1000×3,需要三百万参数左右,普通神经网络会全用全连接方法来学习整幅图像上的特征,处

    2024年02月11日
    浏览(52)
  • 机器学习之计算机视觉中的深度学习:卷积神经网络介绍

    文章代码来源:《deep learning on keras》,非常好的一本书,大家如果英语好,推荐直接阅读该书,如果时间不够,可以看看此系列文章。 在这一章,我们会学习卷积神经网络,一种在计算机视觉中常用的深度学习模型,你将会学着将它们运用到分类问题中。 我们首先会介绍卷

    2024年02月04日
    浏览(71)
  • 深度学习03-卷积神经网络(CNN)

    CNN,即卷积神经网络(Convolutional Neural Network),是一种常用于图像和视频处理的深度学习模型。与传统神经网络相比,CNN 有着更好的处理图像和序列数据的能力,因为它能够自动学习图像中的特征,并提取出最有用的信息。 CNN 的一个核心特点是卷积操作,它可以在图像上进

    2024年02月05日
    浏览(71)
  • 深度学习1.卷积神经网络-CNN

    目录 卷积神经网络 – CNN CNN 解决了什么问题? 需要处理的数据量太大 保留图像特征 人类的视觉原理 卷积神经网络-CNN 的基本原理 卷积——提取特征 池化层(下采样)——数据降维,避免过拟合 全连接层——输出结果 CNN 有哪些实际应用? 总结 百度百科+维基百科 卷积层

    2024年02月11日
    浏览(54)
  • 深度学习入门教学——卷积神经网络CNN

    1、应用领域 检测任务 分类与检索 超分辨率重构 2、卷积网络与传统网咯的区别 传统神经网络和卷积神经网络都是用来 提取特征 的。 神经网络: 可以将其看作是一个二维的。 卷积神经网络: 可以将其看作是一个三维的。  3、整体框架 该层主要是对原始图像数据进行预处

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包