邯郸做网站服务商做网站月入

pingmian/2026/1/20 14:59:51/文章来源:
邯郸做网站服务商,做网站月入,如何做网站实名认证,wordpress打开好慢一、本文介绍 本文给家大家带来的改进机制是iRMB#xff0c;其是在论文Rethinking Mobile Block for Efficient Attention-based Models种提出#xff0c;论文提出了一个新的主干网络EMO(后面我也会教大家如何使用该主干#xff0c;本文先教大家使用该文中提出的注意力机制…一、本文介绍 本文给家大家带来的改进机制是iRMB其是在论文Rethinking Mobile Block for Efficient Attention-based Models种提出论文提出了一个新的主干网络EMO(后面我也会教大家如何使用该主干本文先教大家使用该文中提出的注意力机制)。其主要思想是将轻量级的CNN架构与基于注意力的模型结构相结合(有点类似ACmix)我将iRMB和C2f结合然后也将其用在了检测头种进行尝试三种结果进行对比针对的作用也不相同但是无论那种实验均有一定涨点效果同时该注意力机制属于是比较轻量化的参数量比较小训练速度也很快后面我会将各种添加方法教给大家让大家在自己的模型中进行复现。 推荐指数⭐⭐⭐⭐⭐ 涨点效果⭐⭐⭐⭐⭐ 专栏回顾YOLOv8改进系列专栏——本专栏持续复习各种顶会内容——科研必备     训练结果对比图-  目录 一、本文介绍 二、iRMB的框架原理 2.1 iRMB结构 2.2 倒置残差块 2.3 元移动块Meta-Mobile Block 三、iRMB的核心代码  四、手把手教你添加iRMB和C2f_iRMB机制  4.1 步骤一 4.2 步骤二 4.3 步骤三 五、iRMB和C2f_iRMB的yaml文件和运行记录 5.1 yaml版本一(推荐) 5.2 yaml版本二 5.3 yaml版本三  5.4 推荐iRMB可添加的位置  5.5 iRMB的训练过程截图  五、本文总结 二、iRMB的框架原理 官方论文地址官方论文地址点击即可跳转 官方代码地址官方代码地址点击即可跳转 iRMBInverted Residual Mobile Block的主要思想是将轻量级的CNN架构与基于注意力的模型结构相结合(有点类似ACmix)以创建高效的移动网络。iRMB通过重新考虑倒置残差块IRB和Transformer的有效组件实现了一种统一的视角从而扩展了CNN的IRB到基于注意力的模型。iRMB的设计目标是在保持模型轻量级的同时实现对计算资源的有效利用和高准确率。这一方法通过在下游任务上的广泛实验得到验证展示出其在轻量级模型领域的优越性能。 iRMB的主要创新点在于以下三点 1. 结合CNN的轻量级特性和Transformer的动态模型能力创新提出了iRMB结构适用于移动设备上的密集预测任务。 2. 使用倒置残差块设计扩展了传统CNN的IRB到基于注意力的模型增强了模型处理长距离信息的能力。 3. 提出了元移动块Meta-Mobile Block通过不同的扩展比率和高效操作符实现了模型的模块化设计使得模型更加灵活和高效。 2.1 iRMB结构 iRMB 结构的主要创新点是它结合了卷积神经网络CNN的轻量级特性和 Transformer 模型的动态处理能力。这种结构特别适用于移动设备上的密集预测任务因为它旨在在计算能力有限的环境中提供高效的性能。iRMB 通过其倒置残差设计改进了信息流的处理允许在保持模型轻量的同时捕捉和利用长距离依赖这对于图像分类、对象检测和语义分割等任务至关重要。这种设计使得模型在资源受限的设备上也能高效运行同时保持或提高预测准确性。 上面的图片来自与论文的图片2展示了iRMBInverted Residual Mobile Block的设计理念和结构。左侧是从多头自注意力和前馈网络中抽象出的统一元移动块Meta-Mobile Block它将不同扩展比率和高效操作符结合起来形成特定的模块。右侧是基于iRMB构建的类似ResNet的高效模型EMO它仅由推导出的iRMB组成并用于各种下游任务如分类CLS、检测Det和分割Seg。这种设计实现了模型的轻量化同时保持了良好的性能和效率。  这幅图展示了iRMBInverted Residual Mobile Block的结构范式。iRMB是一种混合网络模块它结合了深度可分离卷积3x3 DW-Conv和自注意力机制。1x1卷积用于通道数的压缩和扩张以此优化计算效率。深度可分离卷积DW-Conv用于捕捉空间特征而注意力机制则用于捕获特征间的全局依赖关系。 2.2 倒置残差块 在iRMB设计中使用倒置残差块IRB的概念被扩展到了基于注意力的模型中。这使得模型能够更有效地处理长距离信息这是因为自注意力机制能够捕获输入数据中不同部分之间的全局依赖关系。传统的CNN通常只能捕捉到局部特征而通过引入注意力机制iRMB能够在提取特征时考虑到整个输入空间增强了模型对复杂数据模式的理解能力特别是在处理视觉和序列数据时。这种结合了传统CNN的轻量化和Transformer的长距离建模能力的设计为在资源受限的环境中实现高效的深度学习模型提供了新的可能性(文章中并没有关于IRB的结构图)。 2.3 元移动块Meta-Mobile Block 元移动块Meta-Mobile Block它通过不同的扩展比率和高效操作符实现模块化设计。这种方法使得模型可以根据需要调整其容量而无需重新设计整个网络。元移动块的核心理念是通过可插拔的方式将不同的操作如卷积、自注意力等集成到一个统一的框架中从而提高模型的效率和灵活性。这允许模型在复杂性和计算效率之间进行更好的权衡特别适用于那些需要在有限资源下运行的应用。 图中展示的是Meta Mobile Block的设计。在这个构件中1x1的卷积层被用来改变特征图的通道数从而控制网络的容量。中间的“Efficient Operator”是一个高效的运算符可以是自注意力机制或其他任何高效的层或操作。这种设计使得Meta Mobile Block能够灵活地适应不同的任务需求并保持高效的计算性能。通过这样的模块化网络能够在不同的环境和任务中进行快速调整和优化。  三、iRMB的核心代码  该代码的使用方式我们看章节四来进行使用其中包含C2f_iRMB和iRMB本体注意力机制。 import math import torch import torch.nn as nn import torch.nn.functional as F from functools import partial from einops import rearrange from timm.models._efficientnet_blocks import SqueezeExcite from timm.models.layers import DropPathinplace Trueclass LayerNorm2d(nn.Module):def __init__(self, normalized_shape, eps1e-6, elementwise_affineTrue):super().__init__()self.norm nn.LayerNorm(normalized_shape, eps, elementwise_affine)def forward(self, x):x rearrange(x, b c h w - b h w c).contiguous()x self.norm(x)x rearrange(x, b h w c - b c h w).contiguous()return xdef get_norm(norm_layerin_1d):eps 1e-6norm_dict {none: nn.Identity,in_1d: partial(nn.InstanceNorm1d, epseps),in_2d: partial(nn.InstanceNorm2d, epseps),in_3d: partial(nn.InstanceNorm3d, epseps),bn_1d: partial(nn.BatchNorm1d, epseps),bn_2d: partial(nn.BatchNorm2d, epseps),# bn_2d: partial(nn.SyncBatchNorm, epseps),bn_3d: partial(nn.BatchNorm3d, epseps),gn: partial(nn.GroupNorm, epseps),ln_1d: partial(nn.LayerNorm, epseps),ln_2d: partial(LayerNorm2d, epseps),}return norm_dict[norm_layer]def get_act(act_layerrelu):act_dict {none: nn.Identity,relu: nn.ReLU,relu6: nn.ReLU6,silu: nn.SiLU}return act_dict[act_layer]class ConvNormAct(nn.Module):def __init__(self, dim_in, dim_out, kernel_size, stride1, dilation1, groups1, biasFalse,skipFalse, norm_layerbn_2d, act_layerrelu, inplaceTrue, drop_path_rate0.):super(ConvNormAct, self).__init__()self.has_skip skip and dim_in dim_outpadding math.ceil((kernel_size - stride) / 2)self.conv nn.Conv2d(dim_in, dim_out, kernel_size, stride, padding, dilation, groups, bias)self.norm get_norm(norm_layer)(dim_out)self.act get_act(act_layer)(inplaceinplace)self.drop_path DropPath(drop_path_rate) if drop_path_rate else nn.Identity()def forward(self, x):shortcut xx self.conv(x)x self.norm(x)x self.act(x)if self.has_skip:x self.drop_path(x) shortcutreturn xclass iRMB(nn.Module):def __init__(self, dim_in, dim_out, norm_inTrue, has_skipTrue, exp_ratio1.0, norm_layerbn_2d,act_layerrelu, v_projTrue, dw_ks3, stride1, dilation1, se_ratio0.0, dim_head8, window_size7,attn_sTrue, qkv_biasFalse, attn_drop0., drop0., drop_path0., v_groupFalse, attn_preFalse):super().__init__()self.norm get_norm(norm_layer)(dim_in) if norm_in else nn.Identity()dim_mid int(dim_in * exp_ratio)self.has_skip (dim_in dim_out and stride 1) and has_skipself.attn_s attn_sif self.attn_s:assert dim_in % dim_head 0, dim should be divisible by num_headsself.dim_head dim_headself.window_size window_sizeself.num_head dim_in // dim_headself.scale self.dim_head ** -0.5self.attn_pre attn_preself.qk ConvNormAct(dim_in, int(dim_in * 2), kernel_size1, biasqkv_bias, norm_layernone,act_layernone)self.v ConvNormAct(dim_in, dim_mid, kernel_size1, groupsself.num_head if v_group else 1, biasqkv_bias,norm_layernone, act_layeract_layer, inplaceinplace)self.attn_drop nn.Dropout(attn_drop)else:if v_proj:self.v ConvNormAct(dim_in, dim_mid, kernel_size1, biasqkv_bias, norm_layernone,act_layeract_layer, inplaceinplace)else:self.v nn.Identity()self.conv_local ConvNormAct(dim_mid, dim_mid, kernel_sizedw_ks, stridestride, dilationdilation,groupsdim_mid, norm_layerbn_2d, act_layersilu, inplaceinplace)self.se SqueezeExcite(dim_mid, rd_ratiose_ratio, act_layerget_act(act_layer)) if se_ratio 0.0 else nn.Identity()self.proj_drop nn.Dropout(drop)self.proj ConvNormAct(dim_mid, dim_out, kernel_size1, norm_layernone, act_layernone, inplaceinplace)self.drop_path DropPath(drop_path) if drop_path else nn.Identity()def forward(self, x):shortcut xx self.norm(x)B, C, H, W x.shapeif self.attn_s:# paddingif self.window_size 0:window_size_W, window_size_H W, Helse:window_size_W, window_size_H self.window_size, self.window_sizepad_l, pad_t 0, 0pad_r (window_size_W - W % window_size_W) % window_size_Wpad_b (window_size_H - H % window_size_H) % window_size_Hx F.pad(x, (pad_l, pad_r, pad_t, pad_b, 0, 0,))n1, n2 (H pad_b) // window_size_H, (W pad_r) // window_size_Wx rearrange(x, b c (h1 n1) (w1 n2) - (b n1 n2) c h1 w1, n1n1, n2n2).contiguous()# attentionb, c, h, w x.shapeqk self.qk(x)qk rearrange(qk, b (qk heads dim_head) h w - qk b heads (h w) dim_head, qk2, headsself.num_head,dim_headself.dim_head).contiguous()q, k qk[0], qk[1]attn_spa (q k.transpose(-2, -1)) * self.scaleattn_spa attn_spa.softmax(dim-1)attn_spa self.attn_drop(attn_spa)if self.attn_pre:x rearrange(x, b (heads dim_head) h w - b heads (h w) dim_head, headsself.num_head).contiguous()x_spa attn_spa xx_spa rearrange(x_spa, b heads (h w) dim_head - b (heads dim_head) h w, headsself.num_head, hh,ww).contiguous()x_spa self.v(x_spa)else:v self.v(x)v rearrange(v, b (heads dim_head) h w - b heads (h w) dim_head, headsself.num_head).contiguous()x_spa attn_spa vx_spa rearrange(x_spa, b heads (h w) dim_head - b (heads dim_head) h w, headsself.num_head, hh,ww).contiguous()# unpaddingx rearrange(x_spa, (b n1 n2) c h1 w1 - b c (h1 n1) (w1 n2), n1n1, n2n2).contiguous()if pad_r 0 or pad_b 0:x x[:, :, :H, :W].contiguous()else:x self.v(x)x x self.se(self.conv_local(x)) if self.has_skip else self.se(self.conv_local(x))x self.proj_drop(x)x self.proj(x)x (shortcut self.drop_path(x)) if self.has_skip else xreturn xdef autopad(k, pNone, d1): # kernel, padding, dilationPad to same shape outputs.if d 1:k d * (k - 1) 1 if isinstance(k, int) else [d * (x - 1) 1 for x in k] # actual kernel-sizeif p is None:p k // 2 if isinstance(k, int) else [x // 2 for x in k] # auto-padreturn pclass Conv(nn.Module):Standard convolution with args(ch_in, ch_out, kernel, stride, padding, groups, dilation, activation).default_act nn.SiLU() # default activationdef __init__(self, c1, c2, k1, s1, pNone, g1, d1, actTrue):Initialize Conv layer with given arguments including activation.super().__init__()self.conv nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groupsg, dilationd, biasFalse)self.bn nn.BatchNorm2d(c2)self.act self.default_act if act is True else act if isinstance(act, nn.Module) else nn.Identity()def forward(self, x):Apply convolution, batch normalization and activation to input tensor.return self.act(self.bn(self.conv(x)))def forward_fuse(self, x):Perform transposed convolution of 2D data.return self.act(self.conv(x))class Bottleneck(nn.Module):Standard bottleneck.def __init__(self, c1, c2, shortcutTrue, g1, k(3, 3), e0.5):Initializes a bottleneck module with given input/output channels, shortcut option, group, kernels, andexpansion.super().__init__()c_ int(c2 * e) # hidden channelsself.cv1 Conv(c1, c_, k[0], 1)self.cv2 Conv(c_, c2, k[1], 1, gg)self.add shortcut and c1 c2self.iRMB iRMB(c2, c2)def forward(self, x):forward() applies the YOLO FPN to input data.return x self.iRMB(self.cv2(self.cv1(x))) if self.add else self.iRMB(self.cv2(self.cv1(x)))class C2f_iRMB(nn.Module):Faster Implementation of CSP Bottleneck with 2 convolutions.def __init__(self, c1, c2, n1, shortcutFalse, g1, e0.5):Initialize CSP bottleneck layer with two convolutions with arguments ch_in, ch_out, number, shortcut, groups,expansion.super().__init__()self.c int(c2 * e) # hidden channelsself.cv1 Conv(c1, 2 * self.c, 1, 1)self.cv2 Conv((2 n) * self.c, c2, 1) # optional actFReLU(c2)self.m nn.ModuleList(Bottleneck(self.c, self.c, shortcut, g, k((3, 3), (3, 3)), e1.0) for _ in range(n))def forward(self, x):Forward pass through C2f layer.y list(self.cv1(x).chunk(2, 1))y.extend(m(y[-1]) for m in self.m)return self.cv2(torch.cat(y, 1))def forward_split(self, x):Forward pass using split() instead of chunk().y list(self.cv1(x).split((self.c, self.c), 1))y.extend(m(y[-1]) for m in self.m)return self.cv2(torch.cat(y, 1))if __name__ __main__:# Generating Sample imageimage_size (1, 64, 640, 640)image torch.rand(*image_size)# Modelmodel iRMB(64, 64)out model(image)print(len(out)) 四、手把手教你添加iRMB和C2f_iRMB机制  4.1 步骤一 首先我们找到如下的目录ultralytics/nn/modules然后在这个目录下创建一个py文件名字可以根据你自己的习惯起然后将iRMB和C2f_iRMB的核心代码复制进去。 4.2 步骤二 之后我们找到ultralytics/nn/tasks.py文件在其中注册我们的iRMB和C2f_iRMB模块。 首先我们需要在文件的开头导入我们的iRMB和C2f_iRMB模块如下图所示- ​​ 4.3 步骤三 我们找到parse_model这个方法可以用搜索(Ctrl F)也可以自己手动找大概在六百多行吧。 我们找到如下的地方然后将iRMB和C2f_iRMB添加进去即可模仿我添加即可。 ​​ elif m in {iRMB}:args [ch[f], ch[f]]到此我们就注册成功了。 五、iRMB和C2f_iRMB的yaml文件和运行记录 下面推荐几个版本的yaml文件给大家大家可以复制进行训练但是组合用很多具体那种最有效果都不一定针对不同的数据集效果也不一样我下面推荐了几种我自己认为可能有效果的配合方式你也可以自己进行组合。 5.1 yaml版本一(推荐) 下面的添加是我实验结果的版本这个不一定是有效果的但是是我做过实验的版本。 # Ultralytics YOLO , AGPL-3.0 license # YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters nc: 80 # number of classes scales: # model compound scaling constants, i.e. modelyolov8n.yaml will call yolov8.yaml with scale n# [depth, width, max_channels]n: [0.33, 0.25, 1024] # YOLOv8n summary: 225 layers, 3157200 parameters, 3157184 gradients, 8.9 GFLOPss: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8 GFLOPsm: [0.67, 0.75, 768] # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients, 79.3 GFLOPsl: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512] # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOP# YOLOv8.0 backbone backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9# YOLOv8.0n head head:- [-1, 1, nn.Upsample, [None, 2, nearest]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 3, C2f_iRMB, [512]] # 12- [-1, 1, nn.Upsample, [None, 2, nearest]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 3, C2f_iRMB, [256]] # 15 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]] # cat head P4- [-1, 3, C2f_iRMB, [512]] # 18 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]] # cat head P5- [-1, 3, C2f_iRMB, [1024]] # 21 (P5/32-large)- [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5) 5.2 yaml版本二 添加的版本二具体那种适合你需要大家自己多做实验来尝试。 # Ultralytics YOLO , AGPL-3.0 license # YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters nc: 80 # number of classes scales: # model compound scaling constants, i.e. modelyolov8n.yaml will call yolov8.yaml with scale n# [depth, width, max_channels]n: [0.33, 0.25, 1024] # YOLOv8n summary: 225 layers, 3157200 parameters, 3157184 gradients, 8.9 GFLOPss: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8 GFLOPsm: [0.67, 0.75, 768] # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients, 79.3 GFLOPsl: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512] # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOP# YOLOv8.0 backbone backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4- [-1, 3, C2f_iRMB, [128, True]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 6, C2f_iRMB, [256, True]]- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16- [-1, 6, C2f_iRMB, [512, True]]- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32- [-1, 3, C2f_iRMB, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9# YOLOv8.0n head head:- [-1, 1, nn.Upsample, [None, 2, nearest]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 3, C2f_iRMB, [512]] # 12- [-1, 1, nn.Upsample, [None, 2, nearest]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 3, C2f_iRMB, [256]] # 15 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]] # cat head P4- [-1, 3, C2f_iRMB, [512]] # 18 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]] # cat head P5- [-1, 3, C2f_iRMB, [1024]] # 21 (P5/32-large)- [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5) 5.3 yaml版本三  下面我在三个目标检测层输出侧添加了三个该注意力机制大家可以根据自身的检测目标任务进行修改。 # Ultralytics YOLO , AGPL-3.0 license # YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters nc: 80 # number of classes scales: # model compound scaling constants, i.e. modelyolov8n.yaml will call yolov8.yaml with scale n# [depth, width, max_channels]n: [0.33, 0.25, 1024] # YOLOv8n summary: 225 layers, 3157200 parameters, 3157184 gradients, 8.9 GFLOPss: [0.33, 0.50, 1024] # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8 GFLOPsm: [0.67, 0.75, 768] # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients, 79.3 GFLOPsl: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512] # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOP# YOLOv8.0 backbone backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9# YOLOv8.0n head head:- [-1, 1, nn.Upsample, [None, 2, nearest]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 3, C2f, [512]] # 12- [-1, 1, nn.Upsample, [None, 2, nearest]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 3, C2f, [256]] # 15 (P3/8-small)- [-1, 1, iRMB, []] # 16- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]] # cat head P4- [-1, 3, C2f, [512]] # 19 (P4/16-medium)- [-1, 1, iRMB, []] # 20- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]] # cat head P5- [-1, 3, C2f, [1024]] # 23 (P5/32-large)- [-1, 1, iRMB, []] # 24- [[16, 20, 24], 1, Detect, [nc]] # Detect(P3, P4, P5) 5.4 推荐iRMB可添加的位置  在YOLOv8种我们的可以改进的位置有很多不同添加的位置效果也不同所以我下面推荐几个添加的位置大家可以进行参考当然不一定要按照我推荐的地方添加。 残差连接中在残差网络的残差连接中加入注意力机制或者替换其中的卷积。 Neck部分YOLOv8的Neck部分负责特征融合这里添加注意力机制可以帮助模型更有效地融合不同层次的特征让模型更关注那些有用的特征。 Backbone可以替换中干网络中的卷积部分 能添加的位置很多一篇文章很难全部介绍到后期我会发文件里面集成上百种的改进机制然后还有许多融合模块给大家。 5.5 iRMB的训练过程截图  大家可以看下面的运行结果和添加的位置所以不存在我发的代码不全或者运行不了的问题大家有问题也可以在评论区评论我看到都会为大家解答(我知道的)。 ​​ ​​​ 五、本文总结 到此本文的正式分享内容就结束了在这里给大家推荐我的YOLOv8改进有效涨点专栏本专栏目前为新开的平均质量分98分后期我会根据各种最新的前沿顶会进行论文复现也会对一些老的改进机制进行补充目前本专栏免费阅读(暂时大家尽早关注不迷路~)如果大家觉得本文帮助到你了订阅本专栏关注后续更多的更新~ 专栏回顾YOLOv8改进系列专栏——本专栏持续复习各种顶会内容——科研必备

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

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

