日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

YOLOV4各个创新功能模块技术分析(三)

發布時間:2023/11/28 生活经验 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 YOLOV4各个创新功能模块技术分析(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

YOLOV4各個創新功能模塊技術分析(三)

八.數據增強相關-Stylized-ImageNet

論文名稱:ImageNet-trained cnns are biased towards texture; increasing shape bias improves accuracy and
robustness

論文地址:https://arxiv.org/abs/1811.12231

論文摘要

為了提高卷積神經網絡分類器的性能,提出了區域下降策略。事實證明,可以有效地引導模型關注對象中不易區分的部分(例如,腿而不是人頭),從而使網絡更好地進行泛化,并具有更好的對象定位能力。另一方面,當前的區域性丟失方法通過疊加一塊黑色像素或隨機噪聲來去除訓練圖像上的信息像素。這種刪除是不可取的,因為會導致信息丟失和培訓效率低下。因此,提出了CutMix增強策略:在訓練圖像中剪切和粘貼面片,其中地面真值標簽也與面片的面積成比例地混合。通過有效利用訓練像素和保持區域退學的正則化效果,CutMix在CIFAR和ImageNet分類任務以及ImageNet弱監督定位任務中始終優于最新的增強策略。此外,與以前的增強方法不同,CutMix訓練的ImageNet分類器在用作預訓練模型時,在Pascal檢測和MS-COCO圖像字幕基準方面獲得了一致的性能增益。證明了CutMix提高了模型對輸入腐敗的魯棒性及其分布外檢測性能。

本文非常有意思,得到的結論非常有意義,可以指導對于某些場景測試失敗的分析。本質上本文屬于數據增強論文,做的唯一一件事就是:對ImageNet數據集進行風格化。本文結論是:CNN訓練學習到的實際是紋理特征(texture bias)而不是形狀特征,這和人類的認知方式有所區別,如論文題目所言,存在紋理偏置。而本文引入風格化imagenet數據集,平衡紋理和形狀偏置,提高泛化能力。本文指出在ImageNet上訓練的CNN強烈的偏向于識別紋理而不是形狀,這和人的行為是極為不同的,存在紋理偏差,所以提出了Stylized-ImageNet數據,混合原始數據訓練就可以實現既關注紋理,也關注形狀(也就是論文標題提到的減少紋理偏向,增加形狀偏向)。從而不僅更適合人類的行為,更驚訝的是提升了目標檢測的精度,以及魯棒性,更加體現了基于形狀表示的優勢。文章從一只披著象皮的貓究竟會被識別為大象還是貓這個問題入手,揭示了神經網絡根據物體的texture進行識別而非以為的根據物體的形狀。作者準備了6份數據,分別是正常的圖片,灰色圖,只包含輪廓的,只包含邊緣的,只有紋理沒有形狀,紋理和形狀相互矛盾(大象的紋理,貓的形狀),對于第六份數據(紋理和形狀沖突的數據),作者采用Stylized-ImageNet隨機地將物體的紋理替換掉(也就是本文創新點),如下(c)所示:


采用了4個主流網絡,加上人類直觀評估。原圖其實是作者除了物體外,其余都是白色背景的數據集,目的是去除干擾。對于前面5份數據,采用原圖和灰度圖,神經網絡都可以取得非常高的準確率,而對于只包含輪廓和只包含邊緣的圖片,神經網絡的預測準確率則顯著降低。更有意思的是,對于只包含紋理的圖片,神經網絡取得特別高的準確率。因而不難推斷出,神經網絡在識別中,主要是參考紋理信息而不是形狀信息。作者先構造數據集,然后再進行后面的深入實驗,IN就是指的ImageNet,SIN是指的風格化的ImageNet,如下所示

SIN的特點是保留shape,但是故意混淆掉紋理信息。

從上表的第一行可以看出,在原始圖片IN上訓練的模型不能適應去除紋理SIN的圖片(IN-SIN),而使用去除紋理的圖片進行訓練和測試效果會差于使用原始圖片進行訓練和測試(SIN-SIN),這說明紋理信息在圖像識別中確實起到了一定的作用,去除了紋理信息會提高模型識別的難度。最后,當使用去除紋理的圖片進行訓練而在原圖進行測試的時候(SIN-IN),效果比在去除紋理的圖片上面效果好(SIN-SIN)。

后面三行的實驗采用的是第一行resnet的網絡結構,其主要特征是限制模型的感受野,從而讓模型無法學習到空間的信息,其對應的感受野分別是33*33,17*17,9*9,對于訓練原始的圖片,其結果測試誤差跟沒有加上感受野限制的誤差差別不大,從而說明紋理信息起到主導作用(IN-IN),而對應去除掉紋理信息的圖片,其測試結果下降十分明顯(SIN-SIN),說明形狀信息起到主要的作用,證明了SIN的模型確實在學習形狀的信息而不是紋理的信息。這個實驗是要說明提出的SIN數據集由于強制抹掉了固定紋理,網絡訓練難度增大,在沒有限制感受野情況下可以學的蠻好,但是一旦限制了感受野就不行了,說明SIN模型學習到的不僅僅是紋理(因為紋理是局部的,如果依靠紋理來分類,那么準確率應該下降不了這么多),更多的是依靠shape分類,因為感受野外限制了,導致無法看到整個shape,并且通過更加限制感受野,SIN-SIN準確率下降更多可以發現。也就是說SIN數據集由于替換掉了紋理,迫使網絡學習shape和紋理,達到了本文目的。SIN上訓練的ResNet50展示出更強的形狀偏向,符合人類常理。增強形狀偏向也改變了表示,那么影響了CNN的性能和魯棒性了嗎?設置了兩個訓練方案:1 同時在SIN和IN上訓練2 同時在SIN和IN上訓練,在IN上微調。稱為Shape-ResNet。

作者把去掉紋理的數據和原圖一起放進去模型中進行訓練,最后用原圖進行finetune,發現這種方法可以提高模型的性能。Shape-ResNet超過了原始ResNet的準確率,說明SIN是有用的圖像增強。總結:CNN識別強烈依賴于紋理,而不是全局的形狀,但是這是不好的,為了突出形狀bias,可以采用本文的SIN做法進行數據增強,SIN混合原始數據訓練就可以實現既關注紋理,也關注形狀,不僅符合人類直觀,也可以提高各種任務的準確率和魯邦性。所以本文其實是提出了一種新的數據增強策略。是不是很有意思的結論?

九.數據增強相關-label
smooth

論文題目:Rethinking the inception architecture for computer vision

論文摘要

卷積網絡是最先進的計算機視覺解決方案的核心,可用于各種各樣的任務。自2014年以來,非常深的卷積網絡開始成為主流,在各種基準上產生了巨大的收益。盡管增加的模型大小和計算成本往往會轉化為大多數任務的即時質量增益(只要為培訓提供足夠的標記數據),但計算效率和低參數計數仍然是各種用例(如移動視覺和大數據場景)的有利因素。探索如何通過適當的因子化卷積和積極的正則化來盡可能有效地利用增加的計算量來擴大網絡。在ILSVRC 2012分類挑戰驗證集上進行了基準測試,結果表明,與最新技術相比,本文方法取得了顯著的進步:使用一個計算成本為50億乘加/推斷和使用少于2500萬個參數的網絡進行單幀評估時,最大誤差為21.2%,最大誤差為5.6%。通過4個模型的集成和多作物評估,報告了驗證集上3.5%的前5個錯誤(測試集上3.6%的錯誤)和驗證集上17.3%的前1個錯誤。

label  smooth是一個非常有名的正則化手段,防止過擬合,想基本上沒有人不知道,故不詳說了,核心就是對label進行soft操作,不要給0或者1的標簽,而是有一個偏移,相當于在原label上增加噪聲,讓模型的預測值不要過度集中于概率較高的類別,把一些概率放在概率較低的類別。

十.特征增強相關-DropBlock

論文題目:DropBlock: A regularization method for convolutional networks

論文地址:https://arxiv.org/abs/1810.12890

開源代碼:https://github.com/miguelvr/dropblock

論文摘要

當深度神經網絡被過度參數化,并在大量噪聲和正則化(如權值衰減和丟失)的情況下進行訓練時,它們通常能很好地工作。雖然漏失被廣泛地用作全連通層的正則化技術,但對于卷積層,它通常不太有效。卷積層漏失的這種不成功可能是由于卷積層中的激活單元在空間上是相關的,因此盡管漏失,信息仍然可以通過卷積網絡流動。因此,需要一種結構形式的輟學來正則化卷積網絡。在本文中,我們引入DropBlock,這是一種結構化的dropout形式,其中特征映射的相鄰區域中的單元被放在一起。我們發現,除了卷積層外,在跳躍連接中應用DropbBlock可以提高精確度。此外,在訓練過程中,逐漸增加的下降單位的數量會導致更好的準確性和對超參數選擇的魯棒性。大量實驗表明,DropBlock在卷積網絡的正則化中比dropout有更好的性能。在ImageNet分類上,ResNet-50架構與DropBlock實現 78.13%準確度,超過1.6%基線改善。在COCO檢測中,DropBlock提高了視網膜的平均精度 36.8%到38.4% 。

由于dropBlock其實是dropout在卷積層上的推廣,故很有必須先說明下dropout操作。

dropout,訓練階段在每個mini-batch中,依概率P隨機屏蔽掉一部分神經元,只訓練保留下來的神經元對應的參數,屏蔽掉的神經元梯度為0,參數不參數與更新。而測試階段則又讓所有神經元都參與計算。

dropout操作流程:參數是丟棄率p

1)在訓練階段,每個mini-batch中,按照伯努利概率分布(采樣得到0或者1的向量,0表示丟棄)隨機的丟棄一部分神經元(即神經元置零)。用一個mask向量與該層神經元對應元素相乘,mask向量維度與輸入神經一致,元素為0或1。2)然后對神經元rescale操作,即每個神經元除以保留概率1-P,也即乘上1/(1-P)。3)反向傳播只對保留下來的神經元對應參數進行更新。4)測試階段,Dropout層不對神經元進行丟棄,保留所有神經元直接進行前向過程。為啥要rescale呢?是為了保證訓練和測試分布盡量一致,或者輸出能量一致。可以試想,如果訓練階段隨機丟棄,那么其實dropout輸出的向量,有部分被屏蔽掉了,可以等下認為輸出變了,如果dropout大量應用,那么其實可以等價為進行模擬遮擋的數據增強,如果增強過度,導致訓練分布都改變了,那么測試時候肯定不好,引入rescale可以有效的緩解,保證訓練和測試時候,經過dropout后數據分布能量相似。

