深度学习基础:8.卷积与池化(代码片段)

zstar-_ zstar-_     2022-11-29     454

关键词:

从本篇开始,将进入到深度学习的计算机视觉领域,在此之前有必要对传统 图像处理方法做个回顾。

传统图像处理

在我的【计算机视觉】基础图像知识点整理【计算机视觉】数字图像处理基础知识题这两篇博文中,对于计算机视觉的基本知识有过梳理,并使用matlab进行了图像处理操作。在本节内容中,将使用python的opencv库,再次尝试对图像进行基本处理。

读入图片并显示:

import numpy as np
import matplotlib.pyplot as plt
import cv2

img = cv2.imread('photo.jpg')
#OpenCV在读取图像时会默认图像通道的顺序是BGR,将其转换为RGB
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.figure(dpi=150) # dpi-分辨率
plt.imshow(img)
plt.axis('off'); #不显示坐标轴

显示原图如图所示:

注意:OpenCV默认图像通道的顺序是BGR,如果不进行转换,三通道红色和蓝色通道会交换,变成这样…

画面调整

画面亮度调整

首先对图片像素进行归一化方便处理,直接让图片三通道的数值增大,画面会被调亮;反之画面被调暗。

#调亮画面
img = img/255
img_ = np.clip(img + 100/255,0,1) #np.clip 将数值限制在0,1;否则会循环
plt.figure(dpi=100)
plt.imshow(img_)
plt.axis('off');

效果如图:

饱和度调整

将BGR通道转换称HSV通道后,可以将图片的色相、饱和度、亮度三个通道分离出来,单独进行调整
这里以增大饱和度为例

img = cv2.imread('photo.jpg')
#OpenCV默认读取后的图像通道是BGR,为了调整饱和度,将通道转换为HSV
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(img_hsv)
#h += np.clip(s*1.0+100,0,255).astype("uint8") # 色相
s += np.clip(s*1.0+100,0,255).astype("uint8") # 饱和度
#v += np.clip(s*1.0+100,0,255).astype("uint8") # 亮度
final_hsv = cv2.merge((h, s, v))
img_s = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2RGB)
plt.figure(dpi=100)
plt.imshow(img_s)
plt.axis('off');

效果如下:

边缘检测

下面将使用一张灰度图,利用Laplacian和Sobel两个边缘算子完成边缘检测。

img = cv2.imread("edge.png")
# 索贝尔等经典卷积操作在灰度图像上表现更好,因此将图像导入时就转化为灰度图像
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 两种经典算子:拉普拉斯与索贝尔
laplacian = cv2.Laplacian(img, cv2.CV_64F, ksize=5)
# 在这里输入之后可以保证输出数据是uint8类型
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)  # 横向的索贝尔,旋转矩阵为5X5
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)  # 纵向的索贝尔,旋转矩阵为5X5
plt.figure(dpi=300)
plt.subplot(2, 2, 1), plt.imshow(img, cmap="gray")
plt.title("Original"), plt.axis("off")
plt.subplot(2, 2, 2), plt.imshow(laplacian, cmap="gray")
plt.title("Laplacian"), plt.axis("off")
plt.subplot(2, 2, 3), plt.imshow(sobelx, cmap="gray")
plt.title("Sobel X"), plt.axis("off")
plt.subplot(2, 2, 4), plt.imshow(sobely, cmap="gray")
plt.title("Sobel Y"), plt.axis("off")

效果如下:

卷积

原理

卷积的思想是受到人体视觉生理过程的启发:人类的眼球中含有一系列视觉细胞,但这些细胞不是等价的,他们之中的一部分是简单细胞,只能捕捉到简单的线条、颜色等信息,这些简单细胞捕捉到简单信息后,会将信息传导至复杂细胞,复杂细胞会将这些信息重组为轮廓、光泽等更高级的信息,之后再将信息传导至更高级的细胞,形成完整的图像。

卷积核(Convolution Kernel)(有的文献也称为过滤器(filter))就是在模拟人类中的视觉细胞。如图所示,图中绿色区域部分被称作感受野(receiptive field),卷积核与感受野轮流点积得到的新矩阵叫做特征图(feature map)

