ICCV 2025 | Reverse Convolution and Its Applications to Image Restoration

在這里插入圖片描述

  • 標題:Reverse Convolution and Its Applications to Image Restoration
  • 作者:Xuhong Huang, Shiqi Liu, Kai Zhang, Ying Tai, Jian Yang, Hui Zeng, Lei Zhang
  • 單位:Nanjing University, The Hong Kong Polytechnic University, OPPO Research Institute
  • 論文:https://arxiv.org/abs/2508.09824
  • 代碼:https://github.com/cszn/ConverseNet

convolution 和 transposed convolution 是神經網絡中廣泛使用的基礎算子。然而,transposed convolution(又稱 deconvolution)在數學形式上并非 convolution 的真正逆運算。迄今為止,尚未有 reverse convolution 算子被確立為神經架構的標準組件。
本文首次提出一種新穎的深度可分離 reverse convolution 算子,通過建立并求解正則化最小二乘優化問題,實現對 depthwise convolution 的有效反轉。我們全面研究了其核初始化、padding 策略等關鍵實現細節。
基于此算子,我們進一步構建 reverse convolution block,將其與 layer normalization、1×1 convolution 和 GELU 激活結合,形成類 Transformer 結構。所提出的算子與 block 可直接替換現有架構中的常規 convolution 和 transposed convolution 層,從而構建 ConverseNet。
針對典型圖像復原模型 DnCNN、SRResNet 和 USRNet,我們分別訓練三種 ConverseNet 變體,用于高斯去噪、超分辨率和去模糊。
大量實驗驗證了所提 reverse convolution 算子作為基礎構建模塊的有效性。我們希望這項工作能夠為深度模型設計中新算子的開發及其應用鋪平道路。

研究背景

卷積和轉置卷積(后面也稱為反卷積 deconvolution)是深度神經網絡中常用的基本操作。卷積用于特征提取并可以實現下采樣以減少空間維度。相反,轉置卷積廣泛用于對其輸入進行空間上采樣。這種功能關系導致一些研究將轉置卷積視為一種反向卷積形式。然而,從數學角度來看,轉置卷積不是卷積的真正逆運算;它可以通過在輸入元素之間插入零,然后進行標準卷積來描述。

與反卷積(deconvolution)相關的一個顯著方法是用于圖像去模糊的反卷積,它通過近似模糊過程的逆運算來從模糊圖像中恢復清晰圖像。然而,反卷積方法通常涉及迭代優化,并且通常專門用于去模糊,限制了其作為通用神經網絡模塊的靈活性。

另一個密切相關的工作是可逆卷積(invertible convolution),它通過施加特定約束(如相同的輸入輸出形狀和可處理的雅可比矩陣)來確保精確的可逆性。這些約束限制了其在深度網絡中的適用性。值得注意的是,可逆卷積本質上是標準卷積的約束形式,而不是一個全新的算子。因此,開發一個真正的反向卷積算子仍然是一個開放且有價值的研究方向。

盡管有效,這些方法通常會假定一個已知的模糊核操作在單通道灰度圖像或者三通道RGB圖像,這也限制了他們應用在深度網絡中的高維特征表征上的使用。盡管最近的深度Wiener Deconvolution可以應用到深度特征上,但是其主要針對于圖像去模糊。

因此,開發一個數學上嚴格、計算上高效、應用上廣泛的反向卷積(reverse convolution)算子具有重要的理論意義和實用價值。這種算子不僅能夠實現卷積的真正逆運算,還能夠在各種深度學習架構和任務中靈活應用,為深度模型設計提供新的思路和工具。

所以本文中,作者希望提出一種一次計算、無需迭代、支持任意通道維度、可直接嵌入現有網絡并真正反轉 depthwise convolution 的可學習算子。

在這里插入圖片描述

研究內容

提出了一種深度可分離 reverse convolution 算子 Converse2D,用于 denoising、super-resolution、deblurring。

