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
    protobuf protocol buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小、更快、更为简单。 protobuf详细介绍和使用protocol buffer 文本格式
    Objective-C 通常写作ObjC或OC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。
    DLA 深度学习加速器
    TensorRT TensorRT是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的简单介绍、使用和分析

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python深度学习入门指南

    发表回复