OpenVLA-OFT——微調VLA的三大關鍵設計:并行解碼、動作分塊、連續動作表示以及L1回歸目標

前言

25年3.26日,這是一個值得紀念的日子,這一天,我司「七月在線」的定位正式升級為了:具身智能的場景落地與定制開發商 ,后續則從定制開發 逐步過渡到 標準產品化

比如25年q2起,在定制開發之外,我司正式推出第一類具身產品(后續更多產品 詳見七月官網):復現各個前沿具身模型的軟硬全套的標準化產品,相當于已幫組裝好的硬件,和對應復現好的程序,包括且不限于ALOHA/RDT/umi/dexcap/idp3/π0,如此軟硬一體標準化的產品,省去復現過程中的

  • 各種硬件組裝問題
  • 各種算法問題
  • 各種工程問題

真正做到:一旦拿來,開箱即用

我司具身落地中,過去半年用π0居多,其次idp3和其他模型,?也是目前國內具身落地經驗最豐富的團隊之一了

  • 其中有不少工作便涉及到對具身模型的微調——恍如18-20年期間 大家各種微調語言模型
    再之后隨著GPT3、GPT3.5、GPT4這類語言模型底層能力的飛速提升,使得針對語言模型的微調呈逐年下降趨勢
  • 但在具身方向,未來一兩年,微調具身模型都是主流方向之一
    當然了,隨著具身模型底層能力的越來越強、泛化性越來越好,也早晚會走到如今語言模型這般 微調偏少的地步

且始終保持對具身最前沿技術的溝通,這不,25年2月底,斯坦福的三位研究者

  1. Moo Jin Kim
    OpenVLA的一作
  2. Chelsea Finn
    ALOHA團隊的指導老師,也是RT-2、π0的作者之一,是我過去一兩年下來讀的機器人論文中出現頻率最高的一個人了
  3. Percy Liang
    OpenVLA的作者之一

提出OpenVLA-OFT「paper地址《Fine-Tuning Vision-Language-Action Models: Optimizing Speed and Success》、項目地址、GitHub地址」,在他們的角度上,揭示微調VLA的三大關鍵設計:并行解碼、動作分塊、連續動作表示以及L1回歸目標

第一部分?OpenVLA-OFT

1.1?OpenVLA-OFT的提出背景與相關工作

1.1.1?OpenVLA-OFT的提出背景

???Kim等人[22]提出了OpenVLA通過LoRA進行參數高效的微調。然而,OpenVLA的自回歸動作生成在高頻控制(25-50+ Hz)中仍然過于緩慢(3-5 Hz),并且LoRA和自回歸VLAs的全微調在雙手操作任務中往往表現不佳[51,26,3]

盡管最近的方法通過更好的動作tokenization方案[2,36]提高了效率,實現了2到13倍的加速,但動作塊之間的顯著延遲(例如,最近的FAST方法[36]為750毫秒)仍然限制了在高頻雙手機器人上的實時部署

對此,三位作者使用OpenVLA(一種代表性的自回歸VLA模型)作為基礎模型,將VLA適配到新型機器人和任務中的關鍵設計決策。他們考察了三個關鍵設計選擇并揭示了一些關鍵見解:

  1. 對于動作解碼方案(自回歸與并行生成)
    通過動作分塊的并行解碼不僅提高了推理效率,還改善了下游任務的成功率,同時增強了模型輸入輸出規范的靈活性
  2. 對于動作表示(離散與連續)
    與離散表示相比,連續動作表示進一步提高了模型質量
  3. 對于學習目標(下一個token預測、L1回歸與擴散)
    使用L1回歸目標對VLA進行微調在性能上與基于擴散的微調相當,同時提供了更快的訓練收斂速度和推理速度

基于以上見解,他們引入了OpenVLA-OFT:一種優化微調(OFT)方案的具體實現,該方案結合了并行解碼和動作分塊、連續動作表示以及L1回歸目標,以在保持算法簡單性的同時提高推理效率、任務性能和模型輸入輸出靈活性

他們號稱在標準化的LIBERO模擬基準測試和真實雙手ALOHA機器人上的靈巧任務中進行了實驗

  • 在LIBERO中,OpenVLA-OFT通過在四個任務套件中達到97.1%的平均成功率,建立了新的技術標準,超越了微調的OpenVLA策略[22](76.5%)和π0策略[3](94.2%),同時在動作生成中實現了26倍的速度提升(使用8步動作分塊)
  • 對于真實的ALOHA任務[53],通過FiLM[35]增強了他們的方案以增強語言基礎能力

