最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

你的 ResNet 是時(shí)候更新了 —— ResNeSt 來(lái)也!

2020-11-12 14:12 作者:深藍(lán)學(xué)院  | 我要投稿

作者簡(jiǎn)介

CW,廣東深圳人,畢業(yè)于中山大學(xué)(SYSU)數(shù)據(jù)科學(xué)與計(jì)算機(jī)學(xué)院,畢業(yè)后就業(yè)于騰訊計(jì)算機(jī)系統(tǒng)有限公司技術(shù)工程與事業(yè)群(TEG)從事Devops工作,期間在AI LAB實(shí)習(xí)過(guò),實(shí)操過(guò)道路交通元素與醫(yī)療病例圖像分割、視頻實(shí)時(shí)人臉檢測(cè)與表情識(shí)別、OCR等項(xiàng)目。

目前也有在一些自媒體平臺(tái)上參與外包項(xiàng)目的研發(fā)工作,項(xiàng)目專注于CV領(lǐng)域(傳統(tǒng)圖像處理與深度學(xué)習(xí)方向均有)。

前言

趕在4月末,終于有時(shí)間寫文了,最近工作上需求比較急,抽不出時(shí)間來(lái)更文,但我心早已狂熱!在我敲上這行字的過(guò)程中,真的很開(kāi)心,因?yàn)檎嫘暮芟硎苓@種靜靜地碼字向別人分享知識(shí)的時(shí)光(雖然不知道有沒(méi)有人看..)。如今就為大家奉上這個(gè)新鮮出爐的新品?——?ResNeSt

文末可獲取相關(guān)Paper&源碼鏈接

你沒(méi)看錯(cuò),是?ResNeSt?而不是 ResNet 喲!這是張航、李沐等大佬創(chuàng)造的 ResNet 改進(jìn)版,在參數(shù)量沒(méi)有顯著增加的情況下顯著提升了性能,并且可以很方便地如 ResNet 般集成到現(xiàn)有算法框架中。通過(guò)本文,我們就一起來(lái)看看它有多香吧!

Outline

I. 主要思想

II. 分組的通道注意力機(jī)制:Split-Attention

III. 從代碼出發(fā),知行合一

1.基本思想

ResNeSt 很好懂,不復(fù)雜,簡(jiǎn)單來(lái)說(shuō)就是結(jié)合了?ResNeXt?的分組卷積和?SE-Net?的通道注意力機(jī)制,將通道進(jìn)行分組,對(duì)每組運(yùn)用注意力機(jī)制,同時(shí)保留了 ResNet 的殘差結(jié)構(gòu)。?

2.分組的通道注意力機(jī)制:Split-Attention

SplAtConv2d

這部分我們來(lái)詳談分組的通道注意力是怎樣一種操作,作者論述到可能的實(shí)現(xiàn)方式有多種,這里我先談?wù)勂渲幸环N。

了解?ResNeXt 的朋友們都知道,其引入了?Cardinality?的概念,代表分組的組數(shù),為方便敘述,這里記為?K;ResNeSt 則在此基礎(chǔ)上進(jìn)一步分組,稱為?split?操作,同時(shí)引入一個(gè)超參?Radix,代表將?K 個(gè)組中的每一個(gè)進(jìn)一步劃分的組數(shù),這里記為?R。這里的分組都是在通道這個(gè)維度上進(jìn)行,由此看來(lái),就是將輸入在通道這個(gè)維度劃分為?KxR?個(gè)組。

分組完畢后,對(duì)每個(gè)組實(shí)施不同的特征變換(Conv+Bn+Relu 等),然后將它們分成 R 份,這樣每份就包含原來(lái)的 K 個(gè)組,對(duì)每一份應(yīng)用投票機(jī)制形成注意力(Softmax or Sigmoid),接著將這 R 份注意力與特征圖對(duì)應(yīng)相乘(element-wise multiply),最后將這 R 份結(jié)果加起來(lái)(element-wise sum)形成輸出,輸出相當(dāng)于對(duì)應(yīng)了原來(lái)的 K 個(gè)組。

梳理下,可以知道注意力在是分了?K?個(gè)組后再分R個(gè)組上執(zhí)行的,記?R 中的每一份為?r,K 中的每一份為k,那么每個(gè)?r 上得到的注意力是不同的,即每個(gè)?k split?下的每個(gè)?r?上的注意力不同,而同一個(gè)?r?下對(duì)應(yīng)的不同?k?的注意力是一致的。

很奇妙,對(duì)于分得的K個(gè)組,每個(gè)組內(nèi)切分R份分配不同的注意力,但不同組依次對(duì)應(yīng)的這R份注意力卻分別是一致的,是謂同又不盡全同!

3.從代碼出發(fā),知行合一

看過(guò) paper 和源碼的朋友們可能會(huì)一頭霧水,paper 中展示的結(jié)構(gòu)圖和代碼實(shí)現(xiàn)的有出入,一開(kāi)始 CW 也是如此,看了幾篇文但總感覺(jué)自己理解得依舊不那么清晰,于是乎親自把代碼手?jǐn)]一遍,并結(jié)合畫圖理解,最終眼前的迷霧也就散開(kāi)了。

我國(guó)古代優(yōu)秀大佬王陽(yáng)明推崇知行合一,雖然凡事不一定硬要知行結(jié)合,但是吾以為有了認(rèn)知才有“行”的方向,“行”了才能加深認(rèn)知或者說(shuō)真正認(rèn)知,這是一個(gè)循環(huán),最終達(dá)到合二為一的高手境界。