相关文章

西樵营销网站制作企业展厅设计公司重庆

目录 一、基础知识1.异或运算xor2.模2算术(1)模2加法和减法(2)模2乘法(3)模2除法 二、CRC循环冗余检测1.背景2.原理3.求R 一、基础知识 1.异或运算xor 异或,顾名思义,只有当两个数…

网站快速建设软件下载西宁吧 百度贴吧

缓存穿透 一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就去后端系统查找(比如DB)。 一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透…

离退休部门网站建设情况小游戏开发软件

以实战例子讲述JSON三兄弟的后续故事。实战一:发送JSON网络请求作为JSON老大哥的QJsonValue自知对面的大户人家妹子貌美如花,心里已经打起算盘,先下手为强,后下手遭殃。决定显示下自己的家底,想起这件事,老…

安徽做公司网站哪家好建设与管理局网站

技术背景 技术概述 FPGA实现除法运算是一个比较复杂的过程,因为硬件逻辑与软件程序的区别。如果其中一个操作数为常数,可以通过简单的移位与求和操作代替,但用硬件逻辑完成两变量间除法运算会占用较多的资源,电路结构复杂&#xf…

做网站主机电脑布吉做棋牌网站建设哪家公司便宜

Input 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数&#xff0c;分别是城镇数目N ( < 1000 )和道路数目M&#xff1b;随后的M行对应M条道路&#xff0c;每行给出一对正整数&#xff0c;分别是该条道路直接连通的两个城镇的编号。为简单起见&#xff0c;城镇…

