不怕YOLOv10高歌猛進,我有YOLOv8穩扎穩打

在這里插入圖片描述

YOLOv10 出來有幾天時間了,這次我沒有選擇第一時間出文章解析,如此頻繁的發布數字版本的 YOLO 著實讓人頭疼,雖然數字的更新并非舊版技術的過時, 但是這肯定會讓很多在校同學增加很多焦慮情緒。這里還是請大家辯證看待。

v10 這次的改動不是很多,甚至很多新手同學都覺得沒改動什么。網絡結構上改動確實不多,主要貢獻還是 NMS free,這個點并不體現在模型的 yaml 文件里,所以只看 yaml 也看不出什么,從效果角度講 v10 就是比 v8 強,這是沒法狡辯的。

在這里插入圖片描述

值得注意的是 v10 用的依然是 yolov8 的框架,也就是說到目前為止,YOLOv5/v7/v9 都是一個框架,YOLOv8/v10 是一個框架,并且這兩套框架都是 ultralytics 團隊在維護的,這也驗證了前幾年(22年)我寫的一段文字,一個好的基線框架是至關重要的,一個超級活躍的開源項目也是可遇不可求的,它帶給你的幫助是無法估量的。

那這意味什么呢,你 v5/v7/v9 會玩一個就代表三個全會,v8/v10 會玩一個就代表兩個全會;并且我們可以無腦將 v10 的改進點放到 v8 里,所以大家不必糾結 v8 舊于 v10 ,以后的任何數字版本 yolo ,對你們來說不過是一個改進點而已。

如何選擇一個合適的基線?

  1. 從硬件性能角度考慮
    即考慮自己的硬件條件,本身是否具備訓練一個大模型的硬件環境,比如顯卡性能或者顯存很小,那么就無法訓練參數量過大的模型。
  2. 從訓練成本角度考慮
    即考慮自身的資金成本或者時間成本,如果實驗室沒有GPU,那么就要使用云平臺,通常實驗都會有幾十次,所以資金成本很大,這時可以考慮使用參數量較小的基線,這樣訓練時間快,對硬件的要求也沒有那么高。
  3. 從評價指標角度考慮
    我們通常在發論文時都會加上一個應用場景,加場景的作用就是滿足實際的使用,我們知道理想情況下,模型的精度和參數量是成正比的,假如滿足實際使用要求的mAP值是0.9,YOLOv5s的mAP只有0.6,那么無論你怎樣優化,模型也很難達到要求,所以這時候就要考慮使用一個更大的基線,比如5L\X等。
  4. 從代碼開源角度考慮
    現在開源工作做得很好,有時候我們自己忙了一個月編寫的代碼甚至不如GitHub上一個開源的項目,所以在選擇優化算法時要考慮自身的代碼水平,即這個算法的有沒有開源的源代碼,這個代碼是否清清晰易讀,是否方便改進。

為什么我總是推薦大家用 yolov8 呢,因為這個框架真的真的很好用,對小白也很友好,不管是論文還是工作,這個框架我認為真的值得學習。

目前這個框架支持 分類、檢測、分割、關鍵點、開集目標檢測、未來會加入深度估計等任務,學會了對自己幫助很大。

下面簡單回顧下論文,并且對 v10 的三個模塊加到 v8 做個簡單教程。


論文回顧


下面快速回顧下原始論文,這是我借助 Ai Drive 總結的,基本就是這些東西,如果對模塊效果感興趣請大家直接看論文的消融實驗。

引言

在過去的幾年中,YOLO系列(You Only Look Once)模型憑借其在計算成本和檢測性能之間的卓越平衡,已經成為實時目標檢測領域的主流。近日,由清華大學團隊提出的最新論文《YOLOv10: Real-Time End-to-End Object Detection》進一步推進了YOLO模型的性能與效率邊界。本文將詳細介紹這篇論文的創新點、主要貢獻及其實驗結果。

論文背景

YOLO模型的檢測管道主要包括模型前向過程和非極大值抑制(NMS)后處理。然而,NMS的依賴使得YOLO模型在端到端部署中存在一定的效率瓶頸。此外,YOLO模型各組件的設計也缺乏全面細致的優化,導致計算冗余明顯,限制了模型的性能提升。

主要貢獻

這篇論文針對以上問題,提出了兩個關鍵創新點:一致的雙重分配策略和整體效率-準確性驅動的模型設計策略。
在這里插入圖片描述
在這里插入圖片描述

  1. 一致的雙重分配策略

    • 雙標簽分配:傳統的YOLO模型在訓練時通常采用一對多的標簽分配策略,這雖然能帶來豐富的監督信號,但也需要在推理時依賴NMS。為解決這一問題,論文提出了一種雙標簽分配策略,通過同時采用一對多和一對一的標簽分配,既保證了訓練時的豐富監督信號,又消除了推理時對NMS的依賴。
    • 一致匹配度量:通過采用統一的匹配度量,優化一對一分配頭和一對多分配頭,使兩者能夠一致和諧地進行優化,從而在推理時提供更高質量的樣本。
  2. 整體效率-準確性驅動的模型設計策略

    • 輕量級分類頭:通過簡化分類頭的架構,減少計算開銷,同時不顯著影響性能。
    • 空間通道解耦下采樣:提出了一種新的下采樣方法,先進行通道維度的變換,然后進行空間維度的下采樣,最大程度地保留信息。
    • 秩引導塊設計:通過分析各階段的內在秩,提出緊湊倒置塊結構(CIB),并采用秩引導的塊分配策略,以適應不同階段的冗余情況,從而提高模型的效率。
  3. 大核卷積和部分自注意力模塊(PSA)

    • 大核卷積:在深層階段采用大核卷積,擴大感受野,增強模型能力。
    • 部分自注意力模塊:通過將特征分為兩部分,僅對一部分應用多頭自注意力機制(MHSA),在提升模型性能的同時降低計算復雜度。

