【YOLO學習筆記】YOLOv5詳解

一、數據增強

在這里插入圖片描述

  • mosaic
  • 仿射變換與透視變換
  • Mixup

mosaic代碼位置在這里插入圖片描述仿射變換 與 透視變換?代碼片段位置
在這里插入圖片描述

二、網絡結構

1. 網絡不同尺寸

nsmlx與網絡深寬度

yolov5 官方提供了5個目標檢測的網絡版本:yolov5nyolov5syolov5myolov5lyolov5x ,早年是剛好對應的五個yaml文件:
在這里插入圖片描述
后來改為了一個yaml文件,通過scales參數控制尺寸:

scales: # model compound scaling constants, i.e. 'model=yolov5n.yaml' will call yolov5.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]s: [0.33, 0.50, 1024]m: [0.67, 0.75, 1024]l: [1.00, 1.00, 1024]x: [1.33, 1.25, 1024]
  • 各版本的網絡結構都是類似的,backbone和head參數都一樣,不同的只是 depth_multiplewidth_multiple 這兩個參數
    • depth_multiple控制網絡深度:有些模塊需要重復 n 次,此時,我們就會用到 depth_multiple * n 來控制該模塊重復的次數,達到控制網路深度的作用
    • width_multiple控制網絡寬度:用于控制某些模塊輸出的特征圖 channel 數,比如 卷積層的輸出 channel 數,達到控制網絡寬度的效果。
  • yolov5nyolov5 系列中深度最小,特征圖channel數最少的網絡。其他的都是在此基礎上不斷加深(depth),不斷加寬(width)。

在這里插入圖片描述nsmlx從左往右網絡的尺寸變大,參數量變大。

舉例說明l和s尺寸

# YOLOv5 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

depth控制網絡深度
比如說,yolov5l型號的backbone中,number表示該模塊的重復次數,四個C3塊分別重復3, 6, 9, 3次。
如果是yolov5s型號,那么需要都乘depth = 0.33,重復次數變為1, 2, 3, 1。原本就是1或者乘完小于1的就不用乘重復1次。

width控制網絡寬度
比如,yolov5l型號的backbone中,args表示參數列表,第一個值是模塊輸出的channel數,前兩Conv層分別為64, 128
如果是yolov5s型號,需要都乘width=0.5,變為32, 64

在這里插入圖片描述

官方更多改造版

還有其他版本的配置文件,可查看https://github.com/ultralytics/yolov5/tree/master/models/hub

常規版本名稱后加了6的,是能更好支持更大尺寸圖像(常規只能處理640x640)1280x1280。
在這里插入圖片描述


在這里插入圖片描述
官方提供的性能對比圖:
在這里插入圖片描述

2. yaml參數解讀

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license# Ultralytics YOLOv5 object detection model with P3/8 - P5/32 outputs
# Model docs: https://docs.ultralytics.com/models/yolov5
# Task docs: https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov5n.yaml' will call yolov5.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]s: [0.33, 0.50, 1024]m: [0.67, 0.75, 1024]l: [1.00, 1.00, 1024]x: [1.33, 1.25, 1024]# YOLOv5 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# YOLOv5 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]] # Detect(P3, P4, P5)

每一行有4個參數[from, number, module, args]

  • from:模塊輸入來源,
    • 一般為-1,表示上一層輸出是本層輸入。
    • 其他數字指層的索引(從0開始)
    • 對于Concat模塊,from參數是一個list列表,因為有兩個輸入,比如[-1, 4]
  • number:這個模塊或者模塊內的某一部分,重復堆疊多少次。比如[-1, 3, C3, [128]]說明C3塊中的殘差塊要堆疊3次。
  • module:模塊名稱。
  • args:為一個list,記錄該模塊的參數,一般第一個值表示輸出的channel數,具體看下面圖片

3. 各個模塊

Conv

在這里插入圖片描述
padding不寫時,默認輸出尺寸不變,自動計算padding大小。
在這里插入圖片描述

C3

一個CSP模塊。C3的名稱含義是,除了要重復的殘差塊以外,有3個卷積層。( a CSP bottleneck includes 3 conv layers)?
在這里插入圖片描述
args的第二個參數為True或者不寫時,表示殘差塊都有殘差連接。

