欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Yolov5更換BiFPN的詳細步驟總結(jié)

 更新時間:2022年12月19日 15:17:28   作者:迪菲赫爾曼  
將YOLOv5中的PANet層修改為EfficientDet-BiFPN,實現(xiàn)自上而下與自下而上的深淺層特征雙向融合,明顯提升YOLOv5算法檢測精度,下面這篇文章主要給大家介紹了關(guān)于Yolov5更換BiFPN的詳細步驟,需要的朋友可以參考下

Yolov5如何更換BiFPN?

第一步:修改common.py

將如下代碼添加到common.py文件中

# BiFPN 
# 兩個特征圖add操作
class BiFPN_Add2(nn.Module):
    def __init__(self, c1, c2):
        super(BiFPN_Add2, self).__init__()
        # 設(shè)置可學習參數(shù) nn.Parameter的作用是:將一個不可訓練的類型Tensor轉(zhuǎn)換成可以訓練的類型parameter
        # 并且會向宿主模型注冊該參數(shù) 成為其一部分 即model.parameters()會包含這個parameter
        # 從而在參數(shù)優(yōu)化的時候可以自動一起優(yōu)化
        self.w = nn.Parameter(torch.ones(2, dtype=torch.float32), requires_grad=True)
        self.epsilon = 0.0001
        self.conv = nn.Conv2d(c1, c2, kernel_size=1, stride=1, padding=0)
        self.silu = nn.SiLU()

    def forward(self, x):
        w = self.w
        weight = w / (torch.sum(w, dim=0) + self.epsilon)
        return self.conv(self.silu(weight[0] * x[0] + weight[1] * x[1]))


# 三個特征圖add操作
class BiFPN_Add3(nn.Module):
    def __init__(self, c1, c2):
        super(BiFPN_Add3, self).__init__()
        self.w = nn.Parameter(torch.ones(3, dtype=torch.float32), requires_grad=True)
        self.epsilon = 0.0001
        self.conv = nn.Conv2d(c1, c2, kernel_size=1, stride=1, padding=0)
        self.silu = nn.SiLU()

    def forward(self, x):
        w = self.w
        weight = w / (torch.sum(w, dim=0) + self.epsilon)  
        # Fast normalized fusion
        return self.conv(self.silu(weight[0] * x[0] + weight[1] * x[1] + weight[2] * x[2]))

第二步:修改yolo.py

parse_model函數(shù)中找到elif m is Concat:語句,在其后面加上BiFPN_Add相關(guān)語句

elif m is Concat:
    c2 = sum(ch[x] for x in f)
# 添加bifpn_add結(jié)構(gòu)
elif m in [BiFPN_Add2, BiFPN_Add3]:
    c2 = max([ch[x] for x in f])

第三步:修改train.py

將BiFPN_Add2和BiFPN_Add3函數(shù)中定義的w參數(shù),加入g1

g = [], [], []  # optimizer parameter groups
    bn = tuple(v for k, v in nn.__dict__.items() if 'Norm' in k)  # normalization layers, i.e. BatchNorm2d()
    for v in model.modules():
        # hasattr: 測試指定的對象是否具有給定的屬性,返回一個布爾值
        if hasattr(v, 'bias') and isinstance(v.bias, nn.Parameter):  # bias
            g[2].append(v.bias)
        if isinstance(v, bn):  # weight (no decay)
            g[1].append(v.weight)
        elif hasattr(v, 'weight') and isinstance(v.weight, nn.Parameter):  # weight (with decay)
            g[0].append(v.weight)
        # BiFPN_Concat
        elif isinstance(v, BiFPN_Add2) and hasattr(v, 'w') and isinstance(v.w, nn.Parameter):
            g[1].append(v.w)
        elif isinstance(v, BiFPN_Add3) and hasattr(v, 'w') and isinstance(v.w, nn.Parameter):
            g[1].append(v.w)

導入BiFPN_Add3, BiFPN_Add2

from models.common import BiFPN_Add3, BiFPN_Add2

第四步:修改yolov5.yaml

Concat全部換成BiFPN_Add

注意:BiFPN_Add本質(zhì)是add操作,因此輸入層通道數(shù)、feature map要完全對應

2022.8.25 官方也提供了BiFPN,可以嘗試用官方的
關(guān)于5m加BiFPN的文件我已經(jīng)更新到了我的Git

總結(jié)

到此這篇關(guān)于Yolov5更換BiFPN的文章就介紹到這了,更多相關(guān)Yolov5更換BiFPN內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python爬蟲之必備chardet庫

    Python爬蟲之必備chardet庫

    這篇文章主要介紹了Python爬蟲之必備chardet庫,文中有非常詳細的代碼示例,對正在學習python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python常用斷言函數(shù)實例匯總

    Python常用斷言函數(shù)實例匯總

    這篇文章主要介紹了Python常用斷言函數(shù)實例匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • python編程實現(xiàn)12306的一個小爬蟲實例

    python編程實現(xiàn)12306的一個小爬蟲實例

    這篇文章主要介紹了python編程實現(xiàn)12306的一個小爬蟲實例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • python日期與時間戳的各種轉(zhuǎn)換示例

    python日期與時間戳的各種轉(zhuǎn)換示例

    這篇文章主要介紹了python日期與時間戳的各種轉(zhuǎn)換示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • python提取word文件中的所有圖片

    python提取word文件中的所有圖片

    辦公中,偶爾會碰到一種情況,需要提取word文檔中的圖片,決定寫這樣一款工具自動提取圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 詳解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和區(qū)別

    詳解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和區(qū)別

    這篇文章主要介紹了詳解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • pytorch中使用cuda擴展的實現(xiàn)示例

    pytorch中使用cuda擴展的實現(xiàn)示例

    這篇文章主要介紹了pytorch中使用cuda擴展的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • python的幾種矩陣相乘的公式詳解

    python的幾種矩陣相乘的公式詳解

    這篇文章主要介紹了python的幾種矩陣相乘的公式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • 解讀等值線圖的Python繪制方法

    解讀等值線圖的Python繪制方法

    這篇文章主要介紹了解讀等值線圖的Python繪制方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Django REST framework 單元測試實例解析

    Django REST framework 單元測試實例解析

    這篇文章主要介紹了Django REST framework 單元測試實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11

最新評論