计算机视觉:深度学习基

部署运行你感兴趣的模型镜像

d59bb0345cce4430b002cafd64c2f4c0.png

1 深度学习基础

1.1 深度学习模型训练流程


f72faf239836461d8dcc1b0330cd2a2b.png

1.2 深度学习模型基础知识

1 全连接

b0de79298ecc4d88af89d30b88bfd05f.png

2 卷积

1.图像卷积计算

 

        卷积核中的各参数与图像矩阵相应位置的数值相乘后再求和

        它从图像的左上角开始,每次从左到右移动一个像素列,直到滤镜的边缘到达图像的边缘。

        卷积会产生边界效应。特征图输入尺寸的减小称为边界效应

b99b8675cc45471b920e3f893b81e3de.png

        填充:在图像边缘添加像素。

        通过在图像框架之外启动过滤器,它为图像边界上的像素提供了更多与过滤器交互的机会,为过滤器检测到特征提供了更多机会,进而提供了输出与输入图像具有相同形状的特征图。

        步幅:对输入图像应用滤波器之间的移动量。二维的默认步幅或步幅为 (1,1)

        步幅可以更改,这会影响滤波器如何应用于图像,进而影响生成的特征图的大小。

例如,步幅可以更改为(2,2)。这具有以下效果:在创建特征图时,过滤器的每次水平移动将过滤器向右移动两个像素,过滤器的每次垂直移动将过滤器向下移动两个像素。

        输入信号的通道数 in_channels

        如果是彩色的,即RGB类型,这时候通道数固定为3,如果是灰色的,通道数为1。

        卷积产生的通道数 out_channels

        取决于过滤器的数量

        对于第二层或者更多层的卷积,此时的 in_channels 就是上一层的out_channels

286a28318b8041c9873d1a7301fe97d1.png

2.分组卷积

 

        groups (int, 可选)‌: 作用是将输入的通道与输出的通道进行分组。默认情况下,值为1,这意味着所有的输入通道和输出通道都是全连接的。如果将值设置为大于1,那么输入的通道将被分成相应的组数,每组有相同数量的通道。同样,输出的通道也将被分成相应的组数,每组有相同数量的通道。在这种情况下,每个组的通道之间是全连接的,但不同组之间的通道是不连接的

4abd84abfea048f4854c79f977e66a5d.png

3.深度可分离卷积

 

(1) Depthwise Convolution

        Depthwise Convolution中对每个通道只使用一个卷积核,所以单个通道在卷积操作之后的输出通道数也为1。那么如果输入feature map的通道数为K时(如图所示),对K个通道分别单独使用一个卷积核之后便得到K个通道为1的feature map。再将这K个feature map按顺序拼接便得到一个通道为K的输出feature map。

4d9240b87e1542cca3086fca09c14979.png

(2) Pointwise Convolution

        实际为1×1卷积。

        在DSC中它起两方面的作用:

        第一个作用是让DSC能够自由改变输出通道的数量

        第二个作用是对Depthwise Convolution输出的feature map进行通道融合

bbffbb8411e54ae4a4d89a6e95b9d990.png

4.转置卷积与反卷积

 

        将一些低分辨率的图片转换为高分辨率的图片,对于这种上采样(up-sampling)操作,目前有着一些插值方法进行处理。比如最近邻插值,双线性插值,双立方插值。但是如果我们想要我们的网络可以学习到最好的上采样的方法,我们这个时候就可以采用转置卷积。这个方法不会使用预先定义的插值方法,它具有可以学习的参数。

a67058e6127e45baaa61b91146bef114.png

5.3D卷积

 

     Conv2d的输入tensor维度(N,C,H,W),其中N为baitch_size, C为通道数,H为特征图高度,W为特征图宽度

        3D卷积加入了一个深度(时间)维度,Conv3d 输入的 tensor 维度应该是 [N, C ,D, H, W],其中D为视频帧数。

3 激活函数

e34360bcd7bb4b959e75711ebddf0abc.png7b78678d43844e589d739b876f89f1ac.pngd899db5111c84436929ed0287113aefa.png

