99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

YOLOv5-v6.0學(xué)習(xí)筆記

新機(jī)器視覺 ? 來(lái)源:新機(jī)器視覺 ? 2023-11-23 16:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

1.1 Backbone

YOLOv5-6.0版本的Backbone主要分為Conv模塊、CSPDarkNet53和SPPF模塊。

68e0838e-7b16-11ee-939d-92fbcf53809c.png

1.1.1 Conv模塊

68f453aa-7b16-11ee-939d-92fbcf53809c.png

YOLOv5在Conv模塊中封裝了三個(gè)功能:包括卷積(Conv2d)、Batch Normalization激活函數(shù),同時(shí)使用autopad(k, p)實(shí)現(xiàn)了padding的效果。其中YOLOv5-6.0版本使用Swish(或者叫SiLU)作為激活函數(shù),代替了舊版本中的Leaky ReLU。

1.1.2 Focus模塊

Focus模塊是YOLOv5舊版本中的一個(gè)模塊,它的結(jié)構(gòu)如下圖所示。

69132f6e-7b16-11ee-939d-92fbcf53809c.jpg

其中核心部分是對(duì)圖片進(jìn)行切片(slice)操作,并且在通道維度上進(jìn)行拼接。

如下圖所示,對(duì)于一張3通道的輸入圖片,分別在w ww和h hh兩個(gè)維度上,每隔一個(gè)像素取一個(gè)值,從而構(gòu)建得到12張?zhí)卣鲌D。

這12張?zhí)卣鲌D在寬度和高度上變?yōu)樵瓉?lái)的二分之一 但是通道維度擴(kuò)充了4倍。

同時(shí),這12張?zhí)卣鲌D包含了輸入圖片的所有信息,因此Focus模塊不僅在減少信息丟失的情況下實(shí)現(xiàn)了2倍下采樣。

而且減少了參數(shù)量(params)和計(jì)算量(FLOPs),降低了CUDA顯存的消耗,從而提升了前向和后向傳遞的速度。

69317604-7b16-11ee-939d-92fbcf53809c.png

最后對(duì)拼接后的特征圖進(jìn)行一次卷積操作,將通道數(shù)增加到64。

但是在YOLOv5-6.0版本中使用了尺寸大小為6 66×6 66,步長(zhǎng)為2,padding為2的卷積核代替了Focus模塊,便于模型的導(dǎo)出,且效率更高。

1.1.3 CSPDarkNet53

1.1.3.1 CSPNet

CSPNet被提出的主要目的是為了保證在模型檢測(cè)和識(shí)別精度沒有下降的情況下,減少計(jì)算量,提高推理速度。

它的主要思想是通過分割梯度流,使梯度流通過不同的網(wǎng)絡(luò)路徑傳播。通過拼接和過渡等操作,從而實(shí)現(xiàn)更豐富的梯度組合信息。

694648c2-7b16-11ee-939d-92fbcf53809c.png695bf4b0-7b16-11ee-939d-92fbcf53809c.png

Cross Stage Partial DenseNet

以DenseNet為例,在將特征圖輸入到Dense_Block之前,將特征圖從通道維度上分為兩個(gè)部分:

其中一部分進(jìn)入Dense_Block中進(jìn)行計(jì)算,另一部分則通過一個(gè)shortcut與Dense_Block的輸出特征圖進(jìn)行拼接,最后將拼接后的特征圖輸入到Transition Layer進(jìn)行卷積操作。

1.1.3.2 Bottleneck模塊

69743e80-7b16-11ee-939d-92fbcf53809c.png

Bottleneck模塊借鑒了ResNet的殘差結(jié)構(gòu),其中一路先進(jìn)行1 11×1 11卷積將特征圖的通道數(shù)減小一半。

從而減少計(jì)算量,再通過3 33×3 33卷積提取特征,并且將通道數(shù)加倍,其輸入與輸出的通道數(shù)是不發(fā)生改變的。

而另外一路通過shortcut進(jìn)行殘差連接,與第一路的輸出特征圖相加,從而實(shí)現(xiàn)特征融合。

在YOLOv5的Backbone中的Bottleneck都默認(rèn)使shortcut為True,而在Head中的Bottleneck都不使用shortcut。

1.1.3.3 C3模塊

