【目標檢測】【深度學習】【Pytorch版本】YOLOV3模型算法詳解

【目標檢測】【深度學習】【Pytorch版本】YOLOV3模型算法詳解

文章目錄

  • 【目標檢測】【深度學習】【Pytorch版本】YOLOV3模型算法詳解
  • 前言
  • YOLOV3的模型結構
    • YOLOV3模型的基本執行流程
    • YOLOV3模型的網絡參數
  • YOLOV3的核心思想
    • 前向傳播階段
    • 反向傳播階段
  • 總結


前言

YOLOV3是由華盛頓大學的Joseph Redmon等人在《YOLOv3: An Incremental Improvement》【論文地址】中提出的YOLO系列單階段目標檢測模型的升級改進版,核心思想是在YOLOV2基礎上,通過引入多項關鍵技術和模塊提升檢測性能,即特征金字塔網絡(FPN)結構的多尺度特征融合、更深的Darknet-53網絡、借鑒了ResNet的殘差連接設計、改進的損失函數等使得YOLOV3在保持高速的同時,大幅提升了檢測精度。

Joseph Redmon在提出了YOLO三部曲之后,宣布退出計算機視覺研究,后續的YOLO系列是其他人在其基礎上的創新改進。


YOLOV3的模型結構

YOLOV3模型的基本執行流程

下圖是博主根據原論文繪制了YOLOV3模型流程示意圖:

基本流程: 將輸入圖像調整為固定大小(416x416),使用Darknet-53作為骨干網絡來提取圖像的特征(包含了檢測框位置、大小、置信度以及分類概率),在三個不同尺度特征圖劃分網格,每個單元網格負責預測一定數量的邊界框及其對應的類別概率,分別對應于小、中、大尺寸目標的檢測。

YOLOV3模型的網絡參數

YOLOV3網絡參數: YOLOV3采用的Darknet-53結構,由于沒有全連接層,模型的輸入可以是任意圖片大小,不管是416×416還是320×320,因此可以進行多尺度訓練。

53是指有53個Convolutional層。


YOLOV3的核心思想

前向傳播階段

特征金字塔(FPN): 包含了從底層到頂層的多個尺度的特征圖,每個特征圖都融合了不同層次的特征信息,每一層都對應一個特定的尺度范圍,利用不同尺度的特征圖進行檢測,使得模型能夠同時處理不同大小的目標【參考】 。

通過以下步驟實現多尺度特征的提取和融合:

  • step1(自底向上): 使用基礎網絡(ResNet等)作為骨干網絡(backbone),對輸入圖像中逐層提取特征,特征圖的分辨率逐漸降低,按照輸出特征圖分辨率大小劃分為不同的階段(stage),相鄰倆個階段的特征圖,后一個階段相對于前一個階段特征圖尺度縮小一半,通道數則增加一倍;
  • step2(自頂向下): 后一階段的高層特征圖上采樣(up-sampling,通常采用2倍鄰近插值算法),使其分辨率尺寸與前一階段的低層特征圖相匹配,;
  • step3(橫向連接): 將倆個特征圖進行通道拼接,完成低層特征圖的高分辨率信息與高層特征圖的豐富語義信息的融合。

檢測頭: 基于多尺度特征圖來預測目標的位置和類別,作用如下:

  • 多尺度預測: 在三個不同尺度的特征圖上分別應用檢測頭,使得模型可以同時處理小、中、大型目標的檢測問題,有效地提高模型對不同尺寸目標的檢測能力;
  • 邊界框預測: 每個檢測頭基于一組(3個)預選框(anchor boxes)負責預測邊界框,預測預選框相對于真實框(ground truth)的偏移和縮放來確定邊界框位置,預測框中目標存在的概率以及目標類別的概率來確定邊界框的類別。

位置預測: YOLOV3延續了YOLOV2的設計,利用預選框來預測邊界框相對預選框之間的誤差補償(offsets),預測邊界框位置(中心點)在所屬網格單元左上角位置進行相對偏移值,預測邊界框尺寸基于所對應的預選框寬高進行相對縮放:
b x = σ ( t x ) + c x b y = σ ( t y ) + c y b w = p w e t w b h = p h e t h \begin{array}{l} {b_x} = \sigma ({t_x}) + {c_x}\\ {b_y} = \sigma ({t_y}) + {c_y}\\ {b_w} = {p_w}{e^{{t_w}}}\\ {b_h} = {p_h}{e^{{t_h}}} \end{array} bx?=σ(tx?)+cx?by?=σ(ty?)+cy?bw?=pw?etw?bh?=ph?eth??