在這里插入圖片描述
例子中,輸入尺寸為 160x160x64 , c1=64 ,c2=64, n=1?

SPPF

在這里插入圖片描述
args的第二個參數表示max_pooling層的Kernel size

在這里插入圖片描述
例子中,輸入尺寸為 20x20x512 , c1=512 ,c2=512, k=5?

Concat

在這里插入圖片描述
args就一個元素,記錄在第幾個維度上拼接。1表示第二個維度也就是channel維度。(batch, channel, w, h)

在這里插入圖片描述

nn.Upsample

在這里插入圖片描述
args的三個值對應nn.Upsample的參數,輸出尺寸、縮放比例、插值方法。

直接調用 nn.Upsample ,傳入對應參數

import torch.nn as nnupsample = nn.Upsample(size=None, scale_factor=2, mode='nearest')
  • size:指定輸出的尺寸 。sizescale_factor 只能二選一填寫,輸出尺寸和縮放比例都指定時會報錯。
  • scale_factor:指定尺寸放大的比例因子。
  • mode:指定上采樣的模式。可選的模式包括:
    • 'nearest':最近鄰插值,使用最近鄰像素的值來進行插值。
    • 'linear':線性插值,使用線性插值方法。
    • 'bilinear':雙線性插值,對每個輸出像素使用二維線性插值方法。
    • 'bicubic':雙三次插值,使用雙三次插值方法。
    • 'trilinear':三線性插值,對每個輸出像素使用三維線性插值方法。

Detect

網絡輸出層
在這里插入圖片描述
在這里插入圖片描述每個輸出對應3個anchor。
在這里插入圖片描述

后來版本就用Anchor-free,所以不指定anchors參數了[[17, 20, 23], 1, Detect, [nc]]

3. yolov5l完整網絡結構圖

Axure圖片資料

在這里插入圖片描述

4. 網絡搭建代碼詳解

三、損失函數

YOLOv5 是基于 anchor 的目標檢測算法,即 anchor - base。每個網格(grid cell)都會預先設定幾個不同尺寸和比例的 anchor 框。這些 anchor 框是根據訓練數據集里目標的尺寸統計信息得到的, 例如常見的目標寬度、高度的分布等。在檢測過程中,模型會以這些 anchor 框為基礎,預測目標的位置、尺寸以及類別等信息。比如,模型會預測相對于 anchor 框的偏移量(包括中心點的偏移、寬高的縮放比例),從而得到最終的預測邊界框(bounding box)

在訓練過程中,需要確定哪些 anchor 是正樣本(負責預測目標),哪些是負樣本(不負責預測目標),具體規則下面介紹。

1. 網絡預測結果

在這里插入圖片描述
網絡預測出的結果為一個list,三個元素對應于三個尺度的feature map。比如feature map 1張量尺寸為(2,3,80,80,85),對應不同維度在特征圖、錨框、預測參數(坐標、置信度、類別 )上的含義。

張量維度 (2, 3, 80, 80, 85) 的拆解說明

  • 2batch_size(批次大小,即一次處理的圖像數量 )
  • 3:對應該尺度下的 3anchors(錨框數量 )
  • 80feature map 的寬(特征圖寬度維度 )
  • 80feature map 的高(特征圖高度維度 )
  • 85:由以下部分組成(85 = 2 + 2 + 1 + 80 ):
    • 2(tx, ty),預測的 bbox 的中心點坐標偏移量
    • 2(tw, th),預測的 bbox 的寬高因子
    • 1:包含預測對象的置信度(不關心是什么類別,只判斷是否有 )
    • 80:COCO數據集的 80 個類別的置信度(每個類別對應的預測置信度 )

如何通過網絡預測結果的 tx,ty,tw,tht_x, t_y, t_w, t_htx?,ty?,tw?,th?,進一步計算得到feature map 尺度下的預測框bbox的中心點坐標和寬高的:

predicted bbox 的中心點坐標計算

