【絕對有用】yolo系列目標檢測 核心技術點 匯總

YOLO (You Only Look Once) 是一種高效的目標檢測算法,它以速度和精度著稱。YOLO 的工作原理是將目標檢測視為一個回歸問題,直接從圖像的像素空間預測目標的類別和位置。YOLO 目標檢測頭包括以下幾個關鍵部分:

  1. 輸入圖像處理

    • YOLO 接受大小固定的輸入圖像(如 416x416 或 608x608)。
    • 輸入圖像會被分成一個 SxS 的網格(如 13x13, 19x19)。
  2. 特征提取器

    • 通常使用一個卷積神經網絡(如 Darknet)來提取圖像的特征。
    • 特征提取器的輸出是一個特征圖,該特征圖的尺寸比輸入圖像小得多,但保留了圖像中的關鍵信息。
  3. 檢測頭

    • 檢測頭的輸入是特征提取器的輸出特征圖。
    • 每個網格單元預測 B 個邊界框,每個邊界框由 5 個參數(x, y, w, h, confidence)和 C 個類別概率組成。
      • x 和 y 是邊界框中心相對于網格單元的位置。
      • w 和 h 是邊界框的寬度和高度,相對于整個圖像。
      • confidence 是邊界框中包含目標的置信度。
      • C 個類別概率用于表示該邊界框屬于每個類別的概率。
    • 因此,檢測頭的輸出尺寸為 SxSx(B*(5+C))。
  4. 損失函數

    • YOLO 的損失函數包括三個部分:
      • 位置損失(Localization Loss):預測的邊界框與真實邊界框之間的差異。
      • 置信度損失(Confidence Loss):預測的置信度與實際是否包含目標的差異。
      • 分類損失(Classification Loss):預測的類別概率與實際類別的差異。
  5. 非極大值抑制(NMS)

    • YOLO 可能會產生多個重疊的邊界框,為了去除冗余,使用非極大值抑制(NMS)來過濾掉置信度較低的框,保留置信度最高的框。

具體細節如下:

  1. 輸入圖像處理

    • 圖像被調整到一個固定的大小,并標準化處理。
    • 圖像被劃分為 SxS 的網格,每個網格單元負責檢測一個特定區域內的目標。
  2. 特征提取器(例如 Darknet-53)

    • 由一系列的卷積層、池化層和激活函數(如 ReLU 或 Leaky ReLU)組成。
    • 輸出一個特征圖,這個特征圖包含了圖像的空間特征。
  3. 檢測頭

    • 在 YOLOv3 中,使用了多尺度檢測,分別在三個不同的尺度上進行預測。
    • 每個尺度的檢測頭會輸出不同大小的特征圖(例如 13x13、26x26、52x52),每個特征圖的每個單元預測多個邊界框。
  4. 邊界框預測

    • 每個網格單元預測 B 個邊界框,每個邊界框包含 4 個位置參數(tx, ty, tw, th)、1 個置信度、以及 C 個類別概率。
    • 使用以下公式將網絡的輸出轉換為實際邊界框坐標:
      • bx = σ(tx) + cx
      • by = σ(ty) + cy
      • bw = pw * e^tw
      • bh = ph * e^th
      • 其中 (cx, cy) 是網格單元的左上角坐標,pw 和 ph 是預測框的預設寬度和高度。
  5. 損失函數

    • YOLO 的損失函數由位置誤差、置信度誤差和分類誤差組成。
    • 使用均方誤差(MSE)計算位置誤差。
    • 使用交叉熵損失(Cross-Entropy Loss)計算分類誤差。
  6. 后處理(如非極大值抑制)

    • 通過非極大值抑制(NMS)去除冗余的邊界框,只保留最可信的檢測結果。

以上是 YOLO 目標檢測頭的詳細解析,如果你有更具體的問題或需要進一步的細節,可以繼續提問。


