Pytorch与卷积神经网络(OpenCV)

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: Pytorch与卷积神经网络(OpenCV)

卷积神经网:以卷积层为主的深度网络结构

  • 卷积层
  • 激活层
  • BN层(Batch Normalization:批量归一化)
  • 池化层
  • FC层(fully connected layers:全连接层)
  • 损失层

卷积层的定义

对图像和滤波矩阵做内积(逐个元素相乘再求和)的操作

Conv2d(in_channels, out_channels, kernel_size, stride=1,padding=0, dilation=1, groups=1,bias=True)
  • in_channels:输入的通道数目
  • out_channels: 输出的通道数目
  • kernel_size:卷积核的大小,类型为int或者元组,当卷积是方形的时候,只需要一个整数边长即可,卷积不是方形,要输入一个元组表示高和宽。
  • stride: 卷积每次滑动的步长为多少,默认是 1
  • padding: 设置在所有边界增加值为 0 的边距的大小(也就是在feature map 外围增加几圈 0 ),例如当 padding =1 的时候,如果原来大小为 3 × 3 ,那么之后的大小为 5 × 5 。即在外围加了一圈 0 。
  • dilation:控制卷积核之间的间距
  • groups:控制输入和输出之间的连接.
  • 比如 groups 为1,那么所有的输入都会连接到所有输出
  • 当 groups 为 2的时候,相当于将输入分为两组,并排放置两层,每层看到一半的输入通道并产生一半的输出通道,并且两者都是串联在一起的。这也是参数字面的意思:“组” 的含义。
  • 需要注意的是,in_channels 和 out_channels 必须都可以整除 groups,否则会报错

常见的卷积操作

  • 标准卷积
  • 分组卷积(group参数)
  • 空洞卷积(dilation参数)
  • 深度可分离卷积(分组卷积+1*1卷积)
  • 反卷积(torch.nn.ConvTranspose2d)
  • 可变形卷积等等

如何理解卷积层感受野?

感受野(Receptive Field),指的是神经网络中神经元“看到的”输入区域,在卷积神经网络中,feature map上某个元素的计算受输入图像上某个区域的影响,这个区域即该元素的感受野。

如何理解卷积层的参数量与计算量

  • 参数量:参与计算参数的个数占用内存空间

(Cin∗(K∗K)+1)∗Cout

  • FLOPS:每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。
  • FLOPs:浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。

(Cin∗2∗K∗K)∗Hout∗Wout∗Cout

  • MAC:乘加次数,用来衡量计算量。

Cin∗K∗K∗Hout∗Wout∗Cout

如何压缩卷积层参数&计算量?

从感受野不变+减少参数量的角度压缩卷积层

  • 采用多个3×3卷积核代替大卷积核
  • 采用深度可分离卷积
  • 通道Shuffle
  • Pooling层
  • Stride=2等等

池化层

对输入的特征图进行压缩

  • 一方面使特征图变小,简化网络计算复杂度;
  • 一方面进行特征压缩,提取主要特征

最大池化(Max Pooling)、平均池化(Average Pooling)等

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

参数:

  • kernel_size(int or tuple) - max pooling的窗口大小,
  • stride(int or tuple, optional) - max pooling的窗口移动的步长。默认值是kernel_size
  • padding(int or tuple, optional) - 输入的每一条边补充0的层数
  • dilation(int or tuple, optional) – 一个控制窗口中元素步幅的参数
  • return_indices - 如果等于True,会返回输出最大值的序号,对于上采样操作会有帮助
  • ceil_mode - 如果等于True,计算输出信号大小的时候,会使用向上取整,代替默认的向下取整的操作

上采样层

Resize,如双线性插值直接缩放,类似于图像缩放,概念可见最邻近插值算法和双线性插值算法——图像缩放

Deconvolution,也叫Transposed Convolution(转置卷积/反卷积)

实现函数

  • nn.functional.interpolate(input, size=None, scale_factor=None,mode='nearest", align_corners=None)
  • nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1,padding=0, output_padding=0, bias=True)

激活层

激活函数:为了增加网络的非线性,进而提升网络的表达能力

ReLU函数、Leakly ReLU函数、ELU函数等

torch.nn.ReLU(inplace=True)

BatchNorm层

通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布

Batchnorm是归一化的一种手段,它会减小图像之间的绝对差异,突出相对差异,加快训练速度

