最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

YOLOv5中SPP/SPPF結(jié)構(gòu)源碼詳析(內(nèi)含注釋分析)

 更新時(shí)間:2022年05月10日 09:58:28   作者:tt丫  
其實(shí)關(guān)于YOLOv5的網(wǎng)絡(luò)結(jié)構(gòu)其實(shí)網(wǎng)上相關(guān)的講解已經(jīng)有很多了,但是覺(jué)著還是有必要再給大家介紹下,下面這篇文章主要給大家介紹了關(guān)于YOLOv5中SPP/SPPF結(jié)構(gòu)源碼的相關(guān)資料,需要的朋友可以參考下

一、SPP的應(yīng)用的背景

在卷積神經(jīng)網(wǎng)絡(luò)中我們經(jīng)??吹焦潭ㄝ斎氲脑O(shè)計(jì),但是如果我們輸入的不能是固定尺寸的該怎么辦呢?

通常來(lái)說(shuō),我們有以下幾種方法:

(1)對(duì)輸入進(jìn)行resize操作,讓他們統(tǒng)統(tǒng)變成你設(shè)計(jì)的層的輸入規(guī)格那樣。但是這樣過(guò)于暴力直接,可能會(huì)丟失很多信息或者多出很多不該有的信息(圖片變形等),影響最終的結(jié)果。

(2)替換網(wǎng)絡(luò)中的全連接層,對(duì)最后的卷積層使用global average pooling,全局平均池化只和通道數(shù)有關(guān),而與特征圖大小沒(méi)有關(guān)系

(3)最后一個(gè)當(dāng)然是我們要講的SPP結(jié)構(gòu)啦~

二、SPP結(jié)構(gòu)分析

SPP結(jié)構(gòu)又被稱(chēng)為空間金字塔池化,能將任意大小的特征圖轉(zhuǎn)換成固定大小的特征向量。

接下來(lái)我們來(lái)詳述一下SPP是怎么處理滴~

輸入層:首先我們現(xiàn)在有一張任意大小的圖片,其大小為w * h。

輸出層:21個(gè)神經(jīng)元 -- 即我們待會(huì)希望提取到21個(gè)特征。

分析如下圖所示:分別對(duì)1 * 1分塊,2 * 2分塊和4 * 4子圖里分別取每一個(gè)框內(nèi)的max值(即取藍(lán)框框內(nèi)的最大值),這一步就是作最大池化,這樣最后提取出來(lái)的特征值(即取出來(lái)的最大值)一共有1 * 1 + 2 * 2 + 4 * 4 = 21個(gè)。得出的特征再concat在一起。

而在YOLOv5中SPP的結(jié)構(gòu)圖如下圖所示:

其中,前后各多加一個(gè)CBL,中間的kernel size分別為1 * 1,5 * 5,9 * 9和13 * 13。

三、SPPF結(jié)構(gòu)分析

(x,y1這些是啥請(qǐng)看下面的代碼)

四、YOLOv5中SPP/SPPF結(jié)構(gòu)源碼解析(內(nèi)含注釋分析)

代碼注釋與上圖的SPP結(jié)構(gòu)相對(duì)應(yīng)。

class SPP(nn.Module):
    def __init__(self, c1, c2, k=(5, 9, 13)):#這里5,9,13,就是初始化的kernel size
        super().__init__()
        c_ = c1 // 2  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)#這里對(duì)應(yīng)第一個(gè)CBL
        self.cv2 = Conv(c_ * (len(k) + 1), c2, 1, 1)#這里對(duì)應(yīng)SPP操作里的最后一個(gè)CBL
        self.m = nn.ModuleList([nn.MaxPool2d(kernel_size=x, stride=1, padding=x // 2) for x in k])
        #這里對(duì)應(yīng)SPP核心操作,對(duì)5 * 5分塊,9 * 9分塊和13 * 13子圖分別取最大池化
 
    def forward(self, x):
        x = self.cv1(x)
        with warnings.catch_warnings():
            warnings.simplefilter('ignore')  # suppress torch 1.9.0 max_pool2d() warning忽略警告
            return self.cv2(torch.cat([x] + [m(x) for m in self.m], 1))
            #torch.cat對(duì)應(yīng)concat

SPPF結(jié)構(gòu)

class SPPF(nn.Module):
    # Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher
    def __init__(self, c1, c2, k=5):  # equivalent to SPP(k=(5, 9, 13))
        super().__init__()
        c_ = c1 // 2  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c_ * 4, c2, 1, 1)
        self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)
 
    def forward(self, x):
        x = self.cv1(x)#先通過(guò)CBL進(jìn)行通道數(shù)的減半
        with warnings.catch_warnings():
            warnings.simplefilter('ignore')  # suppress torch 1.9.0 max_pool2d() warning
            y1 = self.m(x)
            y2 = self.m(y1)
            #上述兩次最大池化
            return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))
            #將原來(lái)的x,一次池化后的y1,兩次池化后的y2,3次池化的self.m(y2)先進(jìn)行拼接,然后再CBL

