Python 深度学习

Pytorch

  • 一 、深度学习概览
    • 1、工具篇
    • 2、流程介绍
    • 3、基础知识(常用操作)
      • 1、数据结构类型
    • 4、常见名词概念
  • 二、深度学习Pytorch
    • 1、神经网络
      • 1.1 如何构建神经网络
      • 1.2 核心组件
    • 2、数据处理工具
      • 2.1 torchvision(可视化处理工具)
        • 2.1.1、torchvision.transforms
        • 2.1.2、torchvision.datasets
        • 2.1.3、torchvision.models
        • 2.1.4、torchvision.utils
      • 2.2 torch.utils.data
    • 3 、神经网络工具箱nn
      • 3.1 nn.Module模块
      • 3.2 nn.functional模块
    • 4 、优化器
      • 4.1 动态修改学习率参数
    • 5 、可视化工具(tensorboardX)
    • 6 、机器学习基础
      • 6.1 机器学习一般流程
      • 6.2 相关知识介绍
    • 7 、视觉处理基础
      • 7.1 卷积神经网络(CNN)
      • 7.2 卷积层
      • 7.3 池化层
  • 三、具体常用算法
    • 1、YOLOv5
    • 2、BEV感知算法
  • 四、相关工具及工具包配置环境
    • 待补充

一 、深度学习概览

1、工具篇

推荐10个好用到爆的Jupyter Notebook插件,让你效率飞起(先安装python,再安装pip)

2、流程介绍

请点击—->深度学习计算机视觉学习流程

请点击–> 深度学习模型训练全流程!
请点击–> 深度学习一般工作流程:
step 1、定义问题,收集数据集。
step 2、定义模型预测性能指标
step 3、确定模型评估方式
step 4、数据预处理
step 5、搭建模型
1、确定激活函数、损失函数

2、从简单结构开始逐步扩大模型规模
3、考虑正则化和dropout
step 6、交叉验证
step 7、测试集验证
注意:测试集性能和验证集性能相差较大,考虑采用更复杂的验证方法,如乱序重复K折交叉验证

3、基础知识(常用操作)

1、数据结构类型

请点击—> Tensor 常用操作
Pytorch基本变量类型FloatTensor与Variable

torch成员函数函数作用解释
torch.where(condition,a,b)torch.where()函数的作用是按照一定的规则合并两个tensor类型。输入参数condition:条件限制,如果满足条件,则选择a,否则选择b作为输出。注意:a和b是tensor.
torch.zeros(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)返回一个形状为为size,类型为torch.dtype,里面的每一个值都是0的tensor.
torch.full(size, fill_value, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)返回创建size大小的维度,里面元素全部填充为fill_value.
torch.ones(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)返回创建size大小的维度,里面元素全部填充为1.

4、常见名词概念

SOTA

Sota实际上就是State of the arts 的缩写,指的是在某一个领域做的Performance最好的model,一般就是指在一些benchmark的数据集上跑分非常高的那些模型。
SOTA model:并不是特指某个具体的模型,而是指在该项研究任务中,目前最好/最先进的模型。
SOTA result:指的是在该项研究任务中,目前最好的模型的结果/性能/表现。

Benchmark、Baseline

Benchmark和baseline都是指最基础的比较对象。你论文的motivation是想超越现有的baseline/benchmark,你的实验数据都需要以baseline/benckmark为基准来判断是否有所提高。唯一的区别就是baseline讲究一套方法,而benchmark更偏向于一个目前最高的指标,比如precision,recall等等可量化的指标。举个例子,NLP任务中BERT是目前的SOTA,你有idea可以超过BERT。那在论文中的实验部分你的方法需要比较的baseline就是BERT,而需要比较的benchmark就是BERT具体的各项指标。

迁移学习

迁移学习通俗来讲,就是运用已有的知识来学习新的知识,核心是找到已有知识和新知识之间的相似性,用成语来说就是举一反三。

泛化(Generalization)

模型的泛化能力通俗易懂的说就是模型在测试集(其中的数据模型以前没有见过)中的表现,也就是模型举一反三的能力

二、深度学习Pytorch

