0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

YOLOv5網(wǎng)絡(luò)結(jié)構(gòu)訓(xùn)練策略詳解

新機(jī)器視覺 ? 來源:CSDN博主kuokay ? 2023-09-11 11:15 ? 次閱讀

前言

前面已經(jīng)講過了Yolov5模型目標(biāo)檢測和分類模型訓(xùn)練流程,這一篇講解一下yolov5模型結(jié)構(gòu),數(shù)據(jù)增強(qiáng),以及訓(xùn)練策略。

網(wǎng)絡(luò)結(jié)構(gòu)

Yolov5發(fā)布的預(yù)訓(xùn)練模型,包含yolov5l.pt、yolov5l6.pt、yolov5m.pt、yolov5m6.pt、yolov5s.pt、yolov5s6.pt、yolov5x.pt、yolov5x6.pt等。

針對不同大小的網(wǎng)絡(luò)整體架構(gòu)(n, s, m, l, x)都是一樣的,只不過會在每個子模塊中采用不同的深度和寬度,分別應(yīng)對yaml文件中的depth_multiple和width_multiple參數(shù)。下面以yolov5l.yaml繪制的網(wǎng)絡(luò)整體結(jié)構(gòu)為例。

51ab0f46-4fe1-11ee-a25d-92fbcf53809c.png

網(wǎng)絡(luò)結(jié)構(gòu)圖:

網(wǎng)絡(luò)結(jié)構(gòu)主要由以下幾部分組成:

(1)輸入端:Mosaic數(shù)據(jù)增強(qiáng)、自適應(yīng)錨框計(jì)算、自適應(yīng)圖片縮放

(2) Backbone: New CSP-Darknet53

(3)Neck: SPPF, New CSP-PAN

(4)輸出端:Head

官方網(wǎng)絡(luò)結(jié)構(gòu)圖:

51d5e608-4fe1-11ee-a25d-92fbcf53809c.png

v5.x網(wǎng)絡(luò)結(jié)構(gòu):

51f7a810-4fe1-11ee-a25d-92fbcf53809c.png

v6.x網(wǎng)絡(luò)結(jié)構(gòu):

52196aa4-4fe1-11ee-a25d-92fbcf53809c.png

可以看出,相比于之前v5.x,最新版的v6.x網(wǎng)絡(luò)結(jié)構(gòu)更加精簡(以提高速度和推理性能),主要有以下更新:

?Conv(k=6, s=2, p=2) 替換Focus,便于導(dǎo)出其他框架(for improved exportability)

?SPPF代替SPP,并且將SPPF放在主干最后一層(for reduced ops)

?主干中的C3層重復(fù)次數(shù)從9次減小到6次(for reduced ops)

?主干中最后一個C3層引入shortcut

yolov5s.yaml文件內(nèi)容:

nc: 80 # number of classes 數(shù)據(jù)集中的類別數(shù)
depth_multiple: 0.33 # model depth multiple 模型層數(shù)因子(用來調(diào)整網(wǎng)絡(luò)的深度)
width_multiple: 0.50 # layer channel multiple 模型通道數(shù)因子(用來調(diào)整網(wǎng)絡(luò)的寬度)
# 如何理解這個depth_multiple和width_multiple呢?它決定的是整個模型中的深度(層數(shù))和寬度(通道數(shù)。


anchors: # 表示作用于當(dāng)前特征圖的Anchor大小為 xxx
# 9個anchor,其中P表示特征圖的層級,P3/8該層特征圖縮放為1/8,是第3層特征
 - [10,13, 16,30, 33,23] # P3/8, 表示[10,13],[16,30], [33,23]3個anchor
 - [30,61, 62,45, 59,119] # P4/16
 - [116,90, 156,198, 373,326] # P5/32