實驗結果

在這里插入圖片描述

論文通過在COCO數據集上的大量實驗,驗證了YOLOv10在各個模型規模上的優越性能和效率:

  • 高效的參數利用:YOLOv10-L和YOLOv10-X分別比YOLOv8-L和YOLOv8-X減少1.8倍和2.3倍的參數,同時在相同或更好的性能下實現了更低的延遲。
  • 先進的性能和延遲權衡:YOLOv10在標準目標檢測基準上顯著優于以前的最先進模型。例如,YOLOv10-S比RT-DETR-R18快1.8倍,參數和FLOPs減少2.8倍。

代碼改動

如果將 v10 全部的改動合并到 v8 的主分支,大概到 14python 文件和 6yaml 文件,詳細的代碼大家直接看這個 PR 就行了,https://github.com/ultralytics/ultralytics/pull/13113/files,

由于我對大家比較了解,就不給大家展示怎么改這 14 個文件了,用 Ultralytics 框架的同學等待官方合并就好了。咱們直接改除 NMS free 外的其他貢獻點,有三個模塊,大家自行拆解使用 :

  1. 空間通道解耦下采樣 SCDown
  2. 緊湊倒置塊結構 CIB
  3. 大核卷積和部分自注意力模塊 PSA

第一步

ultralytics/ultralytics/nn/modules/block.py 添加如下代碼:

from ultralytics.utils.torch_utils import fuse_conv_and_bnclass RepVGGDW(torch.nn.Module):"""RepVGGDW is a class that represents a depth wise separable convolutional block in RepVGG architecture."""def __init__(self, ed) -> None:super().__init__()self.conv = Conv(ed, ed, 7, 1, 3, g=ed, act=False)self.conv1 = Conv(ed, ed, 3, 1, 1, g=ed, act=False)self.dim = edself.act = nn.SiLU()def forward(self, x):"""Performs a forward pass of the RepVGGDW block.Args:x (torch.Tensor): Input tensor.Returns:(torch.Tensor): Output tensor after applying the depth wise separable convolution."""return self.act(self.conv(x) + self.conv1(x))def forward_fuse(self, x):"""Performs a forward pass of the RepVGGDW block without fusing the convolutions.Args:x (torch.Tensor): Input tensor.Returns:(torch.Tensor): Output tensor after applying the depth wise separable convolution."""return self.act(self.conv(x))@torch.no_grad()def fuse(self):"""Fuses the convolutional layers in the RepVGGDW block.This method fuses the convolutional layers and updates the weights and biases accordingly."""conv = fuse_conv_and_bn(self.conv.conv, self.conv.bn)conv1 = fuse_conv_and_bn(self.conv1.conv, self.conv1.bn)conv_w = conv.weightconv_b = conv.biasconv1_w = conv1.weightconv1_b = conv1.biasconv1_w = torch.nn.functional.pad(conv1_w, [2, 2, 2, 2])final_conv_w = conv_w + conv1_wfinal_conv_b = conv_b + conv1_bconv.weight.data.copy_(final_conv_w)conv.bias.data.copy_(final_conv_b)self.conv = convdel self.conv1class CIB(nn.Module):"""Conditional Identity Block (CIB) module.Args:c1 (int): Number of input channels.c2 (int): Number of output channels.shortcut (bool, optional): Whether to add a shortcut connection. Defaults to True.e (float, optional): Scaling factor for the hidden channels. Defaults to 0.5.lk (bool, optional): Whether to use RepVGGDW for the third convolutional layer. Defaults to False."""def __init__(self, c1, c2, shortcut=True, e=0.5, lk=False):super().__init__()c_ = int(c2 * e)  # hidden channelsself.cv1 = nn.Sequential(Conv(c1, c1, 3, g=c1),Conv(c1, 2 * c_, 1),Conv(2 * c_, 2 * c_, 3, g=2 * c_) if not lk else RepVGGDW(2 * c_),Conv(2 * c_, c2, 1),Conv(c2, c2, 3, g=c2),)self.add = shortcut and c1 == c2def forward(self, x):"""Forward pass of the CIB module.Args:x (torch.Tensor): Input tensor.Returns:(torch.Tensor): Output tensor."""return x + self.cv1(x) if self.add else self.cv1(x)class C2fCIB(C2f):"""C2fCIB class represents a convolutional block with C2f and CIB modules.Args:c1 (int): Number of input channels.c2 (int): Number of output channels.n (int, optional): Number of CIB modules to stack. Defaults to 1.shortcut (bool, optional): Whether to use shortcut connection. Defaults to False.lk (bool, optional): Whether to use local key connection. Defaults to False.g (int, optional): Number of groups for grouped convolution. Defaults to 1.e (float, optional): Expansion ratio for CIB modules. Defaults to 0.5."""def __init__(self, c1, c2, n=1, shortcut=False, lk=False, g=1, e=0.5):super().__init__(c1, c2, n, shortcut, g, e)self.m = nn.ModuleList(CIB(self.c, self.c, shortcut, e=1.0, lk=lk) for _ in range(n))class Attention(nn.Module):"""Attention module that performs self-attention on the input tensor.Args:dim (int): The input tensor dimension.num_heads (int): The number of attention heads.attn_ratio (float): The ratio of the attention key dimension to the head dimension.Attributes:num_heads (int): The number of attention heads.head_dim (int): The dimension of each attention head.key_dim (int): The dimension of the attention key.scale (float): The scaling factor for the attention scores.qkv (Conv): Convolutional layer for computing the query, key, and value.proj (Conv): Convolutional layer for projecting the attended values.pe (Conv): Convolutional layer for positional encoding."""def __init__(self, dim, num_heads=8, attn_ratio=0.5):super().__init__()self.num_heads = num_headsself.head_dim = dim // num_headsself.key_dim = int(self.head_dim * attn_ratio)self.scale = self.key_dim**-0.5nh_kd = nh_kd = self.key_dim * num_headsh = dim + nh_kd * 2self.qkv = Conv(dim, h, 1, act=False)self.proj = Conv(dim, dim, 1, act=False)self.pe = Conv(dim, dim, 3, 1, g=dim, act=False)def forward(self, x):"""Forward pass of the Attention module.Args:x (torch.Tensor): The input tensor.Returns:(torch.Tensor): The output tensor after self-attention."""B, _, H, W = x.shapeN = H * Wqkv = self.qkv(x)q, k, v = qkv.view(B, self.num_heads, -1, N).split([self.key_dim, self.key_dim, self.head_dim], dim=2)attn = (q.transpose(-2, -1) @ k) * self.scaleattn = attn.softmax(dim=-1)x = (v @ attn.transpose(-2, -1)).view(B, -1, H, W) + self.pe(v.reshape(B, -1, H, W))x = self.proj(x)return xclass PSA(nn.Module):"""Position-wise Spatial Attention module.Args:c1 (int): Number of input channels.c2 (int): Number of output channels.e (float): Expansion factor for the intermediate channels. Default is 0.5.Attributes:c (int): Number of intermediate channels.cv1 (Conv): 1x1 convolution layer to reduce the number of input channels to 2*c.cv2 (Conv): 1x1 convolution layer to reduce the number of output channels to c.attn (Attention): Attention module for spatial attention.ffn (nn.Sequential): Feed-forward network module."""def __init__(self, c1, c2, e=0.5):super().__init__()assert c1 == c2self.c = int(c1 * e)self.cv1 = Conv(c1, 2 * self.c, 1, 1)self.cv2 = Conv(2 * self.c, c1, 1)self.attn = Attention(self.c, attn_ratio=0.5, num_heads=self.c // 64)self.ffn = nn.Sequential(Conv(self.c, self.c * 2, 1), Conv(self.c * 2, self.c, 1, act=False))def forward(self, x):"""Forward pass of the PSA module.Args:x (torch.Tensor): Input tensor.Returns:(torch.Tensor): Output tensor."""a, b = self.cv1(x).split((self.c, self.c), dim=1)b = b + self.attn(b)b = b + self.ffn(b)return self.cv2(torch.cat((a, b), 1))class SCDown(nn.Module):def __init__(self, c1, c2, k, s):"""Spatial Channel Downsample (SCDown) module.Args:c1 (int): Number of input channels.c2 (int): Number of output channels.k (int): Kernel size for the convolutional layer.s (int): Stride for the convolutional layer."""super().__init__()self.cv1 = Conv(c1, c2, 1, 1)self.cv2 = Conv(c2, c2, k=k, s=s, g=c2, act=False)def forward(self, x):"""Forward pass of the SCDown module.Args:x (torch.Tensor): Input tensor.Returns:(torch.Tensor): Output tensor after applying the SCDown module."""return self.cv2(self.cv1(x))

第二步

ultralytics/ultralytics/nn/modules/block.py 添加如下代碼:

在這里插入圖片描述

    "RepVGGDW","CIB","C2fCIB","Attention","PSA","SCDown",

第三步

ultralytics/ultralytics/nn/tasks.py 導包, 添加模塊

在這里插入圖片描述

    RepVGGDW,CIB,C2fCIB,Attention,PSA,SCDown,

在這里插入圖片描述

                if isinstance(m, RepVGGDW):m.fuse()m.forward = m.forward_fuse

在這里插入圖片描述

PSA, SCDown, C2fCIB
C2fCIB

第四步

更換 yaml ,開始訓練,注意不同尺寸不是簡單的調整深度寬度!