YOLOv4和YOLOv5均借鑒了CSPNet的思想,將其運(yùn)用于DarkNet53骨干網(wǎng)絡(luò)。YOLOv5-6.0版本中使用了C3模塊,替代了早期的BottleneckCSP模塊。

6984a108-7b16-11ee-939d-92fbcf53809c.jpg

C3模塊

699bc932-7b16-11ee-939d-92fbcf53809c.png

BottleneckCSP模塊

這兩者結(jié)構(gòu)作用基本相同,均為CSP架構(gòu),只是在修正單元的選擇上有所不同,C3模塊包含了3個(gè)標(biāo)準(zhǔn)卷積層以及多個(gè)Bottleneck模塊

C3模塊相對(duì)于BottleneckCSP模塊所不同的是,經(jīng)過Bottleneck模塊輸出后的Conv模塊被去掉了。

但是YOLOv4和YOLOv5的Backbone雖然借鑒了CSPNet,但實(shí)際上并沒有按照CSPNet原論文中那樣將輸入的特征圖在通道維度上劃分成兩個(gè)部分。

而是直接用兩路的1 11×1 11卷積對(duì)輸入特征圖進(jìn)行變換。

69aed90a-7b16-11ee-939d-92fbcf53809c.png

1.1.4 SPPF模塊

參考鏈接:

https://github.com/ultralytics/yolov5/pull/4420

YOLOv5-6.0版本使用了SPPF模塊來(lái)代替SPP模塊,其中SPP是Spatial Pyramid Pooling的簡(jiǎn)稱,即空間金字塔池化,YOLOv5借鑒了SPPNet的思想。

SPPF模塊采用多個(gè)小尺寸池化核級(jí)聯(lián)代替SPP模塊中單個(gè)大尺寸池化核,從而在保留原有功能。

即融合不同感受野的特征圖,豐富特征圖的表達(dá)能力的情況下,進(jìn)一步提高了運(yùn)行速度。

69ca61de-7b16-11ee-939d-92fbcf53809c.jpg

SPPF模塊

69d5d168-7b16-11ee-939d-92fbcf53809c.jpg

SPP模塊

1.2 Neck

YOLOv5的Neck與YOLOV4相似,均借鑒了FPN和PANet的思想。

69ee06a2-7b16-11ee-939d-92fbcf53809c.jpg

1.2.1 FPN

論文鏈接:https://arxiv.org/abs/1612.03144

FPN,即Feature Pyramid Network(特征金字塔)。

原來(lái)多數(shù)的目標(biāo)檢測(cè)算法只是采用頂層特征做預(yù)測(cè),但我們知道淺層的特征所攜帶的語(yǔ)義信息較少,而位置信息更強(qiáng);

深層的特征所攜帶的語(yǔ)義信息較豐富,而位置信息更弱。FPN的思想就是把深層的語(yǔ)義信息傳遞到淺層,從而增強(qiáng)多個(gè)尺度上的語(yǔ)義表達(dá)。

69f6b036-7b16-11ee-939d-92fbcf53809c.jpg

FPN的大致結(jié)構(gòu)如上圖所示,左邊是一個(gè)自底向上(Bottom-up)的傳播路徑,右邊是一個(gè)自頂向下(Top-down)的傳播路徑,中間是通過橫向連接(lateral connection)進(jìn)行特征融合。

其中自底向上(Bottom-up)的過程就是網(wǎng)絡(luò)的前向傳播過程,對(duì)應(yīng)前面的骨干網(wǎng)絡(luò)(Backbone)。

在前向過程中,feature map的大小在經(jīng)過某些層后會(huì)改變,而在經(jīng)過其他一些層的時(shí)候不會(huì)改變,作者將不改變feature map大小的層歸為一個(gè)stage。

因此每次抽取的特征都是每個(gè)stage的最后一層的輸出,這樣就能構(gòu)成特征金字塔。

自頂向下(Top-down)的過程是從小尺寸的feature map開始逐個(gè)stage進(jìn)行2倍上采樣。

而橫向連接則是先由自底向上(Bottom-up)過程中生成的相同大小的feature map經(jīng)過1 11×1 11的卷積核來(lái)減少通道數(shù)(如下圖所示)。

