UNETR++: Delving Into Efficient and Accurate 3D Medical Image Segmentation

摘要

得益于Transformer模型的成功,近期研究開始探索其在3D醫學分割任務中的適用性。在Transformer模型中,自注意力機制是核心構建模塊之一,與基于局部卷積的設計相比,它致力于捕捉長距離依賴關系。然而,自注意力操作存在二次復雜度問題,這已成為計算瓶頸,尤其在體醫學成像中——此類輸入為3D形式且包含大量切片。本文提出一種3D醫學圖像分割方法,名為UNETR++,該方法既能生成高質量分割掩碼,又在參數數量、計算成本和推理速度方面具備高效性。我們設計的核心是引入一種新型高效配對注意力(EPA)模塊:該模塊通過一對基于空間注意力和通道注意力的互依賴分支,高效學習空間和通道維度的判別性特征。我們提出的空間注意力公式具有高效性,其復雜度與輸入呈線性關系。為實現空間聚焦分支與通道聚焦分支之間的信息交互,我們共享查詢和鍵映射函數的權重——這不僅帶來互補優勢(配對注意力),還降低了整體復雜度。我們在五個基準數據集(Synapse、BTCV、ACDC、BraTS和Decathlon-Lung)上進行了大量評估,結果證實了所提方法在效率和準確性上的優勢。在Synapse數據集上,UNETR++的Dice評分達到87.2%,刷新了當前最優性能;同時與文獻中最佳方法相比,其參數數量和計算量(FLOPs)均減少了71%以上。我們的代碼和模型可通過以下鏈接獲取:https://tinyurl.com/2p87x5xn。

關鍵詞——深度學習、高效注意力、混合架構、醫學圖像分割?

INTRODUCTION

體素級(3D)分割是醫學成像領域的基礎性問題,具有眾多應用場景,包括用于診斷目的的腫瘤識別和器官定位等[1][2]。該任務通常通過類U-Net[3]的編碼器-解碼器架構來解決:編碼器生成3D圖像的分層低維表征,解碼器則將這種學習到的表征映射為體素級分割結果。早期基于CNN(卷積神經網絡)的方法在編碼器和解碼器中分別使用卷積和反卷積操作,但難以獲得精確的分割結果。近期有研究[4]嘗試解決基于CNN方法的局限性——通過擴大CNN的感受野,增強其對上下文表征的建模能力。盡管在編碼更優上下文表征方面取得了進展,但感受野有限、局部連接以及權重固定等問題,仍是基于CNN方法面臨的挑戰。這些挑戰可能影響其捕捉廣泛全局依賴關系的效果。此外,雖然基于3D CNN的方法通過權重共享實現了參數層面的高效性,但由于操作數量較多,其計算量(FLOPs)相應增加,推理速度也隨之變慢,這是一種性能上的權衡。相比之下,基于Transformer的方法本身具有全局性,近期已展現出有競爭力的性能,但代價是模型復雜度提高。具體而言,這類方法依賴全局自注意力機制,而該機制的復雜度與輸入呈二次關系。而且,在輸入為3D體數據的體素級醫學圖像分割任務中,這種復雜度問題更為突出。

為解決這些挑戰,探索融合CNN和Transformer優勢的混合架構的研究熱度日益上升。近期已有多項研究[1][5][6]嘗試設計混合架構,以結合局部卷積和全局注意力的優點。其中,部分方法[1]采用基于Transformer的編碼器搭配卷積解碼器,另一些方法[5][6]則致力于為編碼器和解碼器子網絡設計混合模塊。然而,這些研究主要聚焦于提高分割精度,這反過來導致模型在參數數量和計算量(FLOPs)上大幅增加,穩健性不盡如人意。我們認為,這種不理想的穩健性可能源于其低效的自注意力設計——這在體素級醫學圖像分割任務中問題更為明顯。此外,現有方法未能捕捉空間特征與通道特征之間的顯式依賴關系,而這種依賴關系本可以提升分割質量。在本研究中,我們旨在通過一個統一框架,同時提高分割精度和模型效率。