YOLO檢測頭的輸出尺寸為SxSx(B(5+C))。這是通過分析YOLO的設計和預測目標檢測框的方式得出的。下面是詳細的解釋:*

  1. 網格劃分(Grid Division)

    • 輸入圖像被劃分為一個SxS的網格。例如,假設輸入圖像大小為 416x416,YOLO可能會將其劃分為一個 13x13 或 19x19 的網格。
    • 每個網格單元負責預測該單元內是否有目標,以及目標的具體信息。
  2. 每個網格單元的預測

    • 每個網格單元預測 ( B ) 個邊界框。典型的值為 ( B = 2 ) 或 ( B = 3 )。
    • 每個邊界框包含5個預測參數和C個類別概率。
  3. 邊界框參數

    • 5個預測參數分別為:
      • ( x ) 和 ( y ):邊界框中心相對于網格單元的位置偏移。
      • ( w ) 和 ( h ):邊界框的寬度和高度,相對于整個圖像的比例。
      • ( confidence ):該邊界框包含目標的置信度。
  4. 類別概率

    • 每個邊界框預測C個類別概率,即該框屬于每個類別的概率分布。
    • 因此,對于每個邊界框,我們需要預測 ( 5 + C ) 個值。
  5. 總輸出

    • 對于每個網格單元,預測 ( B ) 個邊界框,每個邊界框包含 ( 5 + C ) 個值。
    • 因此,每個網格單元的輸出尺寸為 ( B x (5 + C) )。

將這些結合起來,整個輸出特征圖的尺寸為 SxSx(B*(5+C))。

具體例子

假設我們使用YOLOv3,輸入圖像被劃分為 13x13 的網格,B=3,C=80(例如在COCO數據集上):

  1. 網格劃分

    • ( S = 13 ),輸入圖像被劃分為 13x13 的網格。
  2. 每個網格單元的預測

    • 每個網格單元預測3個邊界框。
    • 每個邊界框包含 ( 5 + 80 ) 個值(x, y, w, h, confidence + 80個類別概率)。
  3. 總輸出

    • 每個網格單元的輸出尺寸為 ( 3 x (5 + 80) = 3 x 85 = 255 )。
    • 因此,整個輸出特征圖的尺寸為 ( 13 x 13 x 255 )。

YOLO檢測頭的輸出尺寸為 ( S x Sx (B x (5 + C)) ) 是通過考慮每個網格單元的預測邊界框數量、每個邊界框的參數數量以及類別數量計算得出的。這種設計使得YOLO能夠在單次前向傳遞中完成目標檢測。


在YOLO中,邊界框預測是通過將網絡的輸出轉換為實際的邊界框坐標來實現的。以下是詳細的解釋和一個例子:

詳細解釋

  1. 輸出預測

    • 每個網格單元預測B個邊界框,每個邊界框包含4個位置參數(( t_x, t_y, t_w, t_h ))、1個置信度、以及C個類別概率。
    • ( t_x ) 和 ( t_y ) 是相對于網格單元左上角的偏移,范圍在0到1之間。
    • ( t_w ) 和 ( t_h ) 是邊界框寬度和高度的對數尺度。
  2. 轉換公式

    • 將網絡輸出的4個位置參數轉換為實際的邊界框坐標。
    • ( b_x = S(t_x) + c_x ):邊界框中心的x坐標。( S) 是sigmoid函數,將輸出限制在0到1之間。( c_x ) 是網格單元左上角的x坐標。
    • ( b_y = S(t_y) + c_y ):邊界框中心的y坐標。( c_y ) 是網格單元左上角的y坐標。
    • ( b_w = p_w x e^{t_w} ):邊界框的寬度。( p_w ) 是預設的寬度錨點。
    • ( b_h = p_h x e^{t_h} ):邊界框的高度。( p_h ) 是預設的高度錨點。

舉例

假設我們有一個13x13的網格,輸入圖像大小為416x416,使用了3個邊界框預測(B=3),每個邊界框的錨點寬度和高度分別為(pw, ph)。

  1. 假設網格單元 (i, j)

    • 該網格單元的左上角坐標為 (i, j)。
    • 假設 i=5, j=7,那么 ( c_x = 5 ), ( c_y = 7 )。
  2. 預測參數

    • 網絡輸出的預測參數 ( t_x = 0.5 ), ( t_y = 0.6 ), ( t_w = -0.2 ), ( t_h = 0.3 )。
    • 錨點寬度和高度分別為 ( p_w = 1.2 ), ( p_h = 1.8 )。
  3. 轉換實際邊界框坐標
    在這里插入圖片描述

  4. 實際邊界框坐標

    • 邊界框中心坐標: ( (5.622, 7.645) )
    • 邊界框寬度和高度: ( (0.982, 2.428) )