然后與2倍上采樣得到的feature map進(jìn)行相加融合(在YOLOv5中采用的是拼接融合)。

在融合之后還會(huì)對(duì)每個(gè)融合結(jié)果進(jìn)行3 33×3 33卷積,目的是消除上采樣的混疊效應(yīng)(aliasing effect)。

6a08377a-7b16-11ee-939d-92fbcf53809c.jpg

1.2.2 PANet

論文鏈接:https://arxiv.org/abs/1803.01534

FPN通過自頂向下(Top-down)的結(jié)構(gòu),將深層的語(yǔ)義信息傳遞到淺層,但是淺層的位置信息卻無(wú)法影響到深層特征。

同時(shí),F(xiàn)PN中頂部信息流需要通過骨干網(wǎng)絡(luò)(Backbone)逐層地往下傳遞,由于層數(shù)相對(duì)較多,因此計(jì)算量比較大,而PANet有效地解決了上述這些問題。

6a1bf012-7b16-11ee-939d-92fbcf53809c.jpg

如上圖(b)所示,PANet在FPN的基礎(chǔ)上又引入了一個(gè)自底向上(Bottom-up)的路徑。

經(jīng)過自頂向下(Top-down)的特征融合后,再進(jìn)行自底向上(Bottom-up)的特征融合,這樣底層的位置信息也能夠傳遞到深層,從而增強(qiáng)多個(gè)尺度上的定位能力。

同時(shí),與FPN相比(如紅色線條所示),PANet中的底層特征傳遞所需要穿越的feature map數(shù)量大大減少(如綠色線條所示),使得底層的位置信息更容易傳遞到頂部。

其中自底向上(Bottom-up)的過程是沿著N 2 → N 3 → N 4 → N 5 的路徑,逐個(gè)stage通過3 33×3 33卷積進(jìn)行2倍下采樣,然后與FPN中相應(yīng)大小的feature map進(jìn)行相加融合(在YOLOv5中采用的是拼接融合)。

1.3 Head

6a34a85a-7b16-11ee-939d-92fbcf53809c.png

YOLOv5的Head對(duì)Neck中得到的不同尺度的特征圖分別通過1 11×1 11卷積將通道數(shù)擴(kuò)展,擴(kuò)展后的特征通道數(shù)為(類別數(shù)量+5)× ××每個(gè)檢測(cè)層上的anchor數(shù)量。

其中5 55分別對(duì)應(yīng)的是預(yù)測(cè)框的中心點(diǎn)橫坐標(biāo)、縱坐標(biāo)、寬度、高度和置信度,這里的置信度表示預(yù)測(cè)框的可信度。

取值范圍為( 0 , 1 ) (0,1)(0,1),值越大說明該預(yù)測(cè)框中越有可能存在目標(biāo)。

Head中包含3個(gè)檢測(cè)層,分別對(duì)應(yīng)Neck中得到的3種不同尺寸的特征圖。

YOLOv5根據(jù)特征圖的尺寸在這3種特征圖上劃分網(wǎng)格,并且給每種特征圖上的每個(gè)網(wǎng)格都預(yù)設(shè)了3個(gè)不同寬高比的anchor,用來(lái)預(yù)測(cè)和回歸目標(biāo)。

因此上述的通道維度可以理解為在特征圖的通道維度上保存了所有基于anchor先驗(yàn)框的位置信息和分類信息,如下圖所示。

6adee4a0-7b16-11ee-939d-92fbcf53809c.jpg

目標(biāo)框回歸

6af1fbd0-7b16-11ee-939d-92fbcf53809c.jpg

YOLOv5的目標(biāo)框回歸計(jì)算公式如下所示:

6b1326de-7b16-11ee-939d-92fbcf53809c.png

其中( b x , b y , b w , b h )表示預(yù)測(cè)框的中心點(diǎn)坐標(biāo)、寬度和高度,( c x , c y )表示預(yù)測(cè)框中心點(diǎn)所在網(wǎng)格的左上角坐標(biāo),( t x , t y )

表示預(yù)測(cè)框的中心點(diǎn)相對(duì)于網(wǎng)格左上角坐標(biāo)的偏移量,( t w , t h ) 表示預(yù)測(cè)框的寬高相對(duì)于anchor寬高的縮放比例,( p w , p h ) )表示先驗(yàn)框anchor的寬高。