不适用的问题: image-to-image以及对噪声敏感的任务

nn.BatchNorm2d(num_features, eps=1e-05,momentum=0.1, affine=True,track_running_stats=True)

  1. num_features:一般输入参数为batch_size*num_features*height*width,即为其中特征的数量
  2. eps:分母中添加的一个值,目的是为了计算的稳定性,默认为:1e-5

全连接层

连接所有的特征,将输出值送给分类器(如softmax分类器)

  • 对前层的特征进行一个加权和,(卷积层是将数据输入映射到隐层特征空间)
  • 将特征空间通过线性变换映射到样本标记空间(也就是label)
  • 可以通过1×1卷积+global average pooling代替
  • 可以通过全连接层参数冗余
  • 全连接层参数和尺寸相关
  • nn.Linear(in_features, out_features,bias)

Dropout层

在不同的训练过程中随机扔掉一部分神经元

测试过程中不使用随机失活,所有的神经元都激活

为了防止或减轻过拟合而使用的函数,它一般用在全连接层nn.dropout

损失层

损失层:设置一个损失函数用来比较网络的输出和目标值,通过最小化损失来驱动网络的训练

网络的损失通过前向操作计算,网络参数相对于损失函数的梯度则通过反向操作计算

分类问题损失

  • nn.BCELoss; nn.CrossEntropyLoss等等

回归问题损失

  • nn.L1Loss; nn.MSELoss; nn.SmoothL1Loss等等

Attention机制

对于全局信息,注意力机制会重点关注一些特殊的目标区域,也就是所谓的注意力焦点,进而利用有限的注意力资源对信息进行筛选,提高信息处理的准确性和效率

one-hot分布或者soft的软分布

Soft-Attention 或者Hard-Attention

可以作用在特征图上,尺度空间上,channel尺度上,不同时刻历史特征上等

学习率

学习率作为监督学习以及深度学习中重要的超参,其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值。

合适的学习率能够使目标函数在合适的时间内收敛到局部最小值

torch.optim.Ir_scheduler

  • ExponentialLR
  • ReduceLROnPlateau
  • CyclicLR等等

优化器

GD、BGD、SGD、MBGD

  • 引入了随机性和噪声

Momentum、NAG等

  • 加入动量原则,具有加速梯度下降的作用

AdaGrad,RMSProp,Adam、AdaDelta

  • 自适应学习率

torch.optim.Adam

卷积神经网添加正则化

L1正则:参数绝对值的和

L2正则:参数的平方和(Pytorch自带,weight_decay)

optimizer =

torch.optim.SGD(model.parameters(),Ir=0.01,weight_decay=0.001)

OpenCV及其常用库函数介绍

  • 重要的图像处理库
  • cv2.imread(filepath,flags)参数说明:
  • filepath:要读入图片的完整路径
  • flags:读入图片的标志
  • cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道,可用1作为实参替代
  • cv2.IMREAD_GRAYSCALE:读入灰度图片,可用0作为实参替代
  • cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道,可用-1作为实参替代
  • cv2.imshow(wname,img)显示图像,第一个参数是显示图像的窗口的名字,第二个参数是要显示的图像(imread读入的图像),窗口大小自动调整为图片大小
  • cv2.waitKey:等待键盘输入,单位为毫秒,即等待指定的毫秒数看是否有键盘输入,若在等待时间内按下任意键则返回按键的ASCII码,程序继续运行。若没有按下任何键,超时后返回-1。参数为0表示无限等待。不调用waitKey的话,窗口会一闪而逝,看不到显示的图片。
  • cv2.destroyAllWindow()销毁所有窗口
  • cv2.destroyWindow(wname)销毁指定窗口
  • cv2.cvtColor(p1,p2) 是颜色空间转换函数,p1是需要转换的图片,p2是转换成何种格式。
  • cv2.COLOR_BGR2RGB #灰度图像转为彩色图像
  • cv2.COLOR_BGR2GRAY #彩色图像转为灰度图像
  • cv2.blur(img,ksize) 均值滤波, cv2.GaussianBlur()高斯滤波, cv2.medianBlur()中值滤波, cv2.bilateralFilter()双边滤波
  • 形态学:cv2.erode(src, kernel, iteration)腐蚀操作
  • 参数说明:src表示的是输入图片,kernel表示的是方框的大小,iteration表示迭代的次数, cv2.dilate()膨胀操作, cv2.morphologyEx()开运算、闭运算
  • 算子:cv2.Sobel(), cv2.Laplacian(), cv2.Canny()
  • cv2.equalizeHist()直方图均衡化
  • cv2.imwrite(file,img,num)保存一个图像。第一个参数是要保存的文件名,第二个参数是要保存的图像。可选的第三个参数,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别。默认为3.
