全球首個面向遙感任務設計的億級視覺Transformer大模型

来源:https://www.cnblogs.com/Jcloud/archive/2023/02/01/17081811.html
-Advertisement-
Play Games

深度學習在很大程度上影響了遙感影像分析領域的研究。然而,大多數現有的遙感深度模型都是用ImageNet預訓練權重初始化的,其中自然圖像不可避免地與航拍圖像相比存在較大的域差距,這可能會限制下游遙感場景任務上的微調性能。 ...


作者:京東探索研究院

深度學習在很大程度上影響了遙感影像分析領域的研究。然而,大多數現有的遙感深度模型都是用ImageNet預訓練權重初始化的,其中自然圖像不可避免地與航拍圖像相比存在較大的域差距,這可能會限制下游遙感場景任務上的微調性能。

為此,京東探索研究院聯合武漢大學、悉尼大學藉助迄今為止最大的遙感場景標註數據集MillionAID,從頭開始訓練包括捲積神經網路(CNN)和已經在自然圖像電腦視覺任務中表現出了良好性能的視覺Transformer(Vision Transformer)網路,首次獲得了一系列基於監督學習的遙感預訓練基礎骨幹模型。併進一步研究了ImageNet預訓練(IMP)和遙感預訓練(RSP)對包括語義分割、目標檢測在內的一系列下游任務的影響。

實驗結果證實了探索研究院先前提出的先進Vision Transformer系列模型ViTAE在遙感任務上的優越性,併發現RSP在遙感任務上的有效性以及感知相關語義方面具有的獨特性。實驗結果進一步表明RSP會受到上下游任務差異的影響,這些發現對遙感大規模數據集和預訓練方法提出了新的要求。

image.png

01

研究背景

近年來,深度學習憑藉自動提取反映物體固有屬性的深度特征的優勢,在電腦視覺領域取得了令人印象深刻的突破,遙感領域也不例外。在遙感領域,最常用的是深度模型是捲積神經網路(CNN)。 目前,幾乎所有的遙感深度模型都是在電腦視覺領域最著名的圖像數據集 ImageNet-1K 數據集上進行預訓練,該數據集中來自 1,000 個不同類別的百萬張真實世界圖像使模型能夠學習強大的表示。然後這些預訓練後的模型被可以用做遙感任務的骨幹網路進行進一步微調。

儘管這些模型在遙感任務中取得了顯著的效果,但仍有一些問題需要研究。直觀地說,與自然圖像相比,遙感圖像在視角、顏色、紋理、佈局、對象等方面明顯存在較大的域差距。以前的方法試圖通過進一步微調遙感圖像數據集上的預訓練模型來縮小這一差距。然而,ImageNet預訓練(IMP)引入的系統偏差對性能有著不可忽視的副作用。另一方面,我們註意到,隨著遙感技術的進步,各種各樣的感測器捕捉到了豐富的遙感圖像,可以用於預訓練。作為一個代表性的例子,MillionAID 是迄今為止最大的遙感圖像數據集,它是從包含多種感測器圖像的谷歌地球(GE)上收集的,並且具有類似ImageNet-1K的百萬級圖像數量規模,這使遙感預訓練(RSP)成為可能。

RSP能夠從頭開始訓練深度模型,這意味著候選模型不必局限於現成的CNN。因此,在本文中,我們也研究了視覺Transformer(Vision Transformer)的骨幹網路,它們在電腦視覺領域表現出了令人驚訝的性能。與CNN中擅長局部建模的捲積相比,Vision Transformer中的多頭自註意(MHSA)能夠靈活地捕捉不同的全局上下文。最近,探索研究院提出的ViTAE模型探索了捲積和MHSA的平行結構,以同時建模局部性和長程依賴性,在ImageNet分類任務和下游視覺任務上取得了很好的結果。此外,它還通過擴張捲積模塊和層級設計提取多尺度特征,這對於電腦視覺下游任務,尤其是在遙感圖像理解任務,都具有重要的價值。因此我們研究了CNN和層級Vision Transformer網路經過RSP後,在場景識別、語義分割、目標檢測和變化檢測等遙感任務上的微調性能。為了實現這些目標,我們在九個流行的數據集上進行了廣泛的實驗,並得出了一些有益的結論。RSP是遙感圖像理解中的一個新興研究方向,但仍處於探索階段,尤其是基於Vision Transformer這種新型網路架構的預訓練方法。我們希望這項研究能夠填補這一空白,併為未來的研究提供有用的見解。