yolov10n.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv10 object detection model. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024] 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, SCDown, [512, 3, 2]] # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 1, PSA, [1024]] # 10# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 3, C2f, [512]] # 13- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 3, C2f, [256]] # 16 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P4- [-1, 3, C2f, [512]] # 19 (P4/16-medium)- [-1, 1, SCDown, [512, 3, 2]]- [[-1, 10], 1, Concat, [1]] # cat head P5- [-1, 3, C2fCIB, [1024, True, True]] # 22 (P5/32-large)- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)

yolov10b.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv10 object detection model. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]b: [0.67, 1.00, 512] 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, SCDown, [512, 3, 2]] # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32- [-1, 3, C2fCIB, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 1, PSA, [1024]] # 10# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 3, C2fCIB, [512, True]] # 13- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 3, C2f, [256]] # 16 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P4- [-1, 3, C2fCIB, [512, True]] # 19 (P4/16-medium)- [-1, 1, SCDown, [512, 3, 2]]- [[-1, 10], 1, Concat, [1]] # cat head P5- [-1, 3, C2fCIB, [1024, True]] # 22 (P5/32-large)- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)

yolov10s.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv10 object detection model. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]s: [0.33, 0.50, 1024]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, SCDown, [512, 3, 2]] # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32- [-1, 3, C2fCIB, [1024, True, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 1, PSA, [1024]] # 10# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 3, C2f, [512]] # 13- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 3, C2f, [256]] # 16 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P4- [-1, 3, C2f, [512]] # 19 (P4/16-medium)- [-1, 1, SCDown, [512, 3, 2]]- [[-1, 10], 1, Concat, [1]] # cat head P5- [-1, 3, C2fCIB, [1024, True, True]] # 22 (P5/32-large)- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)

相關推薦

想了解 YOLOv8 其他改進的同學歡迎訂閱我的專欄~

🎀基礎入門篇🎀

  1. 從零開始學習目標檢測:YOLO算法詳解
  2. YOLOv8原理解析:重新定義實時目標檢測的速度和精度🌟
  3. 小白安裝環境教程!沒一個字廢話,看一遍不踩坑!
  4. 使用YOLOv8訓練自己的目標檢測數據集-【收集數據集】-【標注數據集】-【劃分數據集】-【配置訓練環境】-【訓練模型】-【評估模型】-【導出模型】🚀
  5. YOLOv8 訓練自己的【分割數據集】
  6. 【強烈推薦🚀】基礎入門篇 | YOLOv8 項目【訓練】【驗證】【推理】最簡單教程 | 打印FPS在這里!!🚀
  7. 【全網首發🥇】萬字長文,YOLOv8 yaml 文件解析 | 一文搞定 YOLOv8 分類任務,檢測任務,分割任務,關鍵點任務🍀🍀🍀
  8. 【嗶哩嗶哩】云服務器訓練教程視頻
  9. YOLO-Magic 系列框架介紹 【訂閱必讀】

🍀官方項目最新更新動態及其它優化教程🍀

  1. 關于 YOLOv8 modules.py 拆分成了 init.py block.py conv.py head.py trasnformer.py utils.py
  2. 【關鍵Bug解析🤖】YOLOv8 Bug 及解決方案匯總 【環境安裝】【訓練 & 斷點續訓】【KeyError】
  3. 【便利性優化👾】YOLOv8 標簽透明度調節 | 標簽文字大小調節 | 框粗細調節
  4. YOLOv5/v6/v7/v8/RT-DETR 對比試驗的一些想法🍀

💡主干網絡篇💡

  1. 使用 Timm 庫替換 YOLOv8 主干網絡 | 1000+ 主干融合YOLOv8 🚀🚀🚀

  2. 【2023🏅】YOLOv8 更換主干網絡之 FasterNet | 《Ran, Don‘t Walk: 追求更高 FLOPS 的快速神經網絡》

  3. 【2023🏅】YOLOv8 更換主干網絡之 VanillaNet |《華為方舟實驗室最新成果》新增多個尺寸🍀

  4. 【2023🏅】YOLOv8 更換主干網絡之 HGNetV2 |《RTDETR主干網絡》

  5. YOLOv8 更換骨干網絡之 SwinTransformer | 《基于位移窗口的層次化視覺變換器》

  6. YOLOv8 更換主干網絡之 GhostNetV2 | 《GhostNetV2:利用長距離注意力增強廉價操作》

  7. YOLOv8 更換主干網絡之 PP-LCNet | 《PP-LCNet: 一種輕量級CPU卷積神經網絡》

  8. YOLOv8 更換主干網絡之 MobileNeXt |《重新思考瓶頸結構以實現高效移動網絡設計》

  9. YOLOv8 更換主干網絡之 ShuffleNetv2 | 《ShuffleNet v2:高效卷積神經網絡架構設計的實用指南》

  10. YOLOv8 更換主干網絡之 EfficientNet | 《EfficientNet:重新思考卷積神經網絡的模型縮放》

  11. YOLOv8 更換骨干網絡之 MobileNetV3 | 《搜尋 MobileNetV3》

  12. YOLOv8 更換骨干網絡之 GhostNet | 《從廉價操作中獲取更多特征》

  13. YOLOv8 更換主干網絡之 ConvNext | 《純卷積結構超越 ViTs》

  14. YOLOv8 更換主干網絡之 MobileViT |《輕巧、通用、便于移動的視覺轉換器》

  15. YOLOv8 更換骨干網絡之 ResNet50/ResNet101 | 原論文一比一復現

  16. 【雙主干】YOLOv8 如何實現多主干特征融合方式 | GhostNet+ShuffleNet / SwinTransformer+ShuffleNet🚀🚀🚀


🚀即插即用篇🚀

  1. 手把手教你 YOLOv8 添加注意力機制 | 適用于【檢測/分類/分割/關鍵點任務】【包含20+種注意力代碼及教程】🚀
  2. 在 C2F 模塊中添加【SE】 【CBAM】【 ECA 】【CA 】注意力機制 | 附詳細結構圖
  3. 在 C2F 模塊中添加【SimAM】 【CoTAttention】【SKAttention】【Double】注意力機制 | 附詳細結構圖
  4. 在 C2F 模塊中添加【EffectiveSE】【GlobalContext】【GatherExcite】【MHSA】注意力機制 | 附詳細結構圖
  5. 在 C2F 模塊中添加【Triplet】【SpatialGroupEnhance】【NAM】【S2】注意力機制 | 附詳細結構圖
  6. 在 C2F 模塊中添加【ParNet】【CrissCross】【GAM】【ParallelPolarized】【Sequential】注意力機制 | 附詳細結構圖
  7. 即插即用篇 | YOLOv8 引入 SimAM 注意力機制 | 《SimAM: A Simple, Parameter-Free Attention Module for Convolutional》
  8. 即插即用篇 | YOLOv8 引入 Contextual Trans 注意力機制 | 《Contextual Transformer Networks for Visual Recognition》
  9. 即插即用篇 | YOLOv8 引入 SKAttention 注意力機制 | 《Selective Kernel Networks》
  10. 即插即用篇 | YOLOv8 引入 DoubleAttention 注意力機制 | 《A2-Nets: Double Attention Networks》
  11. 即插即用篇 | YOLOv8 引入 EffectiveSE 注意力機制 | 《CenterMask : Real-Time Anchor-Free Instance Segmentation》
  12. 即插即用篇 | YOLOv8 引入 GlobalContext 注意力機制 | 《GCNet: Non-local Networks Meet Squeeze-Excitation Networks》
  13. 即插即用篇 | YOLOv8 引入 GatherExcite 注意力機制 | 《Gather-Excite: Exploiting Feature Context in Convolutional》
  14. 即插即用篇 | YOLOv8 引入 MHSA 注意力機制 | 《Bottleneck Transformers for Visual Recognition》
  15. 即插即用篇 | YOLOv8 引入 Triplet 注意力機制 | 《Rotate to Attend: Convolutional Triplet Attention Module》
  16. 即插即用篇 | YOLOv8 引入 SpatialGroupEnhance 注意力機制 | 《Improving Semantic Feature Learning in Convolutional》
  17. 即插即用篇 | YOLOv8 引入 NAM 注意力機制 | 《NAM: Normalization-based Attention Module》
  18. 即插即用篇 | YOLOv8 引入 S2 注意力機制 | 《S^2-MLPV2: IMPROVED SPATIAL-SHIFT MLP ARCHITECTURE FOR VISION》
  19. 即插即用篇 | YOLOv8 引入 ParNetAttention 注意力機制 | 《NON-DEEP NETWORKS》
  20. 即插即用篇 | YOLOv8 引入 軸向注意力 Axial Attention | 多維變換器中的軸向注意力🍀

  1. 【2023🏅】YOLOv8 引入最新注意力BiFormer | 《BiFormer:視覺變換器與雙層路由注意力》

  2. 【CVPR🏅】YOLOv8 引入 RepVGG 重參數化模塊 |《RepVGG:讓VGG風格的卷積神經網絡再次偉大》

  3. 【小目標🤏】用于低分辨率圖像和小物體的新 CNN 模塊SPD-Conv | 《一種適用于低分辨率圖像和小物體的新卷積模塊》

  4. 【2023🏅】 YOLOv8 引入具備跨空間學習的高效多尺度注意力 《Efficient Multi-Scale Attention》

  5. 【2023🏅】 YOLOv8 引入選擇性注意力 LSK 模塊 | 《ICCV Large Selective Kernel Network》

  6. 【2023🏅】YOLOv8 引入空間通道重組卷積 | 《CVPR 2023 Spatial and Channel Reconstruction Convolution》

  7. 【2023🏅】YOLOv8 引入Dynamic Snake Convolution | 動態蛇形卷積

  8. 【2023🏅】YOLOv8 引入基于注意力機制的尺度內特征交互 | Attention-based Intra-scale Feature Interaction (AIFI)

  9. 【2023🏅】YOLOv8 引入反向殘差注意力模塊 iRMB | 《ICCV 2023 最新論文》

  10. 【2023🏅】YOLOv8 引入Super Token Sampling ViT | 《CVPR 2023 最新論文》

  11. 【2023🏅】YOLOv8 引入 RFAConv:創新空間注意力和標準卷積操作 | YOLO全系列漲點!

  12. 【2023🏅】YOLOv8 引入 AKConv:具有任意采樣形狀和任意參數數量的卷積核

  13. 【2023🏅】UniRepLKNet:用于音視頻、點云、時間序列和圖像識別的通用感知大卷積神經網絡 | DRepConv

  14. 【2023🏅】超越自注意力:面向醫學圖像分割的可變形大卷積核注意力

  15. 【2023🏅】即插即用篇 | YOLOv8 引入 SENetv2 | 多套版本配合使用

  16. 【2023🏅】即插即用篇 | EfficientViT:用于高分辨率密集預測的多尺度線性注意力 | ICCV 2023

  17. 【2023🏅】即插即用篇 | YOLOv8引入Haar小波下采樣 | 一種簡單而有效的語義分割下采樣模塊

  18. 【AICV🏅】即插即用篇 | YOLOv8引入PSAModule | 高效金字塔壓縮注意力模塊🍀

  19. 【CVPR🏅】即插即用篇 | YOLOv8引入局部自注意力 HaloAttention | 為參數高效的視覺主干網絡擴展局部自注意力🍀

  20. 【CVPR🏅】即插即用篇 | YOLOv8 引入 Strip Pooling | 重新思考場景解析的空間池化🍀

  21. 【ICCV🏅】即插即用篇 | YOLOv8 引入多光譜通道注意力 | 頻率領域中的通道注意力網絡


💖特征融合篇💖

  1. YOLOv8 應用輕量級通用上采樣算子CARAFE | 《特征的內容感知重組》
  2. YOLOv8 應用全維動態卷積 |《 OMNI-DIMENSIONAL DYNAMIC CONVOLUTION》
  3. YOLOv8 應用 BiFPN 結構 | 《 EfficientDet: 可擴展和高效的目標檢測》
  4. YOLOv8 應用Slim-Neck,更好的Neck設計范式 | 《Slim-Neck by GSConv:自動駕駛車輛檢測器架構的更好設計范式》
  5. 【2023🏅】YOLOv8 引入中心化特征金字塔 EVC 模塊 | 《Centralized Feature Pyramid for Object Detection》
  6. 【2023🏅】YOLOv8 引入漸進特征金字塔網絡 AFPN 結構 | 《2023年6月28見刊的最新文章》🚀🚀🚀
  7. 【2023🏅】BGF-YOLO | 增強版YOLOV8 | 用于腦瘤檢測的多尺度注意力特征融合
  8. 【2023🏅】YOLOv8 引入長頸特征融合網絡 Giraffe FPN
  9. 【2023🏅】YOLO-MS: 重新思考實時目標檢測的多尺度表示學習
  10. 【2024🏅】YOLOv8 引入通用高效層聚合網絡 GELAN | YOLOv9新模塊
  11. 【2024🏅】特征融合篇 | YOLOv8 (ultralytics) 實現 YOLOv9 輔助可逆分支架構【試讀🚀🚀】
  12. 【雙主干】【2024🏅】特征融合篇 | 結合內容引導注意力 DEA-Net 思想 實現雙主干特征融合新方法 | IEEE TIP 2024
  13. 【2023🏅】特征融合篇 | YOLOv8 引入動態上采樣模塊 | 超過了其他上采樣器

😎調參篇😎

  1. 【全網首發🥇】YOLOv8超參數調優教程! 使用Ray Tune進行高效的超參數調優!
  2. 【全網首發🥇】YOLOv8實現【K折交叉驗證】教程:解決數據集樣本稀少和類別不平衡的難題🍀🍀🍀

🌈損失函數篇🌈

  1. YOLOv8 更換損失函數之 CIoU / DIoU / EIoU / GIoU / SIoU / WIoU / Focal_xIoU 最全匯總版
  2. 【2023🏅】損失函數篇 | YOLOv8 更換損失函數之 MPDIoU
  3. 【2023🏅】損失函數篇 | YOLOv8 引入 Shape-IoU 考慮邊框形狀與尺度的度量
  4. 【2023🏅】損失函數篇 | YOLOv8 引入 Inner-IoU 基于輔助邊框的IoU損失

💻算法聯調篇💻

  1. 【小目標🤏】YOLOv8 結合切片輔助超推理算法 | 這才叫讓小目標無處遁形!
  2. 【算法聯調】低照度圖像增強算法—傳統算法篇🚀🚀
  3. 【算法聯調】YOLOv8結合SCI低光照圖像增強算法!讓夜晚目標無處遁形🚀🚀
  4. 【算法聯調】YOLOv8結合CVPR2024最新圖像增強算法!讓你的模型無懼風雨🚀🚀

🥇原創改進🥇

  1. 【原創自研🌟】YOLOv8 更換 擠壓激勵增強精準頭 | 附詳細結構圖
  2. 【原創自研🌟】檢測頭篇 YOLOv8 更換 SEResNeXtBottleneck 頭 | 附詳細結構圖
  3. 【原創自研🌟】分割頭篇 YOLOv8 更換 SEResNeXtBottleneck 頭 | 附詳細結構圖
  4. 【原創自研🌟】OBB頭篇 YOLOv8 更換 SEResNeXtBottleneck 頭 | 附詳細結構圖

🤖改進頭篇🤖

  1. 【小目標🤏】YOLOv8 添加 大目標檢測頭 | 小目標檢測頭 | 四頭加BiFPN
  2. 【原創自研🌟】YOLOv8 更換 擠壓激勵增強精準頭 | 附詳細結構圖
  3. 【原創自研🌟】檢測頭篇 YOLOv8 更換 SEResNeXtBottleneck 頭 | 附詳細結構圖
  4. 【原創自研🌟】分割頭篇 YOLOv8 更換 SEResNeXtBottleneck 頭 | 附詳細結構圖
  5. 【原創自研🌟】OBB頭篇 YOLOv8 更換 SEResNeXtBottleneck 頭 | 附詳細結構圖
  6. 【原創自研🌟】檢測頭篇 YOLOv8 更換光暈自注意力 Halo 頭 | 附詳細結構圖

🧮優化器篇🧮

  1. 【2023🏅】YOLOv8 引入谷歌 Lion 優化器

😼激活函數篇😼

  1. 激活函數匯總篇 | YOLOv8 更換激活函數 | 20+ 種匯總

??后處理方式篇??

  1. YOLOv8 更換 DIoU-NMS / CIoU-NMS / EIoU-NMS/ GIoU-NMS / SIoU-NMS/ Soft-NMS 教程

🤓腳本匯總🤓

  1. YOLO格式數據集【數據增強】終極腳本 | 70+種頂級數據增強方法 | 可帶標簽增強 🚀🚀🚀 [未發布博客]

  2. 【前端頁面】YOLOv8 Gradio | 支持 【分類】【檢測】【分割】【關鍵點】 任務🍀

  3. YOLOv8 如何進行目標追蹤

  4. YOLOv8 CAM 熱力圖可視化 | 已適配最新版

  5. YOLOv8 熱力圖可視化深度指南 | 支持多種顏色主題🌈

  6. YOLOv8 區域計數 | 入侵檢測 | 人員闖入

  7. YOLOv8 目標過線計數 | 車流 | 物流 | 流量

  8. YOLOv8 圖片目標計數 | 特定目標計數

  9. YOLOv8 置信度保留多位浮點數 & 特征圖可視化

  10. 【軟件系統】YOLOv8-PySide系統頁面 — 基于 ultralytics 8.1.0 發行版優化💖💖💖

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17697.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17697.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17697.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解密消息隊列的復制魔法:RocketMQ vs Kafka

解密消息隊列的復制魔法:RocketMQ vs Kafka 今天我們來聊聊一個在消息隊列世界中至關重要的主題:消息復制。消息復制不僅能防止消息丟失,還能確保系統的高可用性。即使某個節點宕機了,其他節點依然可以繼續工作。那么&#xff0c…

區間選點問題-貪心-C++

問題: 給定 𝑁 個閉區間 [ai,bi],請你在數軸上選擇盡量少的點,使得每個區間內至少包含一個選出的點。 輸出選擇的點的最小數量。 位于區間端點上的點也算作區間內。 輸入格式 第一行包含整數 𝑁,表示區間數…

CSS文本粒子動畫特效之愛心粒子文字特效-Canvas

1. 效果圖 2.完整代碼 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>body,html {margin: 0;paddin…

order by工作過程和優化

工作過程 order by 是由優化器決定的&#xff0c;如果優化器認為filesort速度快&#xff0c;那么走filesort排序&#xff0c;如果優化器認為索引速度快&#xff0c;那么走索引排序。

有一個3x4的矩陣,求矩陣中所有元素中的最大值。要求用函數處理

解此題的算法已在之前的文章中介紹&#xff0c;詳見&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/139181787 編寫程序&#xff1a; 運行結果&#xff1a;

常用的字符串方法

length() 返回字符串的長度。 let str "HelloWorld"; console.log(str.length); // 10charAt() 返回指定位置的字符。參數&#xff1a;位置索引。 let str "HelloWorld"; console.log(str.charAt(5)); // Wconcat() 連接字符串。參數&#xff1a;一…

昵稱生成器

package mainimport ("math/rand" )// 隨機昵稱 形容詞 var nicheng_tou []string{"迷你的", "鮮艷的", "飛快的", "真實的", "清新的", "幸福的", "可耐的", "快樂的", "冷…

卷徑計算(PID輸出補償法 SCL源代碼)

卷徑計算有很多方法,這里我們提供另一個思路,這里我們采用的是通過速度控制間接控制張力通過線速度和系統卷徑我們可以計算出我們的速度前饋量(主速度)。具體收放卷前饋量計算可以參考下面文章鏈接: 收放卷前饋量計算FC(梯形圖+SCL代碼)-CSDN博客文章瀏覽閱讀584次。這篇博…

【數據分析面試】55. 尋找雙詞組 (Python)

題目&#xff1a; 尋找雙詞組 &#xff08;Python&#xff09; 編寫一個名為 find_bigrams 的函數&#xff0c;該函數接收一個句子或段落的字符串&#xff0c;并按順序返回其所有雙詞組的列表。 注意&#xff1a; 雙詞組是指連續的兩個單詞。 示例&#xff1a; 輸入&#x…

JavaScript(ES6)入門

ES6 1、介紹 ECMAScript 6&#xff08;簡稱ES6&#xff09;是于2015年6月正式發布的JavaScript 語言的標準&#xff0c;正式名為ECMAScript 2015&#xff08;ES2015&#xff09;。它的目標是使得JavaScript語言可以用來編寫復雜的大型應用程序&#xff0c;成為企業級開發語言。…

Dolphinscheduler不重啟加載Oracle驅動

轉載自劉茫茫看山 問題背景 某天我們的租戶反饋數據庫連接缺少必要的驅動&#xff0c;我們通過日志查看確實是缺少部分數據庫的驅動&#xff0c;因為DolphinScheduler默認只帶了Oracle和MySQL的驅動&#xff0c;并且需要將pom文件中的test模式去掉才可以在打包的時候引入。我…

Unity Dotween 定位點的制作

目錄 前言 一、動畫預覽 二、動畫拆分 三、素材準備 四、曲線 OutCirc詳解 五、速度分類詳解 六、代碼 七、組件和設置 八、作者的話 前言 我答應我的粉絲接下來更新Dotween系列&#xff0c;但是我一直沒想好&#xff0c;從哪里開始講。 Dotween的安裝我就跳過了&…

QtCreator調試運行工程報錯,無法找到相關庫的的解決方案

最新在使用國產化平臺做qt應用開發時&#xff0c;總是遇到qtcreator內調試運行 找不到動態庫的問題&#xff0c;為什么會出現這種問題呢&#xff1f;明明編譯的時候能夠正常通過&#xff0c;運行或者調試的時候找不到相關的庫呢&#xff1f;先說結論&#xff0c;排除庫本身的問…

Flutter 中的 AnimatedList 小部件:全面指南

Flutter 中的 AnimatedList 小部件&#xff1a;全面指南 在Flutter中&#xff0c;AnimatedList是一個專門用于展示和管理一個有序列表的組件&#xff0c;它可以對列表中的項進行添加、移除和重新排序操作&#xff0c;并且這些操作都伴隨著動畫效果。這使得AnimatedList非常適合…

精釀啤酒:品質與口感在消費者選擇中的權重分析

在啤酒市場中&#xff0c;消費者選擇的影響因素眾多&#xff0c;其中品質與口感是兩個核心要素。對于Fendi club啤酒而言&#xff0c;品質與口感的權重分析在消費者選擇中顯得尤為重要。 品質是消費者選擇啤酒的首要因素。隨著消費者對啤酒認知的提高&#xff0c;他們對品質的…

德邦快遞和德邦物流運費標準哪個更劃算?怎樣才能便宜的寄大件快遞?

在寄大件包裹快遞時&#xff0c;我們一般都知道選擇德邦&#xff0c;那么德邦快遞和德邦物流的收費標準哪個更劃算呢&#xff1f;下面&#xff0c;讓我們一起來了解德邦快遞和德邦物流的收費標準&#xff0c;以及如何根據實際情況做出最佳選擇。 首先了解快遞費用構成 快遞費用…

Prometheus Operator創建告警規則并接入釘釘報警

prometheus之釘釘報警 前言1. 添加prometheus報警規則1.2 添加自定義報警規則文件 2. 配置釘釘報警2.2 部署dingding插件 3. 編寫alertmanager配置文件 前言 在kubenetes上安裝了kube-promethues&#xff08;包含Prometheus Operator&#xff09;,程序正常跑起來了&#xff0c…

IC開發——verdi基本用法

1. 基礎知識 1.1. verdi VCS和Verdi這兩個工具&#xff0c;這兩個工具目前都屬于synopsys公司。VCS主要負責編譯運行Testbench和RTL&#xff0c;并負責生成相應的波形文件。而verdi主要負責加載波形文件&#xff0c;查看信號的波形及其對應的代碼來進行調試驗證。Verdi最開始…

dimp導入提示 [警告]該工具不能解析此文件,請使用更高版本的工具

問題描述&#xff1a;dimp導入報錯 [dmdbalocalhost ~]$ dimp SYSDBA/Topnet_123\192.168.3.27:5241 FILEimp_exp.dmp LOGreport_ty_imp_20240528.log DIRECTORY/opt/dmdba LOG_WRITEY REMAP_SCHEMAreport:report_ty dimp V8[警告]文件"/opt/dmdba/report_ty_imp_2024052…

Linux 查找命令的操作,學完效率瞬間翻倍?

可以很肯定地說&#xff0c;find 命令是 Linux 運維必須熟知的操作之一。 讓我們看一道題&#xff1a; 如果你的 Linux 服務器上有一個名為 .logs 的目錄&#xff0c;如何刪除該目錄下最后一次訪問時間超過一年的日志文件呢&#xff1f; 這種情況很常見&#xff0c;但令人驚訝…