码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 目标检测算法——YOLOv5/YOLOv7改进之结合Swin Transformer V2


    💖💖>>>加勒比海带,QQ2479200884<<<💖💖

    🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀

    ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨

    📚📚>>>人工智能 | 计算机视觉 | 深度学习Tricks | 第一时间送达<<<📚📚


    论文题目:Swin Transformer V2: Scaling Up Capacity and Resolution

    论文地址:https://arxiv.org/pdf/2111.09883.pdf

    源代码:https://github.com/microsoft/Swin-Transformer

    面临问题:

    作者提出了将Swin Transformer缩放到30亿个参数的技术 ,并使其能够使用高达1536×1536分辨率的图像进行训练。在很多方面达到了SOTA。

    目前,视觉模型尚未像NLP语言模型那样被广泛探索,部分原因是训练和应用中的以下差异:

    (1)视觉模型通常在规模上面临不稳定性问题;

    (2)许多下游视觉任务需要高分辨率图像,如何有效地将低分辨率预训练的模型转换为高分辨率模型尚未被有效探索,也就是跨窗口分辨率迁移模型时性能下降。

    (3)当图像分辨率较高时,GPU显存消耗也是一个问题。

    解决思路:

    为了解决这些问题,作者提出了几种技术,并在本文中以Swin Transformer进行了说明:

    (1)提高大视觉模型稳定性的后归一化(post normalization) 技术和缩放余弦注意力(scaled cosine attention)方法,以提高大型视觉模型的稳定性;

    (2)一种对数间隔连续位置偏差技术(log-spaced continuous position bias technique) ,用于有效地将在低分辨率图像中预训练的模型转换为其高分辨率对应模型。

    (3)分享节约GPU内存消耗方法,使得训练大分辨率模型可行;

    YOLOv5结合Swin Transformer V2 教程:

    配置common.py文件:

    1. class WindowAttention(nn.Module):
    2. r""" Window based multi-head self attention (W-MSA) module with relative position bias.
    3. It supports both of shifted and non-shifted window.
    4. Args:
    5. dim (int): Number of input channels.
    6. window_size (tuple[int]): The height and width of the window.
    7. num_heads (int): Number of attention heads.
    8. qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True
    9. qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set
    10. attn_drop (float, optional): Dropout ratio of attention weight. Default: 0.0
    11. proj_drop (float, optional): Dropout ratio of output. Default: 0.0
    12. """
    13. def __init__(self, dim, window_size, num_heads, qkv_bias=True, qk_scale=None, attn_drop=0., proj_drop=0.):
    14. super().__init__()
    15. self.dim = dim
    16. self.window_size = window_size # Wh, Ww
    17. self.num_heads = num_heads
    18. head_dim = dim // num_heads
    19. self.scale = qk_scale or head_dim ** -0.5
    20. # define a parameter table of relative position bias
    21. self.relative_position_bias_table = nn.Parameter(
    22. torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)) # 2*Wh-1 * 2*Ww-1, nH
    23. # get pair-wise relative position index for each token inside the window
    24. coords_h = torch.arange(self.window_size[0])
    25. coords_w = torch.arange(self.window_size[1])
    26. coords = torch.stack(torch.meshgrid([coords_h, coords_w])) # 2, Wh, Ww
    27. coords_flatten = torch.flatten(coords, 1) # 2, Wh*Ww
    28. relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :] # 2, Wh*Ww, Wh*Ww
    29. relative_coords = relative_coords.permute(1, 2, 0).contiguous() # Wh*Ww, Wh*Ww, 2
    30. relative_coords[:, :, 0] += self.window_size[0] - 1 # shift to start from 0
    31. relative_coords[:, :, 1] += self.window_size[1] - 1
    32. relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1
    33. relative_position_index = relative_coords.sum(-1) # Wh*Ww, Wh*Ww
    34. self.register_buffer("relative_position_index", relative_position_index)
    35. self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)
    36. self.attn_drop = nn.Dropout(attn_drop)
    37. self.proj = nn.Linear(dim, dim)
    38. self.proj_drop = nn.Dropout(proj_drop)
    39. trunc_normal_(self.relative_position_bias_table, std=.02)
    40. self.softmax = nn.Softmax(dim=-1)
    41. def forward(self, x, mask=None):
    42. """
    43. Args:
    44. x: input features with shape of (num_windows*B, N, C)
    45. mask: (0/-inf) mask with shape of (num_windows, Wh*Ww, Wh*Ww) or None
    46. """
    47. B_, N, C = x.shape
    48. qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4)
    49. q, k, v = qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple)
    50. q = q * self.scale
    51. attn = (q @ k.transpose(-2, -1))
    52. relative_position_bias = self.relative_position_bias_table[self.relative_position_index.view(-1)].view(
    53. self.window_size[0] * self.window_size[1], self.window_size[0] * self.window_size[1], -1) # Wh*Ww,Wh*Ww,nH
    54. relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous() # nH, Wh*Ww, Wh*Ww
    55. attn = attn + relative_position_bias.unsqueeze(0)
    56. if mask is not None:
    57. nW = mask.shape[0]
    58. attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0)
    59. attn = attn.view(-1, self.num_heads, N, N)
    60. attn = self.softmax(attn)
    61. else:
    62. attn = self.softmax(attn)
    63. attn = self.attn_drop(attn)
    64. # print(attn.dtype, v.dtype)
    65. x = (attn @ v).transpose(1, 2).reshape(B_, N, C)
    66. x = self.proj(x)
    67. x = self.proj_drop(x)
    68. return x
    69. class Mlp(nn.Module):
    70. def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.):
    71. super().__init__()
    72. out_features = out_features or in_features
    73. hidden_features = hidden_features or in_features
    74. self.fc1 = nn.Linear(in_features, hidden_features)
    75. self.act = act_layer()
    76. self.fc2 = nn.Linear(hidden_features, out_features)
    77. self.drop = nn.Dropout(drop)
    78. def forward(self, x):
    79. x = self.fc1(x)
    80. x = self.act(x)
    81. x = self.drop(x)
    82. x = self.fc2(x)
    83. x = self.drop(x)
    84. return x
    85. def window_partition(x, window_size):
    86. """
    87. Args:
    88. x: (B, H, W, C)
    89. window_size (int): window size
    90. Returns:
    91. windows: (num_windows*B, window_size, window_size, C)
    92. """
    93. B, H, W, C = x.shape
    94. assert H % window_size == 0, 'feature map h and w can not divide by window size'
    95. x = x.view(B, H // window_size, window_size, W // window_size, window_size, C)
    96. windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size, window_size, C)
    97. return windows
    98. def window_reverse(windows, window_size, H, W):
    99. """
    100. Args:
    101. windows: (num_windows*B, window_size, window_size, C)
    102. window_size (int): Window size
    103. H (int): Height of image
    104. W (int): Width of image
    105. Returns:
    106. x: (B, H, W, C)
    107. """
    108. B = int(windows.shape[0] / (H * W / window_size / window_size))
    109. x = windows.view(B, H // window_size, W // window_size, window_size, window_size, -1)
    110. x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1)
    111. return x
    112. class SwinTransformerLayer(nn.Module):
    113. r""" Swin Transformer Layer.
    114. Args:
    115. dim (int): Number of input channels.
    116. input_resolution (tuple[int]): Input resulotion.
    117. num_heads (int): Number of attention heads.
    118. window_size (int): Window size.
    119. shift_size (int): Shift size for SW-MSA.
    120. mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.
    121. qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True
    122. qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set.
    123. drop (float, optional): Dropout rate. Default: 0.0
    124. attn_drop (float, optional): Attention dropout rate. Default: 0.0
    125. drop_path (float, optional): Stochastic depth rate. Default: 0.0
    126. act_layer (nn.Module, optional): Activation layer. Default: nn.GELU
    127. norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm
    128. """
    129. def __init__(self, dim, num_heads, window_size=7, shift_size=0,
    130. mlp_ratio=4., qkv_bias=True, qk_scale=None, drop=0., attn_drop=0., drop_path=0.,
    131. act_layer=nn.GELU, norm_layer=nn.LayerNorm):
    132. super().__init__()
    133. self.dim = dim
    134. self.num_heads = num_heads
    135. self.window_size = window_size
    136. self.shift_size = shift_size
    137. self.mlp_ratio = mlp_ratio
    138. # if min(self.input_resolution) <= self.window_size:
    139. # # if window size is larger than input resolution, we don't partition windows
    140. # self.shift_size = 0
    141. # self.window_size = min(self.input_resolution)
    142. assert 0 <= self.shift_size < self.window_size, "shift_size must in 0-window_size"
    143. self.norm1 = norm_layer(dim)
    144. self.attn = WindowAttention(
    145. dim, window_size=to_2tuple(self.window_size), num_heads=num_heads,
    146. qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop)
    147. self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()
    148. self.norm2 = norm_layer(dim)
    149. mlp_hidden_dim = int(dim * mlp_ratio)
    150. self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop)

     🚀🏆🍀【算法创新&算法训练&论文投稿】相关链接👇👇👇


    ✨【YOLO创新算法尝新系列】✨

    🏂 美团出品 | YOLOv6 v3.0 is Coming(超越YOLOv7、v8)

    🏂 官方正品 | Ultralytics YOLOv8算法来啦(尖端SOTA模型)

    🏂 改进YOLOv5/YOLOv7——魔改YOLOv5/YOLOv7提升检测精度(涨点必备)

    ————————————🌴【重磅干货来袭】🎄————————————

    🚀一、主干网络改进(持续更新中)🎄🎈

    1.目标检测算法——YOLOv5/YOLOv7改进之结合ConvNeXt结构(纯卷积|超越Swin)

    2.目标检测算法——YOLOv5/YOLOv7改进之结合MobileOne结构(高性能骨干|仅需1ms)

    3.目标检测算法——YOLOv5/YOLOv7改进之结合Swin Transformer V2(涨点神器)

    4.目标检测算法——YOLOv5/YOLOv7改进结合BotNet(Transformer)

    5.目标检测算法——YOLOv5/YOLOv7改进之GSConv+Slim Neck(优化成本)

    6.目标检测算法——YOLOv5/YOLOv7改进结合新神经网络算子Involution(CVPR 2021)

    7.目标检测算法——YOLOv7改进|增加小目标检测层

    8.目标检测算法——YOLOv5改进|增加小目标检测层

    🌴 持续更新中……

    🚀二、轻量化网络(持续更新中)🎄🎈

    1.目标检测算法——YOLOv5/YOLOv7改进之结合​RepVGG(速度飙升)

    2.目标检测算法——YOLOv5/YOLOv7改进之结合​PP-LCNet(轻量级CPU网络)

    3.目标检测算法——YOLOv5/YOLOv7改进之结合轻量化网络MobileNetV3(降参提速)

    4.目标检测算法——YOLOv5/YOLOv7改进|结合轻量型网络ShuffleNetV2

    5.目标检测算法——YOLOv5/YOLOv7改进结合轻量型Ghost模块

    🌴 持续更新中……

    🚀三、注意力机制(持续更新中)🎄🎈

    1.目标检测算法——YOLOv5改进之结合CBAM注意力机制

    2.目标检测算法——YOLOv7改进之结合CBAM注意力机制

    3.目标检测算法——YOLOv5/YOLOv7之结合CA注意力机制

    4.目标检测算法——YOLOv5/YOLOv7改进之结合ECA注意力机制

    5.目标检测算法——YOLOv5/YOLOv7改进之结合NAMAttention(提升涨点)

    6.目标检测算法——YOLOv5/YOLOv7改进之结合GAMAttention

    7.目标检测算法——YOLOv5/YOLOv7改进之结合无参注意力SimAM(涨点神器)

    8.目标检测算法——YOLOv5/YOLOv7改进之结合Criss-Cross Attention

    9.​目标检测算法——YOLOv5/YOLOv7改进之结合​SOCA(单幅图像超分辨率)

    🌴 持续更新中……

    🚀四、检测头部改进(持续更新中)🎄🎈

    1.魔改YOLOv5/v7高阶版(魔法搭配+创新组合)——改进之结合解耦头Decoupled_Detect

    2.目标检测算法——YOLOv5/YOLOv7改进结合涨点Trick之ASFF(自适应空间特征融合)

    🌴 持续更新中……

    🚀五、空间金字塔池化(持续更新中)🎄🎈

    1.目标检测算法——YOLOv5/YOLOv7改进之结合​ASPP(空洞空间卷积池化金字塔)

    2.目标检测算法——YOLOv5/YOLOv7改进之结合特征提取网络RFBNet(涨点明显)

    🌴 持续更新中……

    🚀六、损失函数及NMS改进(持续更新中)🎄🎈

    1.目标检测算法——YOLOv5/YOLOv7改进|将IOU Loss替换为EIOU Loss

    2.目标检测算法——助力涨点 | YOLOv5改进结合Alpha-IoU

    3.目标检测算法——YOLOv5/YOLOv7改进之结合SIoU

    4.目标检测算法——YOLOv5将NMS替换为DIoU-NMS

    🌴 持续更新中……

    🚀七、其他创新改进项目(持续更新中)🎄🎈

    1.手把手教你搭建属于自己的PyQt5-YOLOv5目标检测平台(保姆级教程)

    2.YOLO算法改进之结合GradCAM可视化热力图(附详细教程)

    3.目标检测算法——YOLOv5/YOLOv7改进之结合SPD-Conv(低分辨率图像和小目标涨点明显)

    4.目标检测算法——YOLOv5/YOLOv7改进之更换FReLU激活函数

    5.目标检测算法——YOLOv5/YOLOv7改进之结合BiFPN

    🌴 持续更新中……

    🚀八、算法训练相关项目(持续更新中)🎄🎈

    1.目标检测算法——YOLOv7训练自己的数据集(保姆级教程)

    2.人工智能前沿——玩转OpenAI语音机器人ChatGPT(中文版)

    3.深度学习之语义分割算法(入门学习)

    4.知识经验分享——YOLOv5-6.0训练出错及解决方法(RuntimeError)

    5.目标检测算法——将xml格式转换为YOLOv5格式txt

    6.目标检测算法——YOLOv5/YOLOv7如何改变bbox检测框的粗细大小

    7.人工智能前沿——6款AI绘画生成工具

    8.YOLOv5结合人体姿态估计

    9.超越YOLOv5,0.7M超轻量,又好又快(PP-YOLOE&PP-PicoDet)

    10.目标检测算法——收藏|小目标检测的定义(一)

    11.目标检测算法——收藏|小目标检测难点分析(二)

    12.目标检测算法——收藏|小目标检测解决方案(三)

    🌴 持续更新中……

    🚀九、数据资源相关项目(持续更新中)🎄🎈

    1.目标检测算法——小目标检测相关数据集(附下载链接)

    2.目标检测算法——3D公共数据集汇总(附下载链接)

    3.目标检测算法——3D公共数据集汇总 2(附下载链接)

    4.目标检测算法——行人检测&人群计数数据集汇总(附下载链接)

    5.目标检测算法——遥感影像数据集资源汇总(附下载链接)

    6.目标检测算法——自动驾驶开源数据集汇总(附下载链接)

    7.目标检测算法——自动驾驶开源数据集汇总 2(附下载链接)

    8.目标检测算法——图像分类开源数据集汇总(附下载链接)

    9.目标检测算法——医学图像开源数据集汇总(附下载链接)

    10.目标检测算法——工业缺陷数据集汇总1(附下载链接)

    11.目标检测算法——工业缺陷数据集汇总2(附下载链接)

    12.目标检测算法——垃圾分类数据集汇总(附下载链接)

    13.目标检测算法——人脸识别数据集汇总(附下载链接)

    14.目标检测算法——安全帽识别数据集(附下载链接)

    15.目标检测算法——人体姿态估计数据集汇总(附下载链接)

    16.目标检测算法——人体姿态估计数据集汇总 2(附下载链接)

    17.目标检测算法——车辆牌照识别数据集汇总(附下载链接)

    18.目标检测算法——车辆牌照识别数据集汇总 2(附下载链接)

    19.收藏 | 机器学习公共数据集集锦(附下载链接)

    20.目标检测算法——图像分割数据集汇总(附下载链接)

    21.目标检测算法——图像分割数据集汇总 2(附下载链接)

    22.收藏 | 自然语言处理(NLP)数据集汇总(附下载链接)

    23.自然语言处理(NLP)数据集汇总 2(附下载链接)

    24.自然语言处理(NLP)数据集汇总 3(附下载链接)

    25.自然语言处理(NLP)数据集汇总 4(附下载链接)

    🌴 持续更新中……

    🚀十、论文投稿相关项目(持续更新中)🎄🎈

    1.论文投稿指南——收藏|SCI论文投稿注意事项(提高命中率)

    2.论文投稿指南——收藏|SCI论文怎么投?(Accepted)

    3.论文投稿指南——收藏|SCI写作投稿发表全流程

    4.论文投稿指南——收藏|如何选择SCI期刊(含选刊必备神器)

    5.论文投稿指南——SCI选刊

    6.论文投稿指南——SCI投稿各阶段邮件模板

    7.人工智能前沿——深度学习热门领域(确定选题及研究方向)

    8.人工智能前沿——2022年最流行的十大AI技术

    9.人工智能前沿——未来AI技术的五大应用领域

    10.人工智能前沿——无人自动驾驶技术

    11.人工智能前沿——AI技术在医疗领域的应用

    12.人工智能前沿——随需应变的未来大脑

    13.目标检测算法——深度学习知识简要普及

    14.目标检测算法——10种深度学习框架介绍

    15.目标检测算法——为什么我选择PyTorch?

    16.知识经验分享——超全激活函数解析(数学原理+优缺点)

    17.知识经验分享——卷积神经网络(CNN)

    18.海带软件分享——Office 2021全家桶安装教程(附报错解决方法)

    19.海带软件分享——日常办公学习软件分享(收藏)

    20.论文投稿指南——计算机视觉 (Computer Vision) 顶会归纳

    21.论文投稿指南——中文核心期刊

    22.论文投稿指南——计算机领域核心期刊

    23.论文投稿指南——中文核心期刊推荐(计算机技术)

    24.论文投稿指南——中文核心期刊推荐(计算机技术2)

    25.论文投稿指南——中文核心期刊推荐(计算机技术3)

    26.论文投稿指南——中文核心期刊推荐(电子、通信技术)

    27.论文投稿指南——中文核心期刊推荐(电子、通信技术2)

    28.论文投稿指南——中文核心期刊推荐(电子、通信技术3)

    29.论文投稿指南——中文核心期刊推荐(机械、仪表工业)

    30.论文投稿指南——中文核心期刊推荐(机械、仪表工业2)

    31.论文投稿指南——中文核心期刊推荐(机械、仪表工业3)

    32.论文投稿指南——中国(中文EI)期刊推荐(第1期)

    33.论文投稿指南——中国(中文EI)期刊推荐(第2期)

    34.论文投稿指南——中国(中文EI)期刊推荐(第3期)

    35.论文投稿指南——中国(中文EI)期刊推荐(第4期)

    36.论文投稿指南——中国(中文EI)期刊推荐(第5期)

    37.论文投稿指南——中国(中文EI)期刊推荐(第6期)

    38.论文投稿指南——中国(中文EI)期刊推荐(第7期)

    39.论文投稿指南——中国(中文EI)期刊推荐(第8期)

    40.【1】SCI易中期刊推荐——计算机方向(中科院3区)

    41.【2】SCI易中期刊推荐——遥感图像领域(中科院2区)

    42.【3】SCI易中期刊推荐——人工智能领域(中科院1区)

    43.【4】SCI易中期刊推荐——神经科学研究(中科院4区)

    44.【5】SCI易中期刊推荐——计算机科学(中科院2区)

    45.【6】SCI易中期刊推荐——人工智能&神经科学&机器人学(中科院3区)

    46.【7】SCI易中期刊推荐——计算机 | 人工智能(中科院4区)

    47.【8】SCI易中期刊推荐——图像处理领域(中科院4区)

    48.【9】SCI易中期刊推荐——工程技术-计算机:软件工程(中科院4区)

    49.【10】SCI易中期刊推荐——工程技术-计算机:人工智能(中科院2区)

    50.【11】SCI易中期刊推荐——计算机方向(中科院4区)

    51.【12】SCI易中期刊推荐——计算机信息系统(中科院4区)

    🌴 持续更新中……

    关于YOLO算法改进&论文投稿可关注并留言博主的CSDN/QQ

    >>>一起交流!互相学习!共同进步!<<<

  • 相关阅读:
    docker常用命令大全
    倾听:情绪
    常见面试题-MySQL软删除以及索引结构
    [python]basemap后安装后hello world代码
    【CMN】Components组件汇总
    Pt/CeO2单原子纳米酶|H-rGO-Pt@Pd NPs纳米酶|碳纳米管负载铂颗粒纳米酶|白血病拮抗多肽修饰的FeOPtPEG复合纳米酶
    C++ 遇到问题汇总及解决方案
    Git commit校验工具commitlint的配置与使用
    AbortController的使用
    eNSP出现错误,错误代码40暴力解决方案
  • 原文地址:https://blog.csdn.net/m0_53578855/article/details/127361280
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号