【論文筆記】Visual Alignment Pre-training for Sign Language Translation

🍎個人主頁:小嗷犬的個人主頁
🍊個人網站:小嗷犬的技術小站
🥭個人信條:為天地立心,為生民立命,為往圣繼絕學,為萬世開太平。


基本信息

標題: Visual Alignment Pre-training for Sign Language Translation
作者: Peiqi Jiao, Yuecong Min, Xilin Chen
發表: ECCV 2024

基本信息

摘要

手語翻譯(Sign Language Translation, SLT)旨在將手語視頻翻譯為文本句子。

盡管gloss序列為SLT中的視覺表征學習提供了有效的對齊監督信息,但標注gloss的高成本限制了其可擴展性。

現有工作在gloss-free的情況下尚未取得令人滿意的結果。

在本研究中,我們將這一挑戰歸因于視覺token和文本token之間的靈活對應關系,并通過從文本句子中構建類似gloss的約束來解決這一問題。

具體而言,我們提出了一種 視覺對齊預訓練(Visual Alignment Pre-training, VAP) 方案,通過以貪婪的方式對齊視覺和文本token來利用視覺信息。

VAP方案增強了視覺編碼器捕獲語義感知視覺信息的能力,并促進了與在大規模語料庫上預訓練的翻譯模塊的更好適配。

針對四個SLT基準的實驗結果證明了VAP的有效性,能夠生成合理的對齊,并顯著縮小與gloss-based方法之間的性能差距。

介紹

Illustration of the alignment generated by VAP for a given sign video and its text sentence

主要貢獻

  • 探討了gloss annotation在手語翻譯(SLT)中的作用,并展示了在gloss-free設置下利用視覺信息的重要性。
  • 提出了視覺對齊預訓練(Visual Alignment Pre-training, VAP),通過以貪婪的方式對齊視覺和文本token來促進視覺表征學習。
  • 對gloss-free的SLT模型訓練進行了深入的實驗。實驗結果表明,VAP具有良好的效果,能夠生成可靠的對齊結果,并接近gloss-based的方法。

方法

Overview of the proposed visual alignment pre-training

gloss標注在手語翻譯中的作用

手語翻譯旨在將手語視頻翻譯為對應的文本句子。如圖2所示,通用的SLT網絡可以劃分為一個視覺編碼器 ψ V \psi_V ψV? 和一個翻譯模塊 ψ T \psi_T ψT?。給定一個手語視頻或其他類型的輸入(例如,骨架數據) X \mathcal{X} X 和對應的文本句子 s = { s 1 , ? , s U } s = \{s_1, \cdots, s_U\} s={s1?,?,sU?} ψ V \psi_V ψV? 從視頻中提取視覺特征 V = { v 1 , ? , v r } \mathcal{V} = \{v_1, \cdots, v_r\} V={v1?,?,vr?},而 ψ T \psi_T ψT? 基于 V \mathcal{V} V 預測 s s s。網絡通過最小化負對數似然來優化,其公式為:

L S L T = ? log ? p ( s ∣ V ; θ ψ V , θ ψ T ) . \mathcal{L}_{SLT} = -\log p(s | \mathcal{V}; \theta_{\psi_V}, \theta_{\psi_T}). LSLT?=?logp(sV;θψV??,θψT??).

在自然語言處理(NLP)中,單詞對齊通常指的是在平行文本中指示對應單詞 a = { a i } i = 1 m a = \{a_i\}_{i=1}^m a={ai?}i=1m? b = { b j } j = 1 n b = \{b_j\}_{j=1}^n b={bj?}j=1n? 的過程,可以表示為矩陣 A ∈ R m × n \mathcal{A} \in \mathbb{R}^{m \times n} ARm×n,其中 A i j ∈ { 0 , 1 } A_{ij} \in \{0, 1\} Aij?{0,1} 表示 a i a_i ai? 是否與 b j b_j bj? 對應。考慮到 V \mathcal{V} V s s s 之間的對齊關系 A \mathcal{A} A,最近gloss-based的SLT研究中使用的損失函數可以重新表述為:

L = L S L T + L S L R = ? log ? ∑ A p ( A ∣ V ) p ( s ∣ V , A ) ? log ? p ( g ∣ V ) , \mathcal{L} = \mathcal{L}_{SLT} + \mathcal{L}_{SLR} = -\log \sum_{\mathcal{A}} p(\mathcal{A} | \mathcal{V}) p(s | \mathcal{V}, \mathcal{A}) - \log p(g | \mathcal{V}), L=LSLT?+LSLR?=?logA?p(AV)p(sV,A)?logp(gV),

其中 g = { g 1 , ? , g M } g = \{g_1, \cdots, g_M\} g={g1?,?,gM?} 表示包含 M M M 個gloss的gloss標注,它與 V \mathcal{V} V 單調對齊。如上文公式所示, L S L T \mathcal{L}_{SLT} LSLT? 的監督來自兩個方面:對齊本身和翻譯與對齊的結合。gloss-based的方法通過引入額外的監督來提高視覺信息的利用率。然而,之前的gloss-free方法表現較差,主要原因在于 V \mathcal{V} V s s s 之間的靈活對應關系,這阻礙了最佳對齊的尋找,并無法為視覺編碼器提供足夠的監督。

基于以上分析,我們認為解決該問題的關鍵在于從文本句子中構建類似gloss的約束,并提出了 視覺對齊預訓練(Visual Alignment Pre-training, VAP) 方案。

視覺對齊預訓練

gloss-based的傳統方法通常利用CTC(連接時序分類)對 ψ V \psi_V ψV? 進行監督,假設 ψ V \psi_V ψV? 中所有的單調對齊均成立,公式如下:

L C T C ( g , V ) = ? log ? ( p ( g ∣ V ; θ ψ V ) ) = ? log ? ( ∑ π p ( π ∣ V ; θ ψ V ) ) L_{CTC}(g, V) = -\log(p(g|V; \theta_{\psi_V})) = -\log\left(\sum_{\pi}p(\pi|V; \theta_{\psi_V})\right) LCTC?(g,V)=?log(p(gV;θψV??))=?log(π?p(πV;θψV??))

其中 π \pi π 表示 V V V g g g 之間的一種對齊關系。我們假設視頻中每個手勢的近似含義可以在對應的文本句子中找到,并嘗試利用 V V V s s s 之間的對齊關系來監督 ψ V \psi_V ψV?。然而, V V V s s s 之間存在多達 2 T ? U 2^{T \cdot U} 2T?U 種潛在的對齊方式,這對在沒有適當約束的情況下(例如單調關系或gloss注解所具有的約束)識別最佳對齊關系提出了挑戰。受近期視覺-語言預訓練技術的啟發,我們提出了一種VAP方案,用于簡化對齊過程,以貪婪方式近似最佳對齊,并為視覺編碼器提供逐幀標簽。

具體而言,給定一個文本句子 s s s,我們首先使用文本編碼器 ψ E \psi_E ψE? 提取其對應的文本特征 ψ E ( s ) \psi_E(s) ψE?(s),然后通過兩個簡單的線性層將 V V V ψ E ( s ) \psi_E(s) ψE?(s) 投影到一個聯合特征空間:

v ~ t = Linear ( v t ) , s ~ u = Linear ( ψ E ( s u ) ) . \tilde{v}_t = \text{Linear}(v_t), \quad \tilde{s}_u = \text{Linear}(\psi_E(s_u)). v~t?=Linear(vt?),s~u?=Linear(ψE?(su?)).

隨后,通過識別每個視覺特征與最相似的文本特征,可以計算對齊關系 A V 2 S ∈ R T × U \mathbf{A}^{V2S} \in \mathbb{R}^{T \times U} AV2SRT×U

A t , u V 2 S = { 1 , for? u = arg ? max ? u ′ f ( v ~ t , s ~ u ′ ) , 0 , otherwise . A^{V2S}_{t,u} = \begin{cases} 1, & \text{for } u = \arg\max_{u'} f(\tilde{v}_t, \tilde{s}_{u'}), \\ 0, & \text{otherwise}. \end{cases} At,uV2S?={1,0,?for?u=argmaxu?f(v~t?,s~u?),otherwise.?

其中, f ( ? , ? ) f(\cdot, \cdot) f(?,?) 以余弦相似度的形式實現。為了確保 A V 2 S \mathbf{A}^{V2S} AV2S 的合理性,我們通過以下公式計算視頻和文本的相似性 ρ ( X , s ) \rho(\mathcal{X}, s) ρ(X,s)

ρ ( X , s ) = 1 T ∑ t = 1 T f ( v ~ t , A t V 2 S s ~ ) , \rho(\mathcal{X}, s) = \frac{1}{T} \sum_{t=1}^{T} f(\tilde{v}_t, A^{V2S}_t \tilde{s}), ρ(X,s)=T1?t=1T?f(v~t?,AtV2S?s~),

并采用對比學習模式優化 A V 2 S \mathbf{A}^{V2S} AV2S。然而,僅依賴 ρ ( X , s ) \rho(\mathcal{X}, s) ρ(X,s) 進行預訓練可能會導致 ψ V \psi_V ψV? 的輸出坍縮為一個恒定值。為了避免這種情況,我們還計算文本與視頻的相似性 ρ ( s , X ) \rho(s, \mathcal{X}) ρ(s,X),該相似性通過為每個文本特征識別最相似的視覺特征 A S 2 V \mathbf{A}^{S2V} AS2V 來計算。

在此基礎上,對于包含 N N N 個視頻-文本對 { X i , s i } i = 1 N \{ \mathcal{X}^i, s^i \}_{i=1}^N {Xi,si}i=1N? 的小批量,可以通過以下公式計算對比損失:

L Align = ? 1 2 N ( ∑ i = 1 N log ? exp ( ρ ( X i , s i ) / σ ) ∑ j = 1 N exp ( ρ ( X i , s j ) / σ ) + ∑ i = 1 N log ? exp ( ρ ( s i , X i ) / σ ) ∑ j = 1 N exp ( ρ ( s i , X j ) / σ ) ) , L_{\text{Align}} = -\frac{1}{2N} \left( \sum_{i=1}^N \log\frac{\text{exp}(\rho(\mathcal{X}^i, s^i) / \sigma)}{\sum_{j=1}^N \text{exp}(\rho(\mathcal{X}^i, s^j) / \sigma)} + \sum_{i=1}^N \log\frac{\text{exp}(\rho(s^i, \mathcal{X}^i) / \sigma)}{\sum_{j=1}^N \text{exp}(\rho(s^i, \mathcal{X}^j) / \sigma)} \right), LAlign?=?2N1?(i=1N?logj=1N?exp(ρ(Xi,sj)/σ)exp(ρ(Xi,si)/σ)?+i=1N?logj=1N?exp(ρ(si,Xj)/σ)exp(ρ(si,Xi)/σ)?),

其中, σ \sigma σ 是用于縮放logits的預定義溫度。通過所提出的 L Align L_{\text{Align}} LAlign?,我們增大了成對的視覺和文本特征序列之間的相似性,這將鼓勵每個特征找到其最相關的配對特征并靠攏。

此外,對齊的計算僅依賴于gloss級別的信息,缺乏對齊時間一致性的約束。上文公式的分解表明,翻譯損失也顯著增強了對齊質量。我們通過實驗(表3)展示,僅通過重新初始化翻譯模塊就可以提升性能,這表明優化對齊過程與提升翻譯能力同步進行的重要性。因此,我們將 L SLT L_{\text{SLT}} LSLT? 納入進來,以確保所用翻譯模塊的時間一致性,從而達到對齊的時間一致性。預訓練階段的最終監督目標如下:

L pre-train = L Align + L SLT . L_{\text{pre-train}} = L_{\text{Align}} + L_{\text{SLT}}. Lpre-train?=LAlign?+LSLT?.

通過以上設計,我們可以計算視覺和文本token之間的近似對齊,并獲得一個語義感知的視覺編碼器。

端到端微調

與一般的機器翻譯數據集相比,公共的手語翻譯(SLT)數據集仍然規模有限。因此,我們采用在大規模語料庫(如 mBART, T5)上預訓練的翻譯模塊來替代淺層翻譯模塊,從而在微調過程中緩解對大量訓練數據的需求。此外,類似于文獻中的 G2T(Gloss2Text)任務,我們設計了一個偽gloss到文本(P2T,Pseudo-gloss2Text)任務,用于微調預訓練翻譯模塊以更好地適應任務。

具體來說,我們可以基于對齊矩陣 A v 2 s A^{v2s} Av2s 為每個手語視頻生成一個偽gloss序列 g ~ \tilde{g} g~?。由于 A v 2 s A^{v2s} Av2s 為每個視覺特征識別出最相似的文本token,而視頻的連續性導致局部窗口內的特征可能會引用相同的token,我們簡單地合并重復的token,通過以下公式獲得 g ~ \tilde{g} g~?

g ~ = B ( A v 2 s s ) , \tilde{g} = \mathcal{B}(A^{v2s}s), g~?=B(Av2ss),

其中, B \mathcal{B} B 表示合并操作。P2T 的訓練目標可以表述為:

L P 2 T = ? log ? p ( s ∣ g ~ ) . \mathcal{L}_{P2T} = -\log p(s|\tilde{g}). LP2T?=?logp(sg~?).

至此,我們已經有了預訓練良好的視覺編碼器和微調良好的翻譯模塊。接下來是對整個模型的端到端微調。我們采用一個兩層的 MLP 作為視覺-語言映射器(V-L 映射器),與之前工作中相同,該模塊負責將視覺特征投影到文本空間。在微調期間,我們仍然包括 L A l i g n \mathcal{L}_{Align} LAlign? 損失以持續改進視覺編碼器,最終的總損失可以表示為:

L f i n e ? t u n e = L A l i g n + L S L T . \mathcal{L}_{fine-tune} = \mathcal{L}_{Align} + \mathcal{L}_{SLT}. Lfine?tune?=LAlign?+LSLT?.

對齊質量評估

在上文中,我們假設視頻中每個手語的大致含義可以在文本句子中找到,并通過識別最相似的文本token來計算對齊關系。基于這一假設,生成的偽gloss g ~ \tilde{g} g~? 也應該與手語視頻單調對齊。然而,由于不同詞匯之間的差異,我們無法直接通過gloss來評估生成對齊關系的質量。因此,我們提出了兩種方法來間接評估生成對齊關系的質量。

如果 g ~ \tilde{g} g~? 與手語視頻單調對齊,它應該能夠像gloss一樣指導 SLT 網絡的學習。因此,我們從零開始訓練一個 SLT 網絡,類似于大多數gloss-based的 SLT 方法,但用偽gloss g ~ \tilde{g} g~? 替代了gloss,其損失函數可以表述為:

L = L S L T + L C T C ( g ~ , V ) , \mathcal{L} = \mathcal{L}_{SLT} + \mathcal{L}_{CTC}(\tilde{g}, V), L=LSLT?+LCTC?(g~?,V),

通過這種基于偽gloss的模型與 VAP 的性能差距可以隱式反映生成對齊關系的質量。

與通過翻譯性能(如詞錯誤率,WER)評估對齊質量相比,通過對齊性能進行評估更為直觀。因此,我們提出通過在預訓練中用偽gloss替換文本句子,計算生成偽gloss與對應gloss之間的 WER 來評估對齊方法的質量。換句話說,這種方法旨在檢查對齊方法是否能夠從無序序列中找到正確的順序。

總的來說,所提出的方法能夠評估對齊關系的質量,包括生成結果和對齊方法本身的質量。

訓練與推理

訓練

如圖 3 所示,VAP 的訓練流程包括三個階段。

Illustration of the training pipeline of VAP

視覺編碼器在第 1 階段使用 L pre-train L_{\text{pre-train}} Lpre-train? 進行預訓練。翻譯模塊基于大規模語料庫進行預訓練,并在第 2 階段使用 g ~ \tilde{g} g~? 進行微調。最后,在第 3 階段,整個模型使用 L f i n e ? t u n e \mathcal{L}_{fine-tune} Lfine?tune? 進行端到端微調。

需要注意的是,VAP 是一種gloss-free方法,gloss僅用于如上文所述的偽gloss質量評估。

推理

在經過第3階段的微調后,整個模型被用于推理。具體來說,視覺編碼器首先提取視覺特征 V \mathcal{V} V,然后視覺-語言映射器(V-L mapper)將這些特征投射到文本空間中。接下來,翻譯模塊以自回歸的方式生成文本句子。

實驗

主實驗

Performance comparison on PHOENIX14T and CSL-Daily

Performance comparison on How2Sign and OpenASL

消融實驗

Ablation results of pre-training objectives. Ablation results of fine-tuning and pseudo-gloss-based training. Ablation results of gloss-based VAP

Comparison with SOTA retrieval method on PHOENIX14T test set. Ablation results of aggregation method

可視化

Qualitative results of translation and alignment. Visualization of the retrieval results of two German words. Visualization of the CTC and VAP predictions

總結

在本文中,我們專注于在無gloss標注情況下,如何在手語翻譯(SLT)中利用視覺信息。

我們提出了一種視覺對齊預訓練(Visual Alignment Pre-training, VAP)方案,通過從文本句子中構建類似gloss的約束來增強視覺編碼器的能力。

VAP以一種貪心的方式逼近視覺特征與文本token之間的最優對齊,同時為視覺編碼器提供逐幀的標簽,并改善其與在大規模語料庫上預訓練的翻譯模塊之間的兼容性。

實驗結果表明,所提出的VAP方案在引導視覺編碼器學習和建立視覺特征與文本token之間的有意義對齊方面是有效的。此外,VAP生成的對齊結果可以作為偽gloss,為手語翻譯模型提供中間監督。

我們預計,所提出的VAP方案將推動未來的研究工作,特別是在將手語翻譯擴展到大規模數據集方面,從而促進手語翻譯領域的發展。

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

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

相關文章

深入淺出 MyBatis | CRUD 操作、配置解析

3、CRUD 3.1 namespace namespace 中的包名要和 Dao/Mapper 接口的包名一致! 比如將 UserDao 改名為 UserMapper 運行發現抱錯,這是因為 UserMapper.xml 中沒有同步更改 namespace 成功運行 給出 UserMapper 中的所有接口,接下來一一對…

前端:改變鼠標點擊物體的顏色

需求&#xff1a; 需要改變圖片中某一物體的顏色&#xff0c;該物體是純色&#xff1b; 鼠標點擊哪個物體&#xff0c;哪個物體的顏色變為指定的顏色&#xff0c;利用canvas實現。 演示案例 代碼Demo <!DOCTYPE html> <html lang"en"><head>&l…

遞歸算法常見問題(Java)

問題&#xff1a;斐波那契數列,第1項和第2項都為1&#xff0c;后面每一項都為相鄰的前倆項的和,求第n個數 解法&#xff1a;每一個數都為前倆個數之和&#xff0c;第1項和第2項都為1&#xff0c;所以寫 方法f1(n)即為求第n個數&#xff0c;那么f1(n-1)為求第n-1個數&#xff0…

git自動壓縮提交的腳本

可以將當前未提交的代碼自動執行 git addgit commitgit squash Git 命令安裝指南 1. 創建腳本目錄 如果目錄不存在&#xff0c;創建它&#xff1a; mkdir -p ~/.local/bin2. 創建腳本文件 vim ~/.local/bin/git-squash將完整的腳本代碼復制到此文件中。 3. 設置腳本權限…

C項目 天天酷跑(下篇)

上篇再博客里面有&#xff0c;接下來我們實現我們剩下要實現的功能 文章目錄 碰撞檢測 血條的實現 積分計數器 前言 我們現在要繼續優化我們的程序才可以使這個程序更加的全面 碰撞的檢測 定義全局變量 實現全局變量 void checkHit() {for (int i 0; i < OBSTACLE_C…

論文解讀——掌紋生成網絡 RPG-Palm升級版PCE-Palm

該文章是2023年論文RPG-Palm的升級版 論文&#xff1a;PCE-Palm: Palm Crease Energy Based Two-Stage Realistic Pseudo-Palmprint Generation 作者&#xff1a;Jin, Jianlong and Shen, Lei and Zhang, Ruixin and Zhao, Chenglong and Jin, Ge and Zhang, Jingyun and Ding,…

代碼隨想錄算法【Day2】

Day2 1.掌握滑動窗口法 2.模擬題&#xff0c;堅持循環不變量原則 209 長度最小的子數組 暴力法&#xff1a; class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {//暴力法int i, j; //i代表起始點&#xff0c;j代表終止點int sum; //…

android——屏幕適配

一、屏幕適配的重要性 在 Android 開發中&#xff0c;屏幕適配是非常關鍵的。因為 Android 設備具有各種各樣的屏幕尺寸、分辨率和像素密度。如果沒有進行良好的屏幕適配&#xff0c;應用可能會出現顯示不完整、元素拉伸或壓縮變形、字體大小不合適等問題&#xff0c;極大地影響…

oscp學習之路,Kioptix Level2靶場通關教程

oscp學習之路&#xff0c;Kioptix Level2靶場通關教程 靶場下載&#xff1a;Kioptrix Level 2.zip 鏈接: https://pan.baidu.com/s/1gxVRhrzLW1oI_MhcfWPn0w?pwd1111 提取碼: 1111 搭建好靶場之后輸入ip a看一下攻擊機的IP。 確定好本機IP后&#xff0c;使用nmap掃描網段&…

第二十六周機器學習筆記:PINN求正反解求PDE文獻閱讀——正問題

第二十六周周報 摘要Abstract文獻閱讀《Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations》1. 引言2. 問題的設置3.偏微分方程的數據驅動解3.1 連續時間模型3.1.1 …

【安全編碼】Web平臺如何設計防止重放攻擊

我們先來做一道關于防重放的題&#xff0c;答案在文末 防止重放攻擊最有效的方法是&#xff08; &#xff09;。 A.對用戶密碼進行加密存儲使用 B.使用一次一密的加密方式 C.強制用戶經常修改用戶密碼 D.強制用戶設置復雜度高的密碼 如果這道題目自己拿不準&#xff0c;或者…

中關村科金智能客服機器人如何解決客戶個性化需求與標準化服務之間的矛盾?

客戶服務的個性化和標準化之間的矛盾一直是一個挑戰。一方面&#xff0c;企業需要提供標準化的服務以保持運營效率和成本控制&#xff1b;另一方面&#xff0c;為了提升客戶滿意度和忠誠度&#xff0c;企業又必須滿足客戶的個性化需求。為此&#xff0c;中關村科金推出了智能客…

OPPO Android面試題及參考答案 (上)

性能優化方面,講一下圖片內存占用計算,以及如何避免持有不必要的引用。 在 Android 中,計算圖片內存占用主要與圖片的尺寸和像素格式有關。對于一張位圖(Bitmap),其內存占用大小可以通過以下方式估算:內存占用 = 圖片寬度 圖片高度 每個像素占用字節數。例如,常見的 …

Agent 案例分析:金融場景中的智能體-螞蟻金服案例(10/30)

Agent 案例分析&#xff1a;金融場景中的智能體 —螞蟻金服案例 一、引言 在當今數字化時代&#xff0c;金融行業正經歷著深刻的變革。隨著人工智能技術的飛速發展&#xff0c;智能體&#xff08;Agent&#xff09;在金融場景中的應用越來越廣泛。螞蟻金服作為金融科技領域的…

ElasticSearch 的工作原理

理解 ElasticSearch 的工作原理需要從索引、搜索、以及其背后的核心機制幾個方面來探討。 1. ElasticSearch 是什么&#xff1f; ElasticSearch 是一個分布式搜索和分析引擎&#xff0c;適用于各種類型的數據&#xff0c;例如文本、數值、地理位置、結構化或非結構化數據。它基…

STM32F407 | Embedded IDE01 - vscode搭建Embedded IDE開發環境(支持JLINK、STLINK、DAPLINK)

導言 Embedded IDE官網:https://em-ide.com/docs/intro 我猜肯定有部分人使用SI Keil開發STM32項目&#xff0c;也有vscode Keil開發STM32程序。SI或vscode編寫代碼&#xff0c;然后切換Keil編譯、下載、調試程序。有一段時間&#xff0c;我也是這么干的。但是&#xff0c;程…

光譜相機的工作原理

光譜相機的工作原理主要基于不同物質對不同波長光的吸收、反射和透射特性存在差異&#xff0c;以下是其具體工作過程&#xff1a; 一、光的收集 目標物體在光源照射下&#xff0c;其表面會對光產生吸收、反射和透射等相互作用。光譜相機的光學系統&#xff08;如透鏡、反射鏡…

ThinkPHP接入PayPal支付

ThinkPHP 5接入PayPal 支付&#xff0c;PayPal的流程是服務器請求Paypal的接口下單&#xff08;需要傳訂單id/支付成功的重定向地址/支付失敗的重定向地址&#xff09;&#xff0c;接會返回一個支付地址&#xff0c;項目服務器把地址返給用戶&#xff0c;用戶打開鏈接登錄Paypa…

stream流的toMap

假設有這么一個類: import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors;public class Student {private int id;private String name;public Student(int id, String name) {this.id id;…

html + css 淘寶網實戰

之前有小伙伴說&#xff0c;淘寶那么牛逼你會寫代碼&#xff0c;能幫我做一個一樣的淘寶網站嗎&#xff0c;好呀&#xff0c;看我接下來如何給你做一個淘寶首頁。hahh,開個玩笑。。。學習而已。 在進行html css編寫之前 先了解下網頁的組成和網頁元素的尺寸吧 1.網頁的組成 …