Fig1?左圖:基線模型UNETR [1]與我們提出的UNETR++在Synapse數據集上的定性對比。我們展示了兩個包含多個器官的示例。每個分割不準確的區域均用白色虛線框標記。在第一行中,UNETR難以準確分割右腎(RKid),并將其與膽囊(Gal)混淆。此外,胃(Sto)和左腎上腺(LAG)組織的分割結果也不準確。在第二行中,UNETR無法完整分割脾臟,且將其與胃(Sto)以及門靜脈和脾靜脈(PSV)混淆。此外,它對某些器官存在分割不足或過度分割的問題(例如門靜脈和脾靜脈、胃)。相比之下,我們的UNETR++通過在提出的EPA模塊中高效編碼豐富的互依賴空間和通道特征,準確分割了這些示例中的所有器官。建議放大查看以獲得最佳效果。更多定性對比結果詳見圖3和圖4。
??右圖:Synapse數據集上準確率(Dice評分)與模型復雜度(FLOPs和參數數量)的對比。與nnFormer [5]相比,UNETR++實現了更優的分割性能,同時將模型復雜度顯著降低71%以上。

A. Contributions

我們提出了一種用于3D醫學圖像分割的高效混合分層架構,名為UNETR++。該架構力求在分割精度以及參數數量、計算量(FLOPs)、GPU內存消耗和推理速度等效率相關方面均實現提升。我們提出的UNETR++分層方法以近期的UNETR框架[1]為基礎,引入了一種新型高效配對注意力(EPA)模塊。該模塊通過在兩個分支中分別應用空間注意力和通道注意力,高效捕捉豐富的、互相關聯的空間特征與通道特征。EPA中的空間注意力將鍵(keys)和值(values)投影到固定的低維空間,使得自注意力計算的復雜度與輸入標記(tokens)數量呈線性關系。另一方面,EPA中的通道注意力通過在通道維度上對查詢(queries)和鍵執行點積運算,著重捕捉通道特征圖之間的依賴關系。此外,為了強化空間特征與通道特征之間的關聯性,兩個分支共享查詢和鍵的權重——這同時還有助于控制網絡的參數數量。與之相對,值的權重保持獨立,以確保兩個分支能夠學習到互補的特征。

UNETR++相比現有方法具有顯著優勢:它大幅降低了GPU內存消耗,同時提升了推理速度并減少了計算量。這一點對于3D分割任務至關重要,因為此類任務本身復雜度較高。例如,與nnFormer[5]相比,UNETR++不僅性能更優,GPU推理速度提升2.4倍,GPU內存消耗減少5倍,計算量減少6倍;與Swin-UNETR[6]相比,UNETR++的推理速度提升3.6倍,GPU內存消耗和計算量均減少8倍;此外,相較于高效的基于CNN的方法nnUNet[2],UNETR++的內存消耗降低35%,計算量減少6倍。我們優先考慮高效的資源利用,從而在CPU和GPU上均實現了更快的推理速度。而且我們認為,上述這些混合方法難以有效捕捉特征通道之間的相互依賴關系,因此無法獲得同時編碼空間信息和通道間特征依賴的豐富特征表征。在本研究中,我們致力于在一個統一的混合分割框架中集中解決上述問題。

我們進行了全面評估,以檢驗UNETR++在五個廣泛使用的基準數據集上的性能,包括Synapse[7]、BTCV[7]、ACDC[8]、BraTS[9]和Decathlon-Lung[10]。評估結果證實了我們所提方法在效率和精度上的有效性,也體現出UNETR++在不同模態(包括CT掃描和MRI)的多樣化數據集上具有出色的泛化能力。在Synapse數據集上,UNETR++的Dice評分為87.2%,與現有最優方法[5]相比,參數數量和計算量均顯著減少71%以上;在ACDC數據集上,UNETR++的平均Dice評分為93.83%,比近期提出的MexNeXt[4]高出1.4%;在BraTS和Decathlon-Lung分割任務中,UNETR++在三項評估指標上均優于當前最優方法,在實現更優分割性能的同時,還具備更快的推理速度,且對GPU內存的需求顯著降低。