常用两个功能函数:dir() ; help()。
【目录】【中文】【deplearning.ai】【吴恩达课后作业目录】

Python深度学习基于PyTorch:第1章 NumPy基础
Python深度学习基于PyTorch:第2章 Pytorch基础
Python深度学习基于PyTorch:第3章 Pytorch神经网络工具箱
Python深度学习基于PyTorch:第4章 Pytorch数据处理工具箱

1、神经网络

1.1 如何构建神经网络

step 1:构建网络层:一般采用torch.nn.Sequential()来构建;
step 2:前向传播:定义forward函数。forward函数的任务需要把输入层、网络层、输出层链接起来,实现信息的前向传导。在forward函数中,有些层来自nn.Module,也可以使用nn.functional定义。来自nn.Module的需要实例化,而使用nn.functional定义的可以直接使用。
step 3:反向传播:在反向传播过程中,优化器是一个重要角色。pytorch常用的优化方法都封装在torch.optim里面。最常用的优化算法就是梯度下降法及其各种变种。所有的优化方法都是继承了基类optim.Optimizer。

优化方法优化器
随机梯度下降法torch.optim.SGD()
含有动量的 随机梯度下降法torch.optim.SGD()
Per-parameter adaptive learning rate methods(逐参数适应学习率方法)torch.optim.RMSprop()
Per-parameter adaptive learning rate methods(逐参数适应学习率方法)torch.optim.Adam()
torch.optim.Adadelta()
torch.optim.Adagrad()
以上优化器

nn.CrossEntropyLoss:

step 4:训练模型:缺省情况下,梯度是累加的,需要手工把梯度初始化或清零,调用optimizer.zero_grad()即可。如果希望用GPU训练,需要把模型、训练数据、测试数据发送到GPU上,即调用.to(device)。如果需要多GPU进行处理,可使模型或相关数据引用nn.DataParallel。
step 5:

1.2 核心组件

(1)层:神经网络的基本结构,将输入张量转换为输出张量。
卷积层:
全连接层:
Dropout层:
池化层:
隐含层:
(2)模型:层构成的网络。
(3)损失函数:参数学习的目标函数,通过最小化损失函数来学习各种参数。
(4)优化器:如何使损失函数最小,这就涉及优化器。常用的是4种。

2、数据处理工具

一边用torch.utils.data.Dataset处理同一个目录下的数据。如果数据在不同目录下,不同目录代表不同类别(这种情况比较普遍),使用data.Dataset来处理就不很方便。不过,可以使用Pytorch另一种可视化数据处理工具(即torchvision)就非常方便,不但可以自动获取标签,还提供很多数据预处理、数据增强等转换函数。

2.1 torchvision(可视化处理工具)

torchvision是pytorch的一个图形库,它服务于PyTorch深度学习框架的,主要用来构建计算机视觉模型。torchvision有4个功能模块:model、datasets、transforms和utils。

2.1.1、torchvision.transforms

torchvision.transforms是pytorch中的图像预处理包。例如裁剪、旋转等。
一般用Compose把多个步骤整合到一起,transforms.Compose。
数据归一化处理transforms.Normalize。

2.1.2、torchvision.datasets

另说明: torch.utils.data包括Dataset(只负责数据的抽取,不能进行批处理)和DataLoader(不光可以批处理还能shuffle和并行加速)。
提供常用的数据集加载,设计上都是继承自torch.utils.data.Dataset。
torchvision学习之torchvision.datasets。 一些加载数据的函数及常用的数据集接口。
torchvision.datasets中包含了以下数据集:
(1)MNIST
(2)COCO(用于图像标注和目标检测)(Captioning and Detection)
(3)LSUN Classification
(4)ImageFolder
(5)Imagenet-12
(6)CIFAR10 and CIFAR100
(7)STL10

2.1.3、torchvision.models

PyTorch源码解读之torchvision.models
torchvision.models这个包中包含alexnet、densenet、inception、resnet、squeezenet、vgg等常用的网络结构,并且提供了预训练模型,可以通过简单调用来读取网络结构和预训练模型。

2.1.4、torchvision.utils

2.2 torch.utils.data