解釋關鍵點

  • Sigmoid函數:用來將 ( t_x ) 和 ( t_y ) 的輸出值限制在0到1之間,這樣它們可以表示相對于網格單元的偏移量。
  • 指數函數:用來將 ( t_w ) 和 ( t_h ) 的對數尺度轉換為實際的邊界框寬度和高度,錨點寬度和高度是預設的,表示預測框的基本尺度。

完整公式

在這里插入圖片描述

通過這些公式,YOLO可以將網絡輸出的預測參數轉換為實際的邊界框坐標,用于目標檢測。


YOLO 的損失函數由三個主要部分組成:位置損失(Localization Loss)、置信度損失(Confidence Loss)和分類損失(Classification Loss)。以下是每個部分的詳細解釋及舉例:

1. 位置損失(Localization Loss)

在這里插入圖片描述

2. 置信度損失(Confidence Loss)

在這里插入圖片描述

3. 分類損失(Classification Loss)

在這里插入圖片描述

損失函數的總和

總損失函數是位置損失、置信度損失和分類損失的總和。

在這里插入圖片描述

舉例

假設一個13x13的網格,B=2,C=3(例如3個類別:貓、狗、鳥)。輸入圖像大小為416x416,錨點寬度和高度分別為(pw, ph)。

假設:
  • 真值(ground truth)邊界框中心點 (bx_gt, by_gt) = (5.5, 7.2),寬度和高度 (bw_gt, bh_gt) = (2.0, 3.0),類別為貓(類別索引0)。
  • 預測邊界框中心點 (bx, by) = (5.6, 7.1),寬度和高度 (bw, bh) = (2.1, 2.9),置信度 = 0.8,類別概率 [0.7, 0.2, 0.1](分別對應貓、狗、鳥)。
位置損失:

在這里插入圖片描述

置信度損失:

在這里插入圖片描述

分類損失:

在這里插入圖片描述

總損失:

在這里插入圖片描述

通過這些計算,可以看到如何從YOLO的預測結果和真值計算出總損失。這些損失會用于反向傳播,以優化YOLO網絡的參數,使得模型預測的邊界框和類別越來越準確。


非極大值抑制(NMS)是一種在目標檢測中常用的后處理技術,用于去除多余的檢測框。YOLO 在預測過程中,可能會生成多個重疊的邊界框,這些邊界框可能會對同一個目標進行多次檢測。NMS 的目標是通過保留置信度最高的邊界框,去除那些冗余的、置信度較低的邊界框,從而精簡檢測結果。

NMS 的工作原理

  1. 輸入

    • 一組邊界框,每個邊界框包括坐標(x, y, w, h)和一個置信度分數。
  2. 步驟

    1. 按置信度排序:將所有邊界框按照置信度分數從高到低排序。
    2. 選取最高置信度框:選取置信度最高的邊界框,稱之為 A,并將其加入最終的檢測結果中。
    3. 計算重疊區域:計算 A 與剩余邊界框之間的重疊區域(IoU,Intersection over Union)。
    4. 移除重疊框:移除與 A 的重疊程度超過某一閾值的邊界框(例如 IoU > 0.5)。
    5. 重復步驟:從剩余的邊界框中再次選取置信度最高的框,并重復上述過程,直到所有的框都處理完畢。
  3. 輸出

    • 經過篩選后的邊界框集合,每個邊界框代表一個獨立的目標檢測。

舉例

假設我們有5個邊界框,它們的置信度和坐標如下:

框ID置信度xywh
A0.930405060
B0.832424858
C0.7528385262
D0.61002003040
E0.429395161
步驟1:按置信度排序

排序后的邊界框為:A, B, C, D, E

步驟2:選取置信度最高的框A

將邊界框A加入最終檢測結果中。

步驟3:計算重疊區域(IoU)

計算A與剩余邊界框(B, C, D, E)之間的IoU:

  • IoU(A, B)
  • IoU(A, C)
  • IoU(A, D)
  • IoU(A, E)