个人网站用什么软件网站开发定制合同

在智慧电表水表的数据采集和存储过程中&#xff0c;时序数据处理成为一个重要的问题。由于电表水表数据具有时间序列的特点&#xff0c;传统的数据库和数据处理方式往往难以满足大规模数据的高速采集、存储和实时分析需求。因此&#xff0c;越来越多的企业开始进行数据架构改造…

网站开发策划书冠县快搜网站建设有限公司

C里默认int型1的二进制表示为&#xff1a; 0000 0000 0000 0000 0000 0000 0000 0001如果左移31位&#xff0c;会得到最小值 1<<31 //会得到-2147483648&#xff0c;即int型最小值即 1000 0000 0000 0000 0000 0000 0000 0000因为int类型是有符号的&#xff0c;第一位…

无障碍环境建设 网站服装品牌网站开发php

爬虫、数据清洗和分析是在数据科学、数据挖掘和网络爬虫开发领域中常见的概念。 爬虫&#xff08;Web Scraping&#xff09;&#xff1a;爬虫是一种自动化程序或脚本&#xff0c;用于从互联网上的网站上提取信息。这些信息可以是文本、图像、视频或其他类型的数据。爬虫通常会…

PHP网站开发程序员招聘做网站要了解哪些

背景 美团COS&#xff1a;全称美团网核心业务系统部&#xff0c;以持续整合O2O线下资源&#xff0c;共建高效率、低成本的供应链系统&#xff0c;高效推动O2O生态环境建设为业务目标&#xff0c;负责美团网核心业务系统的建设和管理。 COS系统&#xff0c;伴随着美团3年多的发展…