它包括以下4个类:
(1)Dataset:是一个抽象类,其它数据集需要继承这个类,并且覆写其中的两个方法( _ getitem 、_ len __)。
(2)DataLoader:定义一个新的迭代器,实现批量(batch)读取,打乱数据(shuffle)并提供并行加速等功能。
(3)random_split:把数据集随机拆分为给定长度的非重叠新数据集。
*(4)sampler:多种采样函数。

3 、神经网络工具箱nn

3.1 nn.Module模块

nn.Module是nn核心数据结构,它可以是神经网络的某个层(Layer),也可以是包含多层的神经网络。在实际应用中,最常见的做法是继承nn.Module,生成自己的网络/层。

3.2 nn.functional模块

两者区别: 具有学习参数的(例如,conv2d, linear, batch_norm)采用nn.Xxx方式。没有学习参数的(例如,maxpool、loss func、activation func)等根据个人选择使用nn.functional.xxx或者nn.Xxx方式。

4 、优化器

代码示例:

import torch.optim as optim
lr = 0.01
momentum = 0.5
optimizer = optim.SGD(model.parameters(), lr=lr, momentum=momentum)

4.1 动态修改学习率参数

修改参数的方式可通过修改参数optimizer.params_groups或新建optimizer。对于使用动量的优化器(momentum参数的sgd)可能会造成收敛中的震荡,所以建议采用修改参数optimizer.params_groups。