為了將預(yù)測(cè)框的中心點(diǎn)約束到當(dāng)前網(wǎng)格中,使用Sigmoid函數(shù)處理偏移量,使預(yù)測(cè)的偏移值保持在( 0 , 1 ) (0,1)(0,1)范圍內(nèi)。

這樣一來(lái),根據(jù)目標(biāo)框回歸計(jì)算公式,預(yù)測(cè)框中心點(diǎn)坐標(biāo)的偏移量保持在( ? 0.5 , 1.5 ) (-0.5,1.5)(?0.5,1.5)范圍內(nèi)。如上圖藍(lán)色區(qū)域所示。

正負(fù)樣本匹配

如上面所述,YOLOv5的每個(gè)檢測(cè)層上的每個(gè)網(wǎng)格都預(yù)設(shè)了多個(gè)anchor先驗(yàn)框,但并不是每個(gè)網(wǎng)格中都存在目標(biāo),也并不是每個(gè)anchor都適合用來(lái)回歸當(dāng)前目標(biāo)。

因此需要對(duì)這些anchor先驗(yàn)框進(jìn)行篩選,將其劃分為正樣本和負(fù)樣本。本文的正負(fù)樣本指的是預(yù)測(cè)框而不是Ground Truth(人工標(biāo)注的真實(shí)框)。

與YOLOv3/4不同的是,YOLOv5采用的是基于寬高比例的匹配策略,它的大致流程如下:

1.對(duì)于每一個(gè)Ground Truth(人工標(biāo)注的真實(shí)框),分別計(jì)算它與9種不同anchor的寬與寬的比值(w1/w2, w2/w1)和高與高的比值(h1/h2, h2/h1)。

2.找到Ground Truth與anchor的寬比(w1/w2, w2/w1)和高比(h1/h2, h2/h1)中的最大值,作為該Ground Truth和anchor的比值。

3.若Ground Truth和anchor的比值小于設(shè)定的比值閾值(超參數(shù)中默認(rèn)為anchor_t = 4.0)。

那么這個(gè)anchor就負(fù)責(zé)預(yù)測(cè)這個(gè)Ground Truth,即這個(gè)anchor所回歸得到的預(yù)測(cè)框就被稱為正樣本,剩余所有的預(yù)測(cè)框都是負(fù)樣本。

通過上述方法,YOLOv5不僅篩選了正負(fù)樣本,同時(shí)對(duì)于部分Ground Truth在單個(gè)尺度上匹配了多個(gè)anchor來(lái)進(jìn)行預(yù)測(cè),總體上增加了一定的正樣本數(shù)量。

除此以外,YOLOv5還通過以下幾種方法增加正樣本的個(gè)數(shù),從而加快收斂速度。

1.跨網(wǎng)格擴(kuò)充:假設(shè)某個(gè)Ground Truth的中心點(diǎn)落在某個(gè)檢測(cè)層上的某個(gè)網(wǎng)格中,除了中心點(diǎn)所在的網(wǎng)格之外,其左、上、右、下4個(gè)鄰域的網(wǎng)格中。

靠近Ground Truth中心點(diǎn)的兩個(gè)網(wǎng)格中的anchor也會(huì)參與預(yù)測(cè)和回歸,即一個(gè)目標(biāo)會(huì)由3個(gè)網(wǎng)格的anchor進(jìn)行預(yù)測(cè),如下圖所示。

6b332df8-7b16-11ee-939d-92fbcf53809c.jpg

2.跨分支擴(kuò)充:YOLOv5的檢測(cè)頭包含了3個(gè)不同尺度的檢測(cè)層,每個(gè)檢測(cè)層上預(yù)設(shè)了3種不同長(zhǎng)寬比的anchor,假設(shè)一個(gè)Ground Truth可以和不同尺度的檢測(cè)層上的anchor匹配。

則這3個(gè)檢測(cè)層上所有符合條件的anchor都可以用來(lái)預(yù)測(cè)該Ground Truth,即一個(gè)目標(biāo)可以由多個(gè)檢測(cè)層的多個(gè)anchor進(jìn)行預(yù)測(cè)

損失計(jì)算

4.1 總損失