使用sigmoid函數處理偏移值,將邊界框中心點約束在所屬網格單元中,網格單元的尺度為1,而偏移值在(0,1)范圍內,防止過度偏移。

( c x , c y ) ({c_x},{c_y}) (cx?,cy?)是網格單元的左上角坐標, p w p_w pw? p h p_h ph?是預選框的寬度與高度, e t w e^{{t_w}} etw? e t h e^{{t_h}} eth?則沒有過多約束是因為物體的大小是不受限制的。

多尺度訓練: 采用不同分辨率的多尺度圖像訓練(輸入圖像尺寸動態變化),讓模型能夠魯棒地運行在不同尺寸的圖像上,提高了模型對不同尺寸目標的泛化能力 。

數據正負樣本: 、 預測框分為三 種情況::正樣本(positive)、負樣本(negative)和忽略樣本(ignore)。

  • 正樣本: 任取一個真實框,計算與其類別相同的全部預測框IOU,IOU最大的預測框作為正樣本,正樣本IOU可能小于閾值。一個預測框只分配給一個真實框。正樣本產生置信度loss、檢測框loss以及類別loss,真實框的類別標簽是onehot編碼,置信度標簽為1。

    當前真實框已經匹配了一個預測框,那么下一個真實框就在余下的預測框中匹配IOU最大的作為其正樣本。

  • 忽略樣本: 與任意一個真實框IOU大于閾值但沒成為正樣本的預測框,就是忽略樣本。忽略樣樣本不產生任何loss。

  • 負樣本: 任取一個真實框,計算與其類別相同的全部預測框IOU,IOU小于閾值的預測框作為負樣本。負樣本只產生置信度loss、真實框的置信度標簽為0。

根據上述標準,下圖中以檢測狗為例,淺綠色是真實框,綠色是正樣本預測框,橙色是忽略樣本預測框,紅色則是負樣本預測框。

在之前的YOLO版本中,正樣本使用真實框與預測框的IOU作為置信度,置信度始終比較小,檢測的召回率不高(過濾太多找不全),特別是在學習小物體時,IOU可能更小,導致無法有效學習。YOLOV3將正樣本置信度設置為1,因為置信度本身就是二分類問題,即預測框中是不是一個真實物體,標簽是1或0更加合理。

反向傳播階段