II. RELATED WORK

A. CNN-Based Segmentation Methods

自U-Net設計[3]提出以來,多種基于CNN的方法[11]、[12]、[13]、[14]對標準U-Net架構進行了擴展,以適用于各類醫學圖像分割任務。在3D醫學圖像分割領域[15]、[16]、[17]、[18]、[19],完整的體素圖像通常被當作一系列2D切片來處理。已有多項研究探索了用于捕捉上下文信息的分層框架。Milletari等人[18]提出對體素圖像進行下采樣以降低分辨率,通過這種3D表征方式保留有益的圖像特征。?i?ek等人[17]將U-Net架構擴展到體素分割任務中,用3D操作替代2D操作,并從稀疏標注的體素圖像中學習特征。Isensee等人[2]提出了名為nnUNet的通用分割框架,該框架能自動配置架構,以提取多尺度特征。Roth等人[20]設計了多尺度3D全卷積網絡,用于從不同分辨率的圖像中學習表征,實現多器官分割。此外,文獻中已有多項研究嘗試在基于CNN的框架中編碼整體上下文信息,例如借助圖像金字塔[21]、大卷積核[22]、空洞卷積[23]和可變形卷積[24]等方式。近期,Roy等人[4]提出了名為MedNeXt的全卷積3D編解碼器網絡。該架構是ConNeXt框架[25]的擴展版本,融合了自適應核大小與殘差連接,旨在數據有限的3D醫學成像場景中提升分割精度。盡管MedNeXt-M-K3[4]展現出了良好的精度表現,但其代價是GPU內存消耗較nnUNet[2]增加了4.1倍,導致GPU和CPU的推理速度顯著變慢。

B. Transformers-Based Segmentation Methods

視覺Transformer(ViT)近年來備受關注,這得益于其編碼長距離依賴關系的能力——該能力使其在包括分類[26]和檢測[27]在內的各類視覺任務中均取得了良好效果。Transformer架構的核心構建模塊之一是自注意力操作,它能對圖像塊序列間的交互進行建模,進而學習全局關聯。近期已有少量研究[28]、[29]、[30]、[31]嘗試在Transformer框架中緩解標準自注意力操作的復雜度問題。然而,這些研究大多聚焦于分類任務,尚未在密集預測任務中展開探索。

在醫學圖像分割領域,近期僅有少數研究[32]、[33]對純Transformer設計進行了探索。Karimi等人[32]提出將體素圖像劃分為3D塊,隨后將這些塊展平以構建1D嵌入,并將其輸入主干網絡以獲取全局表征。Cao等人[33]則針對2D醫學圖像分割提出了一種含移位窗口的架構:先將圖像劃分為塊,再將其輸入U形編碼器-解碼器以進行局部-全局表征學習。

C. Hybrid Segmentation Methods

除了純CNN或基于Transformer的設計之外,近期多項研究[1]、[5]、[19]、[34]、[35]、[36]探索了混合架構,通過結合卷積與自注意力操作來實現更優的分割效果。TransFuse[34]提出了一種并行的CNN-Transformer架構,該架構配備BiFusion模塊,用于在編碼器中融合多尺度特征。MedT[19]在自注意力中引入門控位置敏感軸向注意力機制,以控制編碼器中的位置嵌入信息,同時解碼器中的ConvNet模塊生成分割模型。TransUNet[35]將Transformer與U-Net架構相結合——Transformer對來自卷積特征的嵌入圖像塊進行編碼,解碼器則將上采樣后的編碼特征與高分辨率CNN特征融合以實現定位。Ds-transunet[36]采用基于Swin Transformer[37]的雙尺度編碼器,用于處理多尺度輸入,并通過自注意力從不同語義尺度編碼局部和全局特征表征。Hatamizadeh等人[1]提出了3D混合模型UNETR,該模型將Transformer的長距離空間依賴能力與CNN的歸納偏置融入“U形”編碼器-解碼器架構。UNETR中的Transformer塊主要用于編碼器,以提取固定的全局表征,隨后在多個分辨率下與基于CNN的解碼器融合。Zhou等人[5]提出了名為nnFormer的方法,該方法對SwinUNet[33]架構進行了適配:卷積層將輸入掃描圖像轉換為3D塊,并引入基于體數據的自注意力模塊來構建分層特征金字塔。盡管nnFormer取得了良好的性能,但與UNETR及其他混合方法相比,其計算復雜度顯著更高。CoTr[38]是一種混合架構,由CNN編碼器和高效可變形Transformer組成——卷積編碼器提取局部特征圖,可變形Transformer僅關注少數關鍵位置,并對提取到的特征表征中的部分依賴關系進行編碼。