相关文章
|
7月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
8月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
686 11
|
8月前
|
机器学习/深度学习 算法 PyTorch
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
【Pytorch框架搭建神经网络】基于DQN算法、优先级采样的DQN算法、DQN + 人工势场的避障控制研究(Python代码实现)
206 1
|
8月前
|
机器学习/深度学习 算法 PyTorch
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
334 0
|
8月前
|
机器学习/深度学习 传感器 数据采集
【故障识别】基于CNN-SVM卷积神经网络结合支持向量机的数据分类预测研究(Matlab代码实现)
【故障识别】基于CNN-SVM卷积神经网络结合支持向量机的数据分类预测研究(Matlab代码实现)
488 0
|
10月前
|
机器学习/深度学习 人工智能 PyTorch
零基础入门CNN:聚AI卷积神经网络核心原理与工业级实战指南
卷积神经网络(CNN)通过局部感知和权值共享两大特性,成为计算机视觉的核心技术。本文详解CNN的卷积操作、架构设计、超参数调优及感受野计算,结合代码示例展示其在图像分类、目标检测等领域的应用价值。
533 7
|
11月前
|
机器学习/深度学习 数据采集 监控
基于CNN卷积神经网络和GEI步态能量提取的步态识别算法matlab仿真,对比不同角度下的步态识别性能
本项目基于CNN卷积神经网络与GEI步态能量提取技术,实现高效步态识别。算法使用不同角度(0°、45°、90°)的步态数据库进行训练与测试,评估模型在多角度下的识别性能。核心流程包括步态图像采集、GEI特征提取、数据预处理及CNN模型训练与评估。通过ReLU等激活函数引入非线性,提升模型表达能力。项目代码兼容Matlab2022a/2024b,提供完整中文注释与操作视频,助力研究与应用开发。
|
11月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的TCN-GRU时间卷积神经网络时间序列预测算法matlab仿真
本内容包含时间序列预测算法的相关资料,涵盖以下几个方面:1. 算法运行效果预览(无水印);2. 运行环境为Matlab 2022a/2024b;3. 提供部分核心程序,完整版含中文注释及操作视频;4. 理论概述:结合时间卷积神经网络(TCN)与鲸鱼优化算法(WOA),优化TCN超参数以提升非线性时间序列预测性能。通过因果卷积层与残差连接构建TCN模型,并用WOA调整卷积核大小、层数等参数,实现精准预测。适用于金融、气象等领域决策支持。
|
11月前
|
机器学习/深度学习 数据采集 并行计算
基于WOA鲸鱼优化的TCN时间卷积神经网络时间序列预测算法matlab仿真
本内容介绍了一种基于TCN(Temporal Convolutional Network)与WOA(Whale Optimization Algorithm)的时间序列预测算法。TCN通过扩张卷积捕捉时间序列长距离依赖关系,结合批归一化和激活函数提取特征;WOA用于优化TCN网络参数,提高预测精度。算法流程包括数据归一化、种群初始化、适应度计算及参数更新等步骤。程序基于Matlab2022a/2024b开发,完整版含详细中文注释与操作视频,运行效果无水印展示。适用于函数优化、机器学习调参及工程设计等领域复杂任务。
|
11月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化TCN-GRU时间卷积神经网络时间序列预测算法matlab仿真
本内容涵盖基于粒子群优化(PSO)与时间卷积神经网络(TCN)的时间序列预测算法。完整程序运行效果无水印,适用于Matlab2022a版本。核心代码配有详细中文注释及操作视频。理论部分阐述了传统方法(如ARIMA)在非线性预测中的局限性,以及TCN结合PSO优化超参数的优势。模型由因果卷积层和残差连接组成,通过迭代训练与评估选择最优超参数,最终实现高精度预测,广泛应用于金融、气象等领域。

推荐镜像

更多