dropout方法多是作用在全連接層上,在卷積層應用dropout方法意義不大。文章認為是因為每個feature map的位置都有一個感受野范圍,僅僅對單個像素位置進行dropout并不能降低feature map學習的特征范圍,也就是說網絡仍可以通過該位置的相鄰位置元素去學習對應的語義信息,也就不會促使網絡去學習更加魯邦的特征。

既然單獨的對每個位置進行dropout并不能提高網絡的泛化能力,那么很自然的,如果按照一塊一塊的去dropout,就自然可以促使網絡去學習更加魯邦的特征。思路很簡單,就是在feature

map上去一塊一塊的找,進行歸零操作,類似于dropout,叫做dropblock。

綠色陰影區域是語義特征,b圖是模擬dropout的做法,隨機丟棄一些位置的特征,但是作者指出這做法沒啥用,因為網絡還是可以推斷出來,(c)是本文做法。

dropblock有三個比較重要的參數,一個是block_size,用來控制進行歸零的block大小;一個是γ,用來控制每個卷積結果中,到底有多少個channel要進行dropblock;最后一個是keep_prob,作用和dropout里的參數一樣。

M大小和輸出特征圖大小一致,非0即1,為了保證訓練和測試能量一致,需要和dropout一樣,進行rescale。上述是理論分析,在做實驗時候發現,block_size控制為7*7效果最好,對于所有的feature map都一樣,γ通過一個公式來控制,keep_prob則是一個線性衰減過程,從最初的1到設定的閾值(具體實現是dropout率從0增加到指定值為止),論文通過實驗表明這種方法效果最好。如果固定prob效果好像不好。實踐中,并沒有顯式的設置的值,而是根據keep_prob(具體實現是反的,是丟棄概率)來調整。