總結(jié)

到此這篇關(guān)于YOLOv5中SPP/SPPF結(jié)構(gòu)源碼詳析的文章就介紹到這了,更多相關(guān)YOLOv5 SPP/SPPF結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django模型中字段屬性choice使用說(shuō)明

    Django模型中字段屬性choice使用說(shuō)明

    這篇文章主要介紹了Django模型中字段屬性choice使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • python3.5繪制隨機(jī)漫步圖

    python3.5繪制隨機(jī)漫步圖

    這篇文章主要為大家詳細(xì)介紹了python3.5繪制隨機(jī)漫步圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • python 使用元類(lèi)type創(chuàng)建類(lèi)

    python 使用元類(lèi)type創(chuàng)建類(lèi)

    這篇文章主要介紹了Python 使用元類(lèi)type創(chuàng)建類(lèi),結(jié)合實(shí)例形式詳細(xì)分析了Python元類(lèi)的概念、功能及元類(lèi)type創(chuàng)建類(lèi)對(duì)象的常見(jiàn)應(yīng)用技巧,需要的朋友可以參考一下文章的具體內(nèi)容。希望對(duì)你有所幫助
    2021-10-10
  • Python 使用office365郵箱的示例

    Python 使用office365郵箱的示例

    這篇文章主要介紹了Python 使用office365郵箱的示例,幫助大家利用python進(jìn)行高效辦公,感興趣的朋友可以了解下
    2020-10-10
  • python基礎(chǔ)之變量和數(shù)據(jù)類(lèi)型

    python基礎(chǔ)之變量和數(shù)據(jù)類(lèi)型

    這篇文章主要介紹了python的變量和數(shù)據(jù)類(lèi)型,實(shí)例分析了Python中返回一個(gè)返回值與多個(gè)返回值的方法,需要的朋友可以參考下
    2021-10-10
  • Python中defaultdict與dict的差異詳情

    Python中defaultdict與dict的差異詳情

    這篇文章主要介紹了Python中defaultdict與dict的差異,在collections模塊中的defauldict使用時(shí)與dict有何不同,為何我們用dict中的key值不存在時(shí)會(huì)報(bào)錯(cuò),而defaudict不會(huì)報(bào)錯(cuò),下面文章做出解答,需要的朋友可以參考一下
    2021-11-11
  • python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋

    python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)網(wǎng)絡(luò)五子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • python使用pycharm環(huán)境調(diào)用opencv庫(kù)

    python使用pycharm環(huán)境調(diào)用opencv庫(kù)

    這篇文章主要介紹了python使用pycharm環(huán)境調(diào)用opencv庫(kù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • 簡(jiǎn)單了解OpenCV是個(gè)什么東西

    簡(jiǎn)單了解OpenCV是個(gè)什么東西

    這篇文章主要介紹了簡(jiǎn)單了解OpenCV是什么,結(jié)合了幾篇相關(guān)文章的介紹,還是比較不錯(cuò)的,希望大家在閱讀過(guò)之后,會(huì)對(duì)OpenCV有一個(gè)簡(jiǎn)單了解。
    2017-11-11
  • 在自動(dòng)化中用python實(shí)現(xiàn)鍵盤(pán)操作的方法詳解

    在自動(dòng)化中用python實(shí)現(xiàn)鍵盤(pán)操作的方法詳解

    今天小編就為大家分享一篇在自動(dòng)化中用python實(shí)現(xiàn)鍵盤(pán)操作的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07

最新評(píng)論

恩施市| 罗定市| 义马市| 曲麻莱县| 平阳县| 阿城市| 辽源市| 太仓市| 丹巴县| 西藏| 精河县| 五大连池市| 东山县| 前郭尔| 铅山县| 大兴区| 饶平县| 平乡县| 股票| 蒙山县| 綦江县| 迭部县| 册亨县| 泗阳县| 嘉黎县| 信阳市| 宁远县| 如皋市| 茂名市| 彩票| 七台河市| 贵定县| 巢湖市| 喀喇| 沙河市| 纳雍县| 伊吾县| 新巴尔虎左旗| 丘北县| 彰化市| 旌德县|