回故yolov3的坐標計算方式:
在這里插入圖片描述

  • 模型輸出的 tx,tyt_x, t_ytx?,ty? 是無約束的數值,通過 Sigmoid 函數 σ(t)=11+e?t\sigma(t) = \frac{1}{1 + e^{-t}}σ(t)=1+e?t1?
    可將其壓縮到 (0, 1),表示 預測中心點在網格內的相對偏移比例(0 對應網格左上角,1 對應右下角)。

v3方法是直接網格基準 + 歸一化偏移得到 bbox 中心點在特征圖上的絕對位置。但計算得到的中心點預測存在的問題:

因為 預測值 tx、tyt_x、t_ytx?ty? 無法取到正負無窮,那么預測中心點坐標 bx,byb_x, b_ybx?by? 無法取到 0 或 1,即 中心點無法落在 grid cell 的四個邊緣上。

yolov5對其做了改進:

在這里插入圖片描述

取值范圍 (圖中黃色綠區域):

cx?0.5<x<cx+1.5cy?0.5<y<cy+1.5c_x - 0.5 < x < c_x + 1.5 \\ c_y - 0.5 < y < c_y + 1.5 cx??0.5<x<cx?+1.5cy??0.5<y<cy?+1.5

中心點的范圍上下界正好是grid cell四個角相鄰的grid cell的中心點。所以本grid cell 取不到邊緣,會由相鄰周圍grid cell來負責預測。

在這里插入圖片描述