在信号与系统课程中,接触过一维卷积,信号的一维卷积就是将其中的一个信号先翻转再相乘相加。这个翻转的过程就是”卷“。在图像中,二维卷积同样有”卷“的过程,对于矩阵的卷,就是将矩阵旋转180°,过程如图所示:


然而在实际处理中,这个旋转的步骤往往被省略,直接演变成了对应点相乘再相加的形式。

编程

在pytorch中,nn.Conv2d这个函数能够实现2维卷积。

其中,有下列一些参数:

torch.nn.Conv2d (in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1,
groups=1, bias=True, padding_mode='zeros'
参数描述
kernel_size卷积核的尺寸。无默认值,必填
in_channels整数,输入图像的通道数
out_channels整数,输出的特征图的数量,同时等于卷积核的数量
bias布尔值,"True"则代表在卷积层中使用偏置,反之则不使用偏置
stride整数或数组,卷积核扫描时的步长。输入整数,则默认为水平方向的步长。输入数组,则同时控制水平和竖直方向的步长。默认为1。
padding整数或数组,在输入图像的两边分辨进行填充。默认为0。
padding_mode填充的方式,可输入’zeros’, ‘reflect’ , 'replicate’或者’circular’四种选项来选择填充模式。

特征图大小计算公式:

卷积层参数量计算公式:

池化

池化很容易理解,即在特征图上将一块块区域打包进行处理,最常见的是最大池化(Max Pooling)和平均池化(Average Pooling)
Pytorch中,相关接口为nn.MaxPoolnn.AvgPool
两个接口参数类似,以MaxPool2d为例,有下列一些参数:

CLASS torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False,
ceil_mode=False)

其中kernel_size就是池化核的尺寸,一般都设置为2X2或3X3。Padding参数与Stride参数一般都不填
写。

Dropout

Dropout是在神经网络训练时,随机让一些神经元”失活“(权值变0),有利于防止过拟合,示意图如下:


在Pytorch中,可用nn.Dropout2d(p=0.1)进行调用,这里的p表示概率p,即Dropout层会随机选择p * N个神经元进行沉默。

下一篇将使用这些知识来尝试复现经典网络LeNet5与AlexNet。

理解cnn卷积层与池化层计算

概述深度学习中CNN网络是核心,对CNN网络来说卷积层与池化层的计算至关重要,不同的步长、填充方式、卷积核大小、池化层策略等都会对最终输出模型与参数、计算复杂度产生重要影响,本文将从卷积层与池化层计算这些相关... 查看详情

深度学习

深度学习是  多层神经网络上运用各种机器学习算法  解决图像,文本等各种问题的算法集合 深度学习算法:convolutionalNeuralNetworks(CNN)卷积神经网络  卷积网络:由卷积层、池化层、全连接层组成。    其中卷积... 查看详情

深度学习笔记-vgg(池化)(代码片段)

...更深的AlexNet(重复的VGG块)使用可重复使用的卷积块来构建深度卷积神经网络不同的卷积块个数和超参数可以得到不同复杂度的变种连续使用数个相同的填充为1、窗口形状为3×33×3的卷积层后接上一个步幅为2、窗口形状为2×22×2的... 查看详情

卷积降维与池化降维的对比分析

1问题在学习深度学习中卷积网络过程中,有卷积层,池化层,全连接层等等,其中卷积层与池化层均可以对特征图降维,本次实验针对控制其他层次一致的情况下,使用卷积降维与池化降维进行对比分析&#... 查看详情

深度学习卷积神经网络(代码片段)

目录1CNN网络的构成2卷积层2.1卷积的计算方法2.2padding(填充)2.3stride(步长)2.4多通道卷积2.5多卷积核卷积2.6特征图大小3池化层(Pooling)3.1最大池化3.2平均池化4全连接层5卷积神经网络的构建5.1数据加载5.2数据处理5... 查看详情

[机器学习]ufldl笔记-convolutionalneuralnetwork-全连接局部连接卷积与池化

前言  本文是我在学习卷积神经网络(ConvolutionalNeuralNetwork)时的笔记,主要参考资料是AndrewNg老师在UFLDLTutorial中的相关章节。关于CNN的笔记在网络上很多了,本文不再详述各种细节,只对其中容易混淆和难... 查看详情

