paper: YOLOX: Exceeding YOLO Series in 2021
code: Megvii-BaseDetection/YOLOX
一什往、改進(jìn)點(diǎn)
1.1 特征使用了Focus網(wǎng)絡(luò)結(jié)構(gòu)扳缕、CSPDarknet以及SPPNet
Focus
CSPnet
使用CSPnet網(wǎng)絡(luò)結(jié)構(gòu),CSPnet結(jié)構(gòu)并不算復(fù)雜,就是將原來的殘差塊的堆疊進(jìn)行了一個(gè)拆分躯舔,拆成左右兩部分:主干部分繼續(xù)進(jìn)行原來的殘差塊的堆疊驴剔;另一部分則像一個(gè)殘差邊一樣,經(jīng)過少量處理直接連接到最后粥庄。因此可以認(rèn)為CSP中存在一個(gè)大的殘差邊丧失。
CSPDarkNet
對于
SPP
模型結(jié)構(gòu)如下:
class SPPBottleneck(nn.Module):
def __init__(self, in_channels, out_channels, kernel_sizes=(5, 9, 13), activation="silu"):
super().__init__()
hidden_channels = in_channels // 2
self.conv1 = BaseConv(in_channels, hidden_channels, 1, stride=1, act=activation)
self.m = nn.ModuleList([nn.MaxPool2d(kernel_size=ks, stride=1, padding=ks // 2) for ks in kernel_sizes])
conv2_channels = hidden_channels * (len(kernel_sizes) + 1)
self.conv2 = BaseConv(conv2_channels, out_channels, 1, stride=1, act=activation)
def forward(self, x):
x = self.conv1(x)
x = torch.cat([x] + [m(x) for m in self.m], dim=1)
x = self.conv2(x)
return x
1.2 分類回歸層修改
分類回歸層:Decoupled Head,以前版本的Yolo所用的解耦頭是一起的惜互,也就是分類和回歸在一個(gè)1X1卷積里實(shí)現(xiàn)布讹,YoloX認(rèn)為這給網(wǎng)絡(luò)的識別帶來了不利影響。在YoloX中训堆,Yolo Head被分為了兩部分描验,分別實(shí)現(xiàn),最后預(yù)測的時(shí)候才整合在一起蔫慧。
1.3 Mosaic數(shù)據(jù)增強(qiáng)
1.4 Anchor Free:不使用先驗(yàn)框挠乳。
1.5 SimOTA :為不同大小的目標(biāo)動(dòng)態(tài)匹配正樣本权薯。
參考:
[1] 睿智的目標(biāo)檢測53——Pytorch搭建YoloX目標(biāo)檢測平臺
[2] YoloX-Focus網(wǎng)絡(luò)