YOLOv5對(duì)特征圖上的每個(gè)網(wǎng)格進(jìn)行預(yù)測(cè),得到的預(yù)測(cè)信息與真實(shí)信息進(jìn)行對(duì)比,從而指導(dǎo)模型下一步的收斂方向。

損失函數(shù)的作用就是衡量預(yù)測(cè)信息和真實(shí)信息之間的差距,若預(yù)測(cè)信息越接近真實(shí)信息,則損失函數(shù)值越小。YOLOv5的損失主要包含三個(gè)方面:

矩形框損失(bbox_loss)、分類損失(cls_loss)、置信度損失(obj_loss)。

總損失的表達(dá)式為:

Loss=box_gain×bbox_loss+cls_gain×cls_loss+obj_gain×obj_loss

其中b o x _ g a i n box\_gainbox_gain、c l s _ g a i n 分別對(duì)應(yīng)不同的損失權(quán)重,默認(rèn)值分別為0.05,0.5,1.0。

4.2 邊界框損失

文鏈接:https://arxiv.org/abs/1911.08287

IoU,即交并比,它的作用是衡量目標(biāo)檢測(cè)中預(yù)測(cè)框與真實(shí)框的重疊程度。假設(shè)預(yù)測(cè)框?yàn)锳,真實(shí)框?yàn)锽,則IoU的表達(dá)式為:IoU= A?BA?B

6b42ec2a-7b16-11ee-939d-92fbcf53809c.jpg

但是當(dāng)預(yù)測(cè)框與真實(shí)框沒有相交時(shí),IoU不能反映兩者之間的距離,并且此時(shí)IoU損失為0,將會(huì)影響梯度回傳,從而導(dǎo)致無(wú)法訓(xùn)練。

此外,IoU無(wú)法精確的反映預(yù)測(cè)框與真實(shí)框的重合度大小。因此為了改進(jìn)IoU,又不斷提出了GIoU、DIoU和CIoU等一系列IoU的變種。

YOLOv5默認(rèn)使用CIoU來(lái)計(jì)算邊界框損失。CIoU是在DIoU的基礎(chǔ)上,進(jìn)一步考慮了Bounding Box的寬高比。

其中DIoU將預(yù)測(cè)框和真實(shí)框之間的距離,重疊率以及尺度等因素都考慮了進(jìn)去,使得目標(biāo)框回歸變得更加穩(wěn)定。它的損失計(jì)算公式為

6b582928-7b16-11ee-939d-92fbcf53809c.png

其中b和b^{gt}分別表示預(yù)測(cè)框和真實(shí)框的中心點(diǎn),ρ hoρ表示兩個(gè)中心點(diǎn)之間的歐式距離,c 表示預(yù)測(cè)框和真實(shí)框的最小閉包區(qū)域的對(duì)角線距離,如下圖所示

6b6baed0-7b16-11ee-939d-92fbcf53809c.png6b809944-7b16-11ee-939d-92fbcf53809c.png

4.3 分類損失

6b979cde-7b16-11ee-939d-92fbcf53809c.png

4.4 置信度損失

每個(gè)預(yù)測(cè)框的置信度表示這個(gè)預(yù)測(cè)框的可靠程度,值越大表示該預(yù)測(cè)框越可靠,也表示越接近真實(shí)框。

如下圖所示,紅點(diǎn)A 、B 、C 、D 表示真實(shí)框的中心點(diǎn),那么每個(gè)紅點(diǎn)所在網(wǎng)格對(duì)應(yīng)的anchor所預(yù)測(cè)和回歸得到的預(yù)測(cè)框置信度應(yīng)該比較大甚至接近1,而其它網(wǎng)格對(duì)應(yīng)的預(yù)測(cè)框置信度則會(huì)比較小甚至接近0。

6ba9d124-7b16-11ee-939d-92fbcf53809c.png

對(duì)于置信度標(biāo)簽,YOLO之前的版本認(rèn)為所有存在目標(biāo)的網(wǎng)格(正樣本)對(duì)應(yīng)的標(biāo)簽值均為1,其余網(wǎng)格(負(fù)樣本)對(duì)應(yīng)的標(biāo)簽值為0。

但是這樣帶來(lái)的問題是有些預(yù)測(cè)框可能只是在目標(biāo)的周圍,而并不能很好地框住目標(biāo)。

