企业用什么做网站北京网站建设找华网天下

web/2025/10/5 23:07:13/文章来源:
企业用什么做网站,北京网站建设找华网天下,wordpress博客空间,wordpress首饰商城系统前言 大家好#xff0c;我是Snu77#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进#xff0c;内容持续更新#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本#xff0c;同时修改内容也支持Re…前言 大家好我是Snu77这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进内容持续更新每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本同时修改内容也支持ResNet32、ResNet101和PPHGNet版本其中ResNet为RT-DETR官方版本11移植过来的参数量基本保持一致(误差很小很小)不同于ultralytics仓库版本的ResNet官方版本同时ultralytics仓库的一些参数是和RT-DETR相冲的所以我也是会教大家调好一些参数真正意义上的跑ultralytics的和RT-DETR官方版本的无区别 欢迎大家订阅本专栏一起学习RT-DETR    一、本文介绍 本位给大家带来的改进机制是RepViT。它是一种最新发布的网络结构把轻量级的视觉变换器就是ViT的设计理念融入到了我们常用的轻量级卷积神经网络CNN里。我尝试把它用在RT-DETR的主干网络上效果还不错mAP有一定的提高。我用的是这个网络中最轻量级的版本。 我将其用于在我的数据上实验包含多个类别其中包含大中小多个目标类别无论哪种目标精度均有所提升。接下来我会展示一下原始版本和我改进后版本在训练上的对比图。之后会在文章中介绍该网络结构然后教大家如何修改该网络结构,同时修改该主干参数量下降四分之一相对于ResNet18。 专栏链接RT-DETR剑指论文专栏持续复现各种顶会内容——论文收割机RT-DETR 目录 一、本文介绍 三、RepViT的核心代码  四、手把手教你添加RepViT网络结构 4.1 修改一 4.2 修改二  4.3 修改三  4.4 修改四 4.5 修改五 4.6 修改六 4.7 修改七 4.8 修改八 4.9 RT-DETR不能打印计算量问题的解决 4.10 可选修改 五、RepViT的yaml文件 5.1 yaml文件 5.2 运行文件 5.3 成功训练截图 六、全文总结 二、RepViT基本原理 ​ 官方论文地址 官方论文地址点击即可跳转 官方代码地址 官方代码地址点击即可跳转 ​​  RepViT: Revisiting Mobile CNN From ViT Perspective 这篇论文探讨了如何改进轻量级卷积神经网络CNN以提高其在移动设备上的性能和效率。作者们发现虽然轻量级视觉变换器ViT因其能够学习全局表示而表现出色但轻量级CNN和轻量级ViT之间的架构差异尚未得到充分研究。因此他们通过整合轻量级ViT的高效架构设计逐步改进标准轻量级CNN特别是MobileNetV3从而创造了一系列全新的纯CNN模型称为RepViT。这些模型在各种视觉任务上表现出色比现有的轻量级ViT更高效。 其主要的改进机制包括 结构性重组通过结构性重组Structural Re-parameterization, SR引入多分支拓扑结构以提高训练时的性能。 扩展比率调整调整卷积层中的扩展比率以减少参数冗余和延迟同时提高网络宽度以增强模型性能。 宏观设计优化对网络的宏观架构进行优化包括早期卷积层的设计、更深的下采样层、简化的分类器以及整体阶段比例的调整。 微观设计调整在微观架构层面进行优化包括卷积核大小的选择和压缩激励SE层的最佳放置。 这些创新机制共同推动了轻量级CNN的性能和效率使其更适合在移动设备上使用下面的是官方论文中的结构图我们对其进行简单的分析。 ​ ​ 这张图片是论文中的图3展示了RepViT架构的总览。RepViT有四个阶段输入图像的分辨率依次为 ​ ​ 每个阶段的通道维度用 Ci​ 表示批处理大小用 B 表示。  Stem用于预处理输入图像的模块。Stage1-4每个阶段由多个RepViTBlock组成以及一个可选的RepViTSEBlock包含深度可分离卷积3x3DW1x1卷积压缩激励模块SE和前馈网络FFN。每个阶段通过下采样减少空间维度。Pooling全局平均池化层用于减少特征图的空间维度。FC全连接层用于最终的类别预测。 总结大家可以将RepViT看成是MobileNet系列的改进版本 三、RepViT的核心代码  下面的代码是整个RepViT的核心代码其中有多个版本对应的GFLOPs也不相同使用方式看章节四。 import torch.nn as nn from timm.models.layers import SqueezeExcite import torch__all__ [repvit_m0_6,repvit_m0_9, repvit_m1_0, repvit_m1_1, repvit_m1_5, repvit_m2_3]def _make_divisible(v, divisor, min_valueNone):This function is taken from the original tf repo.It ensures that all layers have a channel number that is divisible by 8It can be seen here:https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet.py:param v::param divisor::param min_value::return:if min_value is None:min_value divisornew_v max(min_value, int(v divisor / 2) // divisor * divisor)# Make sure that round down does not go down by more than 10%.if new_v 0.9 * v:new_v divisorreturn new_vclass Conv2d_BN(torch.nn.Sequential):def __init__(self, a, b, ks1, stride1, pad0, dilation1,groups1, bn_weight_init1, resolution-10000):super().__init__()self.add_module(c, torch.nn.Conv2d(a, b, ks, stride, pad, dilation, groups, biasFalse))self.add_module(bn, torch.nn.BatchNorm2d(b))torch.nn.init.constant_(self.bn.weight, bn_weight_init)torch.nn.init.constant_(self.bn.bias, 0)torch.no_grad()def fuse_self(self):c, bn self._modules.values()w bn.weight / (bn.running_var bn.eps) ** 0.5w c.weight * w[:, None, None, None]b bn.bias - bn.running_mean * bn.weight / \(bn.running_var bn.eps) ** 0.5m torch.nn.Conv2d(w.size(1) * self.c.groups, w.size(0), w.shape[2:], strideself.c.stride, paddingself.c.padding, dilationself.c.dilation,groupsself.c.groups,devicec.weight.device)m.weight.data.copy_(w)m.bias.data.copy_(b)return mclass Residual(torch.nn.Module):def __init__(self, m, drop0.):super().__init__()self.m mself.drop dropdef forward(self, x):if self.training and self.drop 0:return x self.m(x) * torch.rand(x.size(0), 1, 1, 1,devicex.device).ge_(self.drop).div(1 - self.drop).detach()else:return x self.m(x)torch.no_grad()def fuse_self(self):if isinstance(self.m, Conv2d_BN):m self.m.fuse_self()assert (m.groups m.in_channels)identity torch.ones(m.weight.shape[0], m.weight.shape[1], 1, 1)identity torch.nn.functional.pad(identity, [1, 1, 1, 1])m.weight identity.to(m.weight.device)return melif isinstance(self.m, torch.nn.Conv2d):m self.massert (m.groups ! m.in_channels)identity torch.ones(m.weight.shape[0], m.weight.shape[1], 1, 1)identity torch.nn.functional.pad(identity, [1, 1, 1, 1])m.weight identity.to(m.weight.device)return melse:return selfclass RepVGGDW(torch.nn.Module):def __init__(self, ed) - None:super().__init__()self.conv Conv2d_BN(ed, ed, 3, 1, 1, groupsed)self.conv1 torch.nn.Conv2d(ed, ed, 1, 1, 0, groupsed)self.dim edself.bn torch.nn.BatchNorm2d(ed)def forward(self, x):return self.bn((self.conv(x) self.conv1(x)) x)torch.no_grad()def fuse_self(self):conv self.conv.fuse_self()conv1 self.conv1conv_w conv.weightconv_b conv.biasconv1_w conv1.weightconv1_b conv1.biasconv1_w torch.nn.functional.pad(conv1_w, [1, 1, 1, 1])identity torch.nn.functional.pad(torch.ones(conv1_w.shape[0], conv1_w.shape[1], 1, 1, deviceconv1_w.device),[1, 1, 1, 1])final_conv_w conv_w conv1_w identityfinal_conv_b conv_b conv1_bconv.weight.data.copy_(final_conv_w)conv.bias.data.copy_(final_conv_b)bn self.bnw bn.weight / (bn.running_var bn.eps) ** 0.5w conv.weight * w[:, None, None, None]b bn.bias (conv.bias - bn.running_mean) * bn.weight / \(bn.running_var bn.eps) ** 0.5conv.weight.data.copy_(w)conv.bias.data.copy_(b)return convclass RepViTBlock(nn.Module):def __init__(self, inp, hidden_dim, oup, kernel_size, stride, use_se, use_hs):super(RepViTBlock, self).__init__()assert stride in [1, 2]self.identity stride 1 and inp oupassert (hidden_dim 2 * inp)if stride 2:self.token_mixer nn.Sequential(Conv2d_BN(inp, inp, kernel_size, stride, (kernel_size - 1) // 2, groupsinp),SqueezeExcite(inp, 0.25) if use_se else nn.Identity(),Conv2d_BN(inp, oup, ks1, stride1, pad0))self.channel_mixer Residual(nn.Sequential(# pwConv2d_BN(oup, 2 * oup, 1, 1, 0),nn.GELU() if use_hs else nn.GELU(),# pw-linearConv2d_BN(2 * oup, oup, 1, 1, 0, bn_weight_init0),))else:assert (self.identity)self.token_mixer nn.Sequential(RepVGGDW(inp),SqueezeExcite(inp, 0.25) if use_se else nn.Identity(),)self.channel_mixer Residual(nn.Sequential(# pwConv2d_BN(inp, hidden_dim, 1, 1, 0),nn.GELU() if use_hs else nn.GELU(),# pw-linearConv2d_BN(hidden_dim, oup, 1, 1, 0, bn_weight_init0),))def forward(self, x):return self.channel_mixer(self.token_mixer(x))class RepViT(nn.Module):def __init__(self, cfgs):super(RepViT, self).__init__()# setting of inverted residual blocksself.cfgs cfgs# building first layerinput_channel self.cfgs[0][2]patch_embed torch.nn.Sequential(Conv2d_BN(3, input_channel // 2, 3, 2, 1), torch.nn.GELU(),Conv2d_BN(input_channel // 2, input_channel, 3, 2, 1))layers [patch_embed]# building inverted residual blocksblock RepViTBlockfor k, t, c, use_se, use_hs, s in self.cfgs:output_channel _make_divisible(c, 8)exp_size _make_divisible(input_channel * t, 8)layers.append(block(input_channel, exp_size, output_channel, k, s, use_se, use_hs))input_channel output_channelself.features nn.ModuleList(layers)self.width_list [i.size(1) for i in self.forward(torch.randn(1, 3, 640, 640))]def forward(self, x):# x self.features(xresults [None, None, None, None]temp Nonei Nonefor index, f in enumerate(self.features):x f(x)if index 0:temp x.size(1)i 0elif x.size(1) temp:results[i] xelse:temp x.size(1)i i 1return resultsdef repvit_m0_6():Constructs a MobileNetV3-Large modelcfgs [[3, 2, 40, 1, 0, 1],[3, 2, 40, 0, 0, 1],[3, 2, 80, 0, 0, 2],[3, 2, 80, 1, 0, 1],[3, 2, 80, 0, 0, 1],[3, 2, 160, 0, 1, 2],[3, 2, 160, 1, 1, 1],[3, 2, 160, 0, 1, 1],[3, 2, 160, 1, 1, 1],[3, 2, 160, 0, 1, 1],[3, 2, 160, 1, 1, 1],[3, 2, 160, 0, 1, 1],[3, 2, 160, 1, 1, 1],[3, 2, 160, 0, 1, 1],[3, 2, 160, 0, 1, 1],[3, 2, 320, 0, 1, 2],[3, 2, 320, 1, 1, 1],]model RepViT(cfgs)return modeldef repvit_m0_9():Constructs a MobileNetV3-Large modelcfgs [# k, t, c, SE, HS, s[3, 2, 48, 1, 0, 1],[3, 2, 48, 0, 0, 1],[3, 2, 48, 0, 0, 1],[3, 2, 96, 0, 0, 2],[3, 2, 96, 1, 0, 1],[3, 2, 96, 0, 0, 1],[3, 2, 96, 0, 0, 1],[3, 2, 192, 0, 1, 2],[3, 2, 192, 1, 1, 1],[3, 2, 192, 0, 1, 1],[3, 2, 192, 1, 1, 1],[3, 2, 192, 0, 1, 1],[3, 2, 192, 1, 1, 1],[3, 2, 192, 0, 1, 1],[3, 2, 192, 1, 1, 1],[3, 2, 192, 0, 1, 1],[3, 2, 192, 1, 1, 1],[3, 2, 192, 0, 1, 1],[3, 2, 192, 1, 1, 1],[3, 2, 192, 0, 1, 1],[3, 2, 192, 1, 1, 1],[3, 2, 192, 0, 1, 1],[3, 2, 192, 0, 1, 1],[3, 2, 384, 0, 1, 2],[3, 2, 384, 1, 1, 1],[3, 2, 384, 0, 1, 1]]model RepViT(cfgs)return modeldef repvit_m1_0():Constructs a MobileNetV3-Large modelcfgs [# k, t, c, SE, HS, s[3, 2, 56, 1, 0, 1],[3, 2, 56, 0, 0, 1],[3, 2, 56, 0, 0, 1],[3, 2, 112, 0, 0, 2],[3, 2, 112, 1, 0, 1],[3, 2, 112, 0, 0, 1],[3, 2, 112, 0, 0, 1],[3, 2, 224, 0, 1, 2],[3, 2, 224, 1, 1, 1],[3, 2, 224, 0, 1, 1],[3, 2, 224, 1, 1, 1],[3, 2, 224, 0, 1, 1],[3, 2, 224, 1, 1, 1],[3, 2, 224, 0, 1, 1],[3, 2, 224, 1, 1, 1],[3, 2, 224, 0, 1, 1],[3, 2, 224, 1, 1, 1],[3, 2, 224, 0, 1, 1],[3, 2, 224, 1, 1, 1],[3, 2, 224, 0, 1, 1],[3, 2, 224, 1, 1, 1],[3, 2, 224, 0, 1, 1],[3, 2, 224, 0, 1, 1],[3, 2, 448, 0, 1, 2],[3, 2, 448, 1, 1, 1],[3, 2, 448, 0, 1, 1]]model RepViT(cfgs)return modeldef repvit_m1_1():Constructs a MobileNetV3-Large modelcfgs [# k, t, c, SE, HS, s[3, 2, 64, 1, 0, 1],[3, 2, 64, 0, 0, 1],[3, 2, 64, 0, 0, 1],[3, 2, 128, 0, 0, 2],[3, 2, 128, 1, 0, 1],[3, 2, 128, 0, 0, 1],[3, 2, 128, 0, 0, 1],[3, 2, 256, 0, 1, 2],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 512, 0, 1, 2],[3, 2, 512, 1, 1, 1],[3, 2, 512, 0, 1, 1]]model RepViT(cfgs)return modeldef repvit_m1_5():Constructs a MobileNetV3-Large modelcfgs [# k, t, c, SE, HS, s[3, 2, 64, 1, 0, 1],[3, 2, 64, 0, 0, 1],[3, 2, 64, 1, 0, 1],[3, 2, 64, 0, 0, 1],[3, 2, 64, 0, 0, 1],[3, 2, 128, 0, 0, 2],[3, 2, 128, 1, 0, 1],[3, 2, 128, 0, 0, 1],[3, 2, 128, 1, 0, 1],[3, 2, 128, 0, 0, 1],[3, 2, 128, 0, 0, 1],[3, 2, 256, 0, 1, 2],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 1, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 256, 0, 1, 1],[3, 2, 512, 0, 1, 2],[3, 2, 512, 1, 1, 1],[3, 2, 512, 0, 1, 1],[3, 2, 512, 1, 1, 1],[3, 2, 512, 0, 1, 1]]model RepViT(cfgs)return modeldef repvit_m2_3():Constructs a MobileNetV3-Large modelcfgs [# k, t, c, SE, HS, s[3, 2, 80, 1, 0, 1],[3, 2, 80, 0, 0, 1],[3, 2, 80, 1, 0, 1],[3, 2, 80, 0, 0, 1],[3, 2, 80, 1, 0, 1],[3, 2, 80, 0, 0, 1],[3, 2, 80, 0, 0, 1],[3, 2, 160, 0, 0, 2],[3, 2, 160, 1, 0, 1],[3, 2, 160, 0, 0, 1],[3, 2, 160, 1, 0, 1],[3, 2, 160, 0, 0, 1],[3, 2, 160, 1, 0, 1],[3, 2, 160, 0, 0, 1],[3, 2, 160, 0, 0, 1],[3, 2, 320, 0, 1, 2],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 320, 1, 1, 1],[3, 2, 320, 0, 1, 1],# [3, 2, 320, 1, 1, 1],# [3, 2, 320, 0, 1, 1],[3, 2, 320, 0, 1, 1],[3, 2, 640, 0, 1, 2],[3, 2, 640, 1, 1, 1],[3, 2, 640, 0, 1, 1],# [3, 2, 640, 1, 1, 1],# [3, 2, 640, 0, 1, 1]]model RepViT(cfgs)return model四、手把手教你添加RepViT网络结构 下面教大家如何修改该网络结构主干网络结构的修改步骤比较复杂我也会将task.py文件上传到CSDN的文件中大家如果自己修改不正确可以尝试用我的task.py文件替换你的然后只需要修改其中的第  步即可。 ⭐修改过程中大家一定要仔细⭐ 4.1 修改一 首先我门中到如下“ultralytics/nn”的目录我们在这个目录下在创建一个新的目录名字为Addmodules此文件之后就用于存放我们的所有改进机制之后我们在创建的目录内创建一个新的py文件复制粘贴进去 可以根据文章改进机制来起这里大家根据自己的习惯命名即可。 4.2 修改二  第二步我们在我们创建的目录内创建一个新的py文件名字为__init__.py只需要创建一个即可然后在其内部导入我们本文的改进机制即可。 4.3 修改三  第三步我门中到如下文件ultralytics/nn/tasks.py然后在开头导入我们的所有改进机制如果你用了我多个改进机制这一步只需要修改一次即可。 4.4 修改四 添加如下两行代码 ​ 4.5 修改五 找到七百多行大概把具体看图片按照图片来修改就行添加红框内的部分注意没有()只是函数名。 elif m in {自行添加对应的模型即可下面都是一样的}:m m(*args)c2 m.width_list # 返回通道列表backbone True 4.6 修改六 用下面的代码替换红框内的内容。  ​ if isinstance(c2, list):m_ mm_.backbone True else:m_ nn.Sequential(*(m(*args) for _ in range(n))) if n 1 else m(*args) # modulet str(m)[8:-2].replace(__main__., ) # module type m.np sum(x.numel() for x in m_.parameters()) # number params m_.i, m_.f, m_.type i 4 if backbone else i, f, t # attach index, from index, type if verbose:LOGGER.info(f{i:3}{str(f):20}{n_:3}{m.np:10.0f} {t:45}{str(args):30}) # print save.extend(x % (i 4 if backbone else i) for x in ([f] if isinstance(f, int) else f) if x ! -1) # append to savelist layers.append(m_) if i 0:ch [] if isinstance(c2, list):ch.extend(c2)if len(c2) ! 5:ch.insert(0, 0) else:ch.append(c2) 4.7 修改七 修改七这里非常要注意不是文件开头YOLOv8的那predict是400行的RTDETR的predict初始模型如下用我给的代码替换即可 ​ 代码如下- def predict(self, x, profileFalse, visualizeFalse, batchNone, augmentFalse, embedNone):Perform a forward pass through the model.Args:x (torch.Tensor): The input tensor.profile (bool, optional): If True, profile the computation time for each layer. Defaults to False.visualize (bool, optional): If True, save feature maps for visualization. Defaults to False.batch (dict, optional): Ground truth data for evaluation. Defaults to None.augment (bool, optional): If True, perform data augmentation during inference. Defaults to False.embed (list, optional): A list of feature vectors/embeddings to return.Returns:(torch.Tensor): Models output tensor.y, dt, embeddings [], [], [] # outputsfor m in self.model[:-1]: # except the head partif m.f ! -1: # if not from previous layerx y[m.f] if isinstance(m.f, int) else [x if j -1 else y[j] for j in m.f] # from earlier layersif profile:self._profile_one_layer(m, x, dt)if hasattr(m, backbone):x m(x)if len(x) ! 5: # 0 - 5x.insert(0, None)for index, i in enumerate(x):if index in self.save:y.append(i)else:y.append(None)x x[-1] # 最后一个输出传给下一层else:x m(x) # runy.append(x if m.i in self.save else None) # save outputif visualize:feature_visualization(x, m.type, m.i, save_dirvisualize)if embed and m.i in embed:embeddings.append(nn.functional.adaptive_avg_pool2d(x, (1, 1)).squeeze(-1).squeeze(-1)) # flattenif m.i max(embed):return torch.unbind(torch.cat(embeddings, 1), dim0)head self.model[-1]x head([y[j] for j in head.f], batch) # head inferencereturn x 4.8 修改八 我们将下面的s用640替换即可这一步也是部分的主干可以不修改但有的不修改就会报错所以我们还是修改一下。 4.9 RT-DETR不能打印计算量问题的解决 计算的GFLOPs计算异常不打印所以需要额外修改一处 我们找到如下文件ultralytics/utils/torch_utils.py文件内有如下的代码按照如下的图片进行修改大家看好函数就行其中红框的640可能和你的不一样 然后用我给的代码替换掉整个代码即可。 def get_flops(model, imgsz640):Return a YOLO models FLOPs.try:model de_parallel(model)p next(model.parameters())# stride max(int(model.stride.max()), 32) if hasattr(model, stride) else 32 # max stridestride 640im torch.empty((1, 3, stride, stride), devicep.device) # input image in BCHW formatflops thop.profile(deepcopy(model), inputs[im], verboseFalse)[0] / 1E9 * 2 if thop else 0 # stride GFLOPsimgsz imgsz if isinstance(imgsz, list) else [imgsz, imgsz] # expand if int/floatreturn flops * imgsz[0] / stride * imgsz[1] / stride # 640x640 GFLOPsexcept Exception:return 04.10 可选修改 有些读者的数据集部分图片比较特殊在验证的时候会导致形状不匹配的报错如果大家在验证的时候报错形状不匹配的错误可以固定验证集的图片尺寸方法如下 - 找到下面这个文件ultralytics/models/yolo/detect/train.py然后其中有一个类是DetectionTrainer class中的build_dataset函数中的一个参数rectmode val改为rectFalse 五、RepViT的yaml文件 5.1 yaml文件 大家复制下面的yaml文件然后通过我给大家的运行代码运行即可RT-DETR的调参部分需要后面的文章给大家讲现在目前免费给大家看这一部分不开放。 # Ultralytics YOLO , AGPL-3.0 license # RT-DETR-l object detection model with P3-P5 outputs. For details see https://docs.ultralytics.com/models/rtdetr# Parameters nc: 80 # number of classes scales: # model compound scaling constants, i.e. modelyolov8n-cls.yaml will call yolov8-cls.yaml with scale n# [depth, width, max_channels]l: [1.00, 1.00, 1024]backbone:# [from, repeats, module, args]- [-1, 1, repvit_m0_9, []] # 4head:- [-1, 1, Conv, [256, 1, 1, None, 1, 1, False]] # 5 input_proj.2- [-1, 1, AIFI, [1024, 8]] # 6- [-1, 1, Conv, [256, 1, 1]] # 7, Y5, lateral_convs.0- [-1, 1, nn.Upsample, [None, 2, nearest]] # 8- [3, 1, Conv, [256, 1, 1, None, 1, 1, False]] # 9 input_proj.1- [[-2, -1], 1, Concat, [1]] # 10- [-1, 3, RepC3, [256, 0.5]] # 11, fpn_blocks.0- [-1, 1, Conv, [256, 1, 1]] # 12, Y4, lateral_convs.1- [-1, 1, nn.Upsample, [None, 2, nearest]] # 13- [2, 1, Conv, [256, 1, 1, None, 1, 1, False]] # 14 input_proj.0- [[-2, -1], 1, Concat, [1]] # 15 cat backbone P4- [-1, 3, RepC3, [256, 0.5]] # X3 (16), fpn_blocks.1- [-1, 1, Conv, [256, 3, 2]] # 17, downsample_convs.0- [[-1, 12], 1, Concat, [1]] # 18 cat Y4- [-1, 3, RepC3, [256, 0.5]] # F4 (19), pan_blocks.0- [-1, 1, Conv, [256, 3, 2]] # 20, downsample_convs.1- [[-1, 7], 1, Concat, [1]] # 21 cat Y5- [-1, 3, RepC3, [256, 0.5]] # F5 (22), pan_blocks.1- [[16, 19, 22], 1, RTDETRDecoder, [nc, 256, 300, 4, 8, 3]] # Detect(P3, P4, P5)5.2 运行文件 大家可以创建一个train.py文件将下面的代码粘贴进去然后替换你的文件运行即可开始训练。 import warnings from ultralytics import RTDETR warnings.filterwarnings(ignore)if __name__ __main__:model RTDETR(替换你想要运行的yaml文件)# model.load() # 可以加载你的版本预训练权重model.train(datar替换你的数据集地址即可,cacheFalse,imgsz640,epochs72,batch4,workers0,device0,projectruns/RT-DETR-train,nameexp,# ampTrue) 5.3 成功训练截图 下面是成功运行的截图确保我的改进机制是可用的已经完成了有1个epochs的训练图片太大截不全第2个epochs了。  ​ 六、全文总结 从今天开始正式开始更新RT-DETR剑指论文专栏本专栏的内容会迅速铺开在短期呢大量更新价格也会乘阶梯性上涨所以想要和我一起学习RT-DETR改进可以在前期直接关注本文专栏旨在打造全网最好的RT-DETR专栏为想要发论文的家进行服务。 专栏链接RT-DETR剑指论文专栏持续复现各种顶会内容——论文收割机RT-DETR

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php网站添加验证码龙岩优化怎么做搜索