# YOLOv5s v6.0 backbone
backbone:
 # [from, number, module, args]
 [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2
  [-1, 1, Conv, [128, 3, 2]], # 1-P2/4
  [-1, 3, C3, [128]],
  [-1, 1, Conv, [256, 3, 2]], # 3-P3/8
  [-1, 6, C3, [256]],
  [-1, 1, Conv, [512, 3, 2]], # 5-P4/16
  [-1, 9, C3, [512]],
  [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
  [-1, 3, C3, [1024]],
  [-1, 1, SPPF, [1024, 5]], # 9
 ]


# YOLOv5s v6.0 head
head:
 [[-1, 1, Conv, [512, 1, 1]],
  [-1, 1, nn.Upsample, [None, 2, 'nearest']],
  [[-1, 6], 1, Concat, [1]], # cat backbone P4
  [-1, 3, C3, [512, False]], # 13


  [-1, 1, Conv, [256, 1, 1]],
  [-1, 1, nn.Upsample, [None, 2, 'nearest']],
  [[-1, 4], 1, Concat, [1]], # cat backbone P3
  [-1, 3, C3, [256, False]], # 17 (P3/8-small)


  [-1, 1, Conv, [256, 3, 2]],
  [[-1, 14], 1, Concat, [1]], # cat head P4
  [-1, 3, C3, [512, False]], # 20 (P4/16-medium)


  [-1, 1, Conv, [512, 3, 2]],
  [[-1, 10], 1, Concat, [1]], # cat head P5
  [-1, 3, C3, [1024, False]], # 23 (P5/32-large)


  [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
 ]

nc是類別數(shù);

depth_multiple表示channel的縮放系數(shù),就是將配置里面的backbone和head部分有關(guān)通道的設(shè)置,全部乘以該系數(shù)即可;

而width_multiple表示BottleneckCSP模塊的層縮放系數(shù),將所有的BottleneckCSP模塊的number系數(shù)乘上該參數(shù)就可以最終的層個數(shù);如果希望大一點(diǎn),就把這個數(shù)字改大一點(diǎn),網(wǎng)絡(luò)就會按比例變深、變寬;如果希望小一點(diǎn),就把這個數(shù)字改小一點(diǎn),網(wǎng)絡(luò)就會按比例變淺、變窄。

anchors 解讀

yolov5 初始化了 9 個 anchors,分別在三個特征圖 (feature map)中使用,每個 feature map 的每個 grid cell 都有三個 anchor 進(jìn)行預(yù)測。分配規(guī)則:

?尺度越大的 feature map 越靠前,相對原圖的下采樣率越小,感受野越小, 所以相對可以預(yù)測一些尺度比較小的物體(小目標(biāo)),分配到的 anchors 越小。

?尺度越小的 feature map 越靠后,相對原圖的下采樣率越大,感受野越大, 所以可以預(yù)測一些尺度比較大的物體(大目標(biāo)),所以分配到的 anchors 越大。

?即在小特征圖(feature map)上檢測大目標(biāo),中等大小的特征圖上檢測中等目標(biāo), 在大特征圖上檢測小目標(biāo)。

backbone & head解讀

[from, number, module, args] 參數(shù)

四個參數(shù)的意義分別是:

?第一個參數(shù) from :從哪一層獲得輸入,-1表示從上一層獲得,[-1, 6]表示從上層和第6層兩層獲得。

?第二個參數(shù) number:表示有幾個相同的模塊,如果為9則表示有9個相同的模塊。

?第三個參數(shù) module:模塊的名稱,這些模塊寫在common.py中。

?第四個參數(shù) args:類的初始化參數(shù),用于解析作為 moudle 的傳入?yún)?shù),即[ch_out, kernel, stride, padding, groups][輸出通道數(shù)量,卷積核尺寸,步長,padding],這里連ch_in都省去了,因?yàn)檩斎攵际巧蠈拥妮敵觯ǔ跏糲h_in為3)

Backbone骨干網(wǎng)絡(luò)

骨干網(wǎng)絡(luò)是指用來提取圖像特征的網(wǎng)絡(luò),它的主要作用是將原始的輸入圖像轉(zhuǎn)化為多層特征圖,以便后續(xù)的目標(biāo)檢測任務(wù)使用。

在Yolov5中,使用的是CSPDarknet53或ResNet骨干網(wǎng)絡(luò)。Backbone中的主要結(jié)構(gòu)有Conv模塊、C3模塊、SPPF模塊