1.1.2 相關工作

第一,以往的研究更關注什么呢?其主要關注模型開發

  1. 利用語言和視覺基礎模型來增強機器人能力,將其用作預訓練的視覺表示,從而加速機器人策略學習 [29-Vip,32-R3m,30-Liv,19-Language-driven representation learning for robotic,31]
    在機器人任務中進行物體定位 [9,45]

    以及用于高層次的規劃和推理
    [1-SayCan,17,42-Progprompt,16-Language models as zero-shot planners: Extracting actionable knowledge for embodied agents,43-Llmplanner: Few-shot grounded planning for embodied agents with large language models,18-Voxposer,6-Manipulate-anything]
  2. 最近,研究人員探索了微調視覺-語言模型(VLMs)以直接預測低級別機器人控制動作,生成“視覺-語言-動作”模型(VLAs)
    [4-RT-2,33-Open x-embodiment,23-Vision-language foundation models as effective robot imitators,22-Openvla,7-An interactive agent foundation model,15-An embodied generalist agent in 3d world,8-Introducing rfm-1: Giving robots human-like reasoning capabilities,50-Lingo-2,55-3dvla,51-Tinyvla,3-π0,2-Minivla]

    這些模型展示了對分布外測試條件和未見語義概念的有效泛化能力

而三位作者則專注于開發微調此類模型的流程,并通過從實證分析中獲得的見解來驗證每個設計決策的合理性——這是OpenVLA-OFT工作的第一點意義

第二,相比OpenVLA,OpenVLA-OFT優勢是什么呢

  1. 拒論文稱,盡管微調對于現實世界中的VLA部署至關重要,但關于有效微調策略的經驗分析仍然有限。Kim等人[22]研究了各種參數更新策略,并通過他們的研究發現,LoRA微調能夠有效適應單臂機器人在低控制頻率(<10Hz)下的操作,但OpenVLA的分析并未擴展到雙臂機器人在高控制頻率(25-50+ Hz)下的更復雜控制場景
  2. 而本次的研究,OpenVLA-OFT通過探索VLA適應設計決策,以實現快速推理和在具有25 Hz控制器的真實雙臂操控器上可靠的任務執行——這是第二點意義

第三,相比π0_FAST(推理慢),OpenVLA-OFT意義在于什么呢

  1. 盡管π0_FAST通過新的動作tokenization化方案改進了VLA 的效率,使用矢量量化或基于離散余弦變換的壓縮方法,以比簡單的逐維分箱(如RT-2 [4] 和OpenVLA [22] 中使用的)更少的token表示動作塊(動作序列)
  2. 盡管這些方法為自回歸VLA——π0_FAST 實現了2 到13× 的加速,但三位作者探索了超越自回歸建模的設計決策,而自回歸建模本質上受到迭代生成的限制

    最終OpenVLA-OFT的并行解碼方法,與動作分塊結合時,實現了顯著更高的加速:26× 到43× 的吞吐量,同時具有更低的延遲(單臂任務使用一張輸入圖像的延遲為0.07 ms,雙臂任務使用三張輸入圖像的延遲為0.321 ms)

第四,與基于擴散的VLA(訓練慢)相比

盡管這些基于擴散的視覺語言代理(VLA)通過同時生成多時間步的動作塊實現了比自回歸VLA更高的動作吞吐量,但它們在推理時通過較慢的訓練和多個去噪或集成步驟引入了計算權衡

此外,這些擴散VLA在架構、學習算法、視覺語言融合方法以及輸入輸出規范方面差異很大——哪些設計元素對性能影響最大仍不清楚

通過受控實驗,三位作者表明,使用更簡單的L1回歸目標微調的策略可以在任務性能上匹配更復雜的方法,同時顯著提高推理效率

1.2 微調VLA的三大關鍵設計決策

在涉及到微調VLA的三個關鍵設計決策之前,有兩點 需要先特別說明下