文章目录 1. 问题描述2. 优化方法2.1 缩小范围2.2 替代方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取AppBar的高度"相关的内容,本章回中将介绍关于MediaQuery的优化.闲话休提,让我们一起Talk Flutter吧。 1. 问题描述 我们在…

最新网站建设的模板怎么查看网站是用什么系统做的

java方法可选参数在Java类中设计方法时,某些参数对于其执行而言可能是可选的。 无论是在DTO,胖模型域对象还是简单的无状态服务类中,可选方法参数都是常见的。 从本文中, 您将学习如何在Java中处理可选参数 。 我们将专注于常规方…

网站后台素材街道门户网站的建设思路

​ 我的博客是一个技术分享平台,涵盖了机器学习、数据可视化、大数据分析、数学统计学、推荐算法、Linux命令及环境搭建,以及Kafka、Flask、FastAPI、Docker等组件的使用教程。 在这个信息时代,数据已经成为了一种新的资源,而机…

最容易被收录的网站网页设计图片居中怎么设置

一、介绍 工厂模式可以分为 3 个小类 简单工厂模式工厂方法模式抽象工厂模式 工厂模式的工厂类,并不一定以 Factory 结尾,例如 DataFormat、Calender 他们都是工厂类,通过静态方法来创建实例。 除此之外,创建对象的方法名称一…

