YOLOv10全網最新創新點改進系列:融合GSConv+Slim Neck,雙改進、雙增強,替換特征融合層實現, 輕量化漲點改進策略,有效漲點神器!

YOLOv10全網最新創新點改進系列:融合GSConv+Slim Neck,雙改進、雙增強,替換特征融合層實現, 輕量化漲點改進策略,有效漲點神器!

所有改進代碼均經過實驗測試跑通!截止發稿時YOLOv10已改進40+!自己排列組合2-4種后,考慮位置不同后可排列組合上千萬種!改進不重樣!!專注AI學術,關注B站up主:Ai學術叫叫獸er!

購買相關資料后暢享一對一答疑

# YOLOv10全網最新創新點改進系列:融合GSConv+Slim Neck,雙改進、雙增強,替換特征融合層實現, 輕量化漲點改進策略,有效漲點神器!


詳細的改進教程以及源碼,戳這!戳這!!戳這!!!B站:AI學術叫叫獸 源碼在相簿的鏈接中,動態中也有鏈接,感謝支持!祝科研遙遙領先!

一、GSConv+Slim Neck概述

1.1 Slim Neck結構圖

在這里插入圖片描述

1.2 GSConv結構圖

在這里插入圖片描述

貢獻:作者提出了一種新方法 GSConv 來減輕模型的復雜度并保持準確性。GSConv可以更好地平衡模型的準確性和速度。并且,提供了一種設計范式Slim Neck,以實現檢測器更高的計算成本效益。
實驗過程中,與原始網絡相比,改進方法獲得了最優秀的檢測結果。
實驗結果如圖:
在這里插入圖片描述

開始改進YOLOv8+GSConv+Slim Neck!

二、YOLOv10+GSConv+Slim Neck

2.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# Parametersbackbone:# [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,GSConv, [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]]  # 9head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 6], 1, Concat, [1]]  # cat backbone P4- [-1, 3, VoVGSCSP, [512]]  # 12- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 4], 1, Concat, [1]]  # cat backbone P3- [-1, 3, VoVGSCSP, [256]]  # 15 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]]  # cat head P4- [-1, 3, VoVGSCSP, [512]]  # 18 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]]  # cat head P5- [-1, 3, VoVGSCSP, [1024]]  # 21 (P5/32-large)- [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)

在主干這里我只添加了一個GSConv模塊,根據實驗需要可以靈活配置(head同)!

2.2 新建SwinTransformer.py

核心代碼示例如下:

class GSConv(nn.Module):# GSConv https://github.com/AlanLi1997/slim-neck-by-gsconvdef __init__(self, c1, c2, k=1, s=1, g=1, act=True):super().__init__()c_ = c2 // 2self.cv1 = Conv(c1, c_, k, s, None, g, 1,  act)self.cv2 = Conv(c_, c_, 5, 1, None, c_, 1 , act)def forward(self, x):x1 = self.cv1(x)x2 = torch.cat((x1, self.cv2(x1)), 1)# shuffle# y = x2.reshape(x2.shape[0], 2, x2.shape[1] // 2, x2.shape[2], x2.shape[3])# y = y.permute(0, 2, 1, 3, 4)# return y.reshape(y.shape[0], -1, y.shape[3], y.shape[4])b, n, h, w = x2.data.size()b_n = b * n // 2y = x2.reshape(b_n, 2, h * w)y = y.permute(1, 0, 2)y = y.reshape(2, -1, n // 2, h, w)return torch.cat((y[0], y[1]), 1)class GSConvns(GSConv):# GSConv with a normative-shuffle https://github.com/AlanLi1997/slim-neck-by-gsconvdef __init__(self, c1, c2, k=1, s=1, g=1, act=True):super().__init__(c1, c2, k=1, s=1, g=1, act=True)c_ = c2 // 2self.shuf = nn.Conv2d(c_ * 2, c2, 1, 1, 0, bias=False)def forward(self, x):x1 = self.cv1(x)x2 = torch.cat((x1, self.cv2(x1)), 1)# normative-shuffle, TRT supportedreturn nn.ReLU(self.shuf(x2))class GSBottleneck(nn.Module):# GS Bottleneck https://github.com/AlanLi1997/slim-neck-by-gsconvdef __init__(self, c1, c2, k=3, s=1, e=0.5):super().__init__()c_ = int(c2*e)# for lightingself.conv_lighting = nn.Sequential(GSConv(c1, c_, 1, 1),GSConv(c_, c2, 3, 1, act=False))self.shortcut = Conv(c1, c2, 1, 1, act=False)def forward(self, x):return self.conv_lighting(x) + self.shortcut(x)class DWConv(Conv):# Depth-wise convolution classdef __init__(self, c1, c2, k=1, s=1, act=True):  # ch_in, ch_out, kernel, stride, padding, groupssuper().__init__(c1, c2, k, s, g=math.gcd(c1, c2), act=act)class VoVGSCSP(nn.Module):# VoVGSCSP module with GSBottleneckdef __init__(self, cx, c2, n=1, shortcut=True, g=1, e=0.5):super().__init__()c_ = int(c2 * e)  # hidden channelsself.cv1 = Conv(c1, c_, 1, 1)self.cv2 = Conv(c1, c_, 1, 1)# self.gc1 = GSConv(c_, c_, 1, 1)# self.gc2 = GSConv(c_, c_, 1, 1)# self.gsb = GSBottleneck(c_, c_, 1, 1)self.gsb = nn.Sequential(*(GSBottleneck(c_, c_, e=1.0) for _ in range(n)))self.res = Conv(c_, c_, 3, 1, act=False)self.cv3 = Conv(2 * c_, c2, 1)  #def forward(self, x):x1 = self.gsb(self.cv1(x))y = self.cv2(x)return self.cv3(torch.cat((y, x1), dim=1))class VoVGSCSPC(VoVGSCSP):# cheap VoVGSCSP module with GSBottleneckdef __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):super().__init__(c1, c2)c_ = int(c2 * 0.5)  # hidden channelsself.gsb = GSBottleneckC(c_, c_, 1, 1)

2.3 修改tasks.py

2.3.1 導包

from ultralytics.nn. SlimNeck import VoVGSCSP, VoVGSCSPC, GSConv

2.3.2 注冊(包含很多改進,不需要的可刪)

if m in (Classify, Conv, GGhostRegNet, ConvTranspose, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, Focus,BottleneckCSP, C1, C2, C2f, C3, C3TR, C3Ghost, nn.ConvTranspose2d, DWConvTranspose2d, C3x, RepC3, SEAttention,ContextAggregation, BoTNet, CBAM,LightConv,RepConv, SpatialAttention,Involution, CARAFE, VoVGSCSP, VoVGSCSPC,GSConv,HorBlock, SwinTransformer):

三、驗證是否成功即可

執行命令

python train.py

示例如圖:

在這里插入圖片描述

改完收工!
關注B站:AI學術叫叫獸
從此走上科研快速路
遙遙領先同行!!!!

詳細的改進教程以及源碼,戳這!戳這!!戳這!!!B站:AI學術叫叫獸 源碼在相簿的鏈接中,動態中也有鏈接,感謝支持!祝科研遙遙領先!
AI學術叫叫獸在這!家人們,給我遙遙領先!!!
[AI學術叫叫獸在這!家人們,給我遙遙領先!!!](https://space.bilibili.com/3546623938398505?plat_id=1&share_from=space&share_medium=android&share_plat=android&share_session_id=9ac46a33-0bcf-40d3-a9f8-3ff85e402116&share_source=COPY&share_tag=s_i&tim

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

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

相關文章

【數據結構】06.棧隊列

一、棧 1.1棧的概念及結構 棧:一種特殊的線性表,其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂,另一端稱為棧底。棧中的數據元素遵守后進先出LIFO(Last In First Out)的原則。 壓棧&#…

FPGA就業方向以及主要工作

FPGA(Field-Programmable Gate Array)作為可編程邏輯器件,在多個行業和領域中都有廣泛的應用。具備FPGA技能的專業人士可以在多個方向上找到就業機會,以下是FPGA主要的就業方向及其對應的主要工作職責: 通信行業 職位…

LangChain終極內幕指南,學會langchain就看它了

1.概述 在人工智能迅速演進的時代,諸如Open AI的ChatGPT和Google的Bard等大型語言模型(LLMs)正徹底改變我們與技術互動的方式。這些技術巨頭和SaaS公司正在競相利用LLMs的威力,創造更為智能和實用的應用程序。 然而,真正的變革并非僅僅停留…

低壓電工精選歷年真題附答案

1.當電壓為5V時,導體的電阻值為5歐,那么當電阻兩端電壓為2V時,導體的電阻值為()歐。[單選題] A 、10B、5(正確答案) C、2 2.當電氣火災發生時,應首先切斷電源再滅火,但當電源無法切斷時,只能帶電滅火&…

Finding and exploting an unused API endpoint

Using 0$ account buy a piece of lether priced at $133 1、嘗試訪問api接口 大概率可能訪問不到,但是可以嘗試訪問下 /api/swagger/v1 /openapi.json 2、頁面功能點尋找 api send to Repeter 3、Find Supported HTTP請求 POST方法測試 通過測試得知支持GET方法和PATC…

C語言實現的人員管理系統(順序表版)

該系統具有以下主要功能: 添加人員信息:在有空間的前提下,用戶輸入人員的工號、姓名、性別、聯系電話和 QQ 號等信息,系統會自動檢查編號的唯一性,確保不重復。查找人員信息:提供按工號和姓名兩種查找方式…

av_read_frame 代碼研究

------------------------------------------------------------ author: hjjdebug date: 2024年 07月 05日 星期五 11:02:51 CST av_read_frame 代碼研究 ------------------------------------------------------------ 有人只標注一層,標注一層太膚淺了.不能了解底層之精妙…

Lianwei 安全周報|2024.07.01

新的一周又開始了,以下是本周「Lianwei周報」,我們總結推薦了本周的政策/標準/指南最新動態、熱點資訊和安全事件,保證大家不錯過本周的每一個重點! 政策/標準/指南最新動態 01 出于安全考慮,拜登下令禁用卡巴斯基殺毒…

【康復學習--LeetCode每日一題】3115. 質數的最大距離

題目: 給你一個整數數組 nums。 返回兩個(不一定不同的)質數在 nums 中 下標 的 最大距離。 示例 1: 輸入: nums [4,2,9,5,3] 輸出: 3 解釋: nums[1]、nums[3] 和 nums[4] 是質數。因此答案是…

SpringBoot各類數量限制及超出后拋出的異常

前言 在使用SpringBoot開發接口時,動不動的就發生各種超過默認值的限制,這里總結了下SpringBoot默認限制的設置以及可能會發生的異常,便于問題的排查和快速修改默認值。 配置項配置項說明默認值超過大小后拋出的異常spring.servlet.multipa…

系統管理(System Keeping):全新迭代,優化您的開發體驗

隨著科技的不斷進步和用戶需求的日益增長,系統管理(System Keeping)不斷進行迭代更新,致力于為用戶帶來更加高效、便捷的開發體驗。本次全新迭代,不僅在界面與交互上進行了革新,更在功能整合、個性化與安全…

ECOLOGY9重置系統管理員密碼

ECOLOGY9系統管理員密碼忘記需要重置: 1、KB2110之后版本加了防篡改邏輯,數據庫中初始話密碼需要將hashdata、signdata更新為空,執行如下語句初始化 update HrmResourceManager set password ‘C4CA4238A0B923820DCC509A6F75849B’,salt‘’…

Android --- Service

出自于此,寫得很清楚。關于Android Service真正的完全詳解,你需要知道的一切_android service-CSDN博客 出自【zejian的博客】 什么是Service? Service(服務)是一個一種可以在后臺執行長時間運行操作而沒有用戶界面的應用組件。 服務可由其他應用組件…

萬字長文|關于 OpenAI 接口開發你應該知道的一切

這篇文章中個人結合自己的實踐經驗把 OpenAI 官方文檔解讀一遍。但是原文檔涉及內容眾多,包括微調,嵌入(Embeddings)等眾多主題,我這里重點挑選自己開發高頻使用到的,需要詳細了解的可以自行前往官網閱讀。…

Java中的文本搜索與全文檢索引擎

Java中的文本搜索與全文檢索引擎 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 在現代應用程序中,處理和搜索大量文本數據是一項關鍵任務。傳統的…

2024科技文化節程序設計競賽

補題鏈接 https://www.luogu.com.cn/contest/178895#problems A. 簽到題 忽略掉大小為1的環&#xff0c;答案是剩下環的大小和減環的數量 #include<bits/stdc.h> #include<iostream> #include<cstdio> #include<vector> #include<map> #incl…

c進階篇(四):內存函數

內存函數以字節為單位更改 1.memcpy memcpy 是 C/C 中的一個標準庫函數&#xff0c;用于內存拷貝操作。它的原型通常定義在 <cstring> 頭文件中&#xff0c;其作用是將一塊內存中的數據復制到另一塊內存中。 函數原型&#xff1a;void *memcpy(void *dest, const void…

多模態融合算法應用:CT + 臨床文本數據 + pyradiomics提取到的圖像特征

多模態融合算法應用 CT 臨床文本數據 pyradiomics提取圖像特征 單模態建模臨床數據建模pyradiomics提取圖像特征建模CT建模 多模態建模前融合為什么能直接合并在一起&#xff1f; 后融合Med-CLIP&#xff1a;深度學習 可解釋性 單模態建模 臨床數據建模 臨床文本數據&…

WPF Menu實現快捷鍵操作

很多小伙伴說&#xff0c;在Menu中&#xff0c;實現單個快捷鍵操作很簡單&#xff0c;怎么實現多個快捷鍵操作和&#xff0c;組合快捷鍵呢&#xff0c;今天他來了。 上代碼和效果圖 一、Ctrl Shift 任意子母鍵實現快捷鍵組合 <Window x:Class"XH.TemplateLesson.M…

【測試開發】【postman】按順序循環執行接口

postman按順序循環執行接口 新建接口接口排序執行請求集合 新建接口 Request 001 Request 002 Request 003 接口排序 在Request 001的Tests中添加代碼 postman.setNextRequest("Request 002");在Request 002的Tests中添加代碼 postman.setNextRequest("Requ…