Conv

Conv模塊是卷積神經(jīng)網(wǎng)絡(luò)中常用的一種基礎(chǔ)模塊,它主要由卷積層、BN層和激活函數(shù)組成。下面對這些組成部分進(jìn)行詳細(xì)解析。

?卷積層是卷積神經(jīng)網(wǎng)絡(luò)中最基礎(chǔ)的層之一,用于提取輸入特征中的局部空間信息。

?BN層是在卷積層之后加入的一種歸一化層,用于規(guī)范化神經(jīng)網(wǎng)絡(luò)中的特征值分布。

?激活函數(shù)是一種非線性函數(shù),用于給神經(jīng)網(wǎng)絡(luò)引入非線性變換能力。常用的激活函數(shù)包括sigmoid、ReLU、LeakyReLU、ELU等。

C3模塊

C3模塊是YOLOv5網(wǎng)絡(luò)中的一個重要組成部分,其主要作用是增加網(wǎng)絡(luò)的深度和感受野,提高特征提取的能力。

C3模塊是由三個Conv塊構(gòu)成的,其中第一個Conv塊的步幅為2,可以將特征圖的尺寸減半,第二個Conv塊和第三個Conv塊的步幅為1。C3模塊中的Conv塊采用的都是3x3的卷積核。在每個Conv塊之間,還加入了BN層和LeakyReLU激活函數(shù),以提高模型的穩(wěn)定性和泛化性能。

Neck特征金字塔

在Neck部分的變化還是相對較大的,首先是將SPP換成成了SPPF,其次是New CSP-PAN了,在YOLOv4中,Neck的PAN結(jié)構(gòu)是沒有引入CSP結(jié)構(gòu)的,但在YOLOv5中作者在PAN結(jié)構(gòu)中加入了CSP。

SPPF模塊

SPP

SPP模塊是何凱明大神在2015年的論文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》中被提出。

SPP全程為空間金字塔池化結(jié)構(gòu),主要是為了解決兩個問題:

?有效避免了對圖像區(qū)域裁剪、縮放操作導(dǎo)致的圖像失真等問題;

?解決了卷積神經(jīng)網(wǎng)絡(luò)對圖相關(guān)重復(fù)特征提取的問題,大大提高了產(chǎn)生候選框的速度,且節(jié)省了計(jì)算成本。

52385446-4fe1-11ee-a25d-92fbcf53809c.png

class SPP(nn.Module):
  # Spatial Pyramid Pooling (SPP) layer https://arxiv.org/abs/1406.4729
  def __init__(self, c1, c2, k=(5, 9, 13)):
    super().__init__()
    c_ = c1 // 2 # hidden channels
    self.cv1 = Conv(c1, c_, 1, 1)
    self.cv2 = Conv(c_ * (len(k) + 1), c2, 1, 1)
    self.m = nn.ModuleList([nn.MaxPool2d(kernel_size=x, stride=1, padding=x // 2) for x in k])


  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))

SPPF

52465fdc-4fe1-11ee-a25d-92fbcf53809c.png

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)
    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))

CSP-PAN

在Neck部分另外一個不同點(diǎn)就是New CSP-PAN了,在YOLOv4中,Neck的PAN結(jié)構(gòu)是沒有引入CSP結(jié)構(gòu)的,但在YOLOv5中作者在PAN結(jié)構(gòu)中加入了CSP。

CSP

YOLOv5s的CSP結(jié)構(gòu)是將原輸入分成兩個分支,分別進(jìn)行卷積操作使得通道數(shù)減半,然后一個分支進(jìn)行Bottleneck * N操作,然后concat兩個分支,使得BottlenneckCSP的輸入與輸出是一樣的大小,這樣是為了讓模型學(xué)習(xí)到更多的特征。

YOLOv5中的CSP有兩種設(shè)計(jì),分別為CSP1_X結(jié)構(gòu)和CSP2_X結(jié)構(gòu)。

PAN

Yolov5 的 Neck 部分采用了 PANet 結(jié)構(gòu),Neck 主要用于生成特征金字塔。特征金字塔會增強(qiáng)模型對于不同縮放尺度對象的檢測,從而能夠識別不同大小和尺度的同一個物體。