假設計算的IoU如下:

  • IoU(A, B) = 0.85
  • IoU(A, C) = 0.8
  • IoU(A, D) = 0.0
  • IoU(A, E) = 0.82
步驟4:移除重疊框

設定閾值為0.5,移除IoU超過0.5的框(B, C, E),僅保留框D。

步驟5:重復步驟
  1. 從剩余的框中選取置信度最高的框,即D。
  2. 將D加入最終檢測結果中。
  3. D沒有與其他框重疊的情況,結束過程。
最終結果

經過NMS后的最終檢測結果為:

  • 框A(置信度0.9,坐標[30, 40, 50, 60])
  • 框D(置信度0.6,坐標[100, 200, 30, 40])

代碼示例(Python)

下面是一個使用Python實現NMS的簡單代碼示例:

import numpy as npdef iou(box1, box2):x1, y1, w1, h1 = box1x2, y2, w2, h2 = box2xi1 = max(x1, x2)yi1 = max(y1, y2)xi2 = min(x1 + w1, x2 + w2)yi2 = min(y1 + h1, y2 + h2)inter_area = max(0, xi2 - xi1) * max(0, yi2 - yi1)box1_area = w1 * h1box2_area = w2 * h2union_area = box1_area + box2_area - inter_areareturn inter_area / union_areadef non_max_suppression(boxes, scores, iou_threshold):idxs = np.argsort(scores)[::-1]selected_idxs = []while len(idxs) > 0:current = idxs[0]selected_idxs.append(current)idxs = idxs[1:]idxs = [i for i in idxs if iou(boxes[current], boxes[i]) < iou_threshold]return selected_idxs# Example usage:
boxes = [[30, 40, 50, 60], [32, 42, 48, 58], [28, 38, 52, 62], [100, 200, 30, 40], [29, 39, 51, 61]]
scores = [0.9, 0.8, 0.75, 0.6, 0.4]
iou_threshold = 0.5selected_idxs = non_max_suppression(boxes, scores, iou_threshold)
print("Selected boxes after NMS:", [boxes[i] for i in selected_idxs])

總結

非極大值抑制(NMS)通過保留置信度最高的邊界框并移除重疊的置信度較低的邊界框,有效地去除了冗余檢測框,使得目標檢測結果更加精簡和準確。


下面是iou函數的詳細理論計算過程:

Intersection over Union (IoU) 的計算

IoU 是衡量兩個邊界框重疊區域與它們的聯合區域之間比值的一種指標。計算過程分為以下幾步:

在這里插入圖片描述
在這里插入圖片描述

代碼詳細注釋

def iou(box1, box2):# 獲取第一個邊界框的坐標和尺寸x1, y1, w1, h1 = box1# 獲取第二個邊界框的坐標和尺寸x2, y2, w2, h2 = box2# 計算交集區域的左上角坐標xi1 = max(x1, x2)yi1 = max(y1, y2)# 計算交集區域的右下角坐標xi2 = min(x1 + w1, x2 + w2)yi2 = min(y1 + h1, y2 + h2)# 計算交集區域的寬度和高度(確保交集寬高不為負)inter_width = max(0, xi2 - xi1)inter_height = max(0, yi2 - yi1)# 計算交集區域的面積inter_area = inter_width * inter_height# 計算兩個邊界框的面積box1_area = w1 * h1box2_area = w2 * h2# 計算聯合區域的面積union_area = box1_area + box2_area - inter_area# 計算 IoU(交集面積 / 聯合面積)return inter_area / union_area

舉例

假設有兩個邊界框:

  • 邊界框1:左上角坐標為(2, 3),寬度和高度分別為4和5。
  • 邊界框2:左上角坐標為(3, 4),寬度和高度分別為5和6。
    在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

通過這些步驟,我們計算出了兩個邊界框之間的 IoU 值為約 0.316。這表示兩個邊界框的重疊區域占它們聯合區域的 31.6%。

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

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

相關文章

云計算【第一階段(19)】磁盤管理與文件系統 LVM與磁盤配額(二)

目錄 一、LVM概述 1.1、LVM機制的基本概念 ?編輯 1.2、LVM的管理命令 1.3、lvm存儲 兩種機制 1.4、lvm應用實例 二、磁盤配額概述 2.1、設置磁盤配額 2.2.1、實現磁盤限額的條件 2.2.2、linux磁盤限額的特點 2.2.3、磁盤配額管理 一、LVM概述 1.1、LVM機制的基本概…