損失函數: YOLOV3的損失函數公式為:
L o s s = ? λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ x ∧ i j log ? ( x i j ) + ( 1 ? x ∧ i j ) log ? ( 1 ? x i j ) + y ∧ i j log ? ( y i j ) + ( 1 ? y ∧ i j ) log ? ( 1 ? y i j ) ] + 1 2 λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ ( w i j ? w ∧ i j ) 2 + ( h i j ? h ∧ i j ) 2 ] ? ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ C ∧ i j log ? ( C i j ) + ( 1 ? C ∧ i j ) log ? ( 1 ? C i j ) ] ? λ n o o b j ∑ i = 0 S 2 ∑ j = 0 B 1 i j n o o b j [ C ∧ i j log ? ( C i j ) + ( 1 ? C ∧ i j ) log ? ( 1 ? C i j ) ] ? ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j ∑ c ∈ c l a s s e s [ P ∧ i j c log ? ( P i j c ) + ( 1 ? P ∧ i j c ) log ? ( 1 ? P i j c ) ] L{\rm{oss}} = - {\lambda _{coord}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\left[ {{{\mathop x\limits^ \wedge }_{ij}}\log ({x_{ij}}) + (1 - {{\mathop x\limits^ \wedge }_{ij}})\log (1 - {x_{ij}}) + {{\mathop y\limits^ \wedge }_{ij}}\log ({y_{ij}}) + (1 - {{\mathop y\limits^ \wedge }_{ij}})\log (1 - {y_{ij}})} \right]} } + \frac{1}{2}{\lambda _{coord}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\left[ {{{({w_{ij}} - {{\mathop w\limits^ \wedge }_{ij}})}^2} + {{({h_{ij}} - {{\mathop h\limits^ \wedge }_{ij}})}^2}} \right]} } - \sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\left[ {{{\mathop C\limits^ \wedge }_{ij}}\log ({C_{ij}}) + (1 - {{\mathop C\limits^ \wedge }_{ij}})\log (1 - {C_{ij}})} \right]} } - {\lambda _{noobj}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{noobj}\left[ {{{\mathop C\limits^ \wedge }_{ij}}\log ({C_{ij}}) + (1 - {{\mathop C\limits^ \wedge }_{ij}})\log (1 - {C_{ij}})} \right]} - \sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\sum\limits_{c \in classes} {\left[ {{{\mathop P\limits^ \wedge }_{ijc}}\log ({P_{ijc}}) + (1 - {{\mathop P\limits^ \wedge }_{ijc}})\log (1 - {P_{ijc}})} \right]} } } } Loss=?λcoord?i=0S2?j=0B?1ijobj?[xij?log(xij?)+(1?xij?)log(1?xij?)+y?ij?log(yij?)+(1?y?ij?)log(1?yij?)]+21?λcoord?i=0S2?j=0B?1ijobj?[(wij??wij?)2+(hij??h?ij?)2]?i=0S2?j=0B?1ijobj?[C?ij?log(Cij?)+(1?C?ij?)log(1?Cij?)]?λnoobj?i=0S2?j=0B?1ijnoobj?[C?ij?log(Cij?)+(1?C?ij?)log(1?Cij?)]?i=0S2?j=0B?1ijobj?cclasses?[P?ijc?log(Pijc?)+(1?P?ijc?)log(1?Pijc?)]

  • ∑ i = 0 S 2 \sum\limits_{{\rm{i}} = 0}^{{S^2}} {} i=0S2?表示遍歷所有網格單元并進行累加;
  • ∑ j = 0 B \sum\limits_{{\rm{j}} = 0}^B {} j=0B?表示遍歷所有預測邊界框并進行累加。

預測框位置損失: 計算了所有預測框的位置(中心坐標)與真實框的位置的交叉熵誤差損失和。
? λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ x ∧ i j log ? ( x i j ) + ( 1 ? x ∧ i j ) log ? ( 1 ? x i j ) + y ∧ i j log ? ( y i j ) + ( 1 ? y ∧ i j ) log ? ( 1 ? y i j ) ] - {\lambda _{coord}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\left[ {{{\mathop x\limits^ \wedge }_{ij}}\log ({x_{ij}}) + (1 - {{\mathop x\limits^ \wedge }_{ij}})\log (1 - {x_{ij}}) + {{\mathop y\limits^ \wedge }_{ij}}\log ({y_{ij}}) + (1 - {{\mathop y\limits^ \wedge }_{ij}})\log (1 - {y_{ij}})} \right]} } ?λcoord?i=0S2?j=0B?1ijobj?[xij?log(xij?)+(1?xij?)log(1?xij?)+y?ij?log(yij?)+(1?y?ij?)log(1?yij?)]

  • ( x ∧ i j , y ∧ i j ) {({{\mathop {{\rm{ }}x}\limits^ \wedge }_{ij}},{{\mathop {{\rm{ y}}}\limits^ \wedge }_{ij}})} (xij?,y?ij?)表示真實框的中心點坐標;
  • ( x i j , y i j ) {({x_{ij}},{y_{ij}})} (xij?,yij?)表示預測框的中心點坐標;
  • λ c o o r d {\lambda _{coord}} λcoord?表示協調系數, λ c o o r d = ( 2 ? w i j ∧ h i j ∧ ) {\lambda _{coord}} = (2 - {\mathop w\limits^ \wedge _{ij}}{\mathop h\limits^ \wedge _{ij}}) λcoord?=(2?ijw?ijh?)協調檢測目標不同大小對誤差函數的影響:檢測目標比較小時增大其對損失函數的影響,相反檢測目標比較大時消減其對損失函數的影響;
  • 1 i j o b j {1_{ij}^{obj}} 1ijobj?表示當前預測框是否預測一個目標物體,如果預測一個目標則為1,否則等于0。