因此YOLOv5的做法是,根據(jù)網(wǎng)格對(duì)應(yīng)的預(yù)測(cè)框與真實(shí)框的CIoU作為該預(yù)測(cè)框的置信度標(biāo)簽。它的代碼實(shí)現(xiàn)如下:

tobj[b, a, gj, gi] = (1.0 - self.gr) + self.gr * score_iou

其中self.gr為標(biāo)簽平滑系數(shù),當(dāng)參數(shù)self.gr為1時(shí),置信度標(biāo)簽就等于CIoU。

與計(jì)算分類損失一樣,YOLOv5默認(rèn)使用二元交叉熵函數(shù)來(lái)計(jì)算置信度損失。

除此以外,對(duì)于不同尺度的檢測(cè)層上得到的置信度損失,YOLOv5分配了不同的權(quán)重系數(shù)。

按照檢測(cè)層尺度從大到小的順序,對(duì)應(yīng)的默認(rèn)的權(quán)重系數(shù)分別為4.0、1.0、0.4,即用于檢測(cè)小目標(biāo)的大尺度特征圖上的損失權(quán)重系數(shù)更大,從而使得網(wǎng)絡(luò)在訓(xùn)練時(shí)更加側(cè)重于小目標(biāo)。

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

5.1 Mosaic

YOLOv5借鑒了YOLOv4中的Mosaic數(shù)據(jù)增強(qiáng)方法,它是CutMix數(shù)據(jù)增強(qiáng)方法的進(jìn)化版。

主要思想是任意抽取四張圖片進(jìn)行隨機(jī)裁剪,然后拼接到一張圖片上作為訓(xùn)練數(shù)據(jù),同時(shí)每張圖片上的標(biāo)注框也會(huì)進(jìn)行相應(yīng)的裁剪。

這樣做的好處是變相增大了batch_size,豐富了圖像背景,同時(shí)通過對(duì)識(shí)別物體的裁剪,使模型根據(jù)局部特征識(shí)別物體,有助于被遮擋物體的檢測(cè),從而提升了模型的檢測(cè)能力。Mosaic數(shù)據(jù)增強(qiáng)的操作過程如下:

1.假設(shè)抽取的每張圖片尺寸為( 640 , 640 ) ,重新拼接后的圖片尺寸為( 1280 , 1280 ) 。在下圖的灰色區(qū)域中隨機(jī)生成一個(gè)中心點(diǎn)( x c , y c ) ,從而將平面分割成四塊不同大小的區(qū)域。

labels4, segments4 = [], []
s = self.img_size
yc, xc = (int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border)

6bd785ba-7b16-11ee-939d-92fbcf53809c.png

2.在加載第一張圖片后,從數(shù)據(jù)集中再隨機(jī)抽取三張圖片,并打亂這四張圖片的順序。

indices = [index] + random.choices(self.indices, k=3)
random.shuffle(indices)

3.將第一張圖像放置在左上角的區(qū)域,其右下角坐標(biāo)與隨機(jī)生成的中心點(diǎn)對(duì)齊;

將第二張圖像放置在右上角的區(qū)域,其左下角坐標(biāo)與隨機(jī)生成的中心點(diǎn)對(duì)齊;

將第三張圖像放置在左下角的區(qū)域,其右上角坐標(biāo)與隨機(jī)生成的中心點(diǎn)對(duì)齊;

將第四張圖像放置在右下角的區(qū)域,其左上角坐標(biāo)與隨機(jī)生成的中心點(diǎn)對(duì)齊。

if i == 0: # top left
 img4 = np.full((s * 2, s * 2, img.shape[2]), 114, dtype=np.uint8)
 x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc
 x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h
elif i == 1: # top right
 x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s * 2), yc
 x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h
elif i == 2: # bottom left
 x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(s * 2, yc + h)
 x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, w, min(y2a - y1a, h)
elif i == 3: # bottom right
 x1a, y1a, x2a, y2a = xc, yc, min(xc + w, s * 2), min(s * 2, yc + h)
 x1b, y1b, x2b, y2b = 0, 0, min(w, x2a - x1a), min(y2a - y1a, h)