学院网站建设的特色南宁网络推广方法

这里写自定义目录标题 1 Lua1.1 简介1.1.1 注释1.1.2 变量1.1.3 数据类型1.1.4 控制结构1.1.5 函数1.1.6 模块1.1.7 字符串操作1.1.8 错误处理1.1.9 标准库 1.2 Redis和Lua脚本结合优点1.3 Lua脚本应用和调试1.3.1 缓存更新1.3.2 原子操作1.3.3 数据处理1.3.4 分布式锁1.3.5 Re…

天元建设集团有限公司经济官司seo排名方案

标题描述一、解决方法解决代码二、关于高度问题简单讲一下jquery中的 height(),innerHeight()、outHeight(),js中的offsetHeight、clientHeight、scrollHeight。如何获取没有给出高度的元素的高度?详细介绍offsetHeight,clientHeight,scrollH…

怎样在文章后做网站链接网站seo的内容是什么

TextField对象相关的属性和方法,内容十分丰富,下面几个表格: 表一 TextField 对象的方法 方法 说明 TextField.addListener 加入接收触发事件如文本域内容变化或滚动变化的监听对象,触发事件可以参看最后一个表。 TextField.getDe…

网站源码cms深圳品牌展会

想要更快更高效地做事,一定会带来问题,我们要做的是 保证事情一定要做对坚定不移地解决问题,寻找方法,而不是回归慢速 这里有几个典型的例子 从单周期CPU,到多周期CPU,是为了提速,我们不必再…