DropBlock in ResNet-50 DropBlock加在哪?最佳的DropBlock配置是block_size=7,在group3和group4上都用。將DropBlock用在skip connection比直接用在卷積層后要好,具體咋用,可以看代碼。

class DropBlock2D(nn.Module): r"""Randomly zeroes 2D spatial blocks of the input tensor.

As described in the paper    `DropBlock: A regularization method for convolutional networks`_ ,    dropping whole blocks of feature map allows to remove semantic    information as compared to regular dropout.Args:        drop_prob (float): probability of an element to be dropped.        block_size (int): size of the block to dropShape:        - Input: `(N, C, H, W)`        - Output: `(N, C, H, W)`.. _DropBlock: A regularization method for convolutional networks:       https://arxiv.org/abs/1810.12890"""def __init__(self, drop_prob, block_size):        super(DropBlock2D, self).__init__()self.drop_prob = drop_prob        self.block_size = block_sizedef forward(self, x):        # shape: (bsize, channels, height, width)assert x.dim() == 4, \            "Expected input with 4 dimensions (bsize, channels, height, width)"if not self.training or self.drop_prob == 0.:            return x        else:            # get gamma value            gamma = self._compute_gamma(x)# sample mask            mask = (torch.rand(x.shape[0], *x.shape[2:]) < gamma).float()# place mask on input device            mask = mask.to(x.device)# compute block mask            block_mask = self._compute_block_mask(mask)# apply block mask            out = x * block_mask[:, None, :, :]# scale output            out = out * block_mask.numel() / block_mask.sum()return outdef _compute_block_mask(self, mask):        # 比較巧妙的實現,用max pool來實現基于一點來得到全0區域        block_mask = F.max_pool2d(input=mask[:, None, :, :],                                  kernel_size=(self.block_size, self.block_size),                                  stride=(1, 1),                                  padding=self.block_size // 2)if self.block_size % 2 == 0:            block_mask = block_mask[:, :, :-1, :-1]block_mask = 1 - block_mask.squeeze(1)return block_maskdef _compute_gamma(self, x):        return self.drop_prob / (self.block_size ** 2)聯合線性調度一起使用,如下所示:

總結

以上是生活随笔為你收集整理的YOLOV4各个创新功能模块技术分析(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。