如上所述,UNETR[1]、nnFormer[5]等多數近期混合方法相較于純CNN和純Transformer方法,分割性能有所提升。然而我們注意到,這些混合方法為提高分割精度,付出了模型規模(從參數數量和計算量(FLOPs)來看)大幅增加的代價,這可能進一步導致穩健性不佳。例如,UNETR雖取得了理想的精度,但與現有最優的基于CNN的nnUNet[2]相比,其參數數量多出2.5倍;而nnFormer雖性能優于UNETR,但參數數量進一步增加1.6倍,計算量(FLOPs)增加2.8倍。

D. Efficient Attention Methods

近年來,為2D視覺應用設計高效注意力模塊受到了廣泛關注。CBAM[39]是一種基于卷積神經網絡的高效注意力模塊,該模塊對特征圖沿空間和通道維度進行高效處理,隨后將生成的注意力圖與輸入特征圖相乘,從而實現自適應特征優化。盡管我們提出的EPA模塊也對通道和空間信息進行編碼,但EPA模塊與CBAM存在重大差異:(1)CBAM通過兩個串行子模塊對空間表征和通道表征進行編碼,而EPA模塊則采用并行方式對二者進行編碼;(2)EPA模塊中的通道注意力和空間注意力基于注意力機制構建,而CBAM的注意力則基于池化和卷積操作;(3)CBAM中的通道注意力和空間注意力擁有獨立的權重矩陣,而在EPA中,我們共享查詢(Q)和鍵(K)矩陣的權重——這種共享機制通過僅學習互補特征,將參數數量減少了25%,同時將性能提升了0.23%。

Transformer-CBAM[40]是對CBAM[39]的增強版本,它通過集成多尺度Transformer模塊,實現了對不同尺度上下文信息的建模,因此在遙感圖像變化檢測任務中尤為有效。Squeeze-and-Excitation(SE)[41]則聚焦于通道特征圖之間的關系,其提出的“擠壓-激勵”(SE)模塊通過顯式捕捉通道間的相互依賴關系,對特定通道的特征圖進行重新調整。Attention Gated U-Net[42]對U-Net[3]架構進行了擴展,為醫學成像場景引入了注意力門控(AG)模塊——該AG模塊通過不同的門控機制學習對不同形狀和大小的目標結構進行優先級排序,且計算開銷極小。

盡管上述多數方法在效率和準確性之間取得了良好的平衡,但它們主要是為2D視覺任務設計的。為驗證所提EPA模塊在3D醫學分割場景中的有效性,我們通過將EPA模塊替換為這些高效方法的3D對應版本進行了實驗,相關細節詳見表IX。

III. METHOD

A. Overall Architecture

Fig.2 我們提出的UNETR++方法概述(含分層編碼器-解碼器結構):3D圖像塊被輸入至編碼器,編碼器的輸出通過跳躍連接傳入解碼器,隨后經卷積模塊處理生成最終分割掩碼。我們設計的核心是引入高效配對注意力(EPA)模塊(詳見第III-B節)。每個EPA模塊通過具有共享鍵-查詢(keys-queries)和不同值(value)層的并行注意力子模塊執行兩項任務,從而高效學習豐富的空間-通道特征表征。如右側EPA模塊示意圖所示,第一個(上方)注意力子模塊通過對投影特征進行線性加權求和來聚合空間特征,進而計算空間注意力圖;第二個(下方)注意力子模塊則著重捕捉通道間的依賴關系,并計算通道注意力圖。最后,兩個注意力子模塊的輸出被融合后傳入卷積模塊,以增強特征表征能力,最終生成更優的分割掩碼。