首先,三位作者使用 OpenVLA [22] 作為他們代表性的基礎 VLA

  1. 這是一種通過在 Open X-Embodiment 數據集 [33] 的 100 萬個episodes上對Prismatic VLM [20] 進行微調而創建的 7B 參數操控策略
  2. OpenVLA的原始訓練公式使用 7 個離散機器人動作token的自回歸預測,每個時間步有
    \rightarrow??3 個用于位置控制
    \rightarrow? 3 個用于方向控制
    \rightarrow? 1 個用于抓手控制
    它采用與語言模型類似的「交叉熵損失的下一個token預測」作為其學習目標

其次,先前的研究表明,動作分塊——即預測并執行一系列未來動作而無需中間重新規劃,在許多操作任務中提高了策略的成功率[53-ALOHA ACT, 5-Diffusion policy, 27-Bidirectional decoding]

  1. 然而,OpenVLA 的自回歸生成方案使得動作分塊變得不切實際,因為即使生成單個時間步的動作,在NVIDIA A100 GPU 上也需要0.33秒
  2. 對于塊大小為K 個時間步和動作維度為D 的情況,OpenVLA 需要進行KD 次順序解碼器前向傳遞,而無需分塊時僅需D 次。這種K 倍的延遲增加使得在OpenVLA的原始公式下,動作分塊對于高頻機器人來說變得不切實際
    在下一節中,三位作者提出了一種并行生成方案,使得高效的動作分塊成為可能

1.2.1?VLA微調設計決策

現有的方法使用基礎模型的自回歸訓練策略微調VLA時面臨兩個主要限制:

  1. 推理速度較慢(3-5 Hz),不適合高頻控制
  2. 以及在雙手操作器上的任務執行可靠性不足 [51-Tinyvla,26-Rdt-1b,3-π0]

為了解決這些挑戰,三位作者研究了VLA微調的三個關鍵設計組件:

  1. 動作生成策略(圖2,左):
    比較了需要逐個token順序處理的自回歸生成與同時生成所有動作并支持高效動作分塊的并行解碼
  2. 動作表示(圖2,右):
    對通過基于 softmax 的token預測處理的離散動作(對歸一化動作進行 256 個分箱的離散化)與由多層感知機(MLP)動作頭直接生成的連續動作進行了比較
    \rightarrow? 對于離散動作,語言模型解碼器的最終隱藏狀態被線性投影為對數幾率,然后通過 softmax 操作處理,形成動作token的概率分布
    \rightarrow? 而對于連續動作,最終隱藏狀態則通過一個單獨的動作頭MLP直接映射到歸一化的連續動作
  3. 學習目標(圖2,右側)
    比較了通過
    \rightarrow? 下一個token預測微調離散動作的策略
    \rightarrow? L1回歸微調連續動作的策略[53]
    \rightarrow? 以及條件去噪擴散微調連續動作的策略[5-diffusion policy](類似于Chi等人[5]的研究)

    他們使用OpenVLA [22]作為基礎模型,并通過LoRA微調[14]對其進行適配,這是因為的訓練數據集相對較小(500個示例,相比于預訓練的1百萬個示例)

1.2.2?實現替代設計組件

OpenVLA 最初采用自回歸生成離散動作token,并通過下一個token預測進行優化。三位作者實施了不同的微調設計決策,同時保持原始預訓練不變

第一,并行解碼和動作分塊

與需要按順序token預測的自回歸生成不同

  1. 并行解碼使模型能夠在一次前向傳遞中將輸入嵌入映射到預測的輸出序列「parallel decoding enables the model to map input embeddingsto the predicted output sequence in a single forward pass
  2. 為此,三位作者修改了模型,使其接收空的動作嵌入作為輸入,并用雙向注意力替換因果注意力掩碼,從而使解碼器能夠同時預測所有動作
    這將動作生成從D 次順序傳遞減少到一次傳遞,其中D 是動作的維度「This reduces action generation from D sequential passes to asingle pass, where D is the action dimensionality

此外,并行解碼可以自然地擴展到動作分塊

  1. 為了預測多個未來時間步的動作,只需在解碼器的輸入中插入額外的空動作嵌入,這些嵌入隨后會被映射到未來的一組動作
  2. 對于分塊大小為 K 的情況,模型在一次前向傳遞中預測 KD 個動作,吞吐量增加 K 倍,而對延遲的影響極小
    雖然從理論上講,并行解碼可能不如自回歸方法那樣具有表現力,但三位作者的實驗表明,在各種任務中均未出現性能下降

第二,連續動作表示