img4[y1a:y2a, x1a:x2a] = img[y1b:y2b, x1b:x2b] # img4[ymin:ymax, xmin:xmax]
padw = x1a - x1b
padh = y1a - y1b

4.假設(shè)抽取的圖片尺寸超過了填充區(qū)域給定的大小,則需要對(duì)抽取的圖片中超過填充區(qū)域的部分進(jìn)行裁剪,如下圖所示。

6be5d692-7b16-11ee-939d-92fbcf53809c.png

假設(shè)抽取的圖片尺寸小于填充區(qū)域給定的大小,則需要對(duì)缺少的區(qū)域進(jìn)行填充,如下圖所示。

6bfbaa80-7b16-11ee-939d-92fbcf53809c.png

5.將歸一化后的標(biāo)注框坐標(biāo)還原到原圖尺寸,然后轉(zhuǎn)換到拼接后的坐標(biāo)系中,得到新的標(biāo)注框坐標(biāo)。

labels, segments = self.labels[index].copy(), self.segments[index].copy()
if labels.size:
 labels[:, 1:] = xywhn2xyxy(labels[:, 1:], w, h, padw, padh)
 segments = [xyn2xy(x, w, h, padw, padh) for x in segments]
labels4.append(labels)
segments4.extend(segments)

6.由于重新拼接后的圖片尺寸為( 1280 , 1280 ) ,因此還需要將其尺寸縮放到( 640 , 640 ) ,保證與用于訓(xùn)練的輸入圖片尺寸一致。

5.2 MixUp

MixUp是一種簡(jiǎn)單的數(shù)據(jù)增強(qiáng)方法,它的主要思想是將兩個(gè)隨機(jī)樣本的特征和標(biāo)簽進(jìn)行加權(quán)求和,從而得到一個(gè)新的訓(xùn)練樣本。

公式如下:

6c08edd0-7b16-11ee-939d-92fbcf53809c.png

其中x 1和x 2 表示兩個(gè)不同的輸入樣本,y 1 和y 2 表示兩個(gè)不同的輸入樣本對(duì)應(yīng)的標(biāo)簽,λ表示兩個(gè)樣本融合的比例系數(shù),且滿足Beta分布。

但是在YOLOv5中只對(duì)圖像特征做了融合,而對(duì)標(biāo)簽做了拼接,具體的代碼實(shí)現(xiàn)如下:

r = np.random.beta(32.0, 32.0)
im = (im * r + im2 * (1 - r)).astype(np.uint8)
labels = np.concatenate((labels, labels2), 0)

審核編輯:湯梓紅

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

    關(guān)注

    7

    文章

    2788

    瀏覽量

    50453
  • 封裝
    +關(guān)注

    關(guān)注

    128

    文章

    8694

    瀏覽量

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

    關(guān)注

    0

    文章

    48

    瀏覽量

    11610