預測框尺度損失: 計算了所有預測框的寬高與真實框的寬高求和平方誤差損失和。
1 2 λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ ( w i j ? w ∧ i j ) 2 + ( h i j ? h ∧ i j ) 2 ] \frac{1}{2}{\lambda _{coord}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\left[ {{{({w_{ij}} - {{\mathop w\limits^ \wedge }_{ij}})}^2} + {{({h_{ij}} - {{\mathop h\limits^ \wedge }_{ij}})}^2}} \right]} } 21?λcoord?i=0S2?j=0B?1ijobj?[(wij??wij?)2+(hij??h?ij?)2]

  • ( w ∧ i j , h ∧ i j ) {({{\mathop {{\rm{ }}w}\limits^ \wedge }_{ij}},{{\mathop {{\rm{ h}}}\limits^ \wedge }_{ij}})} (wij?,hij?)表示真實框的中心點坐標;
  • ( w i j , h i j ) {({w_{ij}},{h_{ij}})} (wij?,hij?)表示預測框的中心點坐標。

預測框置信度損失: 計算了所有預測框的置信度與真實框的置信度的交叉熵誤差損失和。
? ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ C ∧ i j log ? ( C i j ) + ( 1 ? C ∧ i j ) log ? ( 1 ? C i j ) ] ? λ n o o b j ∑ i = 0 S 2 ∑ j = 0 B 1 i j n o o b j [ C ∧ i j log ? ( C i j ) + ( 1 ? C ∧ i j ) log ? ( 1 ? C i j ) ] - \sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\left[ {{{\mathop C\limits^ \wedge }_{ij}}\log ({C_{ij}}) + (1 - {{\mathop C\limits^ \wedge }_{ij}})\log (1 - {C_{ij}})} \right]} } - {\lambda _{noobj}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{noobj}\left[ {{{\mathop C\limits^ \wedge }_{ij}}\log ({C_{ij}}) + (1 - {{\mathop C\limits^ \wedge }_{ij}})\log (1 - {C_{ij}})} \right]} } ?i=0S2?j=0B?1ijobj?[C?ij?log(Cij?)+(1?C?ij?)log(1?Cij?)]?λnoobj?i=0S2?j=0B?1ijnoobj?[C?ij?log(Cij?)+(1?C?ij?)log(1?Cij?)]

  • C ∧ i j {{{\mathop C\limits^ \wedge }_{ij}}} C?ij?表示真實框的置信度,包含檢測目標取值為1,否則還是0;
  • C i j {{C_{ij}}} Cij?表示預測框的置信度;
  • λ n o o b j {\lambda _{noobj}} λnoobj?表示預測框沒有目標的權重系數,通常大部分預測框都不包含檢測目標物體,導致模型預測傾向于預測框中沒有目標物體,因此必須減少沒有目標物體的預測框的損失權重。

預測框類別損失: 計算了所有預測框的類別概率與真實框的類別概率的交叉熵誤差損失和。
? ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j ∑ c ∈ c l a s s e s [ P ∧ i j c log ? ( P i j c ) + ( 1 ? P ∧ i j c ) log ? ( 1 ? P i j c ) ] - \sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {1_{ij}^{obj}\sum\limits_{c \in classes} {\left[ {{{\mathop P\limits^ \wedge }_{ijc}}\log ({P_{ijc}}) + (1 - {{\mathop P\limits^ \wedge }_{ijc}})\log (1 - {P_{ijc}})} \right]} } } ?i=0S2?j=0B?1ijobj?cclasses?[P?ijc?log(Pijc?)+(1?P?ijc?)log(1?Pijc?)]

  • P ∧ i j c {{{\mathop P\limits^ \wedge }_{ijc}}} P?ijc?表示真實框的類別概率,onehot編碼,所屬的類別概率為1,其他類概率為0;
  • P i j c {{P_{ijc}}} Pijc?表示預測框的類別概率。

在YOLOV1和YOLOV2利用softmax來進行概率預測,這種激活函數讓所有類別的概率相加等于1,因此只能進行單一分類預測,而在YOLOV3中將softmax修改成sigmoid函數,對不同類別單獨進行二分類概率預測,因此進行多標簽類別的分類預測。

YOLOV3可以同時是動物和豬倆類(sigmoid函數),而不是動物和豬中選擇概括最大的一類(softmax函數)。