微信开发商成都网站seo外包

目录 1. 问题现象 2. 原因分析 3. 解决方法 1. 问题现象 因为业务需求,需要利用子线程向主线程发送数据。像这种子线程和主线程进行数据交互时,一般都是通过Qt的信号槽机制来实现。如下代码: void myClass::doBusiness() {…

如何跳过网站会员沈阳市住房和城乡建设厅网站

曾经在我的一篇《控制面板的创建》中介绍过WinCE控制面板的结构,不过由于那篇文章其目的只在于控制面板如何调用EXE程序,故对控制面板也仅是泛泛而谈.不过在这篇文章中,我们将对WinCE的使用方法来个整体的详解. 1.控制面板的结构 控制面板其实也是个动态链接库…

手机端视频网站模板什么是网络营销中的终极诉求

1、演示 2、水印的目的 版权保护:水印可以在图片、文档或视频中嵌入作者、品牌或版权所有者的信息,以防止未经授权的复制、传播或使用。当其他人使用带有水印的内容时,可以追溯到原始作者或版权所有者,从而加强版权保护。 身份识…

asp网站加速网站增加外链的方法有哪些

SD3303A是一款大功率高亮度LED驱动芯片,可以提供 1A的电流驱动3W的LED。具有高效率,低功耗等特点 ,适用于电池供电的LED照明设备。 SD3303A具有开路保护和过温保护。 SD3303A需要使用两颗10uF(或者更大)的瓷 片电容,来保证电路性能…

3g 手机网站电子商务网站建设有哪些知识点

1.关闭在线DRC功能,可以避免布线时候一卡一卡的问题: 取消在线DRC的勾选: 2.AD的在线封装库,非常好用: 如何优雅地服用AD 21的在线元件库 – 吴川斌的博客 (mr-wu.cn) 3.如何恢复Altium Designer23默认窗口布局 打开…

冠县住房和城乡建设局网站淘宝客建站教程

SpringCloud Ribbon中的7种负载均衡策略 Ribbon 介绍负载均衡设置7种负载均衡策略1.轮询策略2.权重策略3.随机策略4.最小连接数策略5.重试策略6.可用性敏感策略7.区域敏感策略 总结 负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端…

营销型网站建设策划案wix网站建设

1、typescript的基础类型 如下表: 数据类型 关键字 描述 任意类型 any 生命any的变量可以赋值任意类型的值 数字类型 number 整数或分数 字符串类型 string 使用单引号(‘’)或者双引号(“”)来表示字符串…

百度搜索网站提交网站建设 模块

相信大多数人在学习单片机的时候,都是从最基本的8位MCU开始的。一般来说,8位单片机最常见的是三个系列是:51系列、AVR系列、PIC系列。而前段时间,群里讨论了一个问题:在51单片机上跑RTOS有没有意义?关于这个…

天台县建设局官方网站网站建设免费域名

在现今的数字时代,我们的生活离不开互联网。我们使用在线平台进行银行交易、购物、社交媒体互动和其他各种活动。为了保护个人隐私和账号安全,我们需要寻找一种安全且方便的方式来管理我们的在线账号。MuLogin指纹浏览器正是为了满足这些需求而设计的一款…

学做陶艺作品的网站wordpress批量更新文章

5G时代到来,物联网技术的应用也离我们越来越近。智慧交通、智能家庭、智慧园区,越来越多的融入到我们的生活当中。作为物联网重要技术组成的嵌入式系统,嵌入式系统视角有助于深刻地、全面地理解物联网的本质。而物联网是通用计算机的互联网与…

静态网站源码北京软件app开发公司

引言 MistralAI,一家法国的初创企业,近期在AI界引发了轰动,刚刚发布了全球首个基于MoE(Mixture of Experts,混合专家)技术的大型语言模型——Mistral-8x7B-MoE。这一里程碑事件标志着AI技术的一个重要突破…