当前位置: 首页 > news >正文

怎么将自己做的网站上线广州市南沙建设局网站

怎么将自己做的网站上线,广州市南沙建设局网站,网站建设 收费明细,免费自建 响应式 网站摘要 在视觉转换器#xff08;Vision Transformers, ViTs#xff09;领域#xff0c;随着技术的不断发展#xff0c;研究者们不断探索如何在保持高效性能的同时#xff0c;降低模型的计算复杂度#xff0c;以满足资源受限场景#xff08;如移动设备#xff09;的需求。…摘要 在视觉转换器Vision Transformers, ViTs领域随着技术的不断发展研究者们不断探索如何在保持高效性能的同时降低模型的计算复杂度以满足资源受限场景如移动设备的需求。近期一种名为CAS-ViT卷积加性自注意力视觉转换器的模型横空出世它以其出色的效率和性能平衡被誉为“最快的ViT模型”吸引了广泛的关注。 一、CAS-ViT的背景与动机 视觉转换器ViTs自问世以来以其强大的全局建模和表示能力在计算机视觉领域取得了显著进展。然而传统的ViT模型中的多头自注意力MSA机制虽然能够捕获长距离依赖性但其二次复杂性和较高的计算成本限制了其在资源受限设备上的部署。为了解决这一问题研究者们提出了多种改进方案包括特征偏移、稀疏注意力、线性注意力等但均未能在效率和性能之间找到完美的平衡点。 二、CAS-ViT的创新与优势 CAS-ViTConvolutional Additive Self-attention Vision Transformer通过一系列创新成功实现了计算与效率的平衡。其核心在于提出了一种新颖的加性相似度函数和卷积加性标记混合器Convolutional Additive Token Mixer, CATM这一设计显著降低了计算开销。 加性相似度函数CAS-ViT通过构建加性相似度函数摒弃了传统自注意力机制中的矩阵乘法和Softmax操作从而大幅减少了计算复杂度。这种加性相似度函数基于Sigmoid激活的通道和空间注意力通过卷积操作实现保留了原始特征维度的同时避免了信息丢失。 卷积加性标记混合器CATMCATM模块采用潜在的空间和通道注意力作为新颖的交互形式消除了繁琐的矩阵运算使得计算复杂度降低到线性级别。这一设计不仅提高了推理效率还保持了ViT的全局建模能力。 三、CAS-ViT的性能与评估 CAS-ViT在多种视觉任务上进行了全面评估包括图像分类、目标检测、实例分割和语义分割。实验结果表明CAS-ViT在GPU、ONNX和iPhone等不同平台上均取得了具有竞争力的性能证明了其作为高效移动视觉应用的可行选择。 图像分类在ImageNet-1K数据集上CAS-ViT模型在显著提高分类精度的同时还保持了较低的计算成本展现了其在资源受限场景下的优势。目标检测和实例分割在MS COCO 2017数据集上CAS-ViT作为主干网络结合RetinaNet和Mask RCNN在目标检测和实例分割任务中均表现出色尤其是在小尺度目标上性能优于多个基准模型。语义分割在ADE20K数据集上CAS-ViT展示了高效的语义分割能力以较低的参数数量和计算成本达到了较高的平均交并比mIoU。 本文使用CAS-ViT模型实现图像分类任务模型选择rcvit_t在植物幼苗分类任务ACC达到了91%。 通过深入阅读本文您将能够掌握以下关键技能与知识 数据增强的多种策略包括利用PyTorch的transforms库进行基本增强以及进阶技巧如CutOut、MixUp、CutMix等这些方法能显著提升模型泛化能力。 RDNet模型的训练实现了解如何从头开始构建并训练EfficientMod或其他深度学习模型涵盖模型定义、数据加载、训练循环等关键环节。 混合精度训练学习如何利用PyTorch自带的混合精度训练功能加速训练过程同时减少内存消耗。 梯度裁剪技术掌握梯度裁剪的应用有效防止梯度爆炸问题确保训练过程的稳定性。 分布式数据并行DP训练了解如何在多GPU环境下使用PyTorch的分布式数据并行功能加速大规模模型训练。 可视化训练过程学习如何绘制训练过程中的loss和accuracy曲线直观监控模型学习状况。 评估与生成报告掌握在验证集上评估模型性能的方法并生成详细的评估报告包括ACC等指标。 测试脚本编写学会编写测试脚本对测试集进行预测评估模型在实际应用中的表现。 学习率调整策略理解并应用余弦退火策略动态调整学习率优化训练效果。 自定义统计工具使用AverageMeter类或其他工具统计和记录训练过程中的ACC、loss等关键指标便于后续分析。 深入理解ACC1与ACC5掌握图像分类任务中ACC1Top-1准确率和ACC5Top-5准确率的含义及其计算方法。 指数移动平均EMA学习如何在模型训练中应用EMA技术进一步提升模型在测试集上的表现。 若您在以上任一领域基础尚浅感到理解困难推荐您参考我的专栏“经典主干网络精讲与实战”该专栏从零开始循序渐进地讲解上述所有知识点助您轻松掌握深度学习中的这些核心技能。 安装包 安装timm 使用pip就行命令 pip install timmmixup增强和EMA用到了timm 数据增强Cutout和Mixup 为了提高模型的泛化能力和性能我在数据预处理阶段加入了Cutout和Mixup这两种数据增强技术。Cutout通过随机遮挡图像的一部分来强制模型学习更鲁棒的特征而Mixup则通过混合两张图像及其标签来生成新的训练样本从而增加数据的多样性。实现这两种增强需要安装torchtoolbox。安装命令 pip install torchtoolboxCutout实现在transforms中。 from torchtoolbox.transform import Cutout # 数据预处理 transform transforms.Compose([transforms.Resize((224, 224)),Cutout(),transforms.ToTensor(),transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])])需要导入包from timm.data.mixup import Mixup 定义Mixup和SoftTargetCrossEntropy mixup_fn Mixup(mixup_alpha0.8, cutmix_alpha1.0, cutmix_minmaxNone,prob0.1, switch_prob0.5, modebatch,label_smoothing0.1, num_classes12)criterion_train SoftTargetCrossEntropy()Mixup 是一种在图像分类任务中常用的数据增强技术它通过将两张图像以及其对应的标签进行线性组合来生成新的数据和标签。 参数详解 mixup_alpha (float): mixup alpha 值如果 0则 mixup 处于活动状态。 cutmix_alpha (float)cutmix alpha 值如果 0cutmix 处于活动状态。 cutmix_minmax (List[float])cutmix 最小/最大图像比率cutmix 处于活动状态如果不是 None则使用这个 vs alpha。 如果设置了 cutmix_minmax 则cutmix_alpha 默认为1.0 prob (float): 每批次或元素应用 mixup 或 cutmix 的概率。 switch_prob (float): 当两者都处于活动状态时切换cutmix 和mixup 的概率 。 mode (str): 如何应用 mixup/cutmix 参数每个’batch’‘pair’元素对‘elem’元素。 correct_lam (bool): 当 cutmix bbox 被图像边框剪裁时应用。 lambda 校正 label_smoothing (float)将标签平滑应用于混合目标张量。 num_classes (int): 目标的类数。 EMA EMAExponential Moving Average在深度学习中是一种用于模型参数优化的技术它通过计算参数的指数移动平均值来平滑模型的学习过程。这种方法有助于提高模型的稳定性和泛化能力特别是在训练后期。以下是关于EMA的总结表达进行了优化 EMA概述 EMA是一种加权移动平均技术其中每个新的平均值都是前一个平均值和当前值的加权和。在深度学习中EMA被用于模型参数的更新以减缓参数在训练过程中的快速波动从而得到更加平滑和稳定的模型表现。 工作原理 在训练过程中除了维护当前模型的参数外还额外保存一份EMA参数。每个训练步骤或每隔一定步骤根据当前模型参数和EMA参数按照指数衰减的方式更新EMA参数。具体来说EMA参数的更新公式通常如下 EMA new decay × EMA old ( 1 − decay ) × model_parameters \text{EMA}_{\text{new}} \text{decay} \times \text{EMA}_{\text{old}} (1 - \text{decay}) \times \text{model\_parameters} EMAnew​decay×EMAold​(1−decay)×model_parameters 其中decay是一个介于0和1之间的超参数控制着旧EMA值和新模型参数值之间的权重分配。较大的decay值意味着EMA更新时更多地依赖于旧值即平滑效果更强。 应用优势 稳定性EMA通过平滑参数更新过程减少了模型在训练过程中的波动使得模型更加稳定。泛化能力由于EMA参数是历史参数的平滑版本它往往能捕捉到模型训练过程中的全局趋势因此在测试或评估时使用EMA参数往往能获得更好的泛化性能。快速收敛虽然EMA本身不直接加速训练过程但通过稳定模型参数它可能间接地帮助模型更快地收敛到更优的解。 使用场景 EMA在深度学习中的使用场景广泛特别是在需要高度稳定性和良好泛化能力的任务中如图像分类、目标检测等。在训练大型模型时EMA尤其有用因为它可以帮助减少过拟合的风险并提高模型在未见数据上的表现。 具体实现如下 import logging from collections import OrderedDict from copy import deepcopy import torch import torch.nn as nn_logger logging.getLogger(__name__)class ModelEma:def __init__(self, model, decay0.9999, device, resume):# make a copy of the model for accumulating moving average of weightsself.ema deepcopy(model)self.ema.eval()self.decay decayself.device device # perform ema on different device from model if setif device:self.ema.to(devicedevice)self.ema_has_module hasattr(self.ema, module)if resume:self._load_checkpoint(resume)for p in self.ema.parameters():p.requires_grad_(False)def _load_checkpoint(self, checkpoint_path):checkpoint torch.load(checkpoint_path, map_locationcpu)assert isinstance(checkpoint, dict)if state_dict_ema in checkpoint:new_state_dict OrderedDict()for k, v in checkpoint[state_dict_ema].items():# ema model may have been wrapped by DataParallel, and need module prefixif self.ema_has_module:name module. k if not k.startswith(module) else kelse:name knew_state_dict[name] vself.ema.load_state_dict(new_state_dict)_logger.info(Loaded state_dict_ema)else:_logger.warning(Failed to find state_dict_ema, starting from loaded model weights)def update(self, model):# correct a mismatch in state dict keysneeds_module hasattr(model, module) and not self.ema_has_modulewith torch.no_grad():msd model.state_dict()for k, ema_v in self.ema.state_dict().items():if needs_module:k module. kmodel_v msd[k].detach()if self.device:model_v model_v.to(deviceself.device)ema_v.copy_(ema_v * self.decay (1. - self.decay) * model_v) 加入到模型中。 #初始化 if use_ema:model_ema ModelEma(model_ft,decaymodel_ema_decay,devicecpu,resumeresume)# 训练过程中更新完参数后同步update shadow weights def train():optimizer.step()if model_ema is not None:model_ema.update(model)# 将model_ema传入验证函数中 val(model_ema.ema, DEVICE, test_loader)针对没有预训练的模型容易出现EMA不上分的情况这点大家要注意啊 项目结构 CAS-ViT_Demo ├─data1 │ ├─Black-grass │ ├─Charlock │ ├─Cleavers │ ├─Common Chickweed │ ├─Common wheat │ ├─Fat Hen │ ├─Loose Silky-bent │ ├─Maize │ ├─Scentless Mayweed │ ├─Shepherds Purse │ ├─Small-flowered Cranesbill │ └─Sugar beet ├─models │ ├─__init__.py │ └─rcvit.py ├─mean_std.py ├─makedata.py ├─train.py └─test.pymean_std.py计算mean和std的值。 makedata.py生成数据集。 train.py训练CAS-ViT模型 models来源官方代码。 计算mean和std 在深度学习中特别是在处理图像数据时计算数据的均值mean和标准差standard deviation, std并进行归一化Normalization是加速模型收敛、提高模型性能的关键步骤之一。这里我将详细解释这两个概念并讨论它们如何帮助模型学习。 均值Mean 均值是所有数值加和后除以数值的个数得到的平均值。在图像处理中我们通常对每个颜色通道如RGB图像的三个通道分别计算均值。这意味着如果我们的数据集包含多张图像我们会计算所有图像在R通道上的像素值的均值同样地我们也会计算G通道和B通道的均值。 标准差Standard Deviation, Std 标准差是衡量数据分布离散程度的统计量。它反映了数据点与均值的偏离程度。在计算图像数据的标准差时我们也是针对每个颜色通道分别进行的。标准差较大的颜色通道意味着该通道上的像素值变化较大而标准差较小的通道则相对较为稳定。 归一化Normalization 归一化是将数据按比例缩放使之落入一个小的特定区间通常是[0, 1]或[-1, 1]。在图像处理中我们通常会使用计算得到的均值和标准差来进行归一化公式如下 Normalized Value Original Value − Mean Std \text{Normalized Value} \frac{\text{Original Value} - \text{Mean}}{\text{Std}} Normalized ValueStdOriginal Value−Mean​ 注意在某些情况下为了简化计算并确保数据非负我们可能会选择将数据缩放到[0, 1]区间这时使用的是最大最小值归一化而不是基于均值和标准差的归一化。但在这里我们主要讨论基于均值和标准差的归一化因为它能保留数据的分布特性。 为什么需要归一化 加速收敛归一化后的数据具有相似的尺度这有助于梯度下降算法更快地找到最优解因为不同特征的梯度更新将在同一数量级上从而避免了某些特征因尺度过大或过小而导致的训练缓慢或梯度消失/爆炸问题。 提高精度归一化可以改善模型的泛化能力因为它使得模型更容易学习到特征之间的相对关系而不是被特征的绝对大小所影响。 稳定性归一化后的数据更加稳定减少了训练过程中的波动有助于模型更加稳定地收敛。 如何计算和使用mean和std 计算全局mean和std在整个数据集上计算mean和std。这通常是在训练开始前进行的并使用这些值来归一化训练集、验证集和测试集。 使用库函数许多深度学习框架如PyTorch、TensorFlow等提供了计算mean和std的便捷函数并可以直接用于数据集的归一化。 动态调整在某些情况下特别是当数据集非常大或持续更新时可能需要动态地计算mean和std。这通常涉及到在训练过程中使用移动平均如EMA来更新这些统计量。 计算并使用数据的mean和std进行归一化是深度学习中的一项基本且重要的预处理步骤它对于加速模型收敛、提高模型性能和稳定性具有重要意义。新建mean_std.py,插入代码 from torchvision.datasets import ImageFolder import torch from torchvision import transformsdef get_mean_and_std(train_data):train_loader torch.utils.data.DataLoader(train_data, batch_size1, shuffleFalse, num_workers0,pin_memoryTrue)mean torch.zeros(3)std torch.zeros(3)for X, _ in train_loader:for d in range(3):mean[d] X[:, d, :, :].mean()std[d] X[:, d, :, :].std()mean.div_(len(train_data))std.div_(len(train_data))return list(mean.numpy()), list(std.numpy())if __name__ __main__:train_dataset ImageFolder(rootrdata1, transformtransforms.ToTensor())print(get_mean_and_std(train_dataset))数据集结构 运行结果 ([0.3281186, 0.28937867, 0.20702125], [0.09407319, 0.09732835, 0.106712654])把这个结果记录下来后面要用 生成数据集 我们整理还的图像分类的数据集结构是这样的 data ├─Black-grass ├─Charlock ├─Cleavers ├─Common Chickweed ├─Common wheat ├─Fat Hen ├─Loose Silky-bent ├─Maize ├─Scentless Mayweed ├─Shepherds Purse ├─Small-flowered Cranesbill └─Sugar beetpytorch和keras默认加载方式是ImageNet数据集格式格式是 ├─data │ ├─val │ │ ├─Black-grass │ │ ├─Charlock │ │ ├─Cleavers │ │ ├─Common Chickweed │ │ ├─Common wheat │ │ ├─Fat Hen │ │ ├─Loose Silky-bent │ │ ├─Maize │ │ ├─Scentless Mayweed │ │ ├─Shepherds Purse │ │ ├─Small-flowered Cranesbill │ │ └─Sugar beet │ └─train │ ├─Black-grass │ ├─Charlock │ ├─Cleavers │ ├─Common Chickweed │ ├─Common wheat │ ├─Fat Hen │ ├─Loose Silky-bent │ ├─Maize │ ├─Scentless Mayweed │ ├─Shepherds Purse │ ├─Small-flowered Cranesbill │ └─Sugar beet新增格式转化脚本makedata.py,插入代码 import glob import os import shutilimage_listglob.glob(data1/*/*.png) print(image_list) file_dirdata if os.path.exists(file_dir):print(true)#os.rmdir(file_dir)shutil.rmtree(file_dir)#删除再建立os.makedirs(file_dir) else:os.makedirs(file_dir)from sklearn.model_selection import train_test_split trainval_files, val_files train_test_split(image_list, test_size0.3, random_state42) train_dirtrain val_dirval train_rootos.path.join(file_dir,train_dir) val_rootos.path.join(file_dir,val_dir) for file in trainval_files:file_classfile.replace(\\,/).split(/)[-2]file_namefile.replace(\\,/).split(/)[-1]file_classos.path.join(train_root,file_class)if not os.path.isdir(file_class):os.makedirs(file_class)shutil.copy(file, file_class / file_name)for file in val_files:file_classfile.replace(\\,/).split(/)[-2]file_namefile.replace(\\,/).split(/)[-1]file_classos.path.join(val_root,file_class)if not os.path.isdir(file_class):os.makedirs(file_class)shutil.copy(file, file_class / file_name)完成上面的内容就可以开启训练和测试了。
http://www.dnsts.com.cn/news/3687.html