yolov5進行改進:偏移范圍擴展(2?σ(t)?0.52 \cdot \sigma(t) - 0.52?σ(t)?0.5
給偏移量 σ(t)\sigma(t)σ(t) 乘以 2 并減 0.5 后,偏移范圍變為 [-0.5, 1.5] 。這讓預測的中心點可以“超出當前網格”,覆蓋當前grid cell的邊緣以及相鄰網格區域(比如目標中心靠近網格邊緣時,可能屬于當前網格預測,但實際坐標在相鄰網格范圍內),提升對邊界目標的預測能力。

predicted bbox 的寬高計算

回歸yolov3的bbox寬高計算:在這里插入圖片描述
github上有人提出了高度和寬度預測存在的問題 ,yolov3和yolov4都有這個問題:
在這里插入圖片描述

twt_wtw?tht_hth? 較大時,etwe^{t_w}etw?ethe^{t_h}eth? 可能會指數爆炸,導致預測框bbox的寬度和高度不受限,進一步導致梯度不受控,損失值為NaN,最終會導致訓練失敗。

yolov5也對這點做了改進,使得bbox寬高范圍限值在了4倍的anchor尺寸以內:
在這里插入圖片描述

2. 正樣本匹配

正樣本匹配的目的,對于圖像中的每一個 bbox,找出:

  1. 它由輸出特征圖中的哪些 grid cell 來負責預測
  2. 它由哪些尺寸的 anchor 來負責預測

基于這些負責預測的 grid cells 中負責預測的 anchors,得到的預測 bbox 就是正樣本,否則就是負樣本

也可以簡單理解為

  • 負責預測 gt boxanchor 就是正樣本,
  • 不負責預測的 anchor 就是負樣本

正樣本匹配舉例說明

下面我們舉例說明:

我們想要從網絡輸出的 3個 feature map 中分別找出預測某 gt box 的正樣本,下面我們以 feature map 1 舉例 (從 feature map 1 中找正樣本)
在這里插入圖片描述

yaml文件中預設的anchors:
在這里插入圖片描述

  • 第一個用于檢測小尺度物體的3個anchors,對應80x80的feature map 1,P3/8
  • 第二行是用于檢測中等尺度物體的3個anchors,對應40x40的feature map 2, P4/16
  • 第三行是用于檢測大物體的,對應20x20的feature map 3,P5/32

yaml文件中預設的anchors的尺寸,相對于640x640的原圖大小。第一行的三個大小的anchors映射到feature map 1的尺寸縮減8倍,如圖所示。
fearture map1中的每個像素映射會原圖都是一個grid cell,每個grid cell都會基于三個尺寸的anchors預測出三個bbox。所以,feature map 1 一共會預測出 80 x 80 x 3 = 19200 個 anchors。

在這里插入圖片描述
如何從19200個anchors篩選出正樣本。

(1)假設 gt bbox 的中心點落在如上圖所示的 grid cell 中的左下方區域,根據規則(具體選grid cell的規則后面介紹)我們就讓3個grid cell一起來預測該gt box。

  • 該grid cell
  • 它左邊的grid cell
  • 它下邊的grid cell
    在這里插入圖片描述

(2)將 gt box 的寬度和高度 分別和 3個 anchor 的寬度和高度做對比,選出適合的 anchors 用于預測 gt box (具體選擇anchors的規則之后介紹)。
在這里插入圖片描述
這里假設 anchor 1 和 anchor 2 用于負責預測 gt box,對應正樣本。不負責預測的anchor 3對應負樣本。

所以,一共 80 x 80 x 3 = 19200 個 anchors 中,僅僅對于這feature map 1的一個 gt box 來說,有6個正樣本(3個grid_cell x 2個anchors),其他的都是負樣本。

選擇負責預測的grid cell的規則

規則為:如果ground truth中心點落在 grid cell 左上區域,那么本身和左還有上3個grid cell共同負責預測。
在這里插入圖片描述
為什么是這三個grid cell,因為 gt box中心點所在的 grid cell 以及它的左側、上側、左上側的 4個 grid cell 的預測中心點位置都可能落在 該 grid cell 的左上角,其他的不行。

這里對gt box中心點所在的 grid cell 周圍一圈的grid cell 分析。圖中粉色 grid cell 對應的預測中心點的取值范圍為黃色區域
在這里插入圖片描述

有四個grid cell的范圍覆蓋到了gt box的中心點,但官方實現時,僅使用 該 grid cell 左側 和上側的 grid cell 來一起進行預測,不使用 左上角的grid cell,可能是因為 左上角的 grid cell 預測中心點落在 該區域的概率太小,所以不進行考慮。

在這里插入圖片描述

上面我們是以 gt bbox 的中心點落在 grid cell 左上角為例 來進行分析的,以下是 gt bbox 的中心點落在 grid cell 左上角、右上角,左下角、右下角的,中心點的所有情況。圖片來源:https://docs.ultralytics.com/yolov5/tutorials/architecture_description/#44-build-targets

在這里插入圖片描述

選擇負責預測的anchor的規則

選擇規則為:將 gt box 和 3個 anchors 比對寬度和高度, 如果滿足我們指定的條件,那么這個尺寸的 anchors 就負責預測這個 gt box。
在這里插入圖片描述

指定的條件為:
max?(wgtwat,watwgt,hgthat,hathgt)<4\max\left( \frac{w_{\text{gt}}}{w_{\text{at}}},\ \frac{w_{\text{at}}}{w_{\text{gt}}},\ \frac{h_{\text{gt}}}{h_{\text{at}}},\ \frac{h_{\text{at}}}{h_{\text{gt}}} \right) < 4 max(wat?wgt??,?wgt?wat??,?hat?hgt??,?hgt?hat??)<4

翻譯與代碼:

j = torch.max(r, 1 / r).max(2)[0] < self.hyp["anchor_t"]

等價轉換后:
14<wgtwat,watwgt,hgthat,hathgt<4\frac{1}{4} < \frac{w_{\text{gt}}}{w_{\text{at}}},\ \frac{w_{\text{at}}}{w_{\text{gt}}},\ \frac{h_{\text{gt}}}{h_{\text{at}}},\ \frac{h_{\text{at}}}{h_{\text{gt}}} < 4 41?<wat?wgt??,?wgt?wat??,?hat?hgt??,?hgt?hat??<4

即兩個框的寬高比誤差分別不大于4倍。如圖:
在這里插入圖片描述

舉例參考:https://docs.ultralytics.com/yolov5/tutorials/architecture_description/#44-build-targets

因為每個尺寸的特征圖都設計的三個尺寸的anchors,anchors長寬都放大4倍后分別和gt box對比,如果超出就為負樣本。比如圖匯總的anchor 1,而對于anchor 2 和 3是符合條件的。

注 : 同一個 gt bbox 可以由多個不同尺寸的 anchor 來進行預測

在這里插入圖片描述

正樣本匹配代碼講解
代碼在官方build_targets函數中,代碼解釋圖

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917829.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917829.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917829.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WebRTC前處理模塊技術詳解:音頻3A處理與視頻優化實踐

一、WebRTC前處理模塊概述 WebRTC&#xff08;Web Real-Time Communication&#xff09;作為實時音視頻通信的核心技術&#xff0c;其前處理模塊是提升媒體質量的關鍵環節。該模塊位于媒體采集與編碼之間&#xff0c;通過對原始音頻/視頻數據進行優化處理&#xff0c;解決實時…

ssm復習

Spring Framework系統架構核心容器的學習IOC/DIIOC容器IOC使用對象時,由主動new產生的對象轉換為由外部提供對象,此過程中對象的創建的控制權交由外部,此思想稱為控制反轉, (實現了自己new的解耦) 對象創建的控制權Spring提供一個容器,稱為IOC容器 用來充當IOC思想的外部Bea…

ESP32:2.搭建UDP服務器

硬件&#xff1a;ESP32-Devkit-V4 MODEL:ESP32-32U 庫&#xff1a;ESP-IDF v5.4.1 系統&#xff1a;windows中的虛擬機 ubuntu 22.04 實現STA&#xff0c;主動連接AP后&#xff0c;打印IP地址&#xff0c;獲取IP后&#xff0c;創建socket&#xff0c;搭建UDP 服務器&#xff0…

【Linux】動靜態庫制作

&#x1f43c;故事背景假設今天你有一位舍友。你需要幫助他完成老師的作業。而他寫的代碼依賴兩個文件&#xff08;mymath.h,mystdio.h&#xff09;。但是這兩個文件的功能他不會寫&#xff0c;他只會調用。他的調用代碼:#include"mystdio.h" #include"mymath.h…

使用Database Navigator插件進行連接sqlite報錯invalid or incomplete database

解決方案 &#xff0c;將這個db.sqlite3文件拷貝到盤的文件中 &#xff0c;修改文件夾名字&#xff0c;重新使用絕對路徑訪問 db.sqlite3&#xff0c;將路徑名字的中文去掉 &#xff0c;不能有中文

【Linux】重生之從零開始學習運維之主從MGR高可用

MGR集群部署12、15、18主機環境準備ssh免密碼登錄\rm -rf .ssh/* ssh-keygen ssh-copy-id 127.1 scp -r .ssh 10.0.0.12:/root/ ssh root10.0.0.12還原基礎環境systemctl stop mysqld \rm -rf /var/lib/mysql/* id mysqlvim /etc/my.cnf.d/mysql-server.cnf [mysqld] datadir/v…

如何在虛擬機(Linux)安裝Qt5.15.2

1.進入到阿里的網站下載在線安裝包 qt-official_releases-online_installers安裝包下載_開源鏡像站-阿里云 https://mirrors.aliyun.com/qt/official_releases/online_installers/?spma2c6h.13651104.d-5201.2.60ad4773ZZNPNm 2.下載完畢后&#xff0c;進入到下載地址&…

【運維進階】DHCP服務配置和DNS域名解析

DHCP服務配置和DNS域名解析 DHCP 服務介紹 在大型網絡中&#xff0c;系統靜態分配IP地址面臨問題&#xff1a; 確保不要同時在多個系統上使用同一個地址。部署新系統通常需要手動分配其IP地址。在云環境中&#xff0c;實例的網絡是自動化配置的。 動態主機配置協議&#xff08;…

VisionPro MR環境下虛擬物體與現實的透明度混合

display.rgb (virtualcontent.rgb*1)(passthrough.rgb*(1 - vistualcontent.a) viirtualcontent預乘過a值了&#xff0c;跟透明度混合公式一致 人頭檢測挖孔不清晰問題&#xff0c;這個a值變成設備層動態檢測人頭的a值&#xff0c;當面前的渲染壓力過大時&#xff0c;會導致…

css怪異模式(Quirks Mode)和標準模式(Standards Mode)最明顯的區別

文章目錄css怪異模式&#xff08;Quirks Mode&#xff09;和標準模式&#xff08;Standards Mode&#xff09;最明顯的區別詳細對比示例對比&#xff08;盒模型&#xff09;標準模式&#xff08;Standards Mode&#xff09;怪異模式&#xff08;Quirks Mode&#xff09;如何觸發…

一種簡單的3dnr去噪算法介紹

一段未經過插補的視頻圖像可以分解為若干幀&#xff0c;為了能正確地找到并去除圖像幀中的噪聲污染&#xff0c;由于視頻圖像各幀的連續性&#xff0c;在去噪的過程中就必須考慮幀圖像的空間性和時間性&#xff0c;一個簡單的例子&#xff0c;在去噪算法中就必須考慮&#xff0…

【數據結構初階】--排序(四):歸并排序

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言&#xff1a;生活是默默的堅持&#xff0c;毅力是永久的…

GaussDB 并行創建索引

1 背景當業務數據在單表存儲達到一定的數量級時&#xff0c;此時對表創建索引是要花費時間的。GaussDB為了解決這個問題采用并行創建索引技術&#xff0c;以提高創建索引的效率。2 示例步驟1&#xff1a;根據實際情況調整maintenance_work_mem參數該大小。[Rubydtest1 ~]$ gsq…

LOOP Finance:一場 Web3 共和國中的金融制度實驗

LOOP Finance 是建構于幣安智能鏈&#xff08;BNB Chain&#xff09;上的定投型DEFI理財協議。 它以凱因斯經濟學為啟發&#xff0c;設計出一套長期、安全、穩定收益的全新DEFI玩法&#xff0c;兼顧穩健利息回報與DEFI高速成長的潛力。 通過生態機制&#xff0c;LOOP要求每位參…

【golang面試題】Golang遞歸函數完全指南:從入門到性能優化

引言&#xff1a;遞歸的本質與挑戰 在Golang中&#xff0c;遞歸函數是一把鋒利的雙刃劍。它通過函數自身調用實現問題分解&#xff0c;讓代碼變得簡潔優雅&#xff0c;但也容易因無限遞歸、棧溢出或性能問題讓開發者陷入困境。本文將從基礎到高級&#xff0c;全面解析Golang遞歸…

功能安全和網絡安全的綜合保障流程

摘要網絡物理系統是控制機械部件的計算機化系統。這些系統必須既功能安全又網絡安全。因此&#xff0c;已建立的功能安全與網絡安全標準需求創建網絡安全檔案&#xff08;ACs&#xff09;&#xff0c;以論證系統是功能安全與網絡安全的&#xff0c;即所有功能安全與網絡安全目標…

數據科學首戰:用機器學習預測世界杯冠軍

數據科學首戰&#xff1a;用機器學習預測世界杯冠軍Scikit-learn實戰&#xff1a;從數據清洗到冠軍預測的完整指南一、足球預測&#xff1a;數據科學的終極挑戰??世界杯數據價值??&#xff1a;歷史比賽數據&#xff1a;44,000場球隊特征指標&#xff1a;200球員數據點&…

一個php 連sqlserver 目標計算機積極拒絕,無法連接問題的解決

一個接口查詢數據耗時15秒&#xff0c;還沒數據&#xff0c;經查報錯日志&#xff1a;SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]TCP 提供程序: 由于目標計算機積極拒絕&#xff0c;無法連接。 命令行執行&#xff1a;netstat -ano | findstr :1433發現結…

生成網站sitemap.xml地圖教程

要生成 sitemap.xml 文件&#xff0c;需要通過爬蟲程序抓取網站的所有有效鏈接。以下是完整的解決方案&#xff1a; 步驟 1&#xff1a;安裝必要的 Python 庫 ounter(line pip install requests beautifulsoup4 lxml 步驟 2&#xff1a;創建 Python 爬蟲腳本 (sitemap_genera…

idea拉取新項目第一次啟動報內存溢出(java.lang.OutOfMemoryError: Java heap space)

背景&#xff1a; 新拉取一個項目后&#xff0c;第一次啟動的時候報錯內存溢出&#xff1a; Java 堆內存溢出 (java.lang.OutOfMemoryError: Java heap space) 這個錯誤表示你的 Java 應用程序需要的內存超過了 JVM 堆內存的分配上限。 解決方案 1.增加堆內存大小 啟動應用時添…