《深入浅出图神经网络》gnn原理解析☄学习笔记卷积神经网络(代码片段)

...的特点特殊的卷积形式1x1卷积转置卷积空洞卷积分组卷积深度可分离卷积卷积神经网络(ConvolutionalNeural 查看详情

深度学习卷积神经网络最大池化运算(代码片段)

文章目录前言一、最大池化二、为什么要对特征图进行下采样前言在卷积神经网络示例中,我们注意到,在每个MaxPooling2D层之后,特征图的尺寸都会减半。例如:在第一个MaxPooling2D层之前,特征图的尺寸是26*26... 查看详情

大厂必考深度学习算法面试题总结(代码片段)

...一,滤波器与卷积核二,卷积层和池化输出大小计算三,深度学习框架的张量形状格式四,Pytorch、Keras的池化层函数理解五,Pytorch和Keras的卷积层函数理解六,softmax回归七,交叉熵损失函数八,感受野理解九,卷积和池化操作... 查看详情

「深度学习一遍过」必修8:搭建卷积神经网络lenet-5(代码片段)

本专栏用于记录关于深度学习的笔记,不光方便自己复习与查阅,同时也希望能给您解决一些关于深度学习的相关问题,并提供一些微不足道的人工神经网络模型设计思路。专栏地址:「深度学习一遍过」必修篇... 查看详情

深度学习要点———神经网络的类型

CNN(ConvolutionalNeuralNetwork)  (1)CNN的概念  CNN,常被称作卷积神经网络,经常被用于图像处理。  CNN最关键的两个步骤是:卷积与池化。以下是它的过程图: CNN之所以能够进行卷积,有两点理由:1.图像的模式会远远... 查看详情

深度学习卷积神经网络(cnn)原理

【深度学习】卷积神经网络原理1.卷积神经网络的组成2.卷积层2.1卷积运算过程3.padding-零填充3.1ValidandSame卷积3.2奇数维度的过滤器4.stride-步长5.多通道卷积5.1多卷积核(多个Filter)6.卷积总结7.池化层(Pooling)8.全连接层9.总... 查看详情

深度学习:基于python:第7章卷积神经网络(代码片段)

...音识别等各种场合,在图像识别的比赛中,基于深度学习的方法几乎都以CNN为基础。7.1整体结构CNN中新出现了卷积层(Convolution层)和池化层(Pooling层)。之前介绍的神经网络中,相邻层的所有神经元... 查看详情

深度学习相关概念整理

深度学习相关概念整理数值梯度和解析梯度数值梯度就是通过梯度得定义去计算出来的梯度:给予x_i一个非常小的偏移量,去计算出y的偏移量,最后用y的偏移去除以x_i的偏移就是在x_i处的偏导数。解析梯度就是对目标函数进行... 查看详情

2021年深度学习面试题汇总(代码片段)

...#xff09;2.3,理解边界效应与填充padding参考资料三,深度学习框架的张量形状格式四,Pytorch、Keras的池化层函数理解4.1,torch.nn.Max 查看详情

《pytorch深度学习实践8》——卷积神经网络(convolutionneuralnetwork)(代码片段)

目录一、卷积层1.卷积层理解2.卷积层参数二、池化层三、MNIST分类1.网络结构2.CPU版本3.GPU版本一、卷积层1.卷积层理解       假如我们有一张图像,RGB三通道,我们对每个通道都用一个卷积核,就可以得... 查看详情

『计算机视觉』mini深度学习框架实现(代码片段)

一、项目简介手动实现mini深度学习框架,主要精力不放在运算优化上,仅体会原理。地址见:miniDeepFrame相关博客『TensorFlow』卷积层、池化层详解『科学计算』全连接层、均方误差、激活函数实现文件介绍Layer.py层class,已实现... 查看详情

keras深度学习实战——卷积神经网络的局限性(代码片段)

Keras深度学习实战(9)——卷积神经网络的局限性0.前言1.卷积神经网络的局限性2.情景1——训练数据集图像尺寸较大3.情景2——训练数据集图像尺寸较小4.情景3——在训练尺寸较大的图像时使用更大池化小结系列链接0.... 查看详情