网站建设上市广东新闻联播

02【保姆级】-GO语言开发注意事项&#xff08;特色重点&#xff09; 一、Go语言的特性1.1 第一个hello word&#xff08;详解&#xff09;1.2 开发编译。&#xff08;重要点 / 面试题&#xff09;1.3 开发注意事项1.4 GO语言的转义字符1.5 注释1.6 API 文档 一、Go语言的特性 …

重庆做网站泉州公司辽阳建设网站公司报价

常用的设计模式&#xff1a; 一、单例模式 java中单例模式是一种常见的设计模式&#xff0c;单例模式的写法有好几种&#xff0c;这里主要介绍三种&#xff1a;懒汉式单例、饿汉式单例、双重检查锁定 1、单例模式有以下特点&#xff1a;   a、单例类只能有一个实例。   b…

母婴行业网站建设创建免费网站需要的工具

注解目录 1.制冷设备的监测迫在眉睫 1.1 冷食的利润贡献 1.2 冷设监测系统的困难 &#xff08;制冷设备对于便利店为何如何重要&#xff1f;了解一下你所不知道的便利店和新零售行业。关于电力线载波通信的论战。&#xff09; 2、电路设计 2.1 防护电路 2.1.1 强电防护 …

网站 维护网站建设的整体流程有哪些