總結

盡可能簡單、詳細的介紹了YOLOV3模型的結構,深入講解了YOLOV3核心思想。

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

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

相關文章

LN2220 2A 高效率升壓 DC/DC 電壓調整器

1、產品概述 LN2220 是一款微小型、高效率、升壓型 DC/DC 調整器。 電路由電流模 PWM 控制環路,誤差放大器,斜波補償電路, 比較器和功率開關等模塊組成。該芯片可在較寬負載范圍內 高效穩定的工作,內置一個 4A 的功率開關和…

【大模型基礎_毛玉仁】6.3 知識檢索

目錄 6.3 知識檢索6.3.1 知識庫構建1)數據采集及預處理2)知識庫增強 6.3.2 查詢增強1)查詢語義增強2)查詢內容增強 6.3.3 檢索器1)判別式檢索器2)生成式檢索器 6.3.4 檢索效率增強1)相似度索引算…

靜態方法和實例方法

在 Java 中,?靜態方法(static method)?和?實例方法(instance method)?是兩種不同類型的方法,它們在調用方式、內存分配和訪問權限上有顯著區別。以下是詳細對比: ?1. 靜態方法(…

Lua環境搭建+Lua基本語法

前期準備: 搜索并下載安裝LuaForWindows,例: 安裝完成后開啟cmd窗口,輸入lua 出現版本號證明成功下載安裝 使用Sublime Text編輯器編寫Lua 使用瀏覽器或CSDN搜索Sublime Text下載并安裝,安裝成功后打開編輯器,編輯…

FFmpeg錄制屏幕和音頻

一、FFmpeg命令行實現錄制屏幕和音頻 1、Windows 示例 #include <cstdlib> #include <string> #include <iostream>int main() {// FFmpeg 命令行&#xff08;錄制屏幕 麥克風音頻&#xff09;std::string command "ffmpeg -f gdigrab -framerate 3…

【數據集】多視圖文本數據集

多視圖文本數據集指的是包含多個不同類型或來源的信息的文本數據集。不同視圖可以來源于不同的數據模式&#xff08;如原始文本、元數據、網絡結構等&#xff09;&#xff0c;或者不同的文本表示方法&#xff08;如 TF-IDF、詞嵌入、主題分布等&#xff09;。這些數據集常用于多…

C++ 繼承方式使用場景(極簡版)

1. 公有繼承&#xff08;public&#xff09; 什么時候用&#xff1f; “是一個”&#xff08;is-a&#xff09;關系&#xff1a;派生類 是 基類的一種。 例&#xff1a;class Dog : public Animal&#xff08;狗是動物&#xff09; 最常見&#xff0c;90%的繼承都用它。 2. 保…

Ubuntu 系統 Docker 中搭建 CUDA cuDNN 開發環境

CUDA 是 NVIDIA 推出的并行計算平臺和編程模型&#xff0c;利用 GPU 多核心架構加速計算任務&#xff0c;廣泛應用于深度學習、科學計算等領域。cuDNN 是基于 CUDA 的深度神經網絡加速庫&#xff0c;為深度學習框架提供高效卷積、池化等操作的優化實現&#xff0c;提升模型訓練…

高密度任務下的挑戰與破局:數字樣機助力火箭發射提效提質

2025年4月1日12時&#xff0c;在酒泉衛星發射中心&#xff0c;長征二號丁運載火箭順利升空&#xff0c;成功將一顆衛星互聯網技術試驗衛星送入預定軌道&#xff0c;發射任務圓滿完成。這是長征二號丁火箭的第97次發射&#xff0c;也是長征系列火箭的第567次發射。 執行本次任務…

關于SQL子查詢的使用策略

在 SQL 優化中&#xff0c;一般遵循**“非必要不使用子查詢”**的原則&#xff0c;因為子查詢可能會帶來額外的計算開銷&#xff0c;影響查詢效率。但是&#xff0c;并不是所有子查詢都需要避免&#xff0c;有時子查詢是最優解&#xff0c;具體要根據實際場景選擇合適的優化方式…

JavaEE初階復習(JVM篇)

JVM Java虛擬機 jdk java開發工具包 jre java運行時環境 jvm java虛擬機(解釋執行 java 字節碼) java作為一個半解釋,半編譯的語言,可以做到跨平臺. java 通過javac把.java文件>.class文件(字節碼文件) 字節碼文件, 包含的就是java字節碼, jvm把字節碼進行翻譯轉化為…

2.pycharm保姆級安裝教程

一、pycharm安裝 1.官網上下載好好軟&#xff0c;雙擊打開 2.下一步 3.修改路徑地址 (默認也可以) 4.打勾 5.安裝 不用重啟電腦 二、添加解釋器 1.雙擊軟件&#xff0c;打開 2.projects – new project 3.指定項目名字&#xff0c;項目保存地址&#xff0c;解釋器 4.右擊 – …

zk基礎—4.zk實現分布式功能二

大綱 1.zk實現數據發布訂閱 2.zk實現負載均衡 3.zk實現分布式命名服務 4.zk實現分布式協調(Master-Worker協同) 5.zk實現分布式通信 6.zk實現Master選舉 7.zk實現分布式鎖 8.zk實現分布式隊列和分布式屏障 4.zk實現分布式協調(Master-Worker協同) (1)Master-Worker架構…

Java 實現 字母異位詞分組

在這篇博客中&#xff0c;我們將詳細解析如何使用 Java 代碼來解決 字母異位詞分組這個經典的算法問題。我們會逐步分析代碼邏輯&#xff0c;并探討其時間復雜度及優化思路。 題目描述 給定一個字符串數組 strs&#xff0c;請將字母異位詞組合在一起。字母異位詞是指由相同字…

【Ragflow】10. 助理配置參數詳細解析/模型響應加速方法

概述 Ragflow的助理配置中&#xff0c;有很多參數&#xff0c;盡管官方文檔給出了一定程度的解釋&#xff0c;但不夠詳細。 本文將對各項參數進行更詳細的解釋說明&#xff0c;并進一步挖掘某些參數中隱含的潛在陷阱。 助理設置 空回復 含義&#xff1a;輸入的問題若未能在…

Mac Apple silicon如何指定運行amd64架構的ubuntu Docker?

如何指定運行amd64架構的ubuntu Docker 下面這個docker命令如何指定運行amd64架構的ubuntu Docker&#xff1f; docker run -it -v $(pwd):/workspace ubuntu:20.04 bash這個命令已經非常接近正確運行一個基于 amd64 架構的 Ubuntu 容器了&#xff0c;但如果你想明確指定運行…

ColPali:基于視覺語言模型的高效文檔檢索

摘要 文檔是視覺豐富的結構&#xff0c;不僅通過文本傳遞信息&#xff0c;還包括圖表、頁面布局、表格&#xff0c;甚至字體。然而&#xff0c;由于現代檢索系統主要依賴從文檔頁面中提取的文本信息來索引文檔&#xff08;通常是冗長且脆弱的流程&#xff09;&#xff0c;它們…

使用C++實現HTTP服務

天天開心&#xff01;&#xff01;&#xff01; 閱讀本篇文章之前&#xff0c;請先閱讀HTTP基礎知識 傳送門----> HTTP基礎知識 文章目錄 一、CWeb服務器&#xff08;核心代碼WebServer.cpp&#xff09;二、靜態文件結構三、編譯和運行四、訪問測試 一、CWeb服務器&#xff…

Reactive編程入門:Project Reactor 深度指南

文章目錄 4.2.1 創建 Flux 和 MonoFlux 基礎創建方式高級創建模式Mono 創建方式 4.2.2 訂閱與數據處理基礎訂閱模式數據處理操作符 4.2.3 核心操作符深度解析flatMap 操作符zip 操作符buffer 操作符 高級組合模式復雜流處理示例背壓處理策略 測試響應式流性能優化技巧 React 編…

【萬字總結】前端全方位性能優化指南(完結篇)——自適應優化系統、遺傳算法調參、Service Worker智能降級方案

前言 自適應進化宣言 當監控網絡精準定位病灶&#xff0c;真正的挑戰浮出水面&#xff1a;系統能否像生物般自主進化&#xff1f; 五維感知——通過設備傳感器實時捕獲環境指紋&#xff08;如地鐵隧道弱光環境自動切換省電渲染&#xff09; 基因調參——150個性能參數在遺傳算…