PANet 結(jié)構(gòu)是在FPN的基礎(chǔ)上引入了 Bottom-up path augmentation 結(jié)構(gòu)。

PANet[1]最大的貢獻(xiàn)是提出了一個自頂向下和自底向上的雙向融合骨干網(wǎng)絡(luò),同時在最底層和最高層之間添加了一條“short-cut”,用于縮短層之間的路徑。PANet還提出了自適應(yīng)特征池化(Adaptive Features Pooling)和全連接融合(Fully-connected Fusion)兩個模塊。其中自適應(yīng)特征池化可以用于聚合不同層之間的特征,保證特征的完整性和多樣性,而通過全連接融合可以得到更加準(zhǔn)確的預(yù)測mask。

525ca03a-4fe1-11ee-a25d-92fbcf53809c.png

Head目標(biāo)檢測頭

目標(biāo)檢測頭是用來對特征金字塔進(jìn)行目標(biāo)檢測的部分,它包括了一些卷積層、池化層和全連接層等。

head中的主體部分就是三個Detect檢測器,即利用基于網(wǎng)格的anchor在不同尺度的特征圖上進(jìn)行目標(biāo)檢測的過程。

head:
 [[-1, 1, Conv, [512, 1, 1]],
  [-1, 1, nn.Upsample, [None, 2, 'nearest']],
  [[-1, 6], 1, Concat, [1]], # cat backbone P4
  [-1, 3, C3, [512, False]], # 13


  [-1, 1, Conv, [256, 1, 1]],
  [-1, 1, nn.Upsample, [None, 2, 'nearest']],
  [[-1, 4], 1, Concat, [1]], # cat backbone P3
  [-1, 3, C3, [256, False]], # 17 (P3/8-small)


  [-1, 1, Conv, [256, 3, 2]],
  [[-1, 14], 1, Concat, [1]], # cat head P4
  [-1, 3, C3, [512, False]], # 20 (P4/16-medium)


  [-1, 1, Conv, [512, 3, 2]],
  [[-1, 10], 1, Concat, [1]], # cat head P5
  [-1, 3, C3, [1024, False]], # 23 (P5/32-large)


  [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
 ]

數(shù)據(jù)增強(qiáng)

1.Mosaic數(shù)據(jù)增強(qiáng)

將四張圖片拼成一張圖片,采用隨機(jī)縮放、隨機(jī)裁剪、隨機(jī)排布的方式進(jìn)行拼接。

優(yōu)點(diǎn):

1. 豐富數(shù)據(jù)集

2. 減少GPU

2.Copy paste數(shù)據(jù)增強(qiáng)

將部分目標(biāo)隨機(jī)的粘貼到圖片中,前提是數(shù)據(jù)要有segments數(shù)據(jù)才行,即每個目標(biāo)的實(shí)例分割信息。

3. Random affine仿射變換

yolov5的仿射變換包含隨機(jī)旋轉(zhuǎn)、平移、縮放、錯切操作,和yolov3-spp一樣,代碼都沒有改變。據(jù)配置文件里的超參數(shù)發(fā)現(xiàn)只使用了Scale和Translation即縮放和平移。

4. MixUp數(shù)據(jù)增強(qiáng)

就是將兩張圖片按照一定的透明度融合在一起。

5. HSV(Augment HSV(Hue, Saturation, Value))隨機(jī)增強(qiáng)圖像

隨機(jī)調(diào)整色度,飽和度以及明度。

6.Random horizontal flip隨機(jī)水平翻轉(zhuǎn)

隨機(jī)上下左右的水平翻轉(zhuǎn)

7. Cutout數(shù)據(jù)增強(qiáng)

Cutout是一種新的正則化方法。訓(xùn)練時隨機(jī)把圖片的一部分減掉,這樣能提高模型的魯棒性。它的來源是計(jì)算機(jī)視覺任務(wù)中經(jīng)常遇到的物體遮擋問題。通過cutout生成一些類似被遮擋的物體,不僅可以讓模型在遇到遮擋問題時表現(xiàn)更好,還能讓模型在做決定時更多地考慮環(huán)境。

Cutout數(shù)據(jù)增強(qiáng)在之前也見過很多次了。在yolov5的代碼中默認(rèn)也是不啟用的。

8. Albumentations數(shù)據(jù)增強(qiáng)工具包

該工具最大的好處是會根據(jù)你使用的數(shù)據(jù)增強(qiáng)方法自動修改標(biāo)注框信息!

albumentations 是一個給予 OpenCV的快速訓(xùn)練數(shù)據(jù)增強(qiáng)庫,擁有非常簡單且強(qiáng)大的可以用于多種任務(wù)(分割、檢測)的接口,易于定制且添加其他框架非常方便。

它可以對數(shù)據(jù)集進(jìn)行逐像素的轉(zhuǎn)換,如模糊、下采樣、高斯造點(diǎn)、高斯模糊、動態(tài)模糊、RGB轉(zhuǎn)換、隨機(jī)霧化等;也可以進(jìn)行空間轉(zhuǎn)換(同時也會對目標(biāo)進(jìn)行轉(zhuǎn)換),如裁剪、翻轉(zhuǎn)、隨機(jī)裁剪等。

YOLOV5的訓(xùn)練技巧

1.訓(xùn)練預(yù)熱 Warmup

剛開始訓(xùn)練時,模型的權(quán)重是隨機(jī)初始化的,此時若選擇一個較大的學(xué)習(xí)率,可能帶來模型的不穩(wěn)定(振蕩)。選擇Warmup預(yù)熱學(xué)習(xí)率的方式可以使得開始訓(xùn)練的幾個epoches或者一些steps內(nèi)學(xué)習(xí)率較小,在預(yù)熱的小學(xué)習(xí)率下,模型可以慢慢趨于穩(wěn)定,等模型相對穩(wěn)定后再選擇預(yù)先設(shè)置的學(xué)習(xí)率進(jìn)行訓(xùn)練,使得模型收斂速度變得更快,模型效果更佳。

常見Warmup類型

1. Constant Warmup

在前面100epoch里,學(xué)習(xí)率線性增加,大于100epoch以后保持不變

2. Constant Warmup

在前面100epoch里,學(xué)習(xí)率線性增加,大于100epoch以后保持不變

3. Constant Warmup

在前面100epoch里,學(xué)習(xí)率線性增加,大于100epoch以后保持不變

超參數(shù)設(shè)置

在yolov5中data/hyps/hyp.scratch-*.yaml三個文件中,都存在著warmup_epoch代表訓(xùn)練預(yù)熱輪次

2. 自動調(diào)整錨定框——Autoanchor

預(yù)定義邊框就是一組預(yù)設(shè)的邊框,在訓(xùn)練時,以真實(shí)的邊框位置相對于預(yù)設(shè)邊框的偏移來構(gòu)建(也就是我們打下的標(biāo)簽

訓(xùn)練樣本。這就相當(dāng)于,預(yù)設(shè)邊框先大致在可能的位置“框“出來目標(biāo),然后再在這些預(yù)設(shè)邊框的基礎(chǔ)上進(jìn)行調(diào)整。

一個Anchor Box可以由:邊框的縱橫比和邊框的面積(尺度)來定義,相當(dāng)于一系列預(yù)設(shè)邊框的生成規(guī)則,根據(jù)Anchor Box,可以在圖像的任意位置,生成一系列的邊框

3.超參數(shù)進(jìn)化

yolov5提供了一種超參數(shù)優(yōu)化的方法–Hyperparameter Evolution,即超參數(shù)進(jìn)化。超參數(shù)進(jìn)化是一種利用 遺傳算法(GA) 進(jìn)行超參數(shù)優(yōu)化的方法,我們可以通過該方法選擇更加合適自己的超參數(shù)。

提供的默認(rèn)參數(shù)也是通過在COCO數(shù)據(jù)集上使用超參數(shù)進(jìn)化得來的。由于超參數(shù)進(jìn)化會耗費(fèi)大量的資源和時間,如果默認(rèn)參數(shù)訓(xùn)練出來的結(jié)果能滿足你的使用,使用默認(rèn)參數(shù)也是不錯的選擇。

4.凍結(jié)訓(xùn)練——Freeze training

凍結(jié)訓(xùn)練的作用:當(dāng)我們已有部分預(yù)訓(xùn)練權(quán)重,這部分預(yù)訓(xùn)練權(quán)重所應(yīng)用的那部分網(wǎng)絡(luò)是通用的,如骨干網(wǎng)絡(luò),那么我們可以先凍結(jié)這部分權(quán)重的訓(xùn)練,將更多的資源放在訓(xùn)練后面部分的網(wǎng)絡(luò)參數(shù),這樣使得時間和資源利用都能得到很大改善。然后后面的網(wǎng)絡(luò)參數(shù)訓(xùn)練一段時間之后再解凍這些被凍結(jié)的部分,這時再全部一起訓(xùn)練。

5.多尺度訓(xùn)練——multi-scale training

當(dāng)前的多尺度訓(xùn)練(Multi Scale Training,MST)通常是指設(shè)置幾種不同的圖片輸入尺度,訓(xùn)練時從多個尺度中隨機(jī)選取一種尺度,將輸入圖片縮放到該尺度并送入網(wǎng)絡(luò)中,是一種簡單又有效的提升多尺度物體檢測的方法。

雖然一次迭代時都是單一尺度的,但每次都各不相同,增加了網(wǎng)絡(luò)的魯棒性,又不至于增加過多的計(jì)算量。而在測試時,為了得到更為精準(zhǔn)的檢測結(jié)果,也可以將測試圖片的尺度放大,例如放大4倍,這樣可以避免過多的小物體。

6. 加權(quán)圖像策略

圖像加權(quán)策略可以解決樣本不平衡的,具體操作步驟圖下:

根據(jù)樣本種類分布使用圖像調(diào)用頻率不同的方法解決。

1. 讀取訓(xùn)練樣本中的GT,保存為一個列表;

2. 計(jì)算訓(xùn)練樣本列表中不同類別個數(shù),然后給每個類別按相應(yīng)目標(biāo)框數(shù)的倒數(shù)賦值,數(shù)目越多的種類權(quán)重越小,形成按種類的分布直方圖;

3. 對于訓(xùn)練數(shù)據(jù)列表,訓(xùn)練時按照類別權(quán)重篩選出每類的圖像作為訓(xùn)練數(shù)據(jù)。使用random.choice(population, weights=None, *, cum_weights=None, k=1)更改訓(xùn)練圖像索引,可達(dá)到樣本均衡的效果。

7.矩形推理——Rectangular Inference

通常YOLO系列網(wǎng)絡(luò)的輸入都是預(yù)處理后的方形圖像數(shù)據(jù),如416 * 416、608 * 608。當(dāng)原始圖像為矩形時,會將其填充為方形(如下圖:方形輸入),但是填充的灰色區(qū)域其實(shí)就是冗余信息,不論是在訓(xùn)練還是推理階段,這些冗余信息都會增加耗時。

為了減少圖像的冗余數(shù)據(jù),輸入圖像由方形改為矩形(如下圖:矩形輸入):將長邊resize為固定尺寸(如416),短邊按同樣比例resize,然后把短邊的尺寸盡量少地填充為32的倍數(shù)。

這種方法在推理階段稱為矩形推理(Rectangular Inference),在訓(xùn)練階段則稱為矩形訓(xùn)練(Rectangular Training)。推理階段直接對圖像進(jìn)行resize和pad就行,但是訓(xùn)練階段輸入的是一個批次的圖像集合,需要保持批次內(nèi)的圖像尺寸一致,因此處理邏輯相對復(fù)雜一些。

8.非極大值抑制——NMS

在目標(biāo)檢測的預(yù)測階段時,會輸出許多候選的anchor box,其中有很多是明顯重疊的預(yù)測邊界框都圍繞著同一個目標(biāo),這時候我就可以使用NMS來合并同一目標(biāo)的類似邊界框,或者說是保留這些邊界框中最好的一個。

9. 斷點(diǎn)訓(xùn)練

在用yolov5訓(xùn)練數(shù)據(jù)的過程中由于突發(fā)情況訓(xùn)練過程突然中斷,從頭訓(xùn)練耗時,想接著上次訓(xùn)練繼續(xù)訓(xùn)練怎么辦。放心,在yolov5中給我們提供現(xiàn)成的參數(shù)–resume

10.早停機(jī)制(Early Stopping)

patience:訓(xùn)練了多少個epoch,如果模型效果未提升,就讓模型提前停止訓(xùn)練。

fitness監(jiān)控的是增大的數(shù)值,例如mAP,如果mAP在連續(xù)訓(xùn)練patience次內(nèi)沒有增加就停止訓(xùn)練。

11.多GPU訓(xùn)練

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:YOLOv5網(wǎng)絡(luò)結(jié)構(gòu)訓(xùn)練策略詳解

文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 0人收藏

    評論

    相關(guān)推薦

    Yolov5算法解讀

    ,這幾個模型的結(jié)構(gòu)基本一樣,不同的是depth_multiple模型深度和width_multiple模型寬度這兩個參數(shù)。 yolov5主要分為輸入端,backbone,Neck,和head
    的頭像 發(fā)表于 05-17 16:38 ?1.2w次閱讀
    <b class='flag-5'>Yolov5</b>算法解讀

    在RK3568教學(xué)實(shí)驗(yàn)箱上實(shí)現(xiàn)基于YOLOV5的算法物體識別案例詳解

    非常流行的實(shí)時目標(biāo)檢測模型,它提供了出色的性能和精度。YOLOv5可以分為三個部分,分別是: 1、主干特征提取網(wǎng)絡(luò)(Backbone) 2、加強(qiáng)特征提取網(wǎng)絡(luò)(FPN) 3、分類器與回歸器(Yolo
    發(fā)表于 12-03 14:56

    請問如何在imx8mplus上部署和運(yùn)行YOLOv5訓(xùn)練的模型?

    我正在從事 imx8mplus yocto 項(xiàng)目。我已經(jīng)在自定義數(shù)據(jù)集上的 YOLOv5訓(xùn)練了對象檢測模型。它在 ubuntu 電腦上運(yùn)行良好?,F(xiàn)在我想在我的 imx8mplus 板上運(yùn)行該模型
    發(fā)表于 03-25 07:23

    龍哥手把手教你學(xué)視覺-深度學(xué)習(xí)YOLOV5

    步數(shù)的課程,希望學(xué)員學(xué)習(xí)后能在實(shí)際工業(yè)項(xiàng)目中落地應(yīng)用。本次課程將重點(diǎn)講解《YOLOv5》篇,讓沒有任何深度學(xué)習(xí)基礎(chǔ)的小白學(xué)員,通過視頻課程能動手配置好yolov5環(huán)境,能利用自己的數(shù)據(jù)集訓(xùn)練模型,能
    發(fā)表于 09-03 09:39

    怎樣使用PyTorch Hub去加載YOLOv5模型

    PyTorch Hub 加載預(yù)訓(xùn)練YOLOv5s 模型,model并傳遞圖像進(jìn)行推理。'yolov5s'是最輕最快的 YOLOv5 型號。有關(guān)所有可用模型的詳細(xì)信息,請參閱自述文
    發(fā)表于 07-22 16:02

    YOLOv5網(wǎng)絡(luò)結(jié)構(gòu)解析

    1、YOLOv5 網(wǎng)絡(luò)結(jié)構(gòu)解析  YOLOv5針對不同大?。╪, s, m, l, x)的網(wǎng)絡(luò)整體架構(gòu)都是一樣的,只不過會在每個子模塊中采用不同的深度和寬度,  分別應(yīng)對yaml文件中
    發(fā)表于 10-31 16:30

    TD-SCDMA R4網(wǎng)絡(luò)結(jié)構(gòu)和技術(shù)要求

    TD-SCDMA R4網(wǎng)絡(luò)結(jié)構(gòu)和技術(shù)要求:核心網(wǎng)演進(jìn)過程R99網(wǎng)絡(luò)結(jié)構(gòu)R4網(wǎng)絡(luò)結(jié)構(gòu)
    發(fā)表于 07-30 08:19 ?14次下載

    基于YOLO-V5網(wǎng)絡(luò)結(jié)構(gòu)及實(shí)現(xiàn)行人社交距離風(fēng)險(xiǎn)提示

    Yolov5結(jié)構(gòu)其實(shí)和Yolov4的結(jié)構(gòu)還是有一定的相似之處的,但也有一些不同,這里還是按照從整體到細(xì)節(jié)的方式,對每個板塊進(jìn)行講解。這里給出YOLO V4的
    的頭像 發(fā)表于 07-06 10:24 ?3885次閱讀

    yolov5訓(xùn)練部署全鏈路教程

    本教程針對目標(biāo)檢測算法yolov5訓(xùn)練和部署到EASY-EAI-Nano(RV1126)進(jìn)行說明。
    的頭像 發(fā)表于 01-05 18:00 ?3541次閱讀
    <b class='flag-5'>yolov5</b><b class='flag-5'>訓(xùn)練</b>部署全鏈路教程

    在C++中使用OpenVINO工具包部署YOLOv5模型

    下載并轉(zhuǎn)換YOLOv5預(yù)訓(xùn)練模型的詳細(xì)步驟,請參考:《基于OpenVINO?2022.2和蝰蛇峽谷優(yōu)化并部署YOLOv5模型》,本文所使用的OpenVINO是2022.3 LTS版。
    的頭像 發(fā)表于 02-15 16:53 ?6686次閱讀

    使用旭日X3派的BPU部署Yolov5

    本次主要介紹在旭日x3的BPU中部署yolov5。首先在ubuntu20.04安裝yolov5,并運(yùn)行yolov5并使用pytoch的pt模型文件轉(zhuǎn)ONNX。
    的頭像 發(fā)表于 04-26 14:20 ?1132次閱讀
    使用旭日X3派的BPU部署<b class='flag-5'>Yolov5</b>

    淺析基于改進(jìn)YOLOv5的輸電線路走廊滑坡災(zāi)害識別

    本文以YOLOv5網(wǎng)絡(luò)模型為基礎(chǔ),提出一種改進(jìn)YOLOv5YOLOv5-BC)深度學(xué)習(xí)滑坡災(zāi)害識別方法,將原有的PANet層替換為BiFPN結(jié)構(gòu)
    的頭像 發(fā)表于 05-17 17:50 ?1230次閱讀
    淺析基于改進(jìn)<b class='flag-5'>YOLOv5</b>的輸電線路走廊滑坡災(zāi)害識別

    【教程】yolov5訓(xùn)練部署全鏈路教程

    本教程針對目標(biāo)檢測算法yolov5訓(xùn)練和部署到EASY-EAI-Nano(RV1126)進(jìn)行說明,而數(shù)據(jù)標(biāo)注方法可以參考我們往期的文章《Labelimg的安裝與使用》。
    的頭像 發(fā)表于 01-29 15:25 ?3933次閱讀
    【教程】<b class='flag-5'>yolov5</b><b class='flag-5'>訓(xùn)練</b>部署全鏈路教程

    yolov5和YOLOX正負(fù)樣本分配策略

    整體上在正負(fù)樣本分配中,yolov7的策略算是yolov5和YOLOX的結(jié)合。因此本文先從yolov5和YOLOX正負(fù)樣本分配策略分析入手,
    發(fā)表于 08-14 11:45 ?2524次閱讀
    <b class='flag-5'>yolov5</b>和YOLOX正負(fù)樣本分配<b class='flag-5'>策略</b>

    YOLOv5的原理、結(jié)構(gòu)、特點(diǎn)和應(yīng)用

    YOLOv5(You Only Look Once version 5)是一種基于深度學(xué)習(xí)的實(shí)時目標(biāo)檢測算法,它屬于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的范疇。下面我將詳細(xì)介紹YOLOv5的原理、
    的頭像 發(fā)表于 07-03 09:23 ?9510次閱讀