由于我之前一直强调数据结构以及算法学习的重要性&#xff0c;所以就有一些读者经常问我&#xff0c;数据结构与算法应该要学习到哪个程度呢&#xff1f;&#xff0c;说实话&#xff0c;这个问题我不知道要怎么回答你&#xff0c;主要取决于你想学习到哪些程度&#xff0c;不过…

电子商务网站建设开发呼市城乡建设厅网站

七、SpringBoot项目的打包与运行 1.目前项目怎么运行的 通过浏览器访问idea 将jar部署到服务器 2.maven 打包项目 命令 mvn package使用命令后会得到如下的jar 3.程序运行 命令 java -jar 项目.jar启动如下 4.springboot打包需要插件 插件 <plugin><group…

撰写网站的建设方案WordPress缺省图

如果想使用其他的qml文件直接创建对象&#xff0c;必须先这样导入其qml文件并as成别名&#xff0c;才可以创建对象并使用它。 一、导入qml文件&#xff0c;例如&#xff1a; import "CameraConfig.qml" as CameraConfig import "CameraDevelopView.qml" a…

做一般的网站要多久wordpress微商城插件

本文 我们来说两个page界面间的数据传递 路由跳转 router.pushUrl 之前我们用了不少了 但是我们只用了它的第一个参数 url 其实他还有个params参数 我们第一个组件可以编写代码如下 import router from ohos.router Entry Component struct Index {build() {Row() {Column() …

网站如何做快捷支付ui设计师是什么意思

为什么80%的码农都做不了架构师&#xff1f;>>> 在编译VC6.0是,出现fatal error C1010: unexpected end of file while looking for precompiled header directive 的错误. 解决方法&#xff1a; 1、如果发生错误的文件是由其他的C代码文件添加进入当前工程而引…

东莞网站设计及拍摄方案公司网站注册理由

linux系统中安装nginx到指定目录 下载要求版本的nginx源码包 上传并解压nginx源码包 # 在/opt/app目录下创建nginx解压安装目录 cd /opt/app mkdir nginx# 切换到解压目录下 cd /opt/app/nginx# 解压 tar -zxvf nginx-1.24.0.tar.gz编译安装 # 在/opt/app/nginx路径下&…

长春市做网站的公司制作短视频的软件

目录 摘 要 1 问题背景 2 模型假设 3 符号系统 4 问题 1 模型的建立与求解

如何查看网站收录情况沧州房产信息网

正题 题目大意 有n个东西&#xff0c;每个东西有价值和价格&#xff0c;然后要求一个价格上限&#xff0c;和除了第一个东西以外都有一个买这个之前必须要买的东西。 求最大价值 解题思路 我们考虑之前的树形背包 然后发现时间复杂度O(n3)O(n^3)O(n3)&#xff0c;之后我们考虑…