相关文章:

  • 西安网站建设外包河南省商丘网站
  • 网站开发从入门到实战wordpress cx udy
  • 广州设计网站wordpress分类目录前缀
  • wordpress建站教程百科怎么找上海网站建
  • 杭州模板网站龙采做网站要多少钱
  • 标书制作教程赣州优化
  • 哪个网站做外贸的网站交易截图可以做证据吗
  • 北京网站优化指导找我家是做的视频网站
  • 宁夏企业网站建设深圳做手机网站设计
  • 网站建设评价最专业网站建设开发
  • wordpress做出的网站江苏省张家港保税区建设厅网站
  • django做网站和js做网站自己上传图片做动漫图网站
  • 互联网做网站怎么赚钱青岛建站平台
  • oem网站建设源码品牌建设的步骤
  • WordPress多站點支付插件设计外贸网站
  • 游戏推广合作安徽seo网络优化师
  • 做网站有免费的服务器吗天猫网页版
  • 网站开发手机编译器wordpress插件漏洞扫描
  • 淘宝客如何做返积分制网站怎样做网络推广方法
  • 临沂培训学校网站建设网站建设数据技术
  • 中国域名门户网站专业的wap网站开发
  • 网站模板带后台网络设计工作
  • 可以做外贸的网站广州网站建设 骏域
  • 做搜狗手机网站点击软张家界市建设网站
  • Wordpress垂直类目站模版wordpress和百度指数
  • 网站seo推广员招聘WordPress校园博客
  • 养老网站建设 中企动力网站分类有哪几类
  • 开发网站嵌入广告视频网站怎么做可以播放电视剧
  • 网站开发合同履约做外贸如何访问国外网站
  • 网站开发实例社区网页设计实训总结200