前言
作為當前先進的深度學習目標檢測算法YOLOv8,已經(jīng)集合了大量的trick,但是還是有提高和改進的空間,針對具體應用場景下的檢測難點,可以不同的改進方法。此后的系列文章,將重點對YOLOv8的如何改進進行詳細的介紹,目的是為了給那些搞科研的同學需要創(chuàng)新點或者搞工程項目的朋友需要達到更好的效果提供自己的微薄幫助和參考。由于出到Y(jié)OLOv8,YOLOv7、YOLOv5算法2020年至今已經(jīng)涌現(xiàn)出大量改進論文,這個不論對于搞科研的同學或者已經(jīng)工作的朋友來說,研究的價值和新穎度都不太夠了,為與時俱進,以后改進算法以YOLOv7為基礎,此前YOLOv5改進方法在YOLOv7同樣適用,所以繼續(xù)YOLOv5系列改進的序號。另外改進方法在YOLOv5等其他目標檢測算法同樣可以適用進行改進。希望能夠?qū)Υ蠹矣袔椭?/p>
一、解決問題
這篇文章提出的方法主要用于遙感圖像檢測中,通過提出上下文聚合網(wǎng)絡(CATNet)來改善特征提取過程,對于遙感圖像中的小目標會有一定的效果,嘗試引入YOLO系列算法中,提高檢測效果。
二、基本原理
原文鏈接:?2111.11057.pdf (arxiv.org)
代碼鏈接:CATNet/scp.py at main · yeliudev/CATNet · GitHub
摘要:遠程感知圖像中的實例分割任務旨在執(zhí)行實例級別的像素級別標記,對于各種民用應用非常重要。盡管之前已經(jīng)取得了成功,但是大多數(shù)現(xiàn)有的針對自然圖像設計的實例分割方法在直接應用于俯視遠程感知圖像時遇到了嚴重的性能下降。經(jīng)過仔細分析,我們發(fā)現(xiàn)這些挑戰(zhàn)主要來自于缺乏具有區(qū)分度的目標特征,原因是受到嚴重的尺度變化、低對比度和聚集分布的影響。為了解決這些問題,提出了一種新的上下文聚合網(wǎng)絡(CATNet)來改善特征提取過程。所提出的模型利用三個輕量級的即插即用模塊,分別是密集特征金字塔網(wǎng)絡(DenseFPN)、空間上下文金字塔(SCP)和分層感興趣區(qū)提取器(HRoIE),在特征、空間和實例域中聚合全局視覺上下文。DenseFPN是一個多尺度特征傳播模塊,通過采用層內(nèi)殘差連接、層間稠密連接和特征重新加權策略,建立了更加靈活的信息流。利用注意機制,SCP通過將全局空間上下文聚合到本地區(qū)域中進一步增強特征。對于每個實例,HRoIE自適應地生成用于不同下游任務的RoI特征。我們在具有挑戰(zhàn)性的iSAID、DIOR、NWPU VHR-10和HRSID數(shù)據(jù)集上對所提出的方案進行了廣泛評估。評估結(jié)果表明,在類似的計算成本下,所提出的方法優(yōu)于現(xiàn)有的最先進技術。
?將上下文的概念擴展和明確分離為特征、空間和實例域,從而在遠程感知圖像分割中實現(xiàn)了卓越的性能。據(jù)我們所知,這是第一篇考慮超越空間依賴性的全局視覺上下文的研究。所提出的CATNet可以利用DenseFPN、SCP和HRoIE從不同域中學習和聚合全局視覺上下文,用于遠程感知圖像的目標檢測和實例分割。所提出的方案已在各種數(shù)據(jù)集上進行了測試,包括iSAID、DIOR、NWPU VHR-10和HRSID,并且在類似的計算成本下獲得了新的最先進性能。
?在iSAID、DIOR、NWPU VHR-10和HRSID數(shù)據(jù)集上對所提出的方法進行了廣泛評估。首先在iSAID數(shù)據(jù)集上進行實例分割任務的模塊評估,然后在DIOR和NWPU VHR-10數(shù)據(jù)集上進行目標檢測任務,以展示在光學遙感圖像中的有效性。我們還使用HRSID數(shù)據(jù)集驗證了在SAR圖像中的泛化能力。
?三、?添加方法
原論文提出的CATnet中的ContextAggregation模塊代碼如下所示:
import torch
import torch.nn as nn
from mmcv.cnn import ConvModule, caffe2_xavier_init, constant_init
from mmcv.runner import BaseModule, auto_fp16
from mmdet.models import NECKS
class ContextAggregation(nn.Module):
"""
Context Aggregation Block.
Args:
in_channels (int): Number of input channels.
reduction (int, optional): Channel reduction ratio. Default: 1.
conv_cfg (dict or None, optional): Config dict for the convolution
layer. Default: None.
"""
def __init__(self, in_channels, reduction=1, conv_cfg=None):
super(ContextAggregation, self).__init__()
self.in_channels = in_channels
self.reduction = reduction
self.inter_channels = max(in_channels // reduction, 1)
conv_params = dict(kernel_size=1, conv_cfg=conv_cfg, act_cfg=None)
self.a = ConvModule(in_channels, 1, **conv_params)
self.k = ConvModule(in_channels, 1, **conv_params)
self.v = ConvModule(in_channels, self.inter_channels, **conv_params)
self.m = ConvModule(self.inter_channels, in_channels, **conv_params)
self.init_weights()
def init_weights(self):
for m in (self.a, self.k, self.v):
caffe2_xavier_init(m.conv)
constant_init(self.m.conv, 0)
def forward(self, x):
n, c = x.size(0), self.inter_channels
# a: [N, 1, H, W]
a = self.a(x).sigmoid()
# k: [N, 1, HW, 1]
k = self.k(x).view(n, 1, -1, 1).softmax(2)
# v: [N, 1, C, HW]
v = self.v(x).view(n, 1, c, -1)
# y: [N, C, 1, 1]
y = torch.matmul(v, k).view(n, c, 1, 1)
y = self.m(y) * a
return x + y
改進后運行的網(wǎng)絡層數(shù)以及參數(shù)如下所示,博主是在NWPU VHR-10遙感數(shù)據(jù)集進行訓練測試,實驗是有提升效果的。具體獲取辦法可私信獲取改進后的YOLO項目百度鏈接。
四、總結(jié)
預告一下:下一篇內(nèi)容將繼續(xù)分享深度學習算法相關改進方法。有興趣的朋友可以關注一下我,有問題可以留言或者私聊我哦文章來源:http://www.zghlxwxcb.cn/news/detail-669609.html
PS:該方法不僅僅是適用改進YOLOv5,也可以改進其他的YOLO網(wǎng)絡以及目標檢測網(wǎng)絡,比如YOLOv7、v6、v4、v3,F(xiàn)aster rcnn ,ssd等。文章來源地址http://www.zghlxwxcb.cn/news/detail-669609.html
最后,有需要的請關注私信我吧。關注免費領取深度學習算法學習資料!
YOLO系列算法改進方法 | 目錄一覽表
到了這里,關于YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改進【NO.69】針對遙感圖像目標檢測中的小目標進行改進CATnet(ContextAggregation模塊)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!