用Python制作一個簡單的計算器(加減乘除)

簡易計算器 寫在前面 小編用python實現了一個簡單的計算器&#xff0c;一起來看看吧~ 需要環境&#xff1a; pycharm python 一、需求分析 1.1 功能分析 使用Python的Tkinter界面設計實現一個簡單的計算器&#xff0c;主要功能按鈕包括數字鍵、四則運算符、等于號和清除…

JavaScript算法之龜兔賽跑

簡介:龜兔賽跑算法,又稱弗洛伊德循環檢測算法,是一種在鏈表中非常常用的算法。它基于運動學和直覺的基本定律。本文旨在向您簡要介紹該算法,并幫助您了解這個看似神奇的算法。 假設高速公路上有兩輛車。其中一輛的速度為 x,另一輛的速度為 2x。它們唯一能相遇的條件是它們…

[MYSQL] MYSQL表的操作

前言 由圖可以看出,表是庫的一部分,所以有庫才能使用表 show databases; 查看已有的庫 create database db_name ; 創建庫 使用 use bd_name 使用庫,之后對標進行增刪查改就只會操作這個庫里的而不影響其他庫 創建表 create table [if not exists] table_name( d…

MySQL周內訓參照3、簡單查詢與多表聯合復雜查詢

基礎查詢 1、查詢用戶信息&#xff0c;僅顯示用戶的姓名與手機號&#xff0c;用中文顯示列名。中文顯示姓名列與手機號列 SELECT user_id AS 編號, phone AS 電話 FROM user; 2. 根據訂購表進行模糊查詢&#xff0c;模糊查詢需要可以走索引&#xff0c;需要給出explain語句。…

位運算(、|、^、~、>>、<<)

一、概念 在C#中&#xff0c;位運算是對整數的二進制表示進行操作的運算。這些運算包括按位與&#xff08;AND&#xff09;、按位或&#xff08;OR&#xff09;、按位異或&#xff08;XOR&#xff09;、按位取反&#xff08;NOT&#xff09;、左移&#xff08;Left Shift&…

【區間動態規劃】1771. 由子序列構造的最長回文串的長度

本文涉及知識點 動態規劃匯總 LeetCode1771. 由子序列構造的最長回文串的長度 給你兩個字符串 word1 和 word2 &#xff0c;請你按下述方法構造一個字符串&#xff1a; 從 word1 中選出某個 非空 子序列 subsequence1 。 從 word2 中選出某個 非空 子序列 subsequence2 。 連…

企業AI落地的大法器-用數據清洗手段提升數據質量,找回遺珠之光

開篇 書接上文&#xff0c;在上文《談LORA微調與數據質量處理之爭》中我們詳細敘述了&#xff1a;LORA微調手段和數據清洗之分&#xff0c;以及如何平衡和組合使用LORA微調與數據清洗的手法。 文末我們提到了“下一篇我們講著重講述&#xff1a;在打造企業數據清洗工具、平臺…

003 SpringBoot操作ElasticSearch7.x

文章目錄 5.SpringBoot集成ElasticSearch7.x1.添加依賴2.yml配置3.創建文檔對象4.繼承ElasticsearchRepository5.注入ElasticsearchRestTemplate 6.SpringBoot操作ElasticSearch1.ElasticsearchRestTemplate索引操作2.ElasticsearchRepository文檔操作3.ElasticsearchRestTempl…

git tag 打標簽指南

參考 Pro Git 打標簽 查看標簽 git tag git tag -l 創建標簽 git tag tag002 創建了名稱是 tag002 的標簽&#xff0c;打在最新提交的 commit 上。只是打在本地&#xff0c;沒有推送到遠程。 如果要給以前的 commitId 打標簽&#xff0c;就用 git tag tag001 159e40 給 159e4…

java基于ssm+jsp 彈幕視頻網站

1前臺首頁功能模塊 彈幕視頻網站&#xff0c;在彈幕視頻網站可以查看首頁、視頻信息、商品信息、論壇信息、我的、跳轉到后臺、購物車、客服等內容&#xff0c;如圖1所示。 圖1前臺首頁界面圖 登錄&#xff0c;通過登錄填寫賬號、密碼等信息進行登錄操作&#xff0c;如圖2所示…

GPT-5即將登場:期待AI新時代的技術突破與人機高效協作

隨著科技的飛速發展&#xff0c;我們即將迎來一個人工智能領域的重要里程碑——GPT-5的發布。這一技術革新無疑是一個激動人心的時刻&#xff0c;它預示著AI技術將邁向一個全新的高度。GPT-5作為人工智能領域的一大突破&#xff0c;有望為我們帶來前所未有的應用場景與深遠影響…

顯卡GTX與RTX有什么區別?哪一個更適合玩游戲?

游戲發燒友們可能對游戲顯卡并不陌生&#xff0c;它直接關系到游戲畫面的流暢度、細膩程度和真實感。在眾多顯卡品牌中&#xff0c;英偉達的GTX和RTX系列顯卡因其出色的性能而備受關注。 一、GTX與RTX的區別 架構差異 GTX系列顯卡采用的是Pascal架構&#xff0c;這是英偉達在…

探索MySQL核心技術:理解索引和主鍵的關系

在數據密集型應用中&#xff0c;數據庫的性能往往是決定一個應用成敗的重要因素之一。其中&#xff0c;MySQL作為一種開源關系型數據庫管理系統&#xff0c;以其卓越的性能和豐富的功能被廣泛應用。而在MySQL數據庫優化的眾多技巧中&#xff0c;索引和主鍵扮演著極其重要的角色…

安霸CVFlow推理開發筆記

一、安霸環境搭建&#xff1a; 1.遠程172.20.62.13 2. 打開Virtualbox&#xff0c;所在目錄&#xff1a;E:\Program Files\Oracle\VirtualBox 3. 配置好ubuntu18.04環境&#xff0c;Ubuntu密碼&#xff1a;amba 4. 安裝toolchain&#xff0c;解壓Ambarella_Toolchain_CNNGe…

鴻蒙開發HarmonyOS NEXT (二) 熟悉ArkUI

一、構造函數 構造一個商品類Item&#xff0c;然后利用foreach函數循環渲染 class Item {name: stringimage: ResourceStrprice: numberdiscount: numberconstructor(name: string, image: ResourceStr, price: number, discount: number 0) {this.name name;this.image ima…

JAVA進階學習09

文章目錄 一、雙列集合Map1.1 雙列集合介紹1.2 雙列集合Map常見API1.3 Map集合遍歷方式1.3.1 通過集合的全部鍵來遍歷集合1.3.2 Map集合遍歷方式21.3.3 Map集合遍歷方式3 二、Map集合的實現類2.1 HashMap類2.2 LinkedHashMap2.3 TreeMap 三、可變參數四、Collections類五、集合…

Vue 2.0 與 3.0區別

Vue.js是一種流行的前端JavaScript框架&#xff0c;用于構建用戶界面和單頁面應用程序。隨著時間的推移&#xff0c;Vue.js已經從Vue2發展到了Vue3&#xff0c;這兩個版本在**生命周期、模板組件以及性能**等方面有顯著差異。具體分析如下&#xff1a; 1. **生命周期** - **Vue…

恭喜朱雀橋的越南薇妮她牌NFC山竹汁飲料,成為霸王茶姬奶茶主材

朱雀橋NFC山竹汁飲料&#xff1a;榮登霸王茶姬奶茶主材&#xff0c;非遺傳承的天然之選 近日&#xff0c;據小編了解到&#xff1a;霸王茶姬欣喜地宣布&#xff0c;成功與朱雀橋達成合作越南薇妮她VINUT牌NFC山竹汁飲料。這款商超產品憑借其卓越的品質與獨特的口感&#xff0c…

PostgreSQL安裝教程及文件介紹

Ubuntu 安裝和配置 PostgreSQL 以 Ubuntu Server 20.04&#xff0c;PostgreSQL 12 版本為例。 1. 安裝 使用如下命令&#xff0c;安裝指定版本的 PostgreSQL sudo apt install postgresql-12在 Ubuntu 20.04 中安裝 PostgreSQL 登錄您的 Ubuntu 系統并使用以下 apt 命令更新…