目標檢測,SOTA>>>在打開yolov4文檔前你必須要知道的幾個tricks

一. bags of specials

 

1. swish激活函數

f(x) = x • sigmoid(x)

 

2. Mish 激活函數

 

 

 

3. spatial pyramid pooling(SPP)

citehttps://arxiv.org/abs/1406.4729

傳統的卷積神經網絡,對輸入圖像的大小有嚴格要求,例如LeNet5只能爲224x224,這要求我們在使用網絡前需要對圖像進行一些預處理操作.爲了解決這個麻煩,何愷明發明瞭SPP這個局部結構,把SPP放在卷積層和全連接層之間,從而很好地解決了這個問題.

下面是一個例子:

 

圖像經過卷積層,來到全連接層前面, 在input image size不確定的情況下(可能224x224,可能256x448),它經過層層卷積處理後的輸出,即一組feature map的數量是固定的,只是feature map size 不確定.然而接下來的全連接層的輸入量是固定的(4096), 我們對這些feature maps進行以下處理再輸入到全連接層裏:

假設有256張feature map

對256張feature map分別進行如圖所示的三種max-pooling,控制三種max-pooling的輸出嚴格爲4x4 size, 2x2 size, 1x1 size, 將這些輸出cancatenate到一起作爲全連接層的輸入.如上操作即爲SPP處理.

4. 特徵融合Feature Pyramid Network (FPN)

citehttps://arxiv.org/abs/1612.03144

 

 

 

5. Squeeze-and-Excitation(SE)

citehttps://arxiv.org/abs/1709.01507 

一種channel-wise的注意力機制

下圖從U的輸出到X的輸出這段即爲SE

直接說,

Squeeze:  先對U做一個global average pooling

Excitation: 輸出的1x1xC數據做兩級全連接,最後sigmoid限制到[0,1]的範圍.

Scale:        然後把這個值對應着乘到U的C個通道上,作爲下一級的輸入.

 

兩個例子:

 

 

6.Spatial Attention Module

一種point-wise的注意力機制

對feature maps, 分別從通道維度進行求平均值和求最大, 合併得到一個通道數爲2的卷積層,然後通過一個卷積,得到一個通道數爲1的spatial attention.

直觀圖示:

準確代碼實現:

#cite https://zhuanlan.zhihu.com/p/102035273

class SpatialAttention(nn.Module):
    def __init__(self, kernel_size=7):
        super(SpatialAttention, self).__init__()
        assert kernel_size in (3,7), "kernel size must be 3 or 7"
        padding = 3 if kernel_size == 7 else 1

        self.conv = nn.Conv2d(2,1,kernel_size, padding=padding, bias=False)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        avgout = torch.mean(x, dim=1, keepdim=True)
        maxout, _ = torch.max(x, dim=1, keepdim=True)
        x = torch.cat([avgout, maxout], dim=1)
        x = self.conv(x)
        return self.sigmoid(x)

 

yolov4中作了微調,改爲了

  

 

 

9. PAN

 

yolov4中用到的微調的PAN

 

二. bags of freebies

1. dropblock正則化

2. 跨批量歸一化Cross mini-batch Normalization

3.CIoU loss

4. class label smoothing

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章