torch.unsqueeze(input, dim, out=None)  # 解压缩(升维)
torch.squeeze(input, dim = None, out = None) # 压缩(降维)
#####
torch.linspace(start, end, steps=100, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor
# 函数的作用是,返回一个一维的tensor(张量),这个张量包含了从start到end,分成steps个线段得到的向量。

5 、可视化工具(tensorboardX)

tensorboardX功能很强大,支持scalar、image、figure、histogram、audio、text、graph、onnx_graph、embedding、pr_curve and videosummaries等可视化方式。

6 、机器学习基础

6.1 机器学习一般流程

明确目标收集数据(收集的数据尽量实现自动化、程序化)→输入数据数据探索与预处理(一般包括数据清理、数据转换、规范数据、特征选择等)→训练及测试算法或建模(不同方法来训练进而选取最优)→评估及优化模型(留出法、K折交叉验证、重复的K折交叉验证,若出现过拟合,尤其是回归类的问题,可用正则化方法来降低模型的泛化误差)

如何解决过拟合问题呢? 正则化是指在机器学习中,很多被显式地用来减少测试误差的策略。正则化旨在减少泛化误差而不是训练误差。正则化不仅可以有效降低高方差,还有利于降低偏差。
1、权重正则化
2、Dropout正则化
3、批量正则化
4、权重初始化

6.2 相关知识介绍

代价函数(cost function): 衡量模型预测出来的值 h(θ) 与真实值 y 之间差异的函数叫做代价函数J(θ)。

7 、视觉处理基础

7.1 卷积神经网络(CNN)

卷积神经网络是一种前馈神经网络。卷积神经网络由一个或多个卷积层和顶端的全连接层(对应经典的神经网络)组成,同时也包括关联权重和池化层(Pooling Layer)等。

7.2 卷积层

卷积层是卷积神经网络的核心层,而卷积又是卷积层的核心。卷积核(kernel)又称权重过滤器,简称为过滤器(filter)。常见卷积核有Horizontalfilter(水平边缘检测)、Verticalfilter(垂直边缘检测)、Sobelfilter(增强图像中心区域权重)。
1、卷积核
2、步幅(strides)
3、填充(padding)
4、激活函数
卷积神经网络与标准的神经网络类似,为保证其非线性,也需要使用激活函数,即在卷积运算后,把输出值另加偏移量,输入到激活函数,然后作为下一层的输入。
常用的激活函数有:nn.Sigmoidnn.ReLUnn.LeakyReLUnn.Tanh等。
ReLU是将所有的负值都设为零,相反,Leaky ReLU是给所有负值赋予一个非零斜率。
5、卷积函数
卷积函数是构建神经网络的重要支架,通常PyTorch的卷积运算是通过nn.Conv2d来完成的。
6、转置卷积(Transposed Convolution)在一些文献中也称为反卷积(Deconvolution)或部分跨越卷积(Fractionally-Strided)。转置卷积在生成式对抗网络(GAN)中使用很普遍。

7.3 池化层

池化(Pooling)又称下采样,通过卷积层获得图像的特征后,理论上可以直接使用这些特征训练分类器(如Softmax)。常用池化方法有3种:(1)最大池化;(2)均值池化;(3)全局最大池化。
池化的作用体现在降采样:保留显著特征、降低特征维度,增大感受野。
1、局部池化
2、全局池化
全局平均池化(Global Average Pooling,GAP)。GAP的优势在于:各个类别与Feature Map之间的联系更加直观(相比与全连接层的黑箱来说),Feature Map被转化为分类概率也更加容易,因为在GAP中没有参数需要调,所以避免了过拟合问题。GAP汇总了空间信息,因此对输入的空间转换鲁棒性更强。所以目前卷积网络中最后几个全连接层,大都用GAP替换。PyTorch虽然没有对应名称的池化层,但可以使用PyTorch中的自适应池化层(nn.AdaptiveMaxPool2d或nn.AdaptiveAvgPool2d)来实现。

三、具体常用算法

1、YOLOv5

详解:yolov5中推理时置信度,设置的conf和iou_thres具体含义
YOLOV5模型转onnx并推理

名称名词解释
Intersect over Union Threshold交并比阈值
Roboflow在线图像标注软件。目标检测中的数据格式转换工具
pipeline直译就是管线,也就是流水线,流程
mAP(Mean Average Precision)其中代表P(Precision)精确率。AP(Average precision)单类标签平均(各个召回率中最大精确率的平均数)的精确率,mAP(Mean Average Precision)所有类标签的平均精确率。
ONNX(Open Neural Network Exchange)开放神经网络交换格式,ONNX 模型一般用于中间部署阶段,起到要给中间翻译的作用。ONNX简明教程。
• Pytorch -> ONNX -> TensorRT
• Pytorch -> ONNX -> TVM
• TF –ONNX – NCNN
Pytorch -> ONNX -> tensorflow
protobufprotocol buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小、更快、更为简单。 protobuf详细介绍和使用 。protocol buffer 文本格式
Objective-C通常写作ObjC或OC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。
DLA深度学习加速器
TensorRTTensorRT是nvidia家的一款高性能深度学习推理SDK。此SDK包含深度学习推理优化器和运行环境,可为深度学习推理应用提供低延迟和高吞吐量。

2、BEV感知算法

BEV视觉3D感知算法梳理

四、相关工具及工具包配置环境

jupyter notebook创建/删除虚拟环境—-都在命令行执行
(包含源码+模型数据)使用TensorFlow, ONNX和TensorRT加速深度学习推理
resnet为残差网络-resnet-50介绍(一)
庖丁解牛-Resnet50 深度剖析,细致讲解,深入理解
window10下在anconda中虚拟环境下离线安装pytorch

待补充

请点击–> 深度学习与计算机视觉系列(10)_细说卷积神经网络
请点击–> 11种主要神经网络结构图解

系统学习Pytorch笔记一:Pytorch的数据载体张量与线性回归
系统学习Pytorch笔记二:Pytorch的动态图、自动求导及逻辑回归
系统学习Pytorch笔记三:Pytorch数据读取机制(DataLoader)与图像预处理模块(transforms)
系统学习Pytorch笔记四:模型创建Module、模型容器Containers及AlexNet网络搭建
系统学习Pytorch笔记五:nn的网络层介绍(卷积层,池化层,激活函数,全连接层等)
系统学习Pytorch笔记六:模型的权值初始化与损失函数介绍
系统学习Pytorch笔记七:优化器和学习率调整策略
系统学习Pytorch笔记八:Tensorboard可视化与Hook机制
系统学习Pytorch笔记九:正则化与标准化大总结
系统学习Pytorch笔记十: 模型的保存加载、模型微调、GPU使用及Pytorch常见报错

Protobuf的简单介绍、使用和分析

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年9月28日
下一篇 2023年9月28日

相关推荐