4 池化

  池化是卷积神经网络中的一种下采样操作。它通过定义一个空间邻域(通常为矩形区域),并对该邻域内的特征进行统计处理(如取最大值、平均值等),从而生成新的特征图。

        特征降维,特征提取,防止过拟合。

        池化操作通常紧随卷积层之后。池化操作在降低特征图空间大小的同时,保持了特征的空间层次结构,有助于减少计算量并提高模型的泛化能力。 

95d8bc07819f498c8b042436b97fe252.png

2 TensorBoard可视化

2.1 TensorBoard介绍

        终端启动命令tensorboard  --logdir=./log

        TensorBoard: 是TensorFlow中强大的可视化工具,支持显示标量、图像、文本、音频、视频和Embedding等多种数据可视化。可以帮助开发者方便的理解、调试、优化TensorFlow 程序。其在PyTorch中也能使用。

3af5c069adb6442da9e47de311748f72.png

       

1b3257005c87471bb4570a233ac73c32.png

(1)TensorBoard原理-Python脚本

                1.导入tensorboard并创建SummaryWriter实例

                from torch.utils.tensorboard import SummaryWriter

                if __name __=="__main__":

                        writer = SummaryWriter(log_dir='./log’)

9579d24317d34244afee266ed360c315.png

                2.调用Python API记录要可视化的数据

ffc3eb14482d43f4887984c062ed4f64.png

(2) TensorBoard原理-写入event文件

29c4dd9695a54e649999f83b4174d956.png

2.2 TensorBoard--标量数据可视化(损失函数值,评估指标)

        损失函数值、准确度、精确度、召回率、F1Score、mAP

        加入标量数据:add_scalar(tag,  scalar_value, global_step=None, walltime=None)

8bfffdd923fc4858acf2cec11d0126ab.png

        加入多个标量数据:add_scalars (tag, dict, global_step=None, walltime=None)

                12a09aa5466440d98bb8a964dd398c3a.png

2.3 TensorBoard—数据分布可视化

        权重、激活值

        add_histogram (tag, values, global_step=None, bins='tensorflow', walltime=None, max_bins=None)

2b0cb54b16c8413cb0719adbed83465b.png

2.4 TensorBoard—特征图的可视化

        add_image(tag, img_tensor, global_step, dataformat)

abfefb576dc44a7e9ac049850bbf7461.png

2.5 TensorBoard—模型可视化

        add_graph(model, input_to_model, verbose)

4c789ba11b6f4587927479cdbb5ebb0f.png

3 模型优化

3.1 数据增强

        torchvision.transforms: 是一个包含丰富的数据变换类,有很大一部分可以用于实现数据预处理(Data Preprocessing)和数据增强(Data Argumentation)

        输入

                PIL Image: transforms.Resize Pytoch

                Tensor: transforms.Normalize

        因此,在使用transforms之前我们在使用之前最好是先使用transforms.ToTensor()将输入的数据先转换成Tensor对象

040552fbabcf442fbe4d6800d2aac5df.png

f75f95cb4e1f4723995650ad762e8ae7.png

        (1)基础图像增强

                1.几何操作:改变像素的位置(旋转,平移,错切)

                transforms.RandomAffine(degrees=0,

                                                          translate=(0.1, 0.2) ,

                                                          shear=30)

55392aec1ae649edad09f26f8483c028.png

                2.非几何操作:改变图像的视觉特性

                翻转(水平,垂直),裁剪,噪声注入,颜色空间,改变图像的亮度 对比度和色调,图像锐化和模糊

6d2019dfb0564ee88f29b405eb322cd4.png

                3.图像擦除

                1:Cutout(p=1, scale=(0.02, 0.4), ratio=(0.4, 1)),# 该操作前不要transforms.ToTensor()

                 transforms.ToTensor(),

                 2:transforms.RandomErasing(p=1, scale=(0.02, 0.33), ratio=(0.3, 3.3)) # 这个一定要注意使用该操作之前一定要加transforms.ToTensor(),

7ed915abf940405db50f60877e19572b.png

                3:Hide-and-Seek

814a3b617a634198a3605348722aef58.png

               4:GridMask

e6bdea46e1984c6aa0a32799d546edf0.png

        (2)高阶图像增强

                1.单张图像

                1.局部增强(local Augment)

                7147d49a249d4c8fbe7fa41e8159aba2.png

                2.自增强(Self Augmentation)

aab3ecffbaef4feebd5321de0771033b.png

                3.SalfMix

54f0604decb841b094e3767a479dc43d.png

                2.多张图像

                1.Mixup

                2.CutMix

0660ddf1a94d4fa3af723fb92b534b5c.png

                3.SailiencyMix

d38168292c9a4a05b8c195d6417cb4e7.png

3.2 标准化 (Batch Normalization, BN)

1 批标准化

f31d5ecc28fa42dfb2b6ef83674830bb.png

2 层标准化

       LN是在每个样本上对每个特征进行标准化。它计算每个特征在样本上的均值和方差,并将数据进行标准化。与BN不同,LN不依赖于批次的大小,适用于各种场景。

24870184d59047d899799acb555643a6.png

3 实例标准化

        实例标准化(Instance Normalization,IN):IN是在每个样本上对每个通道进行标准化。它计算每个通道在样本上的均值和方差,并将数据进行标准化。IN常用于图像生成任务,如图像风格转换和图像生成模型。

00f1b6b4126f439d920ce4d69da6ebf4.png

4 分组标准化

        组标准化(Group Normalization,GN):GN是在每个样本上对每个通道组进行标准化。通道组是将通道分成多个组,每个组包含一部分通道。GN计算每个通道组在样本上的均值和方差,并将数据进行标准化。

0fbdddef5b0149128ede41678a2b4ac2.png

3.3 正则化

        偏差(Bias):预测值和真实值之间的误差

        方差(Variance):预测值之间的离散程度,也就是离其期望值的距离。方差越大,数据的分布越分散。

48a38d3b7ce9442ab9be95f35fe12a71.png

        训练集的错误率较小,而验证集/测试集的错误率较大,说明模型存在较大方差,可能出现了过拟合

        训练集和测试集的错误率都较大,且两者相近,说明模型存在较大偏差,可能出现了欠拟合         训练集和测试集的错误率都较小,且两者相近,说明方差和偏差都较小,这个模型效果比较好。

        高方差,有以下几种方式:

        获取更多的数据,使得训练能够包含所有可能出现的情况

        正则化(Regularization)L1与L2正则化

        寻找更合适的网络结构

3.4 Dropout

        Dropout方法是Hinton等人在2012年推出的,为了防止训练阶段的过拟合,随机去掉神经元。在一个密集的(或全连接的)网络中,对于每一层,我们给出了一个dropout的概率p。在每次迭代中,每个神经元被去掉的概率为p。

        一般是在最后的全连接层出现

3.5 优化函数

        待优化参数记为w,损失函数loss,学习率lr,每次迭代一个batch, t表示当前batch迭代的总次数。

        过程:

               2847412cfe0245fcb95a31f9fa75be8f.png

        1.优化函数-SGD(Stochastic Gradient Descent) 

0a3c1679d3854e268dc370ee617011cc.png

        2.优化函数-SGDM(Stochastic Gradient Descent with Momentum)在SGD的基础之上一阶动量考虑了第t-1次迭代的结果mt=gt    

208fb18e1bb74a6cb894c3f263d6f403.png

        3.优化函数- Adagrad(在SGD的基础上增加二阶动量)

47cb76ac53be49a788109639d75c1a0e.png

        4.优化函数- RMSProp,在SGD的基础上增加了二阶动量,且二阶动量考虑了第t次和第t-1次的结果mt=gt

3f503a178dad4483b38e711fa2691c3f.png

        5.优化函数- - Adam(同时结合SGDM一阶动量和RMSProp二阶动量)

8120a4b5e5204bb28daee50af88965ea.png

 

 

 

您可能感兴趣的与本文相关的镜像

PyTorch 2.7

PyTorch 2.7

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值