原文標(biāo)題:YOLOv5-v6.0學(xué)習(xí)筆記

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    YOLOv5】LabVIEW+YOLOv5快速實(shí)現(xiàn)實(shí)時(shí)物體識(shí)別(Object Detection)含源碼

    前面我們給大家介紹了基于LabVIEW+YOLOv3/YOLOv4的物體識(shí)別(對(duì)象檢測(cè)),今天接著上次的內(nèi)容再來(lái)看看YOLOv5。本次主要是和大家分享使用LabVIEW快速實(shí)現(xiàn)yolov5
    的頭像 發(fā)表于 03-13 16:01 ?2630次閱讀

    Yolov5算法解讀

    (prediction)。backbone是New CSP-Darknet53。Neck層為SPFF和New CSP-PAN。Head層為Yolov3 head。 yolov5 6.0版本的主要架構(gòu)如下圖所示: 從整體結(jié)構(gòu)圖中,
    的頭像 發(fā)表于 05-17 16:38 ?1.3w次閱讀
    <b class='flag-5'>Yolov5</b>算法解讀

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

    YOLOv5兼具速度和精度,工程化做的特別好,Git clone到本地即可在自己的數(shù)據(jù)集上實(shí)現(xiàn)目標(biāo)檢測(cè)任務(wù)的訓(xùn)練和推理,在產(chǎn)業(yè)界中應(yīng)用廣泛。開源社區(qū)對(duì)YOLOv5支持實(shí)例分割的呼聲高漲,YOLOv5
    的頭像 發(fā)表于 12-21 10:17 ?2964次閱讀
    在C++中使用OpenVINO工具包部署<b class='flag-5'>YOLOv5</b>-Seg模型

    DongshanPI-AICT全志V853開發(fā)板搭建YOLOV5-V6.0環(huán)境

    Conda搭建YOLOV5-V6.0環(huán)境 0.前言 ? 本章節(jié)主要記錄如何搭建yolov5-v6.0環(huán)境,并支持CUDA加速。此文章的硬件要求如下,如果您的電腦沒有顯卡設(shè)備,這篇文章無(wú)法給您當(dāng)做
    發(fā)表于 07-12 09:59

    CV之YOLOv3:深度學(xué)習(xí)之計(jì)算機(jī)視覺神經(jīng)網(wǎng)絡(luò)Yolov3-5clessses訓(xùn)練自己的數(shù)據(jù)集全程記錄

    CV之YOLOv3:深度學(xué)習(xí)之計(jì)算機(jī)視覺神經(jīng)網(wǎng)絡(luò)Yolov3-5clessses訓(xùn)練自己的數(shù)據(jù)集全程記錄
    發(fā)表于 12-24 11:51

    labview調(diào)用yolo 目標(biāo)檢測(cè)速度太慢?yolov4:速度和精度的完美結(jié)合,性能和精度碾壓yolov3

    本帖最后由 wcl86 于 2021-5-10 08:56 編輯 yolov4:速度差不多的精度碾壓,精度差不多的速度碾壓!經(jīng)過測(cè)試yolov4在相同速度下,精度完全碾壓yolo-v
    發(fā)表于 01-05 09:22

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

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

    如何YOLOv5測(cè)試代碼?

    使用文檔“使用 YOLOv5 進(jìn)行對(duì)象檢測(cè)”我試圖從文檔第 10 頁(yè)訪問以下鏈接(在 i.MX8MP 上部署 yolov5s 的步驟 - NXP 社區(qū)) ...但是這樣做時(shí)會(huì)被拒絕訪問。該文檔沒有說明需要特殊許可才能下載 test.zip 文件。NXP 的人可以提供有關(guān)如
    發(fā)表于 05-18 06:08

    基于YOLOv5的目標(biāo)檢測(cè)文檔進(jìn)行的時(shí)候出錯(cuò)如何解決?

    你好: 按Milk-V Duo開發(fā)板實(shí)戰(zhàn)——基于YOLOv5的目標(biāo)檢測(cè) 安裝好yolov5環(huán)境,在執(zhí)行main.py的時(shí)候會(huì)出錯(cuò),能否幫忙看下 main.py: import torch
    發(fā)表于 09-18 07:47

    yolov5s_v6.1_3output.torchscript.pt模型auto_cali一鍵量化工具執(zhí)行報(bào)錯(cuò)的原因?

    版本是230501 torch的版本是v1.8.0+cpu 下載yolov5官方的yolov5s.pt 執(zhí)行 python3 export.py --weights ./yolov5
    發(fā)表于 09-18 08:01

    NCNN Yolov5 Android apk開發(fā)記錄

    本文轉(zhuǎn)自:知乎作者:djh一、環(huán)境準(zhǔn)備1.yolov5[鏈接]1、git clone 改模型。2、下載預(yù)編譯的模型,這里使用yolov5s2.ncnnReleases · Tenc...
    發(fā)表于 01-25 17:49 ?2次下載
    NCNN <b class='flag-5'>Yolov5</b> Android apk開發(fā)記錄

    使用旭日X3派的BPU部署Yolov5

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

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

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

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

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

    Yolov5理論學(xué)習(xí)筆記

    網(wǎng)絡(luò)在初始錨框的基礎(chǔ)上 基于訓(xùn)練數(shù)據(jù) 輸出預(yù)測(cè)框,因此初始錨框也是比較重要的一部分。見配置文件*.yaml, yolov5預(yù)設(shè)了COCO數(shù)據(jù)集640×640圖像大小的錨定框的尺寸:
    的頭像 發(fā)表于 09-12 17:08 ?1146次閱讀
    <b class='flag-5'>Yolov5</b>理論<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>