OpenVLA 最初使用離散動作token,其中每個動作維度被歸一化到[?1, +1] 并均勻離散化為256 個區間。雖然這種方法很方便,因為它不需要對底層VLM進行架構修改,但離散化過程可能會犧牲細粒度的動作細節

對此,三位作者研究了連續動作表示,并從突出的模仿學習方法中提取了兩個學習目標

  1. L1 回歸,該動作頭直接將解碼器最后一層隱藏狀態映射到連續動作值。模型被訓練為最小化預測動作與真實動作之間的平均 L1 差異,同時保持并行解碼的效率優勢并可能提高動作精度
  2. 其次,受 Chi 等人 [5] 的啟發,他們實現了條件去噪擴散建模
    在訓練過程中,模型學習預測在前向擴散期間添加到動作樣本中的噪聲
    在推理過程中,策略通過反向擴散逐漸去噪噪聲動作樣本以生成真實動作

    雖然這種方法提供了可能更具表現力的動作建模,但它在推理期間需要多次前向傳遞(在三位作者的實現中為 50 次擴散步驟),即使使用并行解碼也會影響部署延遲

第三,額外的模型輸入和輸出

雖然原始 OpenVLA 處理單個攝像頭視圖,但一些機器人設置包括多個視角和額外的機器人狀態信息

故三位作者實現了一個靈活的輸入處理管道:

  • 對于攝像頭圖像,三位作者使用 OpenVLA 的雙視覺編碼器提取每個視圖的 256 個patch嵌入,這些嵌入通過共享投影網絡被投影到語言嵌入空間
  • 對于低維機器人狀態輸入(例如關節角度和夾持器狀態),三位作者使用單獨的投影網絡將這些映射到與攝像頭圖像相同的嵌入空間——從而作為另一個輸入嵌入

所有輸入嵌入——視覺特征機器人狀態語言token——在傳遞給解碼器之前沿序列維度進行連接。這種統一的潛在表示使模型能夠在生成動作時關注所有可用信息

且結合并行解碼和動作分塊,這種架構可以高效處理豐富的多模態輸入,同時生成多時間步的動作,如下圖圖1所示

1.2.3 使用 FiLM 增強 OpenVLA-OFT 的語言基礎能力

當在 ALOHA 機器人設置中部署時,包含來自腕部安裝攝像頭的多個視角,三位作者觀察到由于視覺輸入中的偽相關性,策略可能難以跟隨語言

  1. 在訓練過程中,策略可能會在預測動作時學習依賴這些偽相關性,而不是正確關注語言指令,導致在測試時無法很好地遵循用戶的命令
  2. 此外,語言輸入可能僅在任務的特定時刻是關鍵的——例如,在“將X 舀入碗中”任務中,抓住勺子后決定舀取哪種成分,如第 VI 節所述。因此,如果沒有特殊技術,訓練模型適當地關注語言輸入可能特別具有挑戰性

為了增強語言跟隨能力,三位作者采用了特征線性調制(FiLM)[35],它將語言嵌入注入到視覺表示中,以使模型更加關注語言輸入

三位作者計算任務描述中的語言嵌入 x的平均值,并將其投影以獲得縮放和偏移向量γ 和 β。這些向量通過仿射變換調制視覺特征F

\operatorname{FiLM}(\mathbf{F} \mid \gamma, \beta)=\hat{\mathbf{F}}=(1+\gamma) \odot \mathbf{F}+\beta

一個關鍵的實現細節是選擇什么代表視覺Transformer中用于調制的” 特征”。盡管人們可能自然地考慮將單個patch 嵌入作為需要調制的特征,但三位作者發現這種方法會導致較差的語言跟隨能力

相反,借鑒FiLM 在卷積網絡中的操作方式,其中調制以空間無關的方式通過縮放和偏移整個特征圖來實現,他們將γ 和β 的每個元素應用于所有視覺patch 嵌入中的對應隱藏單元,從而使γ 和β 影響所有patch 嵌入

  1. 具體來說,這使得γ 和β 成為DV iT維向量,其中DV iT 是視覺patch 嵌入中的隱藏維度數量
  2. 三位作者在每個ViT塊的自注意力層之后和前饋層之前應用 FiLM,每個塊都有單獨的投影器(見原論文中的圖 8)
    更多實現細節請參見附錄 C。他們僅在第 VI 節討論的 ALOHA 實驗中使用 FiLM,在這些實驗中,多個攝像機視角導致視覺輸入中存在更多的虛假相關性

1.3 對VLA微調設計決策的評估

根據原論文,下面將通過旨在回答三個關鍵問題的控制實驗,評估他們提出的 VLA 適配設計決策的效果

  1. 每個設計決策如何影響微調策略在下游任務上的成功率
  2. 每個設計決策如何影響模型推理效率(動作生成吞吐量和延遲)
  3. 替代的微調形式如何影響模型輸入輸出規范的靈活性

1.3.1?LIBERO 實驗設置

在 LIBERO 模擬基準 [25] 上進行評估,該基準包含一個 Franka Emika Panda 機械臂模擬,演示數據包括相機圖像、機器人狀態、任務注釋和末端執行器位姿變化的動作

他們使用四個任務套件——LIBERO-Spatial、LIBERO-Object、LIBERO-Goal 和LIBERO-Long,每個套件提供 10 個任務的 500 個專家演示,用于評估策略在不同空間布局、物體、目標

根據Kim 等人[22] 的方法,他們篩選出不成功的示范,并通過LoRA [14] 獨立地對每個任務集微調OpenVLA

  1. 針對非擴散方法訓練50 ?150 K 次梯度步
    對于擴散方法(收斂較慢)訓練100 ?250 K 次梯度步
    并使用跨8 個A100/H100 GPU 的64-128 的批量大小
  2. 每隔50K 步測試一次檢查點,并報告每次運行的最佳性能。除非另有說明,策略接收一張第三人稱圖像和語言指令作為輸入
  3. 對于使用動作分塊的方法,將塊大小設置為K = 8,以匹配Diffusion Policy 基線[5],并在重新規劃前執行完整的塊,這一設置被發現可以同時提高速度和性能。超參數的詳細信息見附錄D

1.3.2?LIBERO任務性能比較

為了實現令人滿意的部署,機器人策略必須展示出可靠的任務執行能力

三位作者首先評估不同的VLA微調設計決策如何影響LIBERO基準測試中的成功率。根據效率分析顯示,并行解碼PD和動作分塊AC對于高頻控制(25-50+ Hz)是必要的,特別是對于具有雙倍動作維度的雙臂機器人

因此,他們評估了同時使用這兩種技術的OpenVLA策略,并比較了使用離散動作、帶L1回歸的連續動作以及帶擴散的連續動作的變體

下表表I的結果顯示

  1. 并行解碼和動作分塊不僅提高了吞吐量,還顯著提升了性能,使得自回歸OpenVLA策略的平均成功率絕對提高了14%。這一改進在LIBERO-Long中尤為顯著,這表明動作分塊有助于捕獲時間依賴性[27]并減少復合錯誤[39],最終導致更平滑和更可靠的任務執行
  2. 此外,談發現使用連續動作變體相較于離散動作變體,成功率進一步提高了 5%(絕對值),這可能是由于動作預測的精度更高所致
  3. L1回歸和擴散變體表現相當,這表明高容量的OpenVLA模型即使使用簡單的L1回歸也能有效建模多任務動作分布

1.3.3?LIBERO 推理效率比較

高效的推理對于在高頻控制機器人上部署 VLAs 至關重要。故原論文中評估了并行解碼(PD)、動作分塊(AC)和連續動作表示如何影響模型推理速度

  1. 他們通過在 NVIDIA A100 GPU 上對每種模型變體進行 100 次查詢來測量平均延遲(生成一個機器人動作或動作塊所需的時間)和吞吐量(每秒生成的總動作數)
  2. 每次查詢處理一個 224 x 224 像素的圖像和一個示例 LIBERO 語言指令(“拾起alphabet soup并將其放入籃子中”)

下表表II 中的結果表明

  1. 通過將策略中解碼器部分的 7 次順序前向傳遞替換為單次傳遞,并行解碼將延遲降低了 4 倍,并將吞吐量提高了 4 倍
    Results in Table II show that parallel decoding reduces latency and increases throughput by 4× by replacing 7 se-quential forward passes through the decoder portion of the policy with a single pass
  2. 添加動作分塊(K = 8)會使延遲增加 17%,這是由于解碼器中的注意力序列變長所致,但當與并行解碼結合使用時,它能顯著提高吞吐量,比基準 OpenVLA 快 26 倍
  3. 帶有 L1 回歸的連續動作變體在效率方面幾乎沒有差異,因為額外的 MLP 動作頭僅增加了極少量的計算量
    擴散變體需要50個去噪步驟,因此延遲增加了3倍。然而,通過并行解碼和分塊,它的吞吐量仍然比基線OpenVLA高出2倍
    這意味著盡管動作塊之間的暫停時間更長,擴散變體仍然比原始自回歸變體更快地完成機器人操作周期

1.3.4?模型輸入輸出的靈活性

// 待更

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

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

相關文章

【論文閱讀】Dynamic Adversarial Patch for Evading Object Detection Models

一、介紹 這篇文章主要是針對目標檢測框架的攻擊&#xff0c;不同于現有的攻擊方法&#xff0c;該論文主要的側重點是考慮視角的變化問題&#xff0c;通過在車上布置多個顯示器&#xff0c;利用視角動態選擇哪一個顯示器播放攻擊內容&#xff0c;通過這種方法達到隱蔽與攻擊的…

多模態技術概述(一)

1.1 多模態技術簡介 1.1.1 什么是多模態 多模態(Multimodal)涉及多種不同類型數據或信號的處理和融合&#xff0c;每種數據類型或信號被稱為一種模態。常見的模態包括文本、圖像、音頻、視頻等。多模態技術旨在同時利用這些不同模態的數據&#xff0c;以實現更全面、更準確的理…

nginx2

Nginx反向代理(七層代理)、Nginx的TCP/UDP調度器(四層代理)、 一、Nginx反向代理(七層代理) 步驟&#xff1a; ? 部署后端web服務器集群 ? 配置Nginx代理服務器 ? 配置upstream集群池 ? 調節集群池權重比 <img src"/home/student/Deskt…

調用kimi api

官網支持python&#xff0c;curl和node.js 因為服務器剛好有php環境&#xff0c;所以先用curl調個普通的語音溝通api <?php // 定義 API Key 和請求地址 define(MOONSHOT_API_KEY, sk-PXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXgk1); define(MOONSHOT_API_URL, https://…

關于 UPDATE 語句 和 SELECT ... FOR UPDATE 的對比分析,包括語法、功能、鎖機制、使用場景及示例代碼

以下是關于 UPDATE 語句 和 SELECT ... FOR UPDATE 的對比分析&#xff0c;包括語法、功能、鎖機制、使用場景及示例代碼&#xff1a; 1. UPDATE 語句 功能 直接修改數據&#xff1a;立即更新表中的數據&#xff0c;并提交修改。無顯式鎖&#xff1a;雖然會自動加鎖&#xff…

在航電系統中提高可靠性的嵌入式軟件設計

1.總線余度設計 數據傳輸采用雙余度總線設計&#xff0c;CANFD為主&#xff0c;RS485為備。發送方將相同的數據分別通過雙總線來發送&#xff0c;接收方優先處理主線數據。由于總線上數據頻率固定&#xff0c;可設置定時器監控主總線的數據&#xff0c;當定時器超時后&#xff…

第十五屆藍橋杯大賽軟件賽省賽Python 大學 C 組:5.回文數組

題目1 回文數組 小藍在無聊時隨機生成了一個長度為 n 的整數數組&#xff0c;數組中的第 i 個數為 ai&#xff0c;他覺得隨機生成的數組不太美觀&#xff0c;想把它變成回文數組&#xff0c;也是就對于任意 i∈[1,n] 滿足 a i a n ? i 1 a_ia_{n?i}1 ai?an?i?1。 小藍…

netty中的WorkerGroup使用詳解

Netty中WorkerGroup的深度解析 WorkerGroup是Netty線程模型中的從Reactor線程組&#xff0c;負責處理已建立連接的I/O讀寫、編解碼及業務邏輯執行。其設計基于主從多Reactor模型&#xff0c;與BossGroup分工協作&#xff0c;共同實現高并發網絡通信的高效處理。 一、WorkerGro…

模運算核心性質與算法應用:從數學原理到編程實踐

目錄 &#x1f680;前言&#x1f31f;數學性質&#xff1a;模運算的理論基石&#x1f4af;基本定義&#xff1a;余數的本質&#x1f4af;四則運算規則&#xff1a;保持同余性的關鍵 &#x1f99c;編程實踐&#xff1a;模運算的工程化技巧&#x1f4af;避免數值溢出&#xff1a;…

#Git 變基(Rebase)案例

適合學習理解的 Git 變基&#xff08;Rebase&#xff09;案例 為了幫助你更好地理解 Git 變基&#xff08;Rebase&#xff09;的操作和效果&#xff0c;下面通過一個簡單的案例來演示變基的過程和影響。 案例背景 假設我們有一個 Git 倉庫&#xff0c;包含兩個分支&#xff1…

泰博云平臺solr接口存在SSRF漏洞

免責聲明&#xff1a;本號提供的網絡安全信息僅供參考&#xff0c;不構成專業建議。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權&#xff0c;請及時與我聯系&#xff0c;我將盡快處理并刪除相關內容。 漏洞描述 SSRF漏洞是一種在未能獲取服務器…

MyBatis 動態SQL 詳解!

目錄 一、 什么是動態 SQL&#xff1f;二、 為什么需要動態 SQL&#xff1f;三、 MyBatis 動態 SQL 標簽四、 標簽詳解及示例1、 if 標簽2、 choose、when、otherwise 標簽3、 where 標簽4、 set 標簽5、 foreach 標簽6、 sql、include 標簽 五、 總結 &#x1f31f;我的其他文…

阿里云服務器遭遇DDoS攻擊有爭議?

近年來&#xff0c;阿里云服務器頻繁遭遇DDoS攻擊的事件引發廣泛爭議。一方面&#xff0c;用戶質疑其防御能力不足&#xff0c;導致服務中斷甚至被迫進入“黑洞”&#xff08;清洗攻擊流量的隔離機制&#xff09;&#xff0c;輕則中斷半小時&#xff0c;重則長達24小時&#xf…

如何在Springboot的Mapper中輕松添加新的SQL語句呀?

在如今的軟件開發界&#xff0c;Spring Boot可是非常受歡迎的框架哦&#xff0c;尤其是在微服務和RESTful API的構建上&#xff0c;真的是讓人愛不釋手&#xff01;今天&#xff0c;我們就來聊聊如何為Spring Boot項目中的Mapper添加新的SQL語句吧&#xff01;說起來&#xff0…

Qt 中 findChild和findChildren綁定自定義控件

在 Qt 中&#xff0c;findChild 和 findChildren 是兩個非常實用的方法&#xff0c;用于在對象樹中查找特定類型的子對象。這兩個方法是 QObject 類的成員函數&#xff0c;因此所有繼承自 QObject 的類都可以使用它們。當您需要查找并綁定自定義控件時&#xff0c;可以按照以下…

leecode第19天

15、三數之和 # 給你一個整數數組 nums &#xff0c;判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i ! j、i ! k 且 j ! k &#xff0c; # 同時還滿足 nums[i] nums[j] nums[k] 0 。請你返回所有和為 0 且不重復的三元組。 # 注意&#xff1a;答案中不可以包含重復…

2109. 向字符串添加空格

2109. 向字符串添加空格 題目鏈接&#xff1a;2109. 向字符串添加空格 代碼如下&#xff1a; class Solution { public:string addSpaces(string s, vector<int>& spaces) {string res "";int j 0;//直接遍歷即可for (int i 0;i < spaces.size();i…

Java Spring Boot 與前端結合打造圖書管理系統:技術剖析與實現

目錄 運行展示引言系統整體架構后端技術實現后端代碼文件前端代碼文件1. 項目啟動與配置2. 實體類設計3. 控制器設計4. 異常處理 前端技術實現1. 頁面布局與樣式2. 交互邏輯 系統功能亮點1. 分頁功能2. 搜索與篩選功能3. 圖書操作功能 總結 運行展示 引言 本文將詳細剖析一個基…

CSRF跨站請求偽造——入門篇【DVWA靶場low級別writeup】

CSRF跨站請求偽造——入門篇 0. 前言1. 什么是CSRF2. 一次完整的CSRF攻擊 0. 前言 本文將帶你實現一次完整的CSRF攻擊&#xff0c;內容較為基礎。需要你掌握的基礎知識有&#xff1a; 了解cookie&#xff1b;已經安裝了DVWA的靶場環境&#xff08;本地的或云的&#xff09;&am…

BT-Basic函數之首字母R

BT-Basic函數之首字母R 文章目錄 BT-Basic函數之首字母Rrandomizercallremoterenamereportreport clearreport fault syndromereport isreport level isreport outreport usingre?savere?storereturnrevision$rexitrinitrli$rndrotaterpmcrpsrun randomize 以下是這段英文的…