具體目標

給定 feature map X∈RH×W\mathbf{X} \in \mathbb{R}^{H\times W}XRH×W,使用形狀為kh×kwk_h \times k_wkh?×kw?的depthwise卷積核 K\mathbf{K}K,按照步長 sss 進行卷積后得到 Y=(X?K)↓s\mathbf{Y} = (\mathbf{X} \otimes \mathbf{K}) \downarrow_sY=(X?K)s?

目標是在已知 Y,K,s\mathbf{Y}, \mathbf{K}, sY,K,s 時,恢復 X\mathbf{X}X,即 X=F(Y,K,s)\mathbf{X} = \mathcal{F}(\mathbf{Y}, \mathbf{K}, s)X=F(Y,K,s)

優化問題

如上恢復輸入的過程,可以看做是可以最小化重構輸出和實際輸出之間誤差的近似輸入。即最小化

∥Y?(X?K)↓s∥F2+λ∥X?X0∥F2\|\mathbf{Y} - (\mathbf{X} \otimes \mathbf{K})\downarrow_s\|_F^2 + \lambda \|\mathbf{X} - \mathbf{X}_0\|_F^2Y?(X?K)s?F2?+λX?X0?F2?

  • λ>0\lambda>0λ>0 為正則化參數,控制重構和正則化的權衡。在本文中,正則化參數可以在訓練過程中聯合優化,從而避免類似于現有大多數 deconvolution 算法中的手工調整
  • X0\mathbf{X}_0X0? 為初始估計,可以引導求解過程朝向更穩定和可信的結果,避免對于過擬合。

這里的λ∥X?X0∥F2\lambda \|\mathbf{X} - \mathbf{X}_0\|_F^2λX?X0?F2?是考慮到直接基于第一項的優化過程,由于退化恢復問題本身的病態特性可能導致的不穩定,而額外引入的正則化項。例如,跨步卷積的下采樣過程,恰好把高頻細節壓到 0,于是零空間包含大量高頻模式(即進過這種操作處理后會輸出0的輸入向量集合),從而從低分辨率輸出無法唯一確定高分辨率輸入,所以可以稱這個逆問題是“病態”的。所以通過引入額外的正則項,將實際的解限制在合理的初始解的附近,避免病態帶來的無意義的高頻噪聲。論文中引入了兩種簡單的初始估計X0=0\mathbf{X}_0 = \mathbf{0}X0?=0X0=Interp(Y,s)\mathbf{X}_0 = \text{Interp}(\mathbf{Y}, s)X0?=Interp(Y,s),后者表示對輸出的上采樣插值操作。

在這里插入圖片描述

求閉式解

這里采用了循環邊界假設(fast single image super-resolution using a new analytical solution for l2-l2 problems),即將二維特征圖在四個邊緣首尾相連后看做一個完整的環形圖像,例如上邊緣的上一行其實是原圖的最下面一行,左邊緣的左一列其實是原圖的最右面一列。在數學上,任意位置的像素都可以通過取模運算對應到圖像實際坐標上。這樣的處理方式,把卷積變成循環卷積(circular convolution),從而可用 FFT 在頻域一次性計算整幅圖,推導閉式解時能得到干凈的頻域公式。

整體的閉式解為

X?=F?1(1λ(FK ̄FY↑s+λFX0?L?FK ̄⊙s(FKL)?s∣FK∣2?s+λ))\mathbf{X}^*=\mathbf{F}^{-1} \left(\frac{1}{\lambda} \left ( \underbrace{\overline{\mathbf{F}_K} \mathbf{F}_{Y \uparrow_s} + \lambda \mathbf{F}_{X_0}}_{\mathbf{L}} - \overline{\mathbf{F}_K} \odot_s \frac{(\mathbf{F}_K \mathbf{L}) \Downarrow_s}{| \mathbf{F}_K |^2 \Downarrow_s + \lambda } \right ) \right)X?=F?1?λ1??LFK??FYs??+λFX0?????FK??s?FK?2?s?+λ(FK?L)?s????

  1. F(?)\mathbf{F}(\cdot)F(?) 表示 FFT,F?1(?)\mathbf{F}^{-1}(\cdot)F?1(?) 表示正逆FFT
  2. ∣Fk∣=Fk ̄⊙Fk|\mathbf{F}_{k}|=\overline{\mathbf{F}_k} \odot \mathbf{F}_{k}Fk?=Fk??Fk?,即卷積核K\mathbf{K}K的傅里葉變換形式Fk\mathbf{F}_{k}Fk?的復共軛和其自身之間的元素乘積,反映了平方幅度
  3. FY↑s\mathbf{F}_{Y \uparrow_s}FYs??表示通過插入0值放大sss倍后特征的傅里葉變換
  4. ⊙s\odot_ss? 表示在s×ss \times ss×s個不同塊上的元素乘法
  5. ?s\Downarrow_s?s? 為塊級別下采樣,即應用到s×ss \times ss×s個塊之間的平均操作
  6. 注意,該公式采用了↓s\downarrow_ss?表示從s×ss \times ss×s塊中選擇左上角像素的下采樣形式的假設
  7. s=1s=1s=1,該公式簡化為 X?=F?1(FK ̄FY+λFX0∣FK∣2+λ)\mathbf{X}^*=\mathbf{F}^{-1} \left ( \frac{\overline{\mathbf{F}_K} \mathbf{F}_Y + \lambda \mathbf{F}_{X_0}}{| \mathbf{F}_K |^2 + \lambda } \right )X?=F?1(FK?2+λFK??FY?+λFX0???)
  8. 這里的卷積核實際上可以聯合網絡學習,也可以以先驗的形式作為條件輸入

具體實現

為了實現Converse2D,這里介紹了幾個關鍵的組件細節:

  • 卷積核K\mathbf{K}K:初始化很重要,影響Converse2D生成的解的穩定性和準確性。受啟發于經典的去模糊方法,本文對隨機初始化的K\mathbf{K}K進一步應用 Softmax 歸一化,保證非負且和為 1。在高斯去噪任務上,這一方案效果優于均勻分布和高斯分布的初始化。同時實驗也展示了5×55 \times 55×5大小的卷積核提供了更好的性能和效率的權衡。
    在這里插入圖片描述

  • Padding策略:這回影響邊界信息的處理方式和輸出的空間尺寸。因此本文在提出的Converse2D上,分析了不同的padding模式(包括circular、reflect、replicate和zero padding)和尺寸。實驗中 padding size本身影響不大。circular padding 呈現了一致的優勢,這與現有去模糊的文獻中發現類似,因為circular padding可以更好的處理邊界并減少鋸齒。所以默認使用circular padding。
    在這里插入圖片描述

  • 正則化參數:因為Converse2D本身是通道級別的應用形式,所以可以自然的為每個通道分配獨立的正則化參數來處理特征統計的變化,由于正則化參數本身也被集成到了Converse2D的計算中,所以可以自然地通過學習的方式來調整。這里使用了 λ=Sigmoid(b?9.0)+?\lambda=\text{Sigmoid}(b-9.0)+\epsilonλ=Sigmoid(b?9.0)+? 的形式,其中epsilonepsilonepsilon 是一個很小的常數來維持數值穩定。所有的可學習標量bbb被初始化為0,并在訓練中自適應調整。而引入的偏移值“9”,則是用于產生一個較小的初始值,從而鼓勵訓練開始具有更強的數據保真度。

  • 初始估計 X0\mathbf{X}_0X0?:實驗對比反應了 Interp(Y,s)(\mathbf{Y},s)(Y,s) 優于全零初始化,這是因為插值形式提供了一個更好的近似,而全零初始化導致更慢的收斂以及降低了恢復細微結構的能力。
    在這里插入圖片描述

基于算法偽代碼的大致實現如下:

import torch
import torch.nn.functional as F
import mathdef p2o(psf: torch.Tensor, out_shape):"""把空間核 (PSF)轉成頻域形式 (OTF)。卷積核之所以能被稱作 PSF(Point-Spread Function),是因為在圖像退化的線性系統里,卷積核恰好描述了“一個理想點光源經過該系統后所成的像”。psf: (B, C, kh, kw) PSF(Point-Spread Function) 就是空間域的卷積核 k,描述一個點光源經過系統后擴散成的“模糊斑”out_shape: (H*S, W*S) 目標高分辨率尺寸return: (B, C, H*S, W*S) OTF(Optical Transfer Function) 則是頻域的表示,等于 PSF 的傅里葉變換"""B, C, kh, kw = psf.shapeH, W = out_shape# 零填充到目標尺寸pad_h = H - khpad_w = W - kwpsf_pad = F.pad(psf, (0, pad_w, 0, pad_h))          # (B,C,H,W)# 循環移位,使核中心位于 (0,0)psf_pad = torch.roll(psf_pad, shifts=(-(kh//2), -(kw//2)), dims=(-2, -1))# 轉到頻域otf = torch.fft.fftn(psf_pad, dim=(-2, -1))return otfdef splits(x: torch.Tensor, s: int):"""把 tensor 切成 s×s 個塊x: (B, C, H*S, W*S)return: (B, C, H, W, s*s)"""B, C, HS, WS = x.shapeH = HS // sW = WS // sx = x.view(B, C, s, H, s, W)x = x.permute(0, 1, 3, 5, 2, 4).contiguous()x = x.view(B, C, H, W, s * s)return xdef sfold_upsampler(self, x: torch.Tensor, s: int):'''通過將元素復制到新的 sxs 局部區域的左上角來放大x: (B, C, H, W)return: (B, C, H*s, W*s)'''B, C, H, W = x.shapez = torch.zeros((B, C, H * s, W * s)).type_as(x)z[..., ::scale, ::scale].copy_(x)return zdef converse2d(X: torch.Tensor, K: torch.Tensor, S: int, bias: torch.Tensor) -> torch.Tensor:"""X: 輸入特征圖 (B, C, H, W)K: 卷積核 (B, C, kH, kW)S: 上采樣/下采樣比例bias: 可學習標量 (C,1,1) 用于生成 λreturn: 輸出特征圖 (B, C, H*S, W*S)"""B, C, H, W = X.shape# 1. 可學習的正則化參數 λlamb = torch.sigmoid(bias - 9.0) + 1e-5# 2. 最近鄰上采樣得到 X 的初始估計X_0 = F.interpolate(X, scale_factor=S, mode='nearest')# 3. 把輸入 X 通過插零放大Y_S = sfold_upsampler(X, S)# 4. 核轉到頻域 OTFFK = p2o(K, (H * S, W * S)) # (B,C,H*S,W*S) 復數FK_conj = torch.conj(FK) # 取共軛FK_2 = torch.abs(FK) ** 2 # 元素級 |FK|^2# 5. 頻域計算 L: B,C,H*S,W*SFKY = FK_conj * torch.fft.fftn(Y_S, dim=(-2, -1))L = FKY + torch.fft.fftn(lamb * X_0, dim=(-2, -1))# 6. 計算 FKL 與 FK2 的塊均值FKL_S = splits(FK * L, S).mean(dim=-1) # (B,C,H,W)FK2_S = splits(FK_2, S).mean(dim=-1)# 7. 頻域除法Fdiv = FKL_S / (FK2_S + lamb)# 8. 通過對整體的重復來恢復 Fdiv 到高分辨率Fmul = FK_conj * Fdiv.repeat(1, 1, S, S) # (B,C,H,W) -> (B,C,H*S,W*S)Fout = (L - Fmul) / lamb# 9. 逆 FFT 取實部out = torch.fft.ifftn(Fout, dim=(-2, -1)).realreturn out

模型細節

在這里插入圖片描述

本文基于提出的 Converse2D,構建了Reverse Convolution Block,其中包含 LayerNorm、1×1 Conv、GELU、Converse2D(深度分離的形式)、殘差連接,內部實現空間(主要由Converse2D負責)與通道(主要由1x1卷積處理)分離建模。

  • Converse-DnCNN和Converse-SRResNet均直接替換各自的核心構建塊為Converse2D算子模塊
  • Converse-USRNet則是用于展示所提算子在kernel-conditioned的場景中的表現,即非盲去模糊任務。將 USRNet 的 data module 換成 Converse2D、并替換其中的ResUNet denoiser為ConverseNet,這包含了7個Converse Block。也設計了 KernelNet 將模糊核映射到 64 維嵌入,這可以直接用于參數化 Converse2D,只有正則化參數是可學習的。

研究價值

首次給出 depthwise convolution 的嚴格可逆算子,一次前向完成反演;可直接替換現有卷積/轉置卷積層,無需迭代;支持任意通道維度,可在特征域而非圖像域完成 non-blind deblurring;實驗顯示在 denoising、super-resolution、deblurring 上均優于或與原結構持平,具有通用模塊潛力。

要點匯總

  1. Converse2D 算子通過正則化最小二乘問題的閉式解實現了 depthwise convolution 的真正可逆運算 頻域推導給出一次性前向計算公式,無需迭代,可直接嵌入深度網絡(見“Closed-form Solution”)。
  2. Converse2D 支持任意通道維度,可在高維特征空間完成 deblurring,突破傳統 deconvolution 僅限 1、3 通道圖像的限制 文中指出“unlike deconvolution methods … our operator … supports arbitrary channel dimensions, enabling broad adaptability across network architectures”(見 Abstract 和 Sec. 3)。
  3. Converse Block 采用 Transformer-like 結構,將空間建模(Converse2D)與通道交互(1×1 Conv)解耦,提高模塊化與表達能力 “separation of spatial and channel-wise processing makes the Converse block an effective and flexible module”(見 Sec. 3.4)。
  4. Softmax 歸一化的核初始化、Circular padding、插值初始估計 X0\mathbf{X}_0X0? 與可學習正則化參數 λ\lambdaλ 是 Converse2D 穩定訓練與性能提升的關鍵 實驗表格顯示 Softmax 初始化 PSNR 高于 Uniform/Gaussian;Circular padding 優于其他模式;Interp(Y,s)(\mathbf{Y},s)(Y,s) 初始化優于全零(見 Sec. 4 和表 1–3)。

在這里插入圖片描述

  1. 在 Gaussian denoising 任務上,Converse-DnCNN 在 Set12 和 BSD68 數據集上以相同噪聲水平 σ=25 取得更高 PSNR,驗證算子有效性 表 4 顯示 Converse-DnCNN 在 BSD68 達 29.36 dB,高于 Conv-DnCNN 與 ConvT-DnCNN。
    在這里插入圖片描述

  2. 在 ×4 super-resolution 任務上,Converse-SRResNet 與 SRResNet、Conv-SRResNet、ConvT-SRResNet 性能持平,證明 Converse2D 可直接替換轉置卷積而不損失精度 表 5 給出各模型在 Set5/Set14/BSD100/Urban100 的 PSNR 對比。
    在這里插入圖片描述

  3. 在非盲 deblurring 場景下,Converse-USRNet 通過 KernelNet 將模糊核嵌入特征域,PSNR 高于 Conv-USRNet,并減少邊界偽影 表 7 和圖 6 對比顯示 Converse-USRNet 在 BSD100/Urban100 上優于 Conv-USRNet,且“generate well-aligned and visually sharp outputs”。

  4. 在盲 deblurring 設置下,ConverseNet 仍優于 ConvNet,說明 Converse2D 本身具備去卷積能力,可減輕幾何失真 (見 Sec. 5.3)。

局限與擴展

論文指出目前實驗采用簡化設置,尚未在大規模視覺模型或更復雜退化條件下驗證;未來工作將擴展到生成任務及更大規模的網絡。

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

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

相關文章

mysql啟動超時

mysql啟動超時: 管理員打開CMD后允許net start MySQL57, 啟動超時檢查錯誤日志 MySQL 啟動失敗的具體原因通常記錄在錯誤日志中。 日志路徑(根據你的安裝方式可能不同): 默認位置:C:\ProgramData\MySQL\MyS…

Flink Stream API 源碼走讀 - window 和 sum

本文核心觀點 核心觀點:WindowedStream 是一個"假流",它比 KeyedStream 更虛,只是一個 API 的過渡器,不是真正意義上的 DataStream,需要調用函數回歸。 虛擬化時刻:從真實流到虛擬流 KeyedStream…

藍牙 GFSK RX Core 架構解析

GFSK RX Core分為以下幾個模塊: 1.Frequency offset compensation CORDIC 2.A low pass filter 3.A power estimator for packet detection,RSSI and digital gaion computation for DPSK path 4.A demodulator implemented as Phase Shift Discriminator 5.A drequ…

微電網管控系統中python多線程緩存與SQLite多數據庫文件連接池實踐總結(含源碼)

1. 引言 在分散的微電網能源管理場景中,系統采用集中式云平臺模式,為100個獨立微電網用戶提供高并發數據寫入服務面臨三大挑戰:用戶數據隔離、I/O性能瓶頸、多線程安全性。本文揭示一種新式的分片鎖+三級緩存+sqlite多數據庫文件連接池架構,在保持SQLite輕量級優勢的同時,…

InfluxDB 開發工具鏈:IDE 插件與調試技巧(一)

引言 ** 在當今數字化時代,時間序列數據的處理與分析在眾多領域中都扮演著至關重要的角色。無論是物聯網設備產生的海量傳感器數據,還是金融市場中實時波動的交易數據,又或是服務器運維過程中不斷產生的性能指標數據,這些都屬于…

計算機網絡-IPv6

1、IPv6基礎IPv4與IPv6的對比:問題IPv4的缺陷IPv6的優勢地址空間IPv4地址采用32比特標識,能提供的地址數量是43億,分配很不均衡。針對IPv4的地址短缺問題,有幾種解決方案:無類別域間路由CIDR(Classless Int…

整體設計 之“凝聚式中心點”原型 --整除:智能合約和DBMS的深層融合 之2

摘要(CSDN的AI助手自動生成的)本文提出了一種基于"整除"數學原型的智能合約與DBMS融合架構設計,將SQL查詢語句的四個關鍵段(SELECT、FROM、WHERE、BY)分別映射到整除運算的四個要素(商、被除數、…

【趙渝強老師】TiDB表數據與鍵值對的映射關系

TiDB實例將表中的每一行數據映射成RocksDB中的鍵值對,則需要考慮如何構造Key和Value。首先,OLTP場景下有大量針對單行或者多行的增、刪、改、查等操作,要求數據庫具備快速讀取一行數據的能力。因此,對應的Key最好有一個唯一ID&…

帶操作系統的延時函數

delay.c:#include "delay.h"/*** brief 微秒級延時* param nus 延時時長,范圍:0~233015* retval 無*/ void delay_us(uint32_t nus) {uint32_t ticks;uint32_t tcnt 0, told, tnow;uint32_t reload SysTick->LOAD; //重…

ES Module 和 CommonJS的區別

ES Module(ESM,ES6 模塊系統)和 CommonJS 是 JavaScript 中兩種主流的模塊規范,分別用于現代前端和 Node.js 環境(早期),它們在語法、加載機制、特性等方面有顯著區別。以下是詳細對比&#xff…

貓頭虎AI分享|一款智能量化交易系統:QuantCell,從數據收集到策略執行全流程自動化

貓頭虎AI分享|一款智能量化交易系統:QuantCell,從數據收集到策略執行全流程自動化 在當今金融市場中,量化交易系統已經成為越來越多投資者和機構的重要選擇。無論是股票、期貨還是加密貨幣,自動化交易與人工智能的結合…

直播美顏SDK架構揭秘:動態貼紙功能的實現原理與性能優化

如今,美顏SDK 已經不再只是“磨皮、美白”的基礎工具,而是逐漸進化為一個涵蓋 人臉識別、實時特效、動態貼紙交互 的復雜技術體系。尤其是 動態貼紙功能 的加入,讓主播與觀眾之間的互動更加生動有趣,也成為提升用戶粘性與平臺差異…

Docker安裝CDC

Docker安裝CDC拉取鏡像離線形式安裝上傳文件并創建docker-compose.yml把鏡像加載到docker中啟動容器連接數據庫創建賬號,并給賬號授權設置wal_level確認wal_level的值創建鏈接查詢連接狀態使用kafdrop消息中看不到修改之前的信息怎么辦補充拉取鏡像 docker pull co…

如何在win服務器中部署若依項目

一、安裝jdk的環境: 這一步很簡單,直接拿到安裝包雙擊安裝即可。 二、配置jdk的環境變量默認安裝的路徑為:C:\Program Files (x86)\Java\jdk1.7.0_51安裝完成之后進行環境變量配置右擊計算機(此電腦)點擊屬性點擊高級系…

CSS從入門到精通完整指南

第一部分:CSS基礎入門1.1 什么是CSSCSS(層疊樣式表,Cascading Style Sheets)是用于描述HTML文檔外觀和格式的樣式語言。CSS將內容與表現分離,讓HTML專注于內容結構,CSS專注于視覺效果。1.2 CSS語法結構選擇…

重溫k8s基礎概念知識系列二(Pod)

文章目錄1、Pod概念2、K8s 中的 Pod 的兩種用法3、定義Pod4、Pod的創建資源5、Pod 模板6、容器探針7、總結干貨8、 K8s Pod 經典面試題速查表Pod是Kubernetes中最小的單元: 1、Pod概念 Pod 是可以在 Kubernetes中創建和管理的、最小的可部署的計算單元。它由一組、一…

設計模式之靜態代理

一些個人理解 顧名思義,就是代理一個對象。 那么,既然要代理一個東西,就要傳入它吧? 【1】所以將代理對象當作屬性【【2】往往通過構造方法傳入被代理的目標對象】。 既然要代理,那必然要和代理對象擁有相同的功能吧? 所以實現了…

牛津大學xDeepMind 自然語言處理(1)

牛津大學xDeepMind 自然語言處理 Natural Language Processing 詞向量與詞匯語義學 Word Vectors and Lexical Semantics 詞語表示的基本問題與分布語義思想 傳統詞語表示(如獨熱向量)存在稀疏、正交、語義弱的問題,無法表達語義相似性。分布…

StarRocks數據庫集群的完整部署流程

目錄 依賴環境 下載安裝包 部署FE 部署BE 搭建集群 停止集群 依賴環境 詳見&#xff1a;StarRocks 部署&#xff1a;依賴環境-CSDN博客 下載安裝包 在官方網站下載安裝包&#xff1a;StarRocks 部署FE 創建元數據目錄。 mkdir -p <meta_dir> 修改 FE 配置文件 f…

簡單的 VSCode 設置

以下是我使用的vscode設置。雖然有些主觀&#xff0c;但很實用。1 主題。我放棄了那些炫酷的主題。我選擇了Tokyo Night (Storm)。理由是&#xff1a;它平靜、賞心悅目&#xff0c;并且與代碼形成了美麗的對比&#xff0c;卻又不顯得刺眼。2. 字體。我切換到了 JetBrains Mono …