接下來(lái)進(jìn)入正題~

作者在源碼中對(duì)于 split attention 的實(shí)現(xiàn)有兩種方式,分別對(duì)應(yīng)兩個(gè)類,其中一個(gè)類為 SplAtConv2d,對(duì)應(yīng)于上一部分展示的圖中結(jié)構(gòu);另一個(gè)類為 RadixMajorNaiveImp,對(duì)應(yīng)下圖中的結(jié)構(gòu)。

RadixMajorNaiveImp


RadixMajorNaiveImp

結(jié)合上圖和代碼,先來(lái)看看 RadixMajorNaiveImp 具體如何實(shí)現(xiàn)。

首先將輸入分為 KxR 個(gè)組,然后依次對(duì)K中的每個(gè) k 執(zhí)行注意力機(jī)制,具體做法是取出同一個(gè) k 下的所有 r,然后把它們加起來(lái),輸入全局平均池化層和兩層全連接層。

RadixMajorNaiveImp (i)

接著令通道這個(gè)維度等于 R,在這個(gè)維度上生成注意力權(quán)重,同時(shí),將同一 k 下的所有 r 在通道這個(gè)維度上拼接起來(lái),與注意力權(quán)重相乘,相乘后的結(jié)果分為 R 份,將這 R 份結(jié)果加起來(lái)形成這一個(gè) k 的輸出,最終將K組中所有 k 的結(jié)果在通道數(shù)這個(gè)維度上拼接起來(lái)。

RadixMajorNaiveImp (ii)

總的來(lái)說(shuō),這種方式就是依次對(duì) K 組中的每份 k 進(jìn)行處理,每份 k 進(jìn)一步 split 成 R 份,其中每份 r 生成不同的注意力,K 組中的每份 k 都結(jié)合完注意力后,再將它們的結(jié)果在通道上拼接起來(lái)。

SplAtConv2d

接下來(lái)看看 SplAtConv2d 的實(shí)現(xiàn)方式。


SplAtConv2d

仔細(xì)觀察上圖,我們可以發(fā)現(xiàn),這種實(shí)現(xiàn)方式是將輸入分為?R 份,其中的每份?r 包含了?K 個(gè)組,每份?r 生成的注意力不同(對(duì)應(yīng)上圖中的虛線框),上一節(jié)便說(shuō)到了,同一?k??不同的?split r?上形成的注意力不一致,但不同的?k?對(duì)應(yīng)相同的?r?上形成的注意力卻是一致的

再回顧下?RadixMajorNaiveImp 的實(shí)現(xiàn)方式,同一?k??不同的?split r?上形成的注意力也是不一致,但不同?k?的注意力是獨(dú)立生成的,它們之間并沒(méi)有聯(lián)系,這就是兩種實(shí)現(xiàn)方式的最大差別了。

一起來(lái)瞄瞄代碼~

SplAtConv2d (i)

這里提醒大家注意下,訓(xùn)練過(guò)程中在測(cè)試這個(gè)模塊時(shí),記住把?batch size?設(shè)置大于1,由于使用了?global average pooling,輸出特征的大小變?yōu)?x1,因此其后接?bn?的話(上圖中?self.bn1)就要求每個(gè)通道上多于一個(gè)元素,而如果?batch size?為1的話就會(huì)報(bào)錯(cuò)了:

ValueError: Expected more than 1 value per channel when training

bn?是在每個(gè)通道上(channel-wise)做歸一化的,如果通道上只有1個(gè)元素,那么歸一化就無(wú)意義了,所以在訓(xùn)練過(guò)程中,?bn?要求每個(gè)通道上必須多于1個(gè)元素。

SplAtConv2d (ii)

另外,SplAtConv2d 這種實(shí)現(xiàn)方式不需要依次對(duì) K 組中的每份進(jìn)行處理,而是直接對(duì) K 個(gè)組同時(shí)進(jìn)行處理,相比于 RadixMajorNaiveImp 的方式更加簡(jiǎn)潔些。

作者在 paper 和 github 源碼中也給出了兩者等價(jià)性的證明,源碼可以查看《SplAtConv2d 和?RadixMajorNaiveImp 的等價(jià)性證明》,鏈接:https://github.com/zhanghang1989/ResNeSt/blob/master/tests/test_radix_major.py#L100

4.最后

對(duì)于 ResNeSt,?初次接觸時(shí)往往會(huì)感覺(jué)其代碼實(shí)現(xiàn)和paper描述得有出入,因此要把它講述明白,自己本身一定要理解得透徹。如果沒(méi)有親自敲過(guò)一遍代碼,就很難做到。對(duì)于其它算法模型也一樣,能真正掌握的辦法就是親自上陣實(shí)踐一番,所謂知而不行,乃是未知。

你的 ResNet 是時(shí)候更新了 —— ResNeSt 來(lái)也!的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
大理市| 富民县| 黎城县| 庆阳市| 莲花县| 雅江县| 江永县| 无棣县| 庆安县| 当阳市| 绥化市| 永修县| 武穴市| 兴化市| 大余县| 西林县| 桐柏县| 延吉市| 阳谷县| 巴林右旗| 泽库县| 墨江| 景谷| 西乡县| 滨海县| 图们市| 霍州市| 德州市| 尼木县| 潞城市| 锡林浩特市| 绿春县| 抚松县| 镇沅| 攀枝花市| 哈密市| 革吉县| 焦作市| 博湖县| 宁城县| 裕民县|