02

MillionAID, ViTAE 和ViTAEv2的介紹

1.MillionAID

MillionAID 是迄今為止遙感領域最大的數據集。它包含 100,0848 個不重疊的場景,有51類,每類大約有2,000-45,000圖像。該數據集來自谷歌地球,由包括但不限於 SPOT、IKONOS、WorldView 和 Landsat 系列的多種感測器組成,因而圖像解析度不同。最大解析度可達0.5m,最小的則有153m。圖像大小範圍從 110110 到 31,67231,672。該數據集均為RGB圖像,非常適合訓練典型的視覺神經網路模型。

2.ViTAE 和ViTAEv2

image.png

ViTAE是探索研究院最近提出的先進Vision Transformer模型,它採用深窄式設計,在網路開始時迅速降採樣,然後將網路加深,在提高性能的同時降低模型大小和計算成本。ViTAE 模型首先通過三個Reduction Cell將輸入圖像下採樣到1/16解析度。與 ViT 類似,在添加位置編碼之前,將class token與第三個Reduction Cell的輸出連接。然後堆疊多個Normal Cell,並始終保持特征圖解析度。最後一個Normal Cell的class token輸入到線性層進行分類。ViTAE 模型在 ImageNet 數據集上分類性能表現出色,但它不方便像CNN那樣產生層次化的中間特征,從而遷移到分割、檢測和姿態估計等其它下游任務(目前有一些新技術來解決這個問題,例如ViTDet,並已取得較好成果,請關註我們的復現Repo:https://github.com/ViTAE-Transformer/ViTDet)。

在此基礎上,探索研究院提出了 ViTAEv2,它採用了 ResNet 和 Swin 等流行骨幹網路的層次化設計。在 ViTAEv2 中,網路被分成四個階段。每個階段首先採用Reduction Cell進行下採樣,然後堆疊多個 Normal Cell進行特征變換。在最後一個階段的Normal Cell後使用全局平均池化層來替換class token。當對下游任務進行微調時,該池化層被移除,剩下的網路與相應任務的解碼器相連。圖 2 顯示了原始 ViTAE 和 ViTAEv2的網路架構。

image.png

Reduction Cell和Normal Cell是 ViTAE 中最重要的兩個模塊,它們是基於典型的Transformer模塊來構建的。Reduction Cell用於下採樣並提供多尺度上下文。具體來說,在輸入歸一化層和 MHSA 層之前,這些特征會通過一個金字塔縮減模塊(PRM)。該模塊包含具有不同擴張率的多個並行的擴張捲積,其中步幅大小控制了空間降採樣率。在 PRM 後,來自平行分支的特征在通道維連接。PRM 將 CNN 的尺度不變性引入 ViTAE,而局部性建模則是通過將輸入到PRM 的特征同時送入到並行捲積模塊 (PCM) 中來完成。PCM 位於與包含 PRM 和 MHSA 的全局依賴路徑平行的附加分支中,它由三個連續的捲積層組成。通過調整步幅,PCM 的下採樣率與 PRM 相同。來自MHSA、PCM 和原始殘差分支的三個特征在輸入前饋網路(FFN)之前進行加法融合。需要註意的是,Normal Cell和Reduction Cell具有類似結構,但是不包括 PRM模塊。

受 Swin Transformer的啟發,ViTAEv2中上述cell中的一些 MHSA 被替換為視窗MHSA(WMHSA)以降低計算成本。考慮到後期特征尺寸變小,不需要用視窗劃分特征。因此,只有前兩個階段的 MHSA 被 WMHSA 替代。需要說明的是,ViTAEv2採用的 WMHSA 不需要像Swin Transformer那樣進行迴圈偏移,因為 WMHSA 是在 PRM 的合併多尺度特征上進行的,其中不同區域之間已經通過擴張捲積的重疊感受野實現了信息交換。此外,因為捲積已經能夠編碼位置信息,ViTAEv2也不需要再使用相對位置編碼。ViTAE 和 ViTAEv2 中不同cell的詳細結構和比較如圖3所示。

在本次研究中,我們主要評估原始 ViTAE 的“Small”版本,名為 ViTAE-S。相應的,我們還採用了 ViTAEv2-S 模型,因為它具有出色的表徵能力和對下游任務更好的可遷移性。

03

遙感預訓練的實施

1. 確定預訓練模型

我們首先確定用於RSP的深度模型的類型。為此,我們從MillionAID官方訓練集中構建了一個迷你訓練集和迷你評估集,分別有9775和225張圖像。註:後一組是通過從每個類別中隨機選擇5張圖像來平衡類別。對於CNN,使用了經典的ResNet-50 。由於本研究主要探討RSP下的CNN和Vision Transformer模型的性能,因此我們還評估了一系列典型的基於Vision Transformer的網路,包括DeiT-S 、PVT-S 和Swin-T。選擇特定版本模型的一個考量是為了確保這些模型和ResNet-50以及ViTAE-S模型具有相似的參數量。此外,考慮到ViT是視覺Transformer的最基本模型,我們選擇了其最小版本ViT-B 模型以供參考。

image.png

image.png

表II展示了各個模型的結果,可以看出,儘管ViT-B的參數最多,但其性能不如經典的ResNet-50。DeiT-S表現最差,因為我們沒有採用教師模型輔助訓練。由於我們的任務是利用遙感圖像進行預訓練,因此獲取相應的教師模型可以認為是我們的目標而不是前提。通過引入特征金字塔的設計範式,PVT-S與ViT-B相比提高了準確性。在此基礎上,原始ViTAE-S模型進一步考慮了局部性和尺度不變性這些傳統CNN具有的歸納偏置。

然而,由於早期下採樣模塊(Reduction Cell, RC)中的特征解析度較大,需要更多的計算,因此需要花費較多的訓練時間。Swin-T通過在固定視窗中限制MHSA來解決這個問題,並採用視窗偏移來隱式促進視窗之間的通信。ViTAEv2引入了這種視窗多頭自註意力(Window MHSA, WMHSA),並因為捲積旁路已經能夠促進跨窗信息交互,從而省去了視窗偏移和相對位置編碼操作。最終,ViTAEv2-S實現了最佳性能,並以2.3%的top-1準確率超過了第二名。

基於上述結果,我們選擇候選模型的具體程式如下。首先,我們選擇ResNet-50作為常規CNN中的代表網路。經過遙感預訓練的ResNet-50,可以在一系列遙感數據集上提供一組新的CNN參考基線。由於準確率低、參數多,我們沒有選擇DeiT-S和ViT-B模型作為候選模型。此外,由於堆疊Transformer的設計,它們很難遷移到下游任務中。(目前有一些新技術來解決這個問題,例如ViTDet,並已取得較好成果,請關註我們的復現Repo:https://github.com/ViTAE-Transformer/ViTDet)。

Swin Transformer也具有PVT的特征金字塔結構,並採用WMHSA取代全局MHSA,節省了顯存和計算量。由於Swin-T的top-1精度大於PVT且需要的訓練時間較少,因此我們在後續實驗中也選擇了Swin-T作為候選模型。對於ViTAE模型,我們選擇性能最強的模型,即ViTAEv2-S,以期望在後續任務(如遙感場景識別)中具有良好的性能。

2. 獲得合適的權重

在確定上述候選模型後,我們對它們進行 RSP 以獲得預訓練的權重。具體來說,為了保持類別平衡,我們在 MillionAID 數據集的每個類別中隨機選擇 1,000 張圖像,形成包含 51,000 張圖像的驗證集,與包含 50,000 張圖像的 ImageNet 驗證集的規模相當,並把剩下的 949,848 張圖像用於訓練。

image.png

為了獲得合適的預訓練權重,我們在不同訓練代數(epoch)的配置下分別訓練 ViTAEv2-S 模型。結果如表III所示。可以觀察到模型在大約 40 個 epoch 後開始性能飽和,因為與訓練 20 個 epoch 相比,top-1 準確率僅提高了 0.64%,而接下來的 20 個 epoch 只帶來了 0.23% 的增益。因此,我們首先選擇訓練了 40 個 epoch 的網路權重作為 ViTAEv2-S 的 RSP 參數,並應用於後續任務。直覺上,在大規模預訓練數據集上表現良好的模型在下游任務上也會表現良好。因此,我們還在下游任務中使用了經過 100 個 epoch 訓練的網路權重。這些模型分別用尾碼“E40”和“E100”表示。

對於 ResNet-50 和 Swin-T,我們遵循Swin 的訓練設置,即模型訓練了 300 個 epoch。在實驗中,我們觀察到 Swin-T-E120 在驗證集上的 top-1 準確率大致相當於 ViTAEv2-S-E40。因此,我們也選擇了 Swin-T-E120 的訓練權重。同樣,我們也選擇了最終的網路權重 Swin-T-E300 作為與 ViTAEv2-S-E100 的比較。為了使實驗公平,還考慮了使用 40 個 epoch 訓練的 ResNet-50 和 Swin-T 的權重,因為它們與 ViTAEv2-S-E40 經過了同樣的訓練代數。

image.png

最終的預訓練模型列在表IV中。可以看出,驗證集準確率幾乎隨著訓練 epoch 的增加而增加。但是,Swin-T-E300 的性能略低於 Swin-T-E120。儘管如此,我們仍然保留了Swin-T-E300 模型。因為模型在訓練階段見到更多的樣本之後,它可能具有更強的泛化能力。

04

下游任務上的微調實驗

1. 場景識別
 
image.png

定量實驗: 表 V 展示了使用不同方法預訓練的上述候選模型和其他 SOTA 方法的結果。最後三組中的粗體字表示每組中最好的結果,而“*”表示所有模型中最好的(在其他任務中含義相同)。與 ImageNet 預訓練的 ResNet-50 相比,我們的遙感預訓練 ResNet-50 在所有設置下均提高了準確性。這些結果意味著 RSP 為後續微調過程的優化帶來了更好的起點。同樣,RSP-Swin-T 在三個設置上的表現優於 IMP-Swin-T,在其他兩個設置上也取得了可比較的結果。此外,與其他複雜方法相比,ResNet-50 和 Swin-T 僅使用 RSP 權重而不改變網路結構的情況下就取得了有競爭力的結果,從而證明瞭遙感預訓練的價值。

此外,在比較 ImageNet 預訓練的 ResNet-50 和 Swin-T 時,我們可以發現 IMP-Swin-T 在所有設置上的表現都更好,因為Vision Transformer具有更強的上下文建模能力。不過在通過 RSP 權重進行初始化後,ResNet 變得更具競爭力。由於 ViTAEv2-S同時具有局部建模能力和遠程依賴建模能力,無論 IMP 和 RSP,它在幾乎所有設置上都優於 ResNet-50 和 Swin-T。此外,RSP-ViTAEv2-S 在除 AID (5:5) 之外的幾乎所有設置上都實現了最佳性能。

image.png

定性實驗:圖4 顯示了不同評估模型來自各種場景的圖像的不同區域的響應。與 IMP-ResNet-50 相比,RSP-ResNet-50 更關註重要目標。這意味著 RSP 有助於 ResNet-50 學習更好的表示,歸功於 MillionAID 數據集中提供的大量語義相似的遙感圖像。令人驚訝的是,IMP-Swin-T 模型主要關註背景區域,但經過 RSP 之後,其前景響應得到了顯著增強。ViTAEv2-S通過結合CNN和視覺轉換器的優勢,同時具備局部和全局上下文捕捉能力,實現了對整個場景的全面感知。RSP-ViTAEv2-S 不僅關註主要對象,還考慮了背景中的相關區域。在前景物體上,RSP-ViTAEv2-S 也能給予更高的關註度,在對象分佈複雜的場景,RSP-ViTAEv2-S能夠形成統一且完整的地物表徵,有效感知場景的整體信息。

2. 語義分割

image.png

定量實驗: 表VII 展示了採用UperNet 框架時,我們的方法和其他 SOTA 方法在iSAID數據集上的分割結果。可以看出,將骨幹網路從 ResNet-50 更改為 Swin-T,再更改為 ViTAEv2-S 時,性能有所提高。結果與上述場景識別結果一致,表明視覺Transformer具有更好的表示能力。另一方面,經過ImageNet預訓練的IMP-Swin-T 取得了具有競爭力的結果,而IMP-ViTAEv2-S 在 iSAID 數據集上取得了最佳性能。表VII 還顯示了 RSP 模型的優勢在於感知一些具有明確遙感語義的類別,例如“橋梁”,這符合之前場景識別任務中的發現。

image.png

定性實驗: 圖 6 中展示了在 Potsdam 數據集上採用不同預訓練骨幹網路的UperNet 分割模型的一些視覺分割結果。對於長條形地物,其長度較長,要求模型能夠捕獲長程上下文,而寬度又較窄,對模型的局部感知能力又提出了要求,而ViTAEv2網路因為將CNN的局部性和尺度不變性引入到Vision Transfomer網路中,同時具有了CNN和Transformer的優勢,因而能夠同時實現全局和局部感知。因此,只有ViTAEv2-S成功連接了長條狀低矮植被(如紅框所示)。

3. 目標檢測

image.png

定量實驗: 表VIII 顯示了 目標檢測實驗的結果。在具有挑戰性的 DOTA 數據集上,可以看出使用先進的 ORCN 檢測框架,採用ResNet-50 或 Swin-T 骨幹網路的模型表現良好。ViTAEv2-S 通過引入了 CNN 的局部性和尺度不變性等歸納偏差,獲得了驚人的性能,將 ORCN 基線提高了近 2% mAP。需要註意的另一點是,RSP在這三個骨幹網路上的性能都優於IMP。RSP-ViTAEv2-S 的總體mAP比IMP-ViTAEv2-S 高,因為 RSP 在“橋梁”以及包括“直升機”和“飛機”在內的飛行器類別上具有顯著優勢,而在其他類別上,這兩種模型之間的差距並不很大。

image.png

定性實驗: 圖7 可視化了 DOTA 測試集上使用 ViTAEv2-S 骨幹網路的 ORCN 模型的一些檢測結果。紅框表示,當對象密集分佈時,RSP-ViTAEv2-S 仍然可以預測正確的對象類別,而 IMP-ViTAEv2-S 被密集上下文混淆並做出錯誤預測。對於長條形的“橋梁”類別,IMP-ViTAEv2-S 產生了漏檢(見黃色框),而 RSP-ViTAEv2-S 模型以更高的置信度分數成功檢測到該物體,這再一次呼應了先前的發現。

4. 變化檢測

image.png

定量實驗: 表X 中展示了採用不同預訓練骨幹網路的BIT 框架在變化檢測任務上的定量實驗結果。可以看到,自監督的 SeCo 預訓練權重在此任務上表現良好,雖然SeCo 的目標是經過對比學習以實現季節不變性特征學習,但由於其採用了多頭子空間嵌入的方式對變化特征進行編碼,所以其仍然能在具體的分支上學習到對季節變化敏感的特征表示。儘管如此,通過 IMP 或 RSP 預訓練的 ViTAEv2-S 的性能優於 SeCo-ResNet-50,顯示了使用先進骨幹網路的好處。與其他方法相比,ViTAEv2-S取得了最佳性能,顯示了將先進的Vision Transformer模型應用於遙感領域的潛力。

通過不同模型在不同任務下RSP和IMP下的性能對比,我們可以推斷出變化檢測所需表示的粒度應該介於分割和檢測之間,因為它雖然是一個分割任務,但是只有兩個類別,不需要去識別特定的語義類別。

定性實驗: 圖8展示了一些視覺變化檢測結果。可以看出,IMP 的 ResNet-50 和 Swin-T 並不能很好地檢測到自然場景中田野內道路的變化。採用 RSP 可以部分緩解這個問題。SeCo-ResNet-50 進一步提高了道路區域的檢測,這與表X 中的結果一致。與上述模型相比,ViTAEv2-S 模型有效地捕捉到了道路細節。在人工變化的場景中,ViTAEv2-S 模型解決了所有其他模型結果中存在的對象粘連問題,這表明 ViTAEv2-S 的特征在區分物體和背景方面更具判別力。

5. 不同遙感預訓練骨幹網路的綜合比較

image.png

最後,我們全面比較了 RSP 在所有任務上的不同骨幹網路的性能。具體來說,我們對每個任務的所有數據集的分數進行平均計算,結果如表XI。可以發現,預訓練更多 epoch 的骨幹通常在下游任務上表現更好,因為它們獲得了更強的表示。儘管也有例外,例如預訓練300代的 Swin-T 模型在對象檢測任務表現不如預訓練120代的對應模型,這暗示任務差異也很重要。結合了 CNN 和Vision Transformer優勢的ViTAEv2-S模型在所有任務上都表現出了最好的性能。

05

結論

在這項研究中,我們在最大的遙感數據集 MillionAID 上研究了基於 CNN 和Vision Transformer的遙感預訓練問題,並綜合評估了它們在場景識別、語義分割、對象檢測和變化檢測四個下游任務上的表現,並將它們與 ImageNet 預訓練和其他 SOTA 方法進行比較。通過綜合分析實驗結果,我們得出以下結論:

(1) 與傳統的 CNN 模型相比,視覺Transformer在一系列遙感任務上表現出色,特別是 ViTAEv2-S這種將 CNN 的固有歸納偏置引入到Vision Transformer的先進模型,在這些任務的幾乎所有設置中都實現了最佳性能。

(2) 經典 IMP 使深度模型能夠學習更通用的表示。因此,IMP 在處理遙感影像數據時,仍可以產生具有競爭力的基線結果。RSP 產生了可與 IMP相當或者更好的結果,並且由於減輕了上游預訓練任務和下游任務之間的數據差異,因此在某些特定類別(例如“橋梁”和“飛機”)上表現更為出色。

(3) 任務之間的差異對 RSP 的性能也有影響。如果特定下游任務所需的表示更接近上游預訓練任務(例如場景識別),則 RSP 通常會帶來更好的性能。

我們希望這項研究可以為遙感社區提供有關使用先進Vision Transformer和遙感預訓練的有用見解。為了方便大家使用,所有遙感預訓練模型及相關代碼均已開源,詳見https://github.com/ViTAE-Transformer/ViTAE-Transformer-Remote-Sensing 。另外,關於採用非層次化Vision Transformer模型應用於下游任務的研究進展,可以關註ViTDet的方法以及我們的復現代碼:https://github.com/ViTAE-Transformer/ViTDet 。我們也會在ViTAE-Transformer-Remote-Sensing的官方repo中不斷更新相應的結果。

論文鏈接:https://arxiv.org/abs/2204.02825

項目地址:https://github.com/ViTAE-Transformer/ViTAE-Transformer-Remote-Sensing

參考文獻

[1] D.Wang, J. Zhang, B.Du, G-S.Xia and and D. Tao, “An Empirical Study of Remote Sensing Pretraining”, arXiv preprint, axXiv: 2204: 02825, 2022.

[2] Y. Long, G.-S. Xia, S. Li, W. Yang, M. Y. Yang, X. X. Zhu, L. Zhang, and D. Li, “On creating benchmark dataset for aerial image interpretation: Reviews, guidances and million-aid,” IEEE JSTARS, vol. 14, pp. 4205–4230, 2021.

[3] Y. Xu, Q. Zhang, J. Zhang, and D. Tao, “Vitae: Vision transformer advanced by exploring intrinsic inductive bias,” NeurIPS, vol. 34, 2021.

[4] Q. Zhang, Y. Xu, J. Zhang, and D. Tao, “Vitaev2: Vision transformer advanced by exploring inductive bias for image recognition and beyond,” arXiv preprint arXiv:2202.10108, 2022.

[5] T. Xiao, Y. Liu, B. Zhou, Y. Jiang, and J. Sun, “Unified perceptual parsing for scene understanding,” in ECCV, 2018, pp. 418–434.

[6] X. Xie, G. Cheng, J. Wang, X. Yao, and J. Han, “Oriented r-cnn for object detection,” in ICCV, October 2021, pp. 3520–3529.

[7] H. Chen, Z. Qi, and Z. Shi, “Remote Sensing Image Change Detection With Transformers,” IEEE TGRS., vol. 60, p.3095166, Jan. 2022.

[8] Y. Li, H. Mao, R. Girshick, K. He. Exploring Plain Vision Transformer Backbones for Object Detection[J]. arXiv preprint arXiv:2203.16527, 2022.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 有相當一部分 iPhone 用戶會拒絕iOS更新最新系統,不管是因為各種BUG還是因為其他優化方面的問題,他們都會選擇一個自己覺得均衡的系統版本,安逸養老。 但是蘋果 iOS 系統如果你不及時更新推送版本的話,就會在手機桌面「設置」上方出現角標數字紅點,系統設置中也會出現紅點提示。強迫症患者表示簡直 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前言 可視化大屏該如何做?有可能一天完成嗎?廢話不多說,直接看效果,線上 Demo 地址 lxfu1.github.io/large-scree…。 看完這篇文章(這個項目),你將收穫: 全局狀態真的很簡單,你只需 5 分鐘就能上手 如何 ...
  • 1.CSS、SCSS、SASS CSS是開發人員熟知的一種用於頁面樣式開發的語言,可以通過內容的分離控制減少代碼的重覆性,降低代碼的複雜程度。 SASS 與 SCSS 都是 CSS 預處理器,可包含在基於 CSS 的 UI(用戶界面)或前端框架中以簡化開發。這些 SASS 與 SCSS 框架在高級別 ...
  • 鑒於阮一峰老師的技術文章,在此做一個轉載記錄。轉戰react技術一年,希望在技術上可以不斷精進,日後成為一位大牛! 引子:《準備工作》 知識準備 環境準備 第一講:《前端開發的歷史和趨勢》 前端開發的歷史演變 前端MVC框架的興起 前後端分離 全棧工程師 前端開發的未來 第二講:《React 技術棧 ...
  • 前言 先說幾句廢話,本人是一名 web 後端開發,主語言是 java,在學 Electron 之前,只會一點點 HTML和 JavaScript。本文講的也是我學習 Electron 的過程,而非教程,請酌情參考。 Electron是什麼 Electron是一個使用 JavaScript、HTML ...
  • 隨著業務變化的速度越來越快各類IT系統的建設也越來越複雜大規模研發團隊的管理問題日益突出如何提升研發效能成為時下各類技術團隊面臨的重要挑戰 京東雲DevOps專家將帶您深入研發一線揭秘支撐京東集團萬人級研發管理的行雲DevOps平臺 分享企業應該如何規劃DevOps落地與演進 嘉賓介紹 孫長虹 京東 ...
  • 物流合約中心是京東物流合同管理的唯一入口。為商家提供合同的創建,蓋章等能力,為不同業務條線提供合同的定製,歸檔,查詢等功能。由於各個業務條線眾多,為各個業務條線提供高可用查詢能力是物流合約中心重中之重。同時計費系統在每個物流單結算時,都需要查詢合約中心,確保商家簽署的合同內容來保證計費的準確性。 ...
  • 名單服務是風控架構中重要子域,對風險決策的性能、用戶體驗、成本管控、風險治理沉澱都有重要影響,本文將詳細介紹名單服務設計思路和實現。 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...