YOLOv11調參指南

YOLOv11調參

1. YOLOv11參數體系概述

YOLOv11作為目標檢測領域的前沿算法,其參數體系可分為四大核心模塊:

  1. 模型結構參數:決定網絡深度、寬度、特征融合方式
  2. 訓練參數:控制學習率、優化器、數據增強策略
  3. 檢測參數:影響預測置信度、NMS閾值、邊界框回歸
  4. 部署參數:用于模型量化、加速和跨平臺優化

理解這些參數的作用機制和相互關系,是實現高精度、高效率目標檢測的關鍵。

2. 模型結構參數調優
2.1 骨干網絡參數

YOLOv11的骨干網絡采用了CSP-Darknet架構的升級版,主要參數包括:

# 模型深度和寬度系數
depth_multiple: 0.33  # 控制網絡層數
width_multiple: 0.50  # 控制通道數# 骨干網絡配置
backbone:[[-1, 1, Conv, [64, 3, 2]],  # 卷積層: [輸出通道, 卷積核大小, 步長][-1, 1, Conv, [128, 3, 2]],[-1, 3, C3, [128]],  # C3模塊: 包含3個Bottleneck[-1, 1, Conv, [256, 3, 2]],[-1, 6, C3, [256]],[-1, 1, Conv, [512, 3, 2]],[-1, 9, C3, [512]],[-1, 1, Conv, [1024, 3, 2]],[-1, 3, C3, [1024]],[-1, 1, SPPF, [1024, 5]],  # SPPF模塊: 最大池化核大小5]

調優策略

  • 小目標檢測場景:增大width_multiple以提升特征分辨率
  • 實時檢測場景:減小depth_multiplewidth_multiple,并將SPPF核大小改為3
  • 計算資源充足時:使用depth_multiple=1.0width_multiple=1.0構建完整模型
2.2 頸部網絡參數

頸部網絡采用PANet結構,主要參數包括:

head:[[-1, 1, Conv, [512, 1, 1]],[-1, 1, Upsample, [None, 2, 'nearest']],[[-1, 6], 1, Concat, [1]],  # 特征融合[-1, 3, C3, [512, False]],  # False表示不使用殘差連接# 后續類似結構...[[17, 20, 23], 1, Detect, [nc, anchors]],  # 檢測頭]

調優策略

  • 增加Upsample層數可提升小目標檢測精度
  • 復雜場景下可添加額外的特征融合層
  • 減少C3模塊中的Bottleneck數量可提升推理速度
3. 訓練參數調優
3.1 優化器參數

YOLOv11支持多種優化器,常用配置如下:

# 超參數配置文件 hyp.scratch.yaml
optimizer: SGD  # 可選: SGD, Adam, AdamW
lr0: 0.01  # 初始學習率
lrf: 0.01  # 最終學習率與初始學習率的比率
momentum: 0.937  # SGD動量參數
weight_decay: 0.0005  # 權重衰減系數

調優策略

  • 大規模數據集:使用Adam優化器(lr0=0.001)
  • 小數據集或遷移學習:使用SGD+余弦退火學習率
  • 防止過擬合:增大weight_decay至0.001
3.2 學習率調度

YOLOv11支持多種學習率調度策略:

lr_scheduler: cosine  # 可選: cosine, linear, step
warmup_epochs: 3.0  # 預熱輪次
warmup_momentum: 0.8  # 預熱期間動量
warmup_bias_lr: 0.1  # 偏置項預熱學習率

調優策略

  • 深層網絡:使用余弦退火調度(lr_scheduler: cosine
  • 淺層網絡:線性衰減(lr_scheduler: linear)效果更好
  • 大批次訓練:增大warmup_epochs至5-10
3.3 數據增強參數

數據增強是提升模型泛化能力的關鍵,YOLOv11提供豐富配置:

# 數據增強參數
hsv_h: 0.015  # 色調增強系數
hsv_s: 0.7  # 飽和度增強系數
hsv_v: 0.4  # 亮度增強系數
flipud: 0.5  # 上下翻轉概率
fliplr: 0.5  # 左右翻轉概率
rotate: 10.0  # 旋轉角度范圍
scale: 0.5  # 縮放比例范圍
shear: 2.0  # 剪切變換強度
perspective: 0.0  # 透視變換強度
translate: 0.1  # 平移變換比例

調優策略

  • 自然圖像:默認參數即可
  • 醫學圖像:關閉翻轉類增強(flipud=0.0, fliplr=0.0
  • 小目標檢測:增大scale范圍至(0.2, 1.5)
  • 姿態敏感任務:減小rotateshear
4. 檢測參數調優
4.1 錨框參數

YOLOv11使用K-means聚類自動生成錨框,但也支持手動調整

# 錨框配置
anchors:- [10,13, 16,30, 33,23]  # P3/8尺度- [30,61, 62,45, 59,119]  # P4/16尺度- [116,90, 156,198, 373,326]  # P5/32尺度

調優策略

  • 小目標為主:減小錨框尺寸
  • 大目標為主:增大錨框尺寸
  • 自定義數據集:使用python utils/autoanchor.py --data data.yaml重新聚類
4.2 檢測頭參數

檢測頭負責邊界框預測和分類,關鍵參數:

# 檢測頭配置
nc: 80  # 類別數
stride: [8, 16, 32]  # 各檢測層步長
iou: 0.65  # NMS IoU閾值
conf: 0.001  # 置信度閾值
multi_label: True  # 多標簽預測
max_det: 300  # 最大檢測目標數

調優策略

  • 密集目標場景:減小iou至0.5
  • 高精度場景:增大conf至0.1
  • 實時檢測:減小max_det至100
5. 部署參數調優
5.1 模型量化參數

YOLOv11支持多種量化方式:

# FP16半精度量化
python export.py --weights best.pt --include torchscript onnx --half# INT8量化(需校準數據集)
python export.py --weights best.pt --include tflite --int8 --data path/to/calibration_images/

調優策略

  • GPU部署:使用FP16量化(速度提升2倍)
  • 邊緣設備部署:使用INT8量化(模型體積減小4倍)
  • 精度敏感任務:使用動態范圍量化(Dynamic Range Quantization)
5.2 推理加速參數
# TensorRT加速
python export.py --weights best.pt --include tensorrt --half --imgsz 640 640 --dynamic# ONNX簡化
python export.py --weights best.pt --include onnx --simplify --dynamic

調優策略

  • 固定輸入尺寸:移除--dynamic參數
  • 批量推理:增大--batch參數
  • 移動端部署:使用OpenVINO或CoreML導出格式
6. 超參數自動優化

YOLOv11提供超參數自動優化功能:

# 遺傳算法優化超參數
python train.py --data coco.yaml --weights yolov11s.pt --epochs 30 --evolve 50

優化流程

  1. 初始種群:隨機生成50組超參數
  2. 適應度評估:每組參數訓練30輪,記錄mAP
  3. 選擇與變異:保留最優20%參數,變異生成新種群
  4. 迭代優化:重復2-3步驟50次

注意事項

  • 計算資源需求大,建議使用多GPU
  • 優化時間較長(約24-48小時)
  • 結果保存在runs/evolve/目錄
7. 常見場景調優方案
7.1 小目標檢測
# 關鍵參數調整
depth_multiple: 0.67
width_multiple: 0.75
anchors:- [5,5, 8,10, 12,16]  # 新增更小錨框- [20,30, 40,60, 80,120]- [120,200, 200,350, 400,600]
hsv_h: 0.005
hsv_s: 0.3
hsv_v: 0.2
scale: 0.2  # 限制最大縮放
7.2 實時檢測
# 關鍵參數調整
depth_multiple: 0.33
width_multiple: 0.50
backbone:# 使用輕量級C2f模塊替代C3[[-1, 1, Conv, [64, 3, 2]],[-1, 1, Conv, [128, 3, 2]],[-1, 2, C2f, [128]],[-1, 1, Conv, [256, 3, 2]],[-1, 2, C2f, [256]],[-1, 1, Conv, [512, 3, 2]],[-1, 2, C2f, [512]],[-1, 1, SPPF, [512, 3]],  # 更小的SPPF核]
conf: 0.25  # 提高置信度閾值
iou: 0.45  # 降低NMS閾值
7.3 長尾分布數據集
# 關鍵參數調整
class_weights: True  # 啟用類別權重
focal_loss: True  # 啟用Focal Loss
fl_gamma: 2.0  # Focal Loss gamma參數
label_smoothing: 0.1  # 標簽平滑
8. 參數調優實戰流程
  1. 基線模型訓練:使用默認參數訓練,記錄mAP@0.5和mAP@0.5:0.95
  2. 模型結構調整:根據任務類型選擇合適的深度和寬度系數
  3. 數據增強優化:逐步增加增強強度,監控驗證集性能
  4. 學習率調度:嘗試不同的學習率策略
  5. 錨框優化:為特定數據集重新聚類錨框
  6. 檢測參數微調:調整NMS和置信度閾值
  7. 超參數自動優化:使用--evolve進一步提升性能
  8. 模型量化部署:根據部署平臺選擇合適的量化方案
9. 調參常見問題與解決方案
  1. 訓練不穩定

    • 降低初始學習率(lr0=0.001
    • 增加預熱輪次(warmup_epochs=5
    • 使用Adam優化器替代SGD
  2. 過擬合

    • 增加數據增強強度
    • 增大權重衰減(weight_decay=0.001
    • 使用DropBlock正則化
  3. 小目標檢測差

    • 增加高分辨率檢測層(如P2/4)
    • 使用更小的錨框
    • 增大輸入圖像尺寸(imgsz=1280
  4. 大目標檢測差

    • 確保最大檢測層(P5/32)能夠覆蓋大目標
    • 增大錨框尺寸
    • 增加SPPF模塊感受野
10. 性能評估與監控

使用TensorBoard實時監控訓練過程:

tensorboard --logdir runs/train

關鍵評估指標:

  • mAP@0.5:IoU閾值為0.5時的平均精度
  • mAP@0.5:0.95:不同IoU閾值下的平均mAP
  • PR曲線:精確率-召回率曲線
  • F1分數:精確率和召回率的調和平均數
  • 推理速度:FPS(每秒處理幀數)

通過系統調整上述參數,結合具體任務需求,可使YOLOv11在精度和速度上達到最佳平衡。實際應用中,建議從小規模實驗開始,逐步調整參數,避免陷入局部最優解。


補充:

YOLOv11骨干網絡配置解析

在YOLOv11的網絡配置文件中,每一行包含四個核心部分:[輸入來源, 重復次數, 模塊類型, 模塊參數]

1. 第一列:輸入來源索引
[-1, 1, Conv, [64, 3, 2]],
  • 含義:表示當前模塊的輸入來自哪一層的輸出。

  • 常見取值

    • -1:表示輸入來自上一層的輸出。
    • 正整數:表示輸入來自網絡中第n層的輸出(索引從0開始)。
    • 列表:如[-1, 6]表示將上一層和第6層的輸出進行拼接(concat)。
  • 示例

    [[-1, 1, Conv, [64, 3, 2]],  # 輸入來自上一層(無)[-1, 1, Conv, [128, 3, 2]],  # 輸入來自第0層[[-1, 6], 1, Concat, [1]],  # 輸入來自上一層(-1)和第6層,在通道維度(1)拼接
    ]
    
2. 第二列:模塊重復次數
[-1, 3, C3, [128]],
  • 含義:表示當前模塊重復執行的次數。
  • 作用
    • 對于ConvC3等模塊,重復次數決定了網絡的深度。
    • 例如[-1, 3, C3, [128]]表示創建3個連續的C3模塊,每個模塊輸出通道數為128。
3. 第三列:模塊類型

第三列指定了當前行使用的神經網絡模塊類型,常見的模塊包括:

[-1, 1, Conv, [64, 3, 2]],        # 標準卷積層
[-1, 3, C3, [128]],               # C3模塊(含殘差結構)
[-1, 1, SPPF, [1024, 5]],         # SPPF模塊(空間金字塔池化)
[-1, 1, Upsample, [None, 2, 'nearest']],  # 上采樣層
[-1, 1, Concat, [1]],             # 特征拼接層
[-1, 1, Detect, [nc, anchors]],   # 檢測頭

常見模塊解釋

  • Conv:標準卷積+BN+SiLU激活函數
  • C3:Cross Stage Partial模塊,包含多個殘差塊
  • SPPF:高效空間金字塔池化,使用連續的最大池化
  • Upsample:上采樣層,支持雙線性插值或最近鄰插值
  • Concat:特征拼接,通常用于不同尺度特征融合
  • Detect:檢測頭,負責邊界框預測和分類
4. 第四列:模塊參數

第四列是一個列表,包含了對應模塊所需的具體參數,格式和含義因模塊類型而異:

4.1 Conv模塊參數
[輸出通道數, 卷積核大小, 步長, 可選: 填充, 可選: 分組卷積]
  • 示例:[64, 3, 2] 表示輸出64通道,卷積核3×3,步長為2
4.2 C3模塊參數
[輸出通道數, 可選: 是否使用殘差連接(True/False)]
  • 示例:[128] 默認為[128, True],表示輸出128通道并使用殘差連接
4.3 SPPF模塊參數
[輸出通道數, 最大池化核大小]
  • 示例:[1024, 5] 表示輸出1024通道,使用5×5的最大池化核
4.4 Upsample模塊參數
[輸出大小, 縮放倍數, 插值方法]
  • 示例:[None, 2, 'nearest'] 表示使用最近鄰插值,縮放倍數為2
4.5 Concat模塊參數
[拼接維度]
  • 示例:[1] 表示在通道維度(dim=1)上拼接特征圖
4.6 Detect模塊參數
[類別數, 錨框列表]
  • 示例:[80, anchors] 表示檢測80個類別,使用預定義的錨框
5. 完整配置示例解析
backbone:[[-1, 1, Conv, [64, 3, 2]],  # 第0層:輸入→Conv(64,3,2)→輸出[-1, 1, Conv, [128, 3, 2]],  # 第1層:第0層輸出→Conv(128,3,2)→輸出[-1, 3, C3, [128]],  # 第2-4層:3個C3模塊串聯,每個輸出128通道[-1, 1, Conv, [256, 3, 2]],  # 第5層:第4層輸出→Conv(256,3,2)→輸出[-1, 6, C3, [256]],  # 第6-11層:6個C3模塊串聯[-1, 1, Conv, [512, 3, 2]],  # 第12層:...[-1, 9, C3, [512]],  # 第13-21層:9個C3模塊[-1, 1, Conv, [1024, 3, 2]],[-1, 3, C3, [1024]],[-1, 1, SPPF, [1024, 5]],  # 最后一層:SPPF模塊,最大池化核5]
6. 多輸入拼接示例

在頸部網絡(Neck)中常見特征融合操作:

head:[[-1, 1, Conv, [512, 1, 1]],  # 第0層[-1, 1, Upsample, [None, 2, 'nearest']],  # 第1層:上采樣2倍[[-1, 6], 1, Concat, [1]],  # 第2層:將第1層輸出和骨干網絡第6層輸出拼接[-1, 3, C3, [512, False]],  # 第3-5層:3個C3模塊]
7. 自定義網絡結構示例

假設需要為小目標檢測增加一個額外的高分辨率檢測層,可以這樣修改:

# 新增P2/4檢測層(在原有骨干網絡前添加)
backbone:[[-1, 1, Conv, [32, 3, 1]],  # 新增:3×3卷積,步長1,輸出32通道[-1, 1, Conv, [64, 3, 2]],  # 原第0層[-1, 1, Conv, [128, 3, 2]],  # 原第1層# 其余保持不變...]# 修改檢測頭,增加P2層
head:[[-1, 1, Conv, [256, 1, 1]],  # 為P2層準備[-1, 1, Detect, [nc, anchors_p2]],  # 新增P2檢測頭# 原有檢測層保持不變...]
8. 參數調優建議
  1. 計算量優化

    • 減小卷積層的輸出通道數
    • 使用更小的SPPF池化核(如3×3)
    • 減少C3模塊的重復次數
  2. 精度提升

    • 增加網絡深度(增大C3模塊重復次數)
    • 添加額外的特征融合層
    • 使用更大的SPPF池化核(如7×7)
  3. 小目標檢測

    • 增加高分辨率檢測層(如P2/4)
    • 減小早期卷積層的步長
    • 使用更小的錨框

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

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

相關文章

云原生核心技術解析:Docker vs Kubernetes vs Docker Compose

云原生核心技術解析:Docker vs Kubernetes vs Docker Compose 🚢???? 一、云原生核心概念 ?? 云原生(Cloud Native) 是一種基于云計算模型構建和運行應用的方法論,核心目標是通過以下技術實現彈性、可擴展、高可…

keepalive模擬操作部署

目錄 keepalived雙機熱備 一、配置準備 二、配置雙機熱備(基于nginx) web1端 修改配置文件 配置腳本文件 web2端 修改配置文件 配置腳本文件 模擬檢測 開啟keepalived服務 訪問結果 故障模擬 中止nginx 查看IP 訪問瀏覽器 重啟服務后…

Java 中的 volatile 是什么?

&#x1f449; volatile &#xff1a;不穩定的 英[?v?l?ta?l] 美[?vɑ?l?tl] adj. 不穩定的;<計>易失的;易揮發的&#xff0c;易發散的;爆發性的&#xff0c;爆炸性的;易變的&#xff0c;無定性的&#xff0c;無常性的;短暫的&#xff0c;片刻的;活潑的&#xff…

MongoDB性能優化實戰指南:原理、實踐與案例

MongoDB性能優化實戰指南&#xff1a;原理、實踐與案例 在大規模數據存儲與查詢場景下&#xff0c;MongoDB憑借其靈活的文檔模型和水平擴展能力&#xff0c;成為眾多互聯網及企業級應用的首選。然而&#xff0c;在生產環境中&#xff0c;隨著數據量和并發的增長&#xff0c;如何…

細談kotlin中綴表達式

Kotlin 是一種適應你編程風格的語言&#xff0c;允許你在想什么時候寫代碼就什么時候寫代碼。Kotlin 提供了一些機制&#xff0c;幫助我們編寫易讀易懂的代碼。其中一個非常有趣的機制是 中綴表達式&#xff08;infix notation&#xff09;。它允許我們定義和調用函數時省略點號…

[Nagios Core] CGI接口 | 狀態數據管理.dat | 性能優化

鏈接&#xff1a;https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/4/en/ docs&#xff1a;Nagios Core Nagios Core 是功能強大的基礎設施監控系統&#xff0c;包含 CGI 程序&#xff0c;允許用戶通過 Web 界面查看當前狀態、歷史記錄等。通過以下技術棧實現…

Linux進程優先級機制深度解析:從Nice值到實時調度

前言 在Linux系統中&#xff0c;進程優先級決定了CPU資源的分配順序&#xff0c;直接影響系統性能和關鍵任務的響應速度。無論是優化服務器負載、確保實時任務穩定運行&#xff0c;還是避免低優先級進程拖慢系統&#xff0c;合理調整進程優先級都是系統管理和性能調優的重要技能…

深入淺出Kafka Broker源碼解析(下篇):副本機制與控制器

一、副本機制深度解析 1.1 ISR機制實現 1.1.1 ISR管理核心邏輯 ISR&#xff08;In-Sync Replicas&#xff09;是Kafka保證數據一致性的核心機制&#xff0c;其實現主要分布在ReplicaManager和Partition類中&#xff1a; public class ReplicaManager {// ISR變更集合&#xff0…

Fluent許可文件安裝和配置

在使用Fluent軟件進行流體動力學模擬之前&#xff0c;正確安裝和配置Fluent許可文件是至關重要的一步。本文將為您提供詳細的Fluent許可文件安裝和配置指南&#xff0c;幫助您輕松完成許可文件的安裝和配置&#xff0c;確保Fluent軟件能夠順利運行。 一、Fluent許可文件安裝步驟…

Python----大模型( RAG的文本分割,文本分割方法 )

一、RAG文本分割RAG&#xff08;Retrieval-Augmented Generation&#xff0c;檢索增強生成&#xff09;模型是一種結合了檢索 和生成能力的自然語言處理模型。 它通過檢索相關的文檔片段&#xff0c;并將這些信息作為生成過程的上下文&#xff0c;以提高生成質量 和準確性。在R…

vue筆記3 VueRouter VueX詳細講解

vueRouter & vueX 看到這里的朋友如果沒有看過前幾期&#xff0c;可以通過文章的鏈接跳轉到第一期&#xff0c;從第一期的 vue2 語法開始學習&#xff0c;如果是復習的朋友&#xff0c;也可以看本期只學習 vueRouter & VueX 項目初始化 經過上期&#xff0c;我們學習…

從當下需求聊聊Apifox 與 Apipost 的差異

作為一名長期投身于復雜項目開發的工程師&#xff0c;我深切體會到一款適配的接口管理工具對提升開發效率的關鍵意義。當團隊在進行工具選型時&#xff0c;我對 Apifox 和 Apipost 展開了全面且系統的對比分析&#xff0c;其中的諸多發現&#xff0c;值得與大家深入探討。 一、…

藍牙協議棧高危漏洞曝光,攻擊可入侵奔馳、大眾和斯柯達車載娛樂系統

OpenSynergy BlueSDK關鍵漏洞&#xff0c;可遠程執行代碼入侵數百萬車輛系統PCA網絡安全公司的研究人員在OpenSynergy BlueSDK藍牙協議棧中發現了一組被統稱為"完美藍"&#xff08;PerfektBlue&#xff09;的關鍵漏洞。利用這些漏洞可能對數百萬輛汽車實施遠程代碼執…

Android 性能優化:啟動優化全解析

前言 Android應用的啟動性能是用戶體驗的重要組成部分。一個啟動緩慢的應用不僅會讓用戶感到煩躁&#xff0c;還可能導致用戶放棄使用。 本文將深入探討Android應用啟動優化的各個方面&#xff0c;包括啟動流程分析、優化方法、高級技巧和具體實現。 一、Android應用啟動流程深…

前沿重器[69] | 源碼拆解:deepSearcher動態子查詢+循環搜索優化RAG流程

前沿重器欄目主要給大家分享各種大廠、頂會的論文和分享&#xff0c;從中抽取關鍵精華的部分和大家分享&#xff0c;和大家一起把握前沿技術。具體介紹&#xff1a;倉頡專項&#xff1a;飛機大炮我都會&#xff0c;利器心法我還有。&#xff08;算起來&#xff0c;專項啟動已經…

Vue+axios

1. axios簡介axios 是一個基于 Promise 的 HTTP 客戶端&#xff0c;主要用于瀏覽器和 Node.js 環境中發送 HTTP 請求。它是目前前端開發中最流行的網絡請求庫之一&#xff0c;被廣泛應用于各種 JavaScript 項目&#xff08;如 React、Vue、Angular 等框架或原生 JS 項目&#x…

通過Tcl腳本命令:set_param labtools.auto_update_hardware 0

1.通過Tcl腳本命令&#xff1a;set_param labtools.auto_update_hardware 0 禁用JTAG上電檢測&#xff0c;因為2016.1 及更高版本 Vivado 硬件管理器中&#xff0c;當 FPGA正連接編程電纜時 重新上電&#xff0c;可能會出現FPGA無法自動加載程序的故障。 2.還可以通過 hw_serv…

Spring Boot 安全登錄系統:前后端分離實現

關鍵詞&#xff1a;Spring Boot、安全登錄、JWT、Shiro / Spring Security、前后端分離、Vue、MySQL 詳細代碼請參考這篇文章&#xff1a;完整 Spring Boot Vue 登錄 ? 摘要 在現代 Web 應用中&#xff0c;用戶登錄與權限控制是系統安全性的基礎環節。本文將手把手帶你實現…

Docker高級管理--Dockerfile 鏡像制作

目錄 一&#xff1a;Docker 鏡像管理 1:Docker 鏡像結構 &#xff08;1&#xff09; 鏡像分層核心概念 &#xff08;2&#xff09;鏡像層特性 &#xff08;3&#xff09;關鍵操作命令 &#xff08;4&#xff09;優化建議 2&#xff1a;Dockerfile介紹 &#xff08;1&…

Leetcode力扣解題記錄--第42題 接雨水(動規和分治法)

題目鏈接&#xff1a;42. 接雨水 - 力扣&#xff08;LeetCode&#xff09; 這里我們可以用兩種方法去解決巧妙地解決這個題。首先來看一下題目 題目描述 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖&#xff0c;計算按此排列的柱子&#xff0c;下雨之后能接多少雨水。…