圖2展示了我們的UNETR++架構,該架構包含分層的編碼器-解碼器結構。我們的UNETR++框架以近期提出的UNETR[1]為基礎,在編碼器和解碼器之間設有跳躍連接,后續通過卷積模塊(ConvBlocks)生成預測掩碼。與在整個編碼器中使用固定特征分辨率的設計不同,UNETR++采用分層設計——在每個階段,特征分辨率會以2倍的比例逐步降低。

在UNETR++框架中,編碼器包含4個階段,這4個階段的通道數分別為[C1, C2, C3, C4]。第一階段由補丁嵌入(patch embedding)和我們提出的新型高效配對注意力(EPA)模塊組成:補丁嵌入會將體素輸入分割為3D補丁,具體而言,將3D輸入(體數據)x ∈ R^H×W×D分割為非重疊的補丁xu ∈ R^N×(P1,P2,P3),其中(P1, P2, P3)為每個補丁的分辨率,N = (H/P1 × W/P2 × D/P3)表示序列長度;隨后,這些補丁被投影到C個通道維度,生成尺寸為H/P1 × W/P2 × D/P3 × C的特征圖。我們采用與文獻[5]相同的補丁分辨率(4, 4, 2)。對于編碼器的其余每個階段,我們先通過非重疊卷積下采樣層將分辨率降低2倍,再接入EPA模塊。

在我們提出的UNETR++中,每個EPA模塊包含兩個注意力子模塊。它們通過共享鍵-查詢(keys-queries)機制對空間和通道維度的信息進行編碼,從而高效學習豐富的空間-通道特征表征。編碼器各階段通過跳躍連接與解碼器各階段相連,以融合不同分辨率下的輸出——這能夠恢復下采樣操作中丟失的空間信息,進而得到更精確的預測結果。

與編碼器類似,解碼器也包含4個階段。每個解碼器階段先通過反卷積上采樣層將特征圖分辨率提高2倍,再接入EPA模塊(最后一個解碼器階段除外)。相鄰兩個解碼器階段之間的通道數以2倍的比例減少。因此,最后一個解碼器的輸出會與卷積特征圖融合,以恢復空間信息并增強特征表征能力。融合后的輸出隨后被輸入至3×3×3和1×1×1卷積模塊,生成體素級的最終掩碼預測。接下來,我們將詳細介紹EPA模塊。

B. Efficient Paired-Attention Block

如前所述,大多數現有混合方法所采用的自注意力操作,其復雜度與標記(tokens)數量呈二次關系。這在體素分割任務中計算成本極高,而當在混合設計中交錯使用窗口注意力和卷積組件時,問題會更為突出。此外,通過將鍵(keys)和值(values)的空間矩陣投影到低維空間,可高效學習空間注意力信息。有效結合空間維度的交互關系與通道特征間的依賴關系,能夠得到豐富的上下文空間-通道特征表征,進而提升掩碼預測效果。

所提出的EPA模塊可執行高效全局注意力計算,并有效捕捉豐富的空間-通道特征表征。該模塊包含空間注意力子模塊和通道注意力子模塊:空間注意力子模塊將自注意力的復雜度從二次降至線性;通道注意力子模塊則高效學習通道特征圖之間的依賴關系。EPA模塊通過在兩個注意力子模塊之間共享鍵-查詢(keys-queries)實現信息互通,從而生成更優且高效的特征表征。這可能得益于通過共享鍵和查詢、同時使用不同值(value)層來學習互補特征。為增強訓練穩定性,每個EPA模塊的起始處均采用了層歸一化(LayerNorm)操作。

如圖2(右側)所示,輸入特征圖x被送入EPA模塊的通道注意力子模塊和空間注意力子模塊。查詢(Q)和鍵(K)線性層的權重在兩個注意力子模塊之間共享,且每個注意力子模塊使用不同的值(V)層。兩個注意力子模塊的計算方式如下:

其中,X??、X?c、SA?和SAc分別表示空間注意力圖、通道注意力圖、空間注意力子模塊和通道注意力子模塊。Q?????d、K?????d、V???????和Vc??????分別為共享查詢矩陣、共享鍵矩陣、空間值層矩陣和通道值層矩陣。?

1) 空間注意力:在該子模塊中,我們致力于通過將復雜度從O(n2)降至O(np)來高效學習空間信息(其中n為標記數量,p為投影向量的維度,且p遠小于n)。給定形狀為hwd×C的歸一化張量X,我們通過三個線性層計算Q?????d(共享查詢)、K?????d(共享鍵)和V???????(空間值)的投影,得到Q?????d=W?X、K?????d=W?X和V???????=W?X(維度均為hwd×C)——其中W?、W?和W?分別為Q?????d、K?????d和V???????的投影權重。

之后,我們執行三個步驟:第一步,將K?????d和V???????層從hwd×C投影到形狀為p×C的低維矩陣;第二步,通過將Q?????d層與投影后的K?????d的轉置相乘,再經過softmax運算計算空間注意力圖,以此衡量每個特征與其他空間特征之間的相似度;第三步,將這些相似度與投影后的V???????層相乘,生成形狀為hwd×C的最終空間注意力圖。空間注意力的定義如下:

其中,Q?????d(共享查詢)、K????(投影后的共享鍵)和????????(投影后的空間值層)分別表示共享查詢矩陣、投影后的共享鍵矩陣和投影后的空間值層矩陣,d為每個向量的維度。

2) 通道注意力:該子模塊通過在通道維度上對通道值層與通道注意力圖執行點積運算,捕捉特征通道之間的依賴關系。我們使用與空間注意力子模塊相同的Q?????d(共享查詢)和K?????d(共享鍵),并通過線性層計算通道的 值層以學習互補特征,得到V???????=W?X(維度為hwd×C)——其中W?為V???????(通道值層)的投影權重。通道注意力的定義如下:?

其中,V???????(通道值層)、Q?????d(共享查詢)和K?????d(共享鍵)分別表示通道值層、共享查詢矩陣和共享鍵矩陣。最后,我們對兩個注意力子模塊的輸出進行求和融合,并通過卷積模塊對融合結果進行轉換,以獲得豐富的特征表征。EPA模塊的最終輸出X?計算如下:?

其中,X??和X?c分別表示空間注意力圖和通道注意力圖,Conv1和Conv3分別為1×1×1和3×3×3卷積模塊。

C. Loss Function

遵循基線模型UNETR [1]和nnFormer [5],我們的損失函數基于常用的軟Dice損失[18]與交叉熵損失的總和,以同時利用這兩種互補損失函數的優勢。其定義如下:

其中,I表示類別數量,V表示體素數量,Yv,i和Pv,i分別表示體素v處類別i的真實標簽和輸出概率。

IV. EXPERIMENTS

V. CONCLUSION AND DISCUSSION

我們提出了一種名為UNETR++的分層方法,用于3D醫學分割。UNETR++引入了高效配對注意力(EPA)模塊,通過空間注意力和通道注意力對豐富的、互依賴的空間特征與通道特征進行編碼。在EPA模塊中,我們共享查詢和鍵映射函數的權重,以促進空間分支與通道分支之間的信息交互,這不僅帶來了互補優勢,還減少了參數數量。

我們的UNETR++在五個數據集(Synapse、ACDC、BTCV、BraTS和Decathlon-Lung)上取得了優異的分割結果,同時與現有最佳方法相比,顯著降低了模型復雜度(從參數數量、計算量(FLOPs)來看)。此外,我們的研究表明,UNETR++的GPU內存消耗更低——這是3D分割任務的關鍵因素,且在GPU和CPU平臺上均能以更快的推理速度運行。因此,UNETR++提供了一種更通用且資源效率更高的解決方案,提升了在移動平臺部署醫學分割模型以進行實時醫學圖像分析的可行性。

所提出的EPA模塊具有通用性,可應用于其他研究中。為驗證這一點,我們在TransBTS[43]的框架中,用所提出的EPA模塊替換了其自注意力模塊,并在Synapse數據集上對更新后的模型進行了評估。結果顯示,Dice相似系數(DSC)提升了1.2%(從83.28%升至84.47%),歸一化表面距離(NSD)提升了0.8%,95%豪斯多夫距離(HD95)從12.34顯著降至7.92,平均對稱表面距離(MASD)從3.65降至3.11。

為探究UNETR++可能存在的局限性,我們對不同的異常案例進行了分析。盡管我們的預測結果優于現有方法,且更接近真實標簽,但我們發現,在少數案例中,我們的模型以及大多數現有方法都難以對某些器官進行分割。當少數切片中器官的幾何形狀異常(表現為邊界纖細)時,我們的模型和大多數現有模型都難以對其進行精確分割。原因可能是,與正常形狀的樣本相比,這種異常形狀的訓練樣本數量有限。在某些案例中,與最新的基于CNN的方法MedNeXt[4]相比,我們的模型在歸一化表面距離(NSD)上表現較低,這一定量結果體現了上述定位誤差。其原因可能在于基于CNN的方法具有歸納偏置,擅長捕捉空間層次結構和局部模式。我們計劃通過在預處理階段應用幾何數據增強技術來解決這一問題。

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

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

相關文章

Kotlin Flow 在 Jetpack Compose 中的正確打開方式:SharedFlow vs StateFlow 與 LaunchedEffect

在 Jetpack Compose 中,Kotlin Flow 是處理異步數據流的核心工具,而 SharedFlow 和 StateFlow 是最常用的兩種 Flow 類型。但很多開發者對它們的適用場景、如何與 LaunchedEffect 配合使用存在困惑。本文將深入探討它們的區別,并給出最佳實踐…

嵌入式——C語言:指針①

一、指針特點1.讓代碼更加簡潔高效2.提供直接訪問內存的操作3.利用指針可以直接操作硬件二、指針概念(一)地址:為了區分內存中不同字節的編號(0到2^16-1)(二)指針:指針就是地址&…

RabbitMQ—HAProxy負載均衡

上篇文章: RabbitMQ—仲裁隊列https://blog.csdn.net/sniper_fandc/article/details/149312579?fromshareblogdetail&sharetypeblogdetail&sharerId149312579&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目錄 1 HAProxy安裝…

QT中啟用VIM后粘貼復制快捷鍵失效

當在QT中啟用FakeVim之后,Ctrl C 和 Ctrl V 快捷鍵就變成 Vim 的快捷鍵了,我希望它還是原來的復制粘貼功能,打開:編輯 > Preferences…,然后勾選 “Pass control keys”即可,如下:

TCP三次握手與四次揮手全解析

🌊 TCP三次握手與四次揮手全解析(含序列號動態追蹤)🔑 TCP 協議核心機制 序列號 (seq):數據字節流的唯一標識(32位循環計數器)確認號 (ack):期望接收的下一個序列號(ack …

7月26號打卡

作業:題目1:計算圓的面積 任務: 編寫一個名為 calculate_circle_area 的函數,該函數接收圓的半徑 radius 作為參數,并返回圓的面積。圓的面積 π * radius (可以使用 math.pi 作為 π 的值)要求:函數接收一…

C++/CLI與標準C++的語法差異(一)

🌌 C/CLI與標準C的語法差異(一)🔬 第一章:類型系統革命 - 徹底解構三語言范式 🧪 1.1 類型聲明語義差異矩陣 #mermaid-svg-L5kQ3iy05pKo4vIj {font-family:"trebuchet ms",verdana,arial,sans-se…

輸電線路微氣象在線監測裝置:保障電網安全的科技屏障

在電力傳輸網絡中,輸電線路微氣象在線監測裝置通過集成專業傳感器與智能分析技術,實現對線路周邊環境參數的實時采集與動態分析,為電網運行安全提供數據支撐。該設備針對輸電線路特殊工況設計,具備高適應性、高可靠性特點。工作原…

基于springboot的圖書借閱系統

用戶:借閱信息管理,續借信息管理,還書信息管理,圖書信息,系統公告,留言板,我的中心管理員:圖書信息管理,圖書類型管理,借閱信息管理,續借信息管理…

Xinference vs SGLang:詳細對比分析

概述對比特性XinferenceSGLang定位通用AI模型推理平臺高性能LLM服務框架專注領域多模態模型統一接口LLM推理性能優化設計理念易用性和兼容性性能和效率核心架構對比 Xinference 架構特點 Xinference 架構: ├── API層(REST/CLI/Python) ├─…

雙非上岸985!專業課140分經驗!信號與系統考研專業課140+上岸中南大學,通信考研小馬哥

一.經驗分享個人情況:初試總分377,政治59,英語二75、數學二103、專業課140。本科為湖南一所雙非一本,專業是電子信息工程,本科成績一般,無獎學金無評優無科研競賽,屬于三無人員&…

配置DNS正反向解析

服務端master配置:yum install bind -y配置靜態ip:修改配置文件:主:區域:正向解析:反向解析:開啟服務:客戶端node1配置:yum install nginx -y配置靜態ip:使用xftp將文…

MyBatis-Plus 通用 Service

引言 在開發 Java Web 應用程序時,我們經常需要進行大量的數據庫操作,如創建、讀取、更新和刪除(CRUD)。MyBatis-Plus 作為一個強大的 MyBatis 增強工具,為我們提供了通用 Service 接口,極大地簡化了這些操…

聚類-一種無監督分類算法

目錄 1、聚類任務 2、性能度量 (1)外部指標 (2)內部指標 3、具體聚類方法 (1)原型聚類 (2)密度聚類 (3)層次聚類 “無監督學習”(unsupervised learnin…

ES6 標簽模板:前端框架的靈活利器

ES6(ECMAScript 2015)引入的模板字符串(Template Literals)為 JavaScript 開發者提供了更簡潔的字符串處理方式,而模板字符串標簽(Tagged Template Literals)則進一步擴展了其功能性。通過標簽函…

解鎖編程核心能力:深入淺出數據結構和算法

——為什么它們是你代碼效率的終極武器? 🌟 引言:程序世界的基石 想象你正在建造摩天大樓:數據結構是鋼筋骨架,決定建筑的結構與承重能力;算法則是施工藍圖,指導如何高效完成建造。兩者結合&am…

Jenkins運行pytest時指令失效的原因以及解決辦法

錯誤收集 Started by user 偷走晚霞的人 Running as SYSTEM Building in workspace C:\Users\Administrator\.jenkins\workspace\TestAAA [TestAAA] $ cmd /c call C:\Users\Administrator\AppData\Local\Temp\jenkins5821160869728612887.bat C:\Users\Administrator\.jenkins…

MySQL數據庫本地遷移到云端完整教程

一、準備工作 安裝MySQL客戶端工具獲取云端數據庫連接信息: 主機地址端口號用戶名密碼數據庫名二、本地數據庫導出 mysqldump -h 127.0.0.1 -P 4406 -u root -p 數據庫名 > backup.sql執行后會提示輸入密碼,完成后會在當前目錄生成backup.sql文件 三、…

InvokeRepeating避免嵌套調用

InvokeRepeating嵌套這會導致指數級增長的重復調用堆疊。使用單一協程PeriodicActionRoutine替代所有InvokeRepeating避免方法間相互調用造成的堆疊如果需要多層級時間控制(如主循環子循環):IEnumerator MultiLevelTimer() {float mainInterv…

【工具】好用的瀏覽器AI助手

🧨 一、什么是 Sider? Sider 是一個 Chrome 瀏覽器插件,你可以把它看作一個「網頁邊上的 AI 小助手」。 🗣? 它就像你網頁旁邊的 AI 機器人,可以幫你回答問題、總結文章、翻譯、寫文案、改寫內容、甚至幫你學習英文&…