- 博客(32)
- 收藏
- 关注
原创 原型与原型链
可以这样理解,原型 类似面向编程中的类,通过构造函数实例化对象,通过 构造函数.prototype.属性/方法 为构造函数的类添加属性或者方法。如果还没有找到就会再在其。中查找,这样一层一层向上查找就会形成一个链式结构,我们称为。
2024-12-07 12:12:10
140
原创 相对定位relative与绝对定位absolute
的使用在这个特定的布局中有其作用,尽管它不会影响元素在文档流中的排布,关键是它为该元素的子元素提供定位参考。absolute:脱离文档流后相对与最近的relative进行定位,没有的话就会到body。的情况下,元素依然会按照常规的文档流排布,不是必需的元素才能保持在文档流中。,子元素的定位将相对于页面的初始位置(即。的父元素进行定位的。会继续显示在它的父容器中。时,它的位置是相对于最近的。
2024-12-04 19:18:23
165
原创 损失函数,代价函数,梯度,优化器,学习率,学习率调度器
首先损失,损失是一组参数拟合出来的样本的预测值和样本的真实值之间的差异,损失是用来度量这种差异的,根据不同的拟合权重参数全局有一个对应的损失值,损失后续经过反向传播计算每个参数对应的梯度,找出一个梯度下降最快的方向,用不同的学习率作为优化步长和不同策略的优化器进行优化,所以如何来计算损失对于模型最后的优化效果非常重要。L1正则化的作用是使得大部分模型参数的值等于0,这样一来,当模型训练好后,这些权值等于0的特征可以省去,从而达到稀疏化的目的,也节省了存储的空间,因为在计算时,值为0的特征都可以不用存储了。
2023-12-22 10:32:02
1176
原创 TensorBoard(代码注释有一些对梯度计算,优化器,学习率,反向传播,损失这些基础概念的理解)
由于是在每个epoch训练和验证完后进行一次对预测图片的的预测,所以可以查看每个epoch,在tensorboard界面中是step表示,的预测情况,具体打印的信息在代码中进行控制。tensorboard我的理解就是一个用来保存查看训练过程参数,训练情况的库,可以根据可视化的界面,理解模型的训练优化过程,并且可以利用得到的信息进行优化模型。add_figure() 预测图片在每一轮epoch的预测情况。在代码里定义的要查看的每一层的权重参数的分布情况。GRAPH可以查看详细数据在模型里的流向情况。
2023-12-20 19:19:13
729
原创 nn.functional 和 nn.Module
Net模型继承自nn.module,用nn.module的children(),named_children(),.modules()方法,获取模型结构,并管理每一层的parameters,是否可训练等。在Pytorch中,模型的参数是需要被优化器训练的,因此,通常要设置参数为 requires_grad = True 的张量。同时,在一个模型中,往往有许多的参数,要手动管理这些参数并不是一件容易的事情。
2023-12-15 11:13:44
424
原创 张量结构操作
torch.cat和torch.stack有略微的区别,torch.cat是连接,不会增加维度,而torch.stack是堆叠,会增加维度。可以用torch.cat方法和torch.stack方法将多个张量合并,可以用torch.split方法把一个张量分割成多个张量。torch.transpose可以交换张量的维度,torch.transpose常用于图片存储格式的变换上。torch.unsqueeze的作用和torch.squeeze的作用相反。# 改回成 [1,3,3,2] 形状的张量。
2023-12-15 09:53:32
476
原创 torchkeras.KerasModel类的使用
有些model输入输出,Loss结构和torchkeras结构有些不同,只需要copy出torchkeras.KerasModel或torchkeras.LightModel 源码,适当修改即可。torchkeras.KerasModel:这个库时torchkeras的标准模型类库,初始化时传入的参数是实例化的模型net,损失函数,指标记录字典,优化器。torchkeras.LightModel :借鉴pytorch_Lighting,实现了多GPU训练,Tensorboard功能,回调函数等功能。
2023-12-15 09:34:06
1023
原创 DeepLabV1,V2结构
backbone为resnet的deeplabv2的ASPP 结构只有4个3*3分支融合多尺度(根据的是膨胀系数的不同,googleNet还没有用到这个,还是改变卷积核大小),3*3后面没有1*1,vgg作为backbone是有的、2. 空间不敏感问题,虽然图像变换对图像分类影响不大,但用分类网络作为backbone对分割网络影响比较大。1. Large-FOV:对结构里一些层用膨胀卷积,这时候V1提出还是用的VGG16为backbone。2. 多尺度计算问题,用ASPP模块解决,相比FOV性能更好。
2023-12-14 11:12:00
452
1
原创 FCN原论文的结构和原理
FCN-16s版本的网络,FC6模块,FC7模块,变通道模块个数为num_cls的模块和以上32s版本一样,变化在于16s版本提取出了vgg网络在输出h/32*w/32之前的pooling4层的特征,这一层输出是h/16*w/16大小,这个先进行1*1变通道为num_cls,再和上采样两倍后特征图尺寸变成h/16*w/16,通道为num_cls的特征图进行对应相加融合pooling4层的尺度的特征,再对融合后的进行16倍上采样得到和输入一样的w,h的输出特征图,通道数是num_cls。
2023-12-13 16:52:01
560
1
原创 语义分割前置知识,转置卷积
卷积核参数翻转的意思是上采样的卷积核刚好是对相应特征图下采样时用的卷积核参数的上下左右翻转,虽然经过这样的卷积核和下采样后的特征图卷积运算后得到的特征图和上采样前的不完全一样,但就是这样用的,数学原理就是只有存在逆矩阵的矩阵才能完全返回之前的特征图,但是卷积核的等效矩阵并不是方阵,并不存在逆矩阵。下面的图直观理解转置卷积的作用,因为分割任务要求输入输出图像w,h是一样的,因为要预测每个像素的类别,所以下采样后要用转置卷积上采样增大图像的尺寸。注意,转置卷积的参数有个空洞卷积的参数,这个膨胀卷积之后会写。
2023-12-13 16:04:35
449
1
原创 EfficientNetV1(pytorch)
读模型代码我喜欢从最下面的 def efficientnet_b2(num_classes=1000): 模型定义时候开始看,从传参调用一个一个去看模型的整个结构,包括所有MBConv模块参数的构建,所有层的构建,小模块的构建等等细节。这个和MobileNetV3有些不同,第一层全连接长度不是升维后的3*3DW卷积维度的1/4,二是PW升维前的输入通道的1/4。之前的研究探索的是单个因改变的影响,这篇论文采用网络搜索机制同时探索3个因素的影响。用的EfficientNetB0进行的训练。
2023-12-12 20:58:15
699
原创 ResNeXt(pytorch)
和resnet几乎一模一样,改一下Conv2d的组数即可实现,其他参数均是改变的输入输出通道数,分组卷积实现的核心步骤是groups参数,这是Conv2d的一个参数,通过这个参数,Conv2d自动实现分组卷积,具体通道变换见如下代码的bottleneck的实现分组卷积的注释部分。ResNet50和ResNeXt50的模型参数对比:组数设置为32组,每个卷积核是4通道,参数d表示的是卷积核的通道数,如32*4d,就是说把通道分成32组,每个卷积核的通道数是4.实验证明,32组错误率最低。
2023-12-12 14:33:34
561
原创 ShuffleNet V1+V2(pytorch)
a是resnet模块,b,c是ShuffleNetV1的block,在V1版中,两模块branch2的第一个1*1卷积依然是类似MobileNet中的组卷积,减少参数量,之后有一个channel shuaffle操作,之后是类似MobileNet的DW卷积,之后进行1*1的GConv,b进行的是相加操作,d进行的是堆叠操作。V1的模型参数表,一般选择g=3的情况。注意,stage2,3,4开始s=2,使用c模块,第二个s=1,使用b模块的block,repeat参数表示每个步距对应的模块的重复次数。
2023-12-12 10:09:16
1124
原创 ResNet(pytorch)
训练epoch比没冻结少7轮,也大概可以看出这个冻结训练权重的预测结果不如不冻结参数训练权重的预测结果。不冻结官方权重的训练结果,这个运行过程的结果找不到了,下面是使用这个训练出来的权重进行单张照片的预测结果。两种残差块,18层,34层使用第一种残差块,50层,101层,152层使用右边的残差块。开启上述代码的注释后,将冻结所有参数,只训练后续代码新添加的适应自定义数据集的全连接层。resnet训练脚本中要注意的是官方权重下载和加载,修改,冻结部分的代码。注意这段代码的成批打包图像传入模型中的代码实现。
2023-12-11 16:29:57
525
1
原创 GoogLeNet(pytorch)
4. 添加两个辅助分类器帮助训练(避免梯度消失,用于向前传导梯度,也有一定的正则化效果,防止过拟合)3. 丢弃全连接层,使用平均池化层(大大减少模型参数)2. 引入PW维度变换卷积,启迪后续参数量的优化。模型有三个返回结果,一个预测,两个辅助分类器。1. 引入Inception基础结构。
2023-12-11 14:22:30
523
1
原创 AlexNet(pytorch)
AlexNet是2012年ISLVRC 2012(ImageNet Large Scale Visual Recognition Challenge)竞赛的冠军网络,分类准确率由传统的 70%+提升到 80%+(2)使用了 ReLU 激活函数,而不是传统的 Sigmoid 激活函数以及 Tanh 激活函数。(4)在全连接层的前两层中使用了 Dropout 随机失活神经元操作,以。我感觉pycharm的plt显示并不是特别明了。(1)首次利用 GPU 进行网络加速训练。(3)使用了 LRN 局部响应归一化。
2023-12-11 10:25:38
528
1
原创 MobileNetV3代码(pytorch)
提取用于DW卷积的池化后一维向量,两个fc全连接层,第一个全连接把和特征图通道数一样长度的一维向量缩短为1/4,之后第二个全连接把通道数还原回原来的长度,经过训练的一维向量每个位置的值就是经过DW卷积后的特征矩阵的每一层的权重,把这个每一层的权重和每个通道上的数值相乘。1、MobileNetV1的深度可分离卷积DW(depthwise separable convolutions)。减少第一层卷积层的卷积核个数(32->16)(节省2ms),精简最后的全连接层结构(节省7ms,11%)。
2023-12-09 21:33:13
1416
2
原创 经典算法诞生时对应的数据集
训练数据集的选择通常与应用场景和任务相关,例如,PASCAL VOC和MS COCO数据集广泛用于通用物体识别和分割,Cityscapes数据集用于城市场景分割,而ADE20K数据集用于场景理解和分割等。需要注意的是,某些图像分割算法并不需要显式的训练数据集,而是依赖于特定的算法原理和参数设置。此外,这些算法通常在其最初的训练数据集上进行预训练,然后可以通过迁移学习或微调来适应特定的任务和数据集。随着研究的不断发展,还出现了更多特定领域或任务的数据集,例如医学图像数据集、自然场景图像数据集等。
2023-10-29 16:49:01
85
1
原创 关于数据集的总结
COCO数据集旨在提供一个丰富的、多样化的场景,包括各种常见和复杂的对象,以推动计算机视觉算法的研究和发展。因此,无论是提到MS COCO还是COCO数据集,它们指的都是同一个广泛使用的大规模计算机视觉数据集,用于目标检测、图像分割、关键点检测和图像描述等任务。它具有丰富多样的场景、多样性的目标类别和详细的标注信息,成为计算机视觉算法研究和评估的重要基准数据集。通过在LVIS数据集上进行研究,可以推动算法在多类别和多实例场景中的发展,并提供一个公开的基准用于比较不同算法的性能和效果。
2023-10-29 16:37:42
687
1
原创 一个简单的知识框架
例如,基于局部填充的图像融合(Patch-based fusion)和基于全局优化的图像融合(Global optimization fusion)是常见的基于图像修复的方法。深度学习在目标检测领域取得了重大突破,特别是基于区域的方法(如R-CNN系列、YOLO系列和SSD等),通过使用CNN来提取特征并进行目标分类和边界框回归,实现了高效准确的目标检测。它能够通过对大量数据的学习和建模,挖掘数据中的模式和隐藏信息,并提供个性化的推荐和预测,如商品推荐、电影推荐、用户行为分析等。
2023-10-28 18:48:26
58
1
原创 深度学习的GPU版环境配置遇到的问题以及一部分的解决方法
比如先更新NVIDIA显卡驱动,创建虚拟环境,安装一个cuda版本的putorch的国内安装方法,先装轮子文件,再使用pip再Anoconda Prompt控制台下使用特定语句安装,新版pycharm配置anoconda的python环境在环境目录下找不到解释器的问题,等等。查看已经安装的包,进入相关环境,conda list ,可以查看到pytorch三个包版本以及是不是cuda版,以及哪个cuda版,关于深度学习模型的环境配置里pytorch,cuda,cudnn,python的环境匹配和兼容问题?
2023-10-20 18:54:03
319
1
原创 计算机视觉基础小总结
定义一个数据增强操作,包括图像裁剪,图像变换,转换张量,标准化等步骤。定义数据集类:继承自data.Dataset类,重写__getitem__(),__len__()方法,__getitem__()方法返回的是图像和图像对应的标签,初始化方法是把传入自定义数据类的参数赋给自身的属性,__getitem__()方法传入的是一个索引值,找到索引值对应的图片路径和标签,Image.open()打开路径下的图片,返回一个图片数据和对应的标签,__len__()返回的是路径列表的长度,正是数据集的大小。
2023-10-14 21:51:56
118
1
原创 MNIST简单线性模型训练过程的原理
理解一下这个loss到底是什么,根据查阅相关资料和程序分析,这个loss应该是这个批次,即这64个十维向量输出的所有概率损失求平均或者求和得到的,根据球的的这个损失使用后续的优化算法找到使其梯度下降的最快的方向,这里这个梯度的求取是矩阵梯度的运算,这个在高等数学和线性代数中并没有深入了解过,但可以类比一下微积分里梯度的概念,只不过微积分是连续的函数,矩阵是离散的数据,这样的数据也是可以求取梯度的。这样可以根据梯度方向先前的系统随机生成的参数,以及优化器里设置的学习率使用学习率函数进行参数的更新优化。
2023-10-11 15:20:44
316
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人