国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深入淺出CenterFusion

這篇具有很好參考價值的文章主要介紹了深入淺出CenterFusion。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Summary

自動駕駛汽車的感知系統(tǒng)一般由多種傳感器組成,如lidar、carmera、radar等等。除了特斯拉基于純視覺方案來進行感知之外,大多數研究還是利用多種傳感器融合來建立系統(tǒng),其中l(wèi)idar和camera的融合研究比較多。

CenterFusion這篇文章基于nuscenes數據集研究camera和radar的特征層融合,圖像部分采用的是CenterNet,radar點云部分采用了pillar expansion后通過roi frustum來與圖像檢測到的box進行匹配,radar特征提取與CenterNet類似,利用radar點云的vx、vy以及depth分別構建heatmap后與圖像特征進行拼接來完成融合。官方代碼倉庫鏈接

總體思路還是將雷達點云投射到圖像數據中,特征層進行通道拼接,再利用卷積網絡進行回歸。檢測分為兩個階段,Primary Regression Heads的結果除了輸出外,還用來進行點云數據和box的匹配;Secondary Regression Heads由于拼接了雷達特征,可以修正Primary Regression Heads的預測結果,同時給出額外的信息,目標速度和屬性等等。

主要解決了如下問題:

問題 方案
毫米波雷達點云數據有很多雜波,和真實物體經常是一對多的關系,難以與圖像box進行匹配 利用3D視椎體來過濾和篩選點云,加快匹配速度,同時過濾無效的點云
一般的毫米波雷達點云數據沒有高度信息,很難準確與圖像中的box進行匹配 Pillar Expansion, 將點擴充為3D pillar,增大匹配概率
毫米波雷達點云數據非常稀疏,以致于表征能力弱,在整個網絡中的權重較低 利用與之匹配的box來擴充雷達點云覆蓋范圍,由一個點轉變成一小塊矩形區(qū)域,提取點云heatmap作為點云特征
深入淺出CenterFusion
  1. 圖片特征提取及Primary Regression
    修改了CenterNet的Head,利用全卷積backbone進行特征提取的時候,進行一個初步的回歸,得到目標的2D Box 和3D Box

  2. 雷達點云和2D圖像目標匹配

    • 3D 視椎體
      利用Primary Regression Heads得到的每個3D Box的深度depth、觀測角alpha、3D框尺寸dim,再加上相機標定矩陣來生成3D視椎體(每個可能的Box都生成一個),類似Roi提取,加快匹配速度的同時,過濾無效的點云。

      觀測角和標定矩陣是為了計算yaw角

    • 雷達點云Pillar Expansion
      雷達點云沒有高度信息,將點云擴充為固定大小的3D柱子,增大點云匹配的概率(相對用點表示目標物,用柱子表示能夠增加在3D空間中的體積,進而增大匹配的概率)

    • 點云匹配
      pillar投影到pixel坐標系與2D box進行匹配; pillar投影到相機坐標系與構造的3D視椎體進行深度值匹配

  3. 雷達點云特征提取
    對于每一個與視椎體關聯(lián)到雷達目標,利用圖像中2D檢測框的位置生成三張heatmap,三張heatmap concat到圖片的特征中作為額外通道,進而完成融合

  4. 利用融合特征進行Secondary Regression
    除了估計目標速度之外,還重新估計了目標的深度和角度(結合了雷達特征,估計更精確)

  5. 3D Box Decoder
    綜合Primary和Secondary Regression Heads的輸出,還原出3D目標檢測結果(位置、大小、姿態(tài)、速度,以及類別等屬性),其中dep和rot在兩個heads里都有,則只利用準確度更高的second regression heads


背景知識

如果沒有了解過相關內容,可以按下順序來看,CenterFusion里的大部分代碼都是來自于CornerNet和CenterNet

  • 3D目標檢測基礎知識
  • CornerNet:目標檢測算法新思路
  • 扔掉anchor!真正的CenterNet——Objects as Points論文解讀
  • CenterTrack深度解析

重點內容

Backbone結構

Backbone沿用了CenterNet的DLA-34作為全卷積骨干網絡, 并將可變形卷積DeformConv引入。關于網絡結構內容可參考CenterFusion(基于CenterNet)源碼深度解讀: :DLA34

深入淺出CenterFusion
全卷積骨干網絡以圖像 I ∈ R W × H × 3 I \in R^{W \times H \times 3} IRW×H×3作為輸入,生成key points heatmap: Y ^ ∈ [ 0 , 1 ] W R × H R × C \hat{Y} \in[0,1]^{\frac{W}{R} \times \frac{H}{R} \times C} Y^[0,1]RW?×RH?×C,其中 W 和 H是圖像的寬度和高度,R是下采樣比,C 是物體類別的數量。heatmap中的每一個像素的取值在[0,1]之間。再通過回歸圖像特征的方法來實現(xiàn)對圖像上目標中心點的預測,以及對目標的 2D 大?。▽挾群透叨龋?、中心偏移量、3D 尺寸、深度和旋轉等信息的提取。以上均繼承于CenterNet。

訓練數據的圖像尺寸為 3 × 900 × 1600 3\times900\times1600 3×900×1600,下采樣比為2,為了下采樣不產生余數,入模圖像的尺寸為 3 × 448 × 800 3\times448\times800 3×448×800。

雷達點云和2D圖像目標匹配

基于視錐的匹配

深入淺出CenterFusion
  1. 3D視椎體縮小了匹配范圍,進而加快匹配速度

  2. 相比于直接將雷達點云投射到2D圖像,3D視錐能夠區(qū)分2D圖像中重疊或被遮擋的目標

  3. 使用參數 δ \delta δ來調節(jié) ROI 視椎體的大小,這是為了解決估計的深度值的不準確性,因為ROI視椎匹配時,使用的深度值 d ^ \hatn5n3t3z d^是通過圖像特征估計出來的。調節(jié)視椎體大小的目的是為了盡可能的給每一個box找到至少一個雷達點云來匹配,即使匹配到多個點云,后面直接取深度最小的點云來完成box內的點云去重。如下為BEV視角示意圖

    深入淺出CenterFusion

    只在infer階段用參數δ,實際調節(jié)的是視椎體的深度范圍, 增加此參數的目的更多是降低漏檢率。

    代碼中用frustumExpansionRatio來表示調節(jié)參數,根據視錐體的深度范圍計算得到一個dist_thresh,
    其中 δ = d i s t _ t h r e s h ? f r u s t u m E x p a n s i o n R a t i o n \delta = dist\_thresh * frustumExpansionRation δ=dist_thresh?frustumExpansionRation d ^ \hatn5n3t3z d^是primary head輸出的3D box depth或GT depth。 圖中綠色虛線是經過調節(jié)的視錐體深度值范圍,深度值在此范圍內的雷達點云,與這個對應的box匹配。其中roi frustum和dist_thresh構造程序如下:

    # 對每一個3D box,計算roi frustum的8個角點, roi frustum為3D box的包圍盒,
    # 且roi frustum在pixel坐標系下的投影為2D box
    def comput_corners_3d(dim, rotation_y):
        # dim: 3
        # location: 3
        # rotation_y: 1
        # return: 8 x 3
        c, s = torch.cos(rotation_y), torch.sin(rotation_y)
        # dim是相機坐標系下的長寬高,下面計算的也是相機坐標系下的3D box的8個角點
        # 自動駕駛車輛在地面上行駛,一般只考慮偏航角,利用rotation_y構造旋轉矩陣
        # 航向角為繞y軸旋轉,所以旋轉矩陣為
        R = torch.tensor([[c, 0, s], [0, 1, 0], [-s, 0, c]], dtype=torch.float32)
        l, w, h = dim[2], dim[1], dim[0]
        x_corners = [l/2, l/2, -l/2, -l/2, l/2, l/2, -l/2, -l/2]
        y_corners = [0, 0, 0, 0, -h, -h, -h, -h]
        z_corners = [w/2, -w/2, -w/2, w/2, w/2, -w/2, -w/2, w/2]
    
        corners = torch.tensor(
            [x_corners, y_corners, z_corners], dtype=torch.float32)
        
        # 相機坐標下的3D box的8個角點左乘旋轉矩陣,得到roi frustum的8個角點,
        # 對應的roi frustum在pixel坐標系下的投影,剛好為2D box
        corners_3d = torch.mm(R, corners).transpose(1, 0)
        return corners_3d
    
    
    def get_dist_thresh(calib, ct, dim, alpha):
        rotation_y = alpha2rot_y(alpha, ct[0], calib[0, 2], calib[0, 0])
        corners_3d = comput_corners_3d(dim, rotation_y)
        dist_thresh = max(corners_3d[:, 2]) - min(corners_3d[:, 2]) / 2.0
        return dist_thresh
    

雷達點云目標和圖像2D目標一般是多對一的關系,如果視錐體內有多個雷達點云,則只保留深度最?。ň嚯x最近)的點云,消除冗余的雷達點云數據。匹配結果如下:

  • top image: 將雷達點云擴充為3D Pillar后投影到pixel坐標系

  • middle image: 根據點云的深度直接將3D Pillar 投射到2D圖像。點云去重前

  • bottom image: 視錐匹配后,同時對雷達點云進行特征提取,將點云heatmap并投射到2D圖像。點云去重后

深入淺出CenterFusion

視錐的使用并不是先例, TLNet和Frustum PointNet等anchor based方法均利用了視錐來過濾anchor,因為稠密的anchor帶來巨大的計算量,2D檢測結果形成的3D視錐可以過濾掉大量背景上的anchor。

深入淺出CenterFusion 深入淺出CenterFusion
TLNet Frustum PointNet

雷達點云特征提取

因為圖像是經過CenterNet轉換成了heatmap,同時對雷達點云和圖像中的BOX進行了一對一的匹配,為了將圖像數據和雷達點云數據更好的融合,論文將雷達點云特征轉換為heatmap,進而在通道上拼接(concat)來完成融合。

具體為,將點云數據的深度、速度x分量,速度y分量作為三個通道。對每一個與雷達點云匹配的2D Box,在2D Box內部分別以三個通道值填充一個Box(暫稱為次級Box),次級Box的中心與原始2D Box的中心重合,大小與原始Box成比例, 比例通過 α \alpha α參數控制

注: 雷達測量的速度是徑向速度

F x , y , i j = 1 M i { f i ∣ x ? c x j ∣ ≤ α w j ?and? ∣ y ? c y i ∣ ≤ α h j 0 ?otherwise? , F_{x, y, i}^{j}=\frac{1}{M_{i}}\left\{\begin{array}{ll} f_{i} & \left|x-c_{x}^{j}\right| \leq \alpha w^{j} \quad \text { and } \\ & \left|y-c_{y}^{i}\right| \leq \alpha h^{j} \\ 0 & \text { otherwise } \end{array},\right. Fx,y,ij?=Mi?1?? ? ??fi?0? ?x?cxj? ?αwj?and? ?y?cyi? ?αhj?otherwise??,

三個通道分別為 ( d , v x v y ) \left(d, v_{x}\right. \left.v_{y}\right) (d,vx?vy?),其中i是雷達的特征圖通道,且 i ∈ 1 , 2 , 3 i\in 1,2,3 i1,2,3, M i M_{i} Mi?是每個通道的歸一化因子, c x j , c y j c_{x}^{j}, c_{y}^{j} cxj?,cyj?是與之匹配的第 j j j個2D box的中心坐標, w j , h j w^{j}, h^{j} wj,hj是第 j j j個2D box的寬和高, α \alpha α是一個超參數,用于控制次級Box的大小。

點云heatmap的分布與CenterNet有些差異,CenterNet的heatmap是以中心點的取值生成的高斯分布,而點云heatmap是以2D box中心點生成一個成比例大小的Box,Box內取值相同,Box外取值為0。


3D Box Decoder

利用Primary Head和Secondary Head的預測結果,對3D Box進行解碼,得到3D Box的

  • 中心點3D坐標、長寬高、航向角
  • 中心點2D坐標
  • 目標類別、速度等

通過目標的尺寸信息,可計算出3D Box角點關于目標中心的相對坐標。進而通過中心點坐標和航向信息計算出3D框體角點的全局坐標,最終返回全局坐標


其他

目標角度in-bin regression

做過機器學習的都知道,有一個重要的步驟叫做特征工程,某個變量難以直接擬合或擬合效果不好時,需要進行一些encoding。因為直接回歸角度標量有點困難,可以先大致判斷位于哪個角度區(qū)間,然后在區(qū)間內進行offset回歸

論文中不直接回歸觀測角 α \alpha α,而是將 α \alpha α取值范圍編碼為兩個bins: [ ? 7 p i 6 , p i 6 ] , [ ? p i 6 , 7 p i 6 ] [\frac{-7pi}{6}, \frac{pi}{6}], [\frac{-pi}{6}, \frac{7pi}{6}] [6?7pi?,6pi?],[6?pi?,67pi?]。每個bin包含4個標量,維度合計為8。對于一個bin,兩個值用作softmax分類,其余兩個值對每個bin中的角度中值的offset進行回歸。這里其實是沿用了CenterNet的角度回歸方式。代碼如下:

def _add_rot(self, ret, ann, k, gt_det):
    if 'alpha' in ann:
        ret['rot_mask'][k] = 1
        alpha = ann['alpha']
        if alpha < np.pi / 6. or alpha > 5 * np.pi / 6.:
            ret['rotbin'][k, 0] = 1
            ret['rotres'][k, 0] = alpha - (-0.5 * np.pi)
        if alpha > -np.pi / 6. or alpha < -5 * np.pi / 6.:
            ret['rotbin'][k, 1] = 1
            ret['rotres'][k, 1] = alpha - (0.5 * np.pi)
        gt_det['rot'].append(self._alpha_to_8(ann['alpha']))
    else:
        gt_det['rot'].append(self._alpha_to_8(0))

def _alpha_to_8(self, alpha):
    ret = [0, 0, 0, 1, 0, 0, 0, 1]
    if alpha < np.pi / 6. or alpha > 5 * np.pi / 6.:
        r = alpha - (-0.5 * np.pi)
        ret[1] = 1
        ret[2], ret[3] = np.sin(r), np.cos(r)
    if alpha > -np.pi / 6. or alpha < -5 * np.pi / 6.:
        r = alpha - (0.5 * np.pi)
        ret[5] = 1
        ret[6], ret[7] = np.sin(r), np.cos(r)
    return ret

CenterNet論文的附錄給出了詳細公式,,Loss分為兩部分:前半部分用softmax分類,判斷角度位于哪個bin,損失函數為cross entropy ;后半部回歸角度關于對應bin中心取值(就是角度平均值)的offset,對offset取正弦或余弦值作為角度殘差,并計算與角度殘差GT的L1 loss

L ori? = 1 N ∑ k = 1 N ∑ i = 1 2 ( softmax ? ( b ^ i , c i ) + c i ∣ a ^ i ? a i ∣ ) L_{\text {ori }}=\frac{1}{N} \sum_{k=1}^{N} \sum_{i=1}^{2}\left(\operatorname{softmax}\left(\hat_{i}, c_{i}\right)+c_{i}\left|\hat{a}_{i}-a_{i}\right|\right) Lori??=N1?k=1N?i=12?(softmax(b^i?,ci?)+ci?a^i??ai?)
其中 c i = 1 ( θ ∈ B i ) , a i = ( sin ? ( θ ? m i ) , cos ? ( θ ? m i ) ) c_{i}=\mathbb{1}\left(\theta \in B_{i}\right), a_{i}=\left(\sin \left(\theta-m_{i}\right), \cos \left(\theta-m_{i}\right)\right) ci?=1(θBi?),ai?=(sin(θ?mi?),cos(θ?mi?)), b ^ i \hat_{i} b^i?是網絡估計值, 表示該角度屬于第幾個bin, m i m_{i} mi?為第i個bin的中心取值。

觀測角的估計可以通過下面的公式得到, j j j是classfication score較大的那個bin的index。即通過角度所屬bin的中值,加上一個三角函數offset,得到觀測角度。
θ ^ = arctan ? 2 ( a ^ j 1 , a ^ j 2 ) + m j \hat{\theta}=\arctan 2\left(\hat{a}_{j 1}, \hat{a}_{j 2}\right)+m_{j} θ^=arctan2(a^j1?,a^j2?)+mj?

代碼中將角度八元組表示為rot, 后處理時會轉換成觀測角alpha和航向角yaw(又稱rotaition_y,因為相機坐標系的重力軸為y軸,航向角為繞重力軸旋轉時,與參考方向的夾角)

def get_alpha(rot):
    # rot: (B, 8) [bin1_cls[0], bin1_cls[1], bin1_sin, bin1_cos,
    #                 bin2_cls[0], bin2_cls[1], bin2_sin, bin2_cos]
    # return alpha[B, 0]
    idx = rot[:, 1] > rot[:, 5]
    alpha1 = torch.atan2(rot[:, 2], rot[:, 3]) + (-0.5 * 3.14159)
    alpha2 = torch.atan2(rot[:, 6], rot[:, 7]) + (0.5 * 3.14159)
    # return alpha1 * idx + alpha2 * (~idx)
    alpha = alpha1 * idx.float() + alpha2 * (~idx).float()
    return alpha

def alpha2rot_y(alpha, x, cx, fx):
    """
    Get rotation_y by alpha + theta - 180
    alpha : Observation angle of object, ranging [-pi..pi]
    x : Object center x to the camera center (x-W/2), in pixels
    rotation_y : Rotation ry around Y-axis in camera coordinates [-pi..pi]
    """
    rot_y = alpha + np.arctan2(x - cx, fx)
    if rot_y > np.pi:
        rot_y -= 2 * np.pi
    if rot_y < -np.pi:
        rot_y += 2 * np.pi
    return rot_y

為什么這樣進行角度估計

網絡擬合的是觀測角alpha的相關編碼,最后還是要通過相機內參轉換為航向角,那么為什么不直接擬合航向角呢?

因為航向角是相對于世界坐標系的,而觀測角是相對于相機坐標系的。所以網絡擬合的是觀測角,但是最終輸出的是航向角。除了這個原因之外,Bounding box estimation using deep learning and geometry. In CVPR, 2017
的4.1章指出:僅通過目標的圖像估計其全局偏航角是不可能的,并提出了MultiBin Orientation Estimation,CenterNet系列論文均參考了此類方法。

由下圖可以看出,目標的偏航角保持固定的情況下,隨著位移的改變,其局部圖像上看似乎發(fā)生了旋轉,導致相對角度發(fā)生了變化。"看上去"就像汽車在旋轉一樣。這種特性對于CNN而言極其不利,因為如果采用全局偏航角作為ground truth,CNN需要將看上去轉角不同的圖像映射到同一個答案上,即多對一情況,這完全無法訓練出準確的結果。

深入淺出CenterFusion 深入淺出CenterFusion

因此論文采用局部相對角(目標朝向相對相機射線)來作為GT,即通過估計圖中的 θ l \theta_{l} θl?,再通過幾何關系間接得到全局偏航角,圖中為 θ \theta θ。針對 θ l \theta_{l} θl?,采用了MultiBin Orientation Estimation方法,將角度劃分為幾個區(qū)間,預測落在哪個區(qū)間,以及相對區(qū)間的offset。CenterNet系列文章擬合是觀測角 α \alpha α的編碼, α \alpha α與這里的 θ l \theta_{l} θl?存在幾何關系


目標深度估計

利用單目攝像頭直接回歸中心點的深度信息非常困難,CenterNet系列的論文均參考了Depth Map Prediction from a Single Image using a Multi-Scale Deep Network
這一里程碑式的工作, 對網絡輸出的深度標量進行inverse sigmoidal transformation, 用一個單獨的head, 基于L1 Loss對變換后的深度進行回歸。 對網絡估計的深度進行如下轉換后再計算depth loss
d = 1 / σ ( d ^ ) ? 1 d=1 / \sigma(\hatn5n3t3z)-1 d=1/σ(d^)?1
其中 d ^ \hatn5n3t3z d^是網絡估計的深度值, σ \sigma σ是sigmoid函數, d d d是經過轉換的深度值,單位為米。

深度估計的loss定義為:
L d e p = 1 N ∑ k = 1 N ∣ 1 σ ( d ^ k ) ? 1 ? d k ∣ L_{d e p}=\frac{1}{N} \sum_{k=1}^{N}\left|\frac{1}{\sigma\left(\hatn5n3t3z_{k}\right)}-1-d_{k}\right| Ldep?=N1?k=1N? ?σ(d^k?)1??1?dk? ?
其中 d k d_{k} dk?是第k個目標的深度值GT


多模態(tài)數據時間對齊

nuscenes數據集的坐標系及關系如下圖所示

深入淺出CenterFusion

nuscenes數據集已經通過標定數據將radar點云和攝像圖片進行時間對齊,即將radar點云數據投影到全局坐標系下,經過全局坐標系再投影到另一個傳感器下達到時間對齊。借助于全局坐標系(絕對坐標系)進行運動補償,從而完成了不同傳感器之間的時間對齊。 實際工作中需要自己完成這一重要步驟。如有必要,還需要進行點radar云數據疊加,增加radar點云的稠密度

深入淺出CenterFusion
  • radar外參: radar坐標系到ego(車身)坐標系的復合變換矩陣,
  • camera外參: camera坐標系到ego坐標系的復合變換矩陣
  • ego_pose: ego坐標系到全局坐標系的復合變換矩陣

最后的通過矩陣乘法將點云投影到當前幀的坐標系下,從而完成時間對齊

# Fuse four transformation matrices into one and perform transform.
trans_matrix = reduce(np.dot, [ref_from_car, car_from_global, global_from_car, car_from_current])
velocity_trans_matrix = reduce(np.dot, [ref_from_car_rot, car_from_global_rot, global_from_car_rot, car_from_current_rot])
current_pc.transform(trans_matrix)

關于多傳感器數據對齊,可以參考我寫的這篇文章:多傳感器時間同步


毫米波雷達點云的問題

  • 置信度閾值

  • 點云深度信息和目標中心深度不同
    FMCW雷達發(fā)射的毫米波遇到物體表面就進行反射,所以測的徑向距離都是物體表面或反射面到雷達的距離,而視覺算法一般估計的深度信息是物體中心離攝像頭的距離,所以利用camera radar融合時,估計的深度和真實的車輛中心位置存在些許誤差文章來源地址http://www.zghlxwxcb.cn/news/detail-494591.html


REFERENCE

  • CenterFusion
  • CenterFusion(基于CenterNet)源碼深度解讀: :DLA34
  • CenterNet目標檢測模型及CenterFusion融合目標檢測模型
  • CenterFusion 項目網絡架構詳細論述
  • Deep3DBox論文詳解
  • 論文閱讀筆記 之 3D Bounding Box Estimation Using Deep Learning and Geometry
  • Depth Map Prediction from a Single Image using a Multi-Scale Deep Network
  • 多傳感器時間同步

到了這里,關于深入淺出CenterFusion的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 深入淺出線程池

    線程 (thread)是操作系統(tǒng)能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際 運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發(fā)多個線程,每條線 程并行執(zhí)行不同的任務。 既然我們創(chuàng)建了線程,那為何我們直接調用方法和我們調

    2024年02月08日
    瀏覽(24)
  • 隨機森林算法深入淺出

    目錄 一 隨機森林算法的基本原理 二 隨機森林算法的優(yōu)點 1. 隨機森林算法具有很高的準確性和魯棒性 2. 隨機森林算法可以有效地避免過擬合問題 3. 隨機森林算法可以處理高維度數據 4. 隨機森林算法可以評估特征的重要性 三 隨機森林算法的缺點 1. 隨機森林算法對于少量數

    2023年04月08日
    瀏覽(26)
  • Llama深入淺出

    Llama深入淺出

    前方干貨預警:這可能是你能夠找到的 最容易懂 的 最具實操性 的 學習開源LLM模型源碼 的教程。 本例從零開始基于transformers庫 逐模塊搭建和解讀Llama模型源碼 (中文可以翻譯成羊駝)。 并且訓練它來實現(xiàn)一個有趣的實例:兩數之和。 輸入輸出類似如下: 輸入:\\\"12345+54321=\\\"

    2024年02月09日
    瀏覽(30)
  • 深入淺出IAM(1)

    深入淺出IAM(1)

    在本人即將入職的一份基礎架構的工作前,我提前聯(lián)系到了團隊leader并跟他進行了一次1-1。談話中提到了我可能會先上手的一個項目是IAM相關的實現(xiàn),于是趁著入職前的間隙,我學習了部分優(yōu)秀開源IAM項目實現(xiàn)思路以及騰訊云開發(fā)專家孔老師的專欄。 在反復思考和總結提煉后

    2024年02月05日
    瀏覽(34)
  • 深入淺出前端本地儲存

    深入淺出前端本地儲存

    2021 年,如果你的前端應用,需要在瀏覽器上保存數據,有三個主流方案: Cookie Web Storage (LocalStorage) IndexedDB 這些方案就是如今應用最廣、瀏覽器兼容性最高的三種前端儲存方案 今天這篇文章就聊一聊這三種方案的歷史,優(yōu)缺點,以及各自在今天的適用場景 文章在后面還會提

    2024年04月17日
    瀏覽(28)
  • 深入淺出Kafka

    深入淺出Kafka

    這個主題 武哥漫談IT ,作者駱俊武 講得更好 首先我們得去官網看看是怎么介紹Kafka的: https://kafka.apache.org/intro Apache Kafka is an open-source distributed event streaming platform. 翻譯成中文就是:Apache Kafka 是一個開源的分布式流處理平臺。 Kafka 不是一個消息系統(tǒng)嗎?為什么被稱為分布式

    2023年04月11日
    瀏覽(27)
  • 深入淺出 Typescript

    深入淺出 Typescript

    TypeScript 是 JavaScript 的一個超集,支持 ECMAScript 6 標準(ES6 教程)。 TypeScript 由微軟開發(fā)的自由和開源的編程語言。 TypeScript 設計目標是開發(fā)大型應用,它可以編譯成純 JavaScript,編譯出來的 JavaScript 可以運行在任何瀏覽器上。 TypeScript JavaScript JavaScript 的超集,用于解決大型

    2024年02月14日
    瀏覽(38)
  • 深入淺出理解HTTPS

    深入淺出理解HTTPS

    1.對稱密鑰(Symmetric Encryption) 對稱密鑰加密算法使用相同的 密鑰(Symmetric key) 來進行數據 加密(encryption) 和 解密(decryption) 加密和解密過程都使用相同的密鑰,因此 加密速度較快 ,適用于大量數據的加密。 問題在于密鑰的管理:在通信雙方交流之前,需要確保安全地分

    2024年02月10日
    瀏覽(25)
  • 機器學習深入淺出

    目錄 機器學習基本概念 機器學習算法類型 機器學習的實現(xiàn)步驟 機器學習三個基本要素 機器學習相關應用 1.語音識別 2.圖像識別 機器學習是一種人工智能的分支,它使用算法和數學模型來讓計算機自主學習數據并做出預測和決策。這種技術正在被廣泛應用于各種領域,包括

    2023年04月08日
    瀏覽(17)
  • 深入淺出Spring AOP

    深入淺出Spring AOP

    第1章:引言 大家好,我是小黑,咱們今天要聊的是Java中Spring框架的AOP(面向切面編程)。對于程序員來說,理解AOP對于掌握Spring框架來說是超級關鍵的。它像是魔法一樣,能讓咱們在不改變原有代碼的情況下,給程序增加各種功能。 AOP不僅僅是一個編程范式,它更是一種思

    2024年01月20日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包