新農(nóng)村基礎(chǔ)設(shè)施建設(shè)網(wǎng)站國(guó)外十大免費(fèi)服務(wù)器和域名
文章目錄
- 前言
- 一、解決問(wèn)題
- 二、基本原理
- 三、?添加方法
- 四、總結(jié)
前言
作為當(dāng)前先進(jìn)的深度學(xué)習(xí)目標(biāo)檢測(cè)算法YOLOv8,已經(jīng)集合了大量的trick,但是還是有提高和改進(jìn)的空間,針對(duì)具體應(yīng)用場(chǎng)景下的檢測(cè)難點(diǎn),可以不同的改進(jìn)方法。此后的系列文章,將重點(diǎn)對(duì)YOLOv8的如何改進(jìn)進(jìn)行詳細(xì)的介紹,目的是為了給那些搞科研的同學(xué)需要?jiǎng)?chuàng)新點(diǎn)或者搞工程項(xiàng)目的朋友需要達(dá)到更好的效果提供自己的微薄幫助和參考。由于出到Y(jié)OLOv8,YOLOv7、YOLOv5算法2020年至今已經(jīng)涌現(xiàn)出大量改進(jìn)論文,這個(gè)不論對(duì)于搞科研的同學(xué)或者已經(jīng)工作的朋友來(lái)說(shuō),研究的價(jià)值和新穎度都不太夠了,為與時(shí)俱進(jìn),以后改進(jìn)算法以YOLOv7為基礎(chǔ),此前YOLOv5改進(jìn)方法在YOLOv7同樣適用,所以繼續(xù)YOLOv5系列改進(jìn)的序號(hào)。另外改進(jìn)方法在YOLOv5等其他算法同樣可以適用進(jìn)行改進(jìn)。希望能夠?qū)Υ蠹矣袔椭?/p>
具體改進(jìn)辦法請(qǐng)關(guān)注后私信留言!關(guān)注免費(fèi)領(lǐng)取深度學(xué)習(xí)算法學(xué)習(xí)資料!
一、解決問(wèn)題
卷積層用于提取圖像中的特征信息,傳統(tǒng)的矩形卷積通常使用固定的大小和比例的卷積核對(duì)特征圖的特定位置進(jìn)行特征學(xué)習(xí)和下采樣。但在同一特征層的不同位置對(duì)應(yīng)的是不同尺度和形狀的目標(biāo),因此,目標(biāo)檢測(cè)具有一定的局限性??勺冃尉矸e可根據(jù)對(duì)象的比例和形狀自適應(yīng)調(diào)整,變形卷積網(wǎng)絡(luò)提出的不規(guī)則卷積核,有效地克服了固定矩形結(jié)構(gòu)采樣不足的缺點(diǎn),提高了網(wǎng)絡(luò)對(duì)物體變形的模擬
能力。YOLO檢測(cè)網(wǎng)絡(luò)的卷積層為conv2D卷積+BN+Silu激活函數(shù),嘗試將卷積層的卷積改為可可形變卷積,引入可變形卷積,擴(kuò)大特征圖的感受野,使提取的特征辨析力更強(qiáng),有效地提高了模型的識(shí)別能力。
二、基本原理
原文鏈接
代碼鏈接
卷積神經(jīng)網(wǎng)絡(luò)(CNN)由于其構(gòu)建模塊中的固定幾何結(jié)構(gòu),固有地局限于模型幾何變換。在這項(xiàng)工作中,我們引入了兩個(gè)新模塊來(lái)增強(qiáng)神經(jīng)網(wǎng)絡(luò)的變換建模能力,即可變形卷積和可變形RoI池。這兩種方法都基于在模塊中增加額外偏移量的空間采樣位置,并從目標(biāo)任務(wù)中學(xué)習(xí)偏移量,而無(wú)需額外監(jiān)督的想法。新的模塊可以很容易地取代現(xiàn)有CNN中的普通模塊,并且可以通過(guò)標(biāo)準(zhǔn)反向傳播進(jìn)行端到端的訓(xùn)練,從而產(chǎn)生可變形的卷積網(wǎng)絡(luò)。廣泛的實(shí)驗(yàn)驗(yàn)證了我們的方法在復(fù)雜的視覺(jué)任務(wù)(對(duì)象檢測(cè)和語(yǔ)義分割)上的有效性。代碼將被發(fā)布。
三、?添加方法
第一步:先在common中定義模塊DCNConv,然后在yolo.py中注冊(cè)該模塊。部分代碼如下:
class DCNConv(nn.Module):# Standard convolutiondef __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True): # ch_in, ch_out, kernel, stride, padding, groupssuper().__init__()self.conv1 = nn.Conv2d(c1, c2, 3, 2, 1, groups=g, bias=False)deformable_groups = 1offset_channels = 18self.conv2_offset = nn.Conv2d(c2, deformable_groups * offset_channels, kernel_size=3, padding=1)self.conv2 = DeformConv2d(c2, c2, kernel_size=3, padding=1, bias=False)# self.conv2 = DeformableConv2d(c2, c2, k, s, autopad(k, p), groups=g, bias=False)self.bn1 = nn.BatchNorm2d(c2)self.act1 = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())self.bn2 = nn.BatchNorm2d(c2)self.act2 = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())
第二步:定義yaml網(wǎng)絡(luò)結(jié)構(gòu)文件。
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license# Parameters
nc: 4 # number of classes
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # layer channel multiple
anchors:- [10,13, 16,30, 33,23] # P3/8- [30,61, 62,45, 59,119] # P4/16- [116,90, 156,198, 373,326] # P5/32# YOLOv5 v6.0 backbone
backbone:# [from, number, module, args][[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2[-1, 1, DCNConv, [128, 3, 2]], # 1-P2/4[-1, 3, C3, [128]],[-1, 1, Conv, [256, 3, 2]], # 3-P3/8[-1, 6, C3, [256]],[-1, 1, Conv, [512, 3, 2]], # 5-P4/16[-1, 9, C3, [512]],[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32[-1, 3, C3, [1024]],[-1, 1, SPPF, [1024, 5]], # 9]# YOLOv5 v6.0 head
head:[[-1, 1, Conv, [512, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 6], 1, Concat, [1]], # cat backbone P4[-1, 3, C3, [512, False]], # 13[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 4], 1, Concat, [1]], # cat backbone P3[-1, 3, C3, [256, False]], # 17 (P3/8-small)[-1, 1, Conv, [256, 3, 2]],[[-1, 14], 1, Concat, [1]], # cat head P4[-1, 3, C3, [512, False]], # 20 (P4/16-medium)[-1, 1, Conv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]], # cat head P5[-1, 3, C3, [1024, False]], # 23 (P5/32-large)[[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)]
第三步:在train.py中選擇網(wǎng)絡(luò)結(jié)構(gòu)yaml即可。
四、總結(jié)
預(yù)告一下:下一篇內(nèi)容將繼續(xù)分享深度學(xué)習(xí)算法相關(guān)改進(jìn)方法。有興趣的朋友可以關(guān)注一下我,有問(wèn)題可以留言或者私聊我哦
PS:該方法不僅僅是適用改進(jìn)YOLOv5,也可以改進(jìn)其他的YOLO網(wǎng)絡(luò)以及目標(biāo)檢測(cè)網(wǎng)絡(luò),比如YOLOv7、v6、v4、v3,Faster rcnn ,ssd等。
最后,有需要的請(qǐng)關(guān)注私信我吧。關(guān)注免費(fèi)領(lǐng)取深度學(xué)習(xí)算法學(xué)習(xí)資料!
YOLO系列算法改進(jìn)方法 | 目錄一覽表
💡🎈??1. 添加SE注意力機(jī)制
💡🎈??2.添加CBAM注意力機(jī)制
💡🎈??3. 添加CoordAtt注意力機(jī)制
💡🎈??4. 添加ECA通道注意力機(jī)制
💡🎈??5. 改進(jìn)特征融合網(wǎng)絡(luò)PANET為BIFPN
💡🎈??6. 增加小目標(biāo)檢測(cè)層
💡🎈??7. 損失函數(shù)改進(jìn)
💡🎈??8. 非極大值抑制NMS算法改進(jìn)Soft-nms
💡🎈??9. 錨框K-Means算法改進(jìn)K-Means++
💡🎈??10. 損失函數(shù)改進(jìn)為SIOU
💡🎈??11. 主干網(wǎng)絡(luò)C3替換為輕量化網(wǎng)絡(luò)MobileNetV3
💡🎈??12. 主干網(wǎng)絡(luò)C3替換為輕量化網(wǎng)絡(luò)ShuffleNetV2
💡🎈??13. 主干網(wǎng)絡(luò)C3替換為輕量化網(wǎng)絡(luò)EfficientNetv2
💡🎈??14. 主干網(wǎng)絡(luò)C3替換為輕量化網(wǎng)絡(luò)Ghostnet
💡🎈??15. 網(wǎng)絡(luò)輕量化方法深度可分離卷積
💡🎈??16. 主干網(wǎng)絡(luò)C3替換為輕量化網(wǎng)絡(luò)PP-LCNet
💡🎈??17. CNN+Transformer——融合Bottleneck Transformers
💡🎈??18. 損失函數(shù)改進(jìn)為Alpha-IoU損失函數(shù)
💡🎈??19. 非極大值抑制NMS算法改進(jìn)DIoU NMS
💡🎈??20. Involution新神經(jīng)網(wǎng)絡(luò)算子引入網(wǎng)絡(luò)
💡🎈??21. CNN+Transformer——主干網(wǎng)絡(luò)替換為又快又強(qiáng)的輕量化主干EfficientFormer
💡🎈??22. 漲點(diǎn)神器——引入遞歸門(mén)控卷積(gnConv)
💡🎈??23. 引入SimAM無(wú)參數(shù)注意力
💡🎈??24. 引入量子啟發(fā)的新型視覺(jué)主干模型WaveMLP(可嘗試發(fā)SCI)
💡🎈??25. 引入Swin Transformer
💡🎈??26. 改進(jìn)特征融合網(wǎng)絡(luò)PANet為ASFF自適應(yīng)特征融合網(wǎng)絡(luò)
💡🎈??27. 解決小目標(biāo)問(wèn)題——校正卷積取代特征提取網(wǎng)絡(luò)中的常規(guī)卷積
💡🎈??28. ICLR 2022漲點(diǎn)神器——即插即用的動(dòng)態(tài)卷積ODConv
💡🎈??29. 引入Swin Transformer v2.0版本
💡🎈??30. 引入10月4號(hào)發(fā)表最新的Transformer視覺(jué)模型MOAT結(jié)構(gòu)
💡🎈??31. CrissCrossAttention注意力機(jī)制
💡🎈??32. 引入SKAttention注意力機(jī)制
💡🎈??33. 引入GAMAttention注意力機(jī)制
💡🎈??34. 更換激活函數(shù)為FReLU
💡🎈??35. 引入S2-MLPv2注意力機(jī)制
💡🎈??36. 融入NAM注意力機(jī)制
💡🎈??37. 結(jié)合CVPR2022新作ConvNeXt網(wǎng)絡(luò)
💡🎈??38. 引入RepVGG模型結(jié)構(gòu)
💡🎈??39. 引入改進(jìn)遮擋檢測(cè)的Tri-Layer插件 | BMVC 2022
💡🎈??40. 輕量化mobileone主干網(wǎng)絡(luò)引入
💡🎈??41. 引入SPD-Conv處理低分辨率圖像和小對(duì)象問(wèn)題
💡🎈??42. 引入V7中的ELAN網(wǎng)絡(luò)
💡🎈??43. 結(jié)合最新Non-local Networks and Attention結(jié)構(gòu)
💡🎈??44. 融入適配GPU的輕量級(jí) G-GhostNet
💡🎈??45. 首發(fā)最新特征融合技術(shù)RepGFPN(DAMO-YOLO)
💡🎈??46. 改進(jìn)激活函數(shù)為ACON
💡🎈??47. 改進(jìn)激活函數(shù)為GELU
💡🎈??48. 構(gòu)建新的輕量網(wǎng)絡(luò)—Slim-neck by GSConv(2022CVPR)
💡🎈??49. 模型剪枝、蒸餾、壓縮
💡🎈??50. 超越ConvNeXt!Conv2Former:用于視覺(jué)識(shí)別的Transformer風(fēng)格的ConvNet
💡🎈??51.融入多分支空洞卷積結(jié)構(gòu)RFB-Bottleneck改進(jìn)PANet構(gòu)成新特征融合網(wǎng)絡(luò)
💡🎈??52.將YOLOv8中的C2f模塊融入YOLOv5
💡🎈??53.融入CFPNet網(wǎng)絡(luò)中的ECVBlock模塊,提升小目標(biāo)檢測(cè)能力