目標檢測定位損失函數:Smooth L1 loss 、IOU loss及其變體

Smooth L1 Loss

概述

Smooth L1 Loss(平滑 L1 損失),是一個在回歸任務,特別是計算機視覺中的目標檢測領域(如 Faster R-CNN, SSD)非常核心的損失函數。

xxx 表示模型的預測值,yyy 表示真實值,z=x?yz = x - yz=x?y 表示預測值與真實值之間的差異。常用的 L1 loss、L2 Loss 和 smooth L1 loss 定義分別為
L1 loss(MAE):
LL1(x,y)=∣x?y∣=∣z∣L_{L1}(x,y) = |x - y| = |z|LL1?(x,y)=x?y=z
L2 loss(MSE):
LL2(x,y)=0.5(x?y)2=0.5z2L_{L2}(x,y) = 0.5(x - y)^2 =0.5z^2LL2?(x,y)=0.5(x?y)2=0.5z2
Smooth L1 Loss:
LsmoothL1(x,y)={0.5(x?y)2=0.5z2,if?∣x?y∣<1∣x?y∣?0.5=∣z∣?0.5,otherwiseL_{smoothL1}(x,y)=\begin{cases} 0.5(x-y)^2 = 0.5z^2, & \text{if } |x-y|<1 \\|x-y|-0.5= |z|-0.5, & \text{otherwise} \end{cases}LsmoothL1?(x,y)={0.5(x?y)2=0.5z2,x?y?0.5=z?0.5,?if?x?y<1otherwise?
函數坐標圖如下:橫軸為z,縱坐標為損失loss
smooth_L1_loss

  • L1 loss 在零點處不可導(梯度不連續),且收斂速度較慢。L1 loss 對 zzz的導數為常數,在訓練后期,誤差值zzz很小時,如果 learning rate 不變,損失函數會在穩定值附近波動,很難收斂到更高的精度。
  • L2 loss 當預測值與真實值差距很大時,由于平方項的存在,損失值會變得非常大,梯度也很大,容易導致訓練不穩定(梯度爆炸)
  • Smooth L1 Loss 的設計目的就是為了避開了 L1 loss 和 L2 loss 的缺點。它在誤差較小的區域使用像 L2 loss這樣的二次函數,保證梯度平滑且逐漸減小;而在誤差較大的區域使用像 L1 loss這樣的線性函數,限制梯度的大小,從而對異常值不那么敏感。

Smooth L1 Loss 的梯度函數是:
ddzsmoothL1={z,if?∣z∣<1+1或?1,otherwise\frac{d}{dz} {smoothL1}=\begin{cases} z, & \text{if } |z|<1 \\+1 或-1, & \text{otherwise} \end{cases}dzd?smoothL1={z,+1?1,?if?z<1otherwise?

  • 小誤差∣z∣<1|z|<1z<1時,即當預測值接近真實值時,梯度很小,參數更新幅度小,有利于模型收斂和精細化。且梯度是連續變化的,訓練過程非常穩定。
  • 大誤差∣z∣≥1|z| \geq 1z1時,即使預測結果非常離譜,梯度也不會爆炸(不會像L2 loss那樣變化巨大),避免了因個別異常樣本而導致訓練過程劇烈波動,增強了訓練的魯棒性。

目標檢測中的應用

在目標檢測中,網絡需要預測目標邊界框(Bounding Box)的精確坐標(中心點 x, y,寬 w, 高 h)。這是一個典型的回歸任務。

  • 如果使用 L2 Loss,當某個坐標的預測初值離真實值很遠時,會產生巨大的損失和梯度,這會主導整個訓練過程,使得模型難以收斂到好的結果。
  • Smooth L1 Loss 對初值不準的預測框更加寬容,提供了穩定且有限的梯度,使得模型能夠逐步修正框的位置,而不是被異常值帶偏。Faster R-CNN 和 SSD 等經典模型都使用了 Smooth L1 Loss 作為邊界框回歸的損失函數。

Smooth L1 Loss 完美地權衡了訓練的穩定性(對抗異常值)和收斂的有效性(小誤差時梯度精細),使其成為需要高精度回歸任務(如目標檢測)的理想選擇。

函數接口

在 PyTorch 中,Smooth L1 Loss 通過 nn.SmoothL1Loss 類實現

torch.nn.SmoothL1Loss(size_average=None,reduce=None,reduction='mean',beta=1.0
)
  • reduction (str, optional): 指定損失的聚合方式,可選 ‘none’、‘mean’(默認值)或 ‘sum’。
  • beta (float, optional): 一個超參數,指定從二次函數切換到線性函數的閾值。默認值為 1.0,即上面公式中的切換點。修改 beta 可以調整損失函數對“大誤差”和“小誤差”的定義。
import torch
import torch.nn as nn# 創建損失函數
# reduction='mean':計算所有元素損失的平均值
smooth_l1_loss = nn.SmoothL1Loss(reduction='mean')# 假設預測值和真實值
# 例如:預測了4個邊界框的偏移量
predictions = torch.tensor([1.6, 0.2, -2.0, 0.8])
targets = torch.tensor([1.0, 0.0, -1.0, 1.0])# 計算損失
loss = smooth_l1_loss(predictions, targets)
print(loss)# 手動計算驗證:
# x = predictions - targets = [0.6, 0.2, -1.0, -0.2]
# |x| = [0.6, 0.2, -1.0, 0.2] -> 全部小于beta(1.0),所以都用 0.5*x^2
# loss = (0.5*0.6^2 + 0.5*0.2^2 + 0.5*(-1.0)^2 + 0.5*(-0.2)^2) / 4
#      = (0.18 + 0.02 + 0.5 + 0.02) / 4
#      = 0.72 / 4 = 0.18

IOU loss

概述

在目標檢測中,最常用的評估模型好壞的指標就是 IOU。它衡量的是預測邊界框(Bounding Box)與真實邊界框之間的重疊程度。

傳統的L1 loss,L2 loss,Smooth L1 loss存在如下問題:

  • 通過優化邊界框的坐標(x, y, w, h)來間接優化IOU,但坐標誤差最小并不總是等同于 IOU 最大化,這樣就導致了不一致性。
  • 通過4個點回歸坐標框的方式是假設 4個坐標點是相互獨立的,沒有考慮其相關性,而實際上 4個坐標點具有一定的相關性。
  • 基于 L1 和 L2 距離的 loss 不具有尺度不變性

IOU Loss 的解決方案:既然最終評估標準是 IOU,那就直接使用 IOU 作為損失函數來指導模型的優化方向。使模型的訓練目標(損失最小化)
最終的評估目標(IOU 最大化) 實現統一。

IOU loss的計算

對于兩個區域(通常是預測框 B_pred 和真實框 B_gt)
IOU計算如下:
IOU=Area?of?OverlapArea?of?Union=Bpred∩BgtBpred∪Bgt\text{IOU} = \frac{\text{Area of Overlap}}{\text{Area of Union}} = \frac{B_{pred} \cap B_{gt}}{B_{pred} \cup B_{gt}}IOU=Area?of?UnionArea?of?Overlap?=Bpred?Bgt?Bpred?Bgt??

IOU 的取值范圍是 [0, 1]:1表示兩個框完全重合;0表示兩個框沒有交集

IOU loss 就是將IOU 轉化為損失。損失越低越好,IOU越高越好,所以IOU loss如下計算:
LIOU=1?IOU\mathcal{L}_{IOU} = 1 - IOULIOU?=1?IOU

IOU = 1(完美預測)時,損失為 0。IOU = 0(毫無交集)時,損失為 1

優點

  • 尺度不變性:IOU 是一個比值,它只關心重疊區域的比例,而不關心框的絕對大小。這意味著它對大小不同的目標物是公平的。
  • 與評估指標一致:直接優化 IOU 使得模型訓練過程更直接地對最終的評價指標負責。

缺點

  • 最核心問題是無法處理不相交的情況。如果兩個框沒有交集,則 IOU = 0,損失恒為 1。此時梯度為 0,無法為模型提供如何移動預測框以與真實框相交的梯度信息,導致模型無法學習。
  • 無法區分不同方式的重合不良。IOUIOUIOU值不能反映兩個框是如何相交的,即使兩個框的 IOUIOUIOU值是相同的,其相交方式也可能很不一樣。只要 IOU 相同,損失就是相同的。
def calculate_iou(box1, box2):"""計算兩個框的IoUArgs:box1: (tensor) [x1, y1, x2, y2]box2: (tensor) [x1, y1, x2, y2]Returns:iou: (tensor) scalar"""# 計算交集區域的坐標x1 = torch.max(box1[0], box2[0])y1 = torch.max(box1[1], box2[1])x2 = torch.min(box1[2], box2[2])y2 = torch.min(box1[3], box2[3])# 計算交集面積intersection_area = torch.clamp(x2 - x1, min=0) * torch.clamp(y2 - y1, min=0)# 計算各自面積box1_area = (box1[2] - box1[0]) * (box1[3] - box1[1])box2_area = (box2[2] - box2[0]) * (box2[3] - box2[1])# 計算并集面積union_area = box1_area + box2_area - intersection_area# 避免除零iou = intersection_area / (union_area + 1e-6)return ioudef iou_loss(pred_boxes, target_boxes):"""計算IoU LossArgs:pred_boxes: (tensor) [N, 4] (x1, y1, x2, y2)target_boxes: (tensor) [N, 4] (x1, y1, x2, y2)Returns:loss: (tensor) scalar"""ious = torch.stack([calculate_iou(pred, tgt) for pred, tgt in zip(pred_boxes, target_boxes)])loss = 1 - iousreturn loss.mean() # 使用mean reduction# 使用示例
preds = torch.tensor([[100, 100, 200, 200], [50, 50, 150, 150]], dtype=torch.float32)
targets = torch.tensor([[110, 110, 210, 210], [60, 60, 160, 160]], dtype=torch.float32)loss = iou_loss(preds, targets)
print(f"IoU Loss: {loss}")

IOU loss的變體

為解決IOU loss 的缺陷,在原始IOU 基礎上提出了一系列先進的變體。如GIOU,DIOU,CIOU等等。

通常以IOU為基礎的變體IOU loss可以定義為
L=1?IoU+R(B,Bgt)L =1- IoU + R(B, B_{gt})L=1?IoU+R(B,Bgt?)
其中:

  • BBB : 表示預測框
  • BgtB_{gt}Bgt? :表示目標框
  • R(B,Bgt)R(B, B_{gt})R(B,Bgt?) : 表示預測框 BBB 和 目標框 BgtB_{gt}Bgt? 的懲罰項

GIOU loss

即使兩個框不相交,也需要提供一個梯度方向。GIOU 在 IOU 的基礎上引入了一個最小封閉矩形框 C(能夠同時包含預測框和真實框的最小矩形),它不僅考慮了邊界框之間的重疊程度,還考慮了bboxes 之間的位置和尺寸。
GIoU=IoU?C?(A∪B)∣C∣GIoU = IoU - \frac{C - (A \cup B)}{|C|}GIoU=IoU?CC?(AB)? ,其中,C 是 A 和 B 的外接矩形框面積
GIoULoss=1?GIoUG{IoU Loss} = 1- GIoUGIoULoss=1?GIoU
即 :
LGIoU=1?IoU+C?(A∪B)∣C∣L_{GIoU} = 1 - IoU + \frac{C - (A \cup B)}{|C|}LGIoU?=1?IoU+CC?(AB)?

其中:
0≤=IoU<=10≤= IoU <=10≤=IoU<=1
0<=C?(A∪B)C<10 <= \frac{C - (A \cup B)}{C} <10<=CC?(AB)?<1

  • 當 A 和 B 完全重合時:
    IoU=1,??C?(A∪B)C=0IoU = 1, \; \frac{C - (A \cup B)}{C} =0IoU=1CC?(AB)?=0 →\rightarrow GIoU=1,GIoU_Loss=0GIoU = 1, GIoU\_Loss=0GIoU=1GIoU_Loss=0
  • 當 A,B 完全不重疊時( A,B 距離無窮遠的時候):
    IoU=0,C?(A∪B)C趨近于1IoU=0,\frac{C - (A \cup B)}{C}趨近于 1IoU=0CC?(AB)?趨近于1 →\rightarrow GIoU=?1,GIoU_Loss=2GIoU = -1, GIoU\_Loss=2GIoU=?1GIoU_Loss=2

優點
解決了不相交時梯度為 0 的問題。即使不相交,模型也會學習朝著最小封閉框 C 的中心移動預測框,以減小附加項,從而促使兩個框先發生交集。
GIOU 是 IOU 的一個下界,GIOU≤IOU\text{GIOU} \leq \text{IOU}GIOUIOU
缺點
當兩個框包含(如一個框在另一個框內部)時,GIOU 會退化成 IOU,此時提供的移動方向仍然比較模糊。

DIOU loss

DIOU loss 直接最小化兩個框中心點之間的距離。這樣可以為模型的優化提供一個非常明確且高效的方向。
DIOU loss的計算公式如下:
LDIoU=1?IoU+ρ2(b,bgt)c2 L_{DIoU} = 1 - IoU + \frac{\rho^2(b, b_{gt})}{c^2} LDIoU?=1?IoU+c2ρ2(b,bgt?)?
其中:
ρ(b,bgt)\rho(b, b_{gt})ρ(b,bgt?) 表示預測框與真實框中心點之間的歐式距離。
b,bgtb, b_{gt}b,bgt? 分別表示預測框的中心點,真實框的中心點。
ccc 表示真實框與預測框的最小外接矩形框的對角線長度。

優點

  • 具有尺度不變性 : 由于ρ2(b,bgt)c2\frac{\rho ^2(b, b_{gt})}{c^2}c2ρ2(b,bgt?)?是一個相對度量,不直接依賴于框的具體寬度和高度,所以在不同尺度下仍能保持一致的度量標準,這種尺度不變性有助于提高檢測的準確性和魯棒性。
  • 當兩個框完全重合時,LIoU=LGIoU=LDIoU=0L_{IoU} = L_{GIoU} = L_{DIoU} = 0LIoU?=LGIoU?=LDIoU?=0
  • 當兩個框不相交時,DIoU Loss 可以直接優化 2個框之間的距離,比 GIoU Loss 收斂速度更快
  • 對于兩個框包含的情況,DIoU Loss 可以收斂的很快,而 GIoU Loss此時退化為IoU Loss收斂速度較慢

缺點
DIoU 能夠直接最小化預測框和真實框的中心點距離加速收斂,但是未考慮到高寬比。
如下圖所示:紅色為預測框,藍色為真實框。三個紅框的面積相同,紅框與藍框中心點重合,但是紅框的長寬比不一樣,三種情況下的DIoU相同,但顯然中間的更擬合真實框。
在這里插入圖片描述

CIOU loss

由于DIOU loss忽略了寬高比的一致性,CIoU 在 DIoU 的基礎上增加了一個懲罰項,同時考慮重疊面積、中心點距離和寬高比。
LCIoU=1?IoU+ρ2(b,bgt)c2+αv L_{CIoU} = 1 - IoU + \frac{\rho^2(b, b_{gt})}{c^2} + \alpha v LCIoU?=1?IoU+c2ρ2(b,bgt?)?+αv
其中:
vvv 衡量長寬比一致性的參數 : v=4π2(arctanwgthgt?arctanwh)2v = \frac{4}{\pi^2}(arctan \frac{w_{gt}}{h_{gt}} - arctan \frac{w}{h})^2v=π24?(arctanhgt?wgt???arctanhw?)2
α\alphaα 是權重平衡因子,調整長寬比的影響 : α=v(1?IoU)+v\alpha = \frac{v}{(1-IoU)+v}α=(1?IoU)+vv?

優點
考慮影響因素相對全面,考慮到了定位損失的三個重要的因素 : 重疊面積、中心點距離、高寬比。

缺點
αv\alpha vαv這一項的設計,導致拖累了收斂速度。

  • vvv 僅反映了高寬比的差異性,高寬比一致則v=0v=0v=0,這樣的設計存在缺陷。 比如真實框的 wgt=8,hgt=4,wgthgt=2w_{gt}=8,h_{gt}=4,\frac{w_{gt}}{h_{gt}}=2wgt?=8,hgt?=4hgt?wgt??=2 ,而預測出的 w=6,h=3,wh=2w=6,h=3, \frac{w}{h}=2w=6,h=3,hw?=2 ,此時v=0v=0v=0
  • vvv只反映了高寬比的差異,并沒有分別反映出 wgtw_{gt}wgt?www 之間的關系,以及 hgth_{gt}hgt?hhh 之間的關系,這導致其收斂方向不夠明確,CIOU損失可能會向不合理的方向優化。
  • vvvwwwhhh 的偏導數分別如下 :
    ?v?w=8π2(arctanwgthgt?arctanwh)?hw2+h2\frac{\partial v}{\partial w} = \frac{8}{\pi^2}(arctan \frac{w_{gt}}{h_{gt}}- arctan \frac{w}{h}) * \frac{h}{w^2+h^2}?w?v?=π28?(arctanhgt?wgt???arctanhw?)?w2+h2h?
    ?v?h=?8π2(arctanwgthgt?arctanwh)?ww2+h2\frac{\partial v}{\partial h} = - \frac{8}{\pi^2}(arctan \frac{w_{gt}}{h_{gt}}- arctan \frac{w}{h}) * \frac{w}{w^2+h^2}?h?v?=?π28?(arctanhgt?wgt???arctanhw?)?w2+h2w?
    由2個偏導數,可以得出 : ?v?w=?hw??v?h\frac{\partial v}{\partial w} = -\frac{h}{w} \cdot \frac{\partial v}{\partial h}?w?v?=?wh???h?v?
    ?v?w\frac{\partial v}{\partial w}?w?v??v?h\frac{\partial v}{\partial h}?h?v? 的符號是相反的,只要 wwwhhh 其中一個的值增加,另一個就會減小,即寬高是相互耦合的。當w<wgt????且????h<hgtw \lt w^{gt} \;\; 且 \;\;h \lt h^{gt}w<wgth<hgt時或者 w>wgt????且????h>hgtw \gt w^{gt} \;\; 且 \;\;h \gt h^{gt}w>wgth>hgt 時可能無法快速收斂。

EIOU loss

EIoU Loss 將 CIoU 中的寬高比損失項 vvv 解耦,直接拆分為分別針對寬度和高度的損失。
LEIoU=LIoU+Ldis+Lasp=1?IoU+ρ2(b,bgt)(wc)2+(hc)2+ρ2(w,wgt)(wc)2+ρ2(h,hgt)(hc)2\begin{align} L_{EIoU} &= L_{IoU} + L_{dis} + L_{asp}\notag \\ \notag \\&= 1-IoU + \frac{\rho^2 (b,b_{gt})}{(w_c)^2+(h_c)^2} + \frac{\rho^2(w,w_{gt})}{(w_c)^2} + \frac{\rho^2(h,h_{gt})}{(h_c)^2} \notag \\ \end{align}LEIoU??=LIoU?+Ldis?+Lasp?=1?IoU+(wc?)2+(hc?)2ρ2(b,bgt?)?+(wc?)2ρ2(w,wgt?)?+(hc?)2ρ2(h,hgt?)???
其中:

  • bbbbgtb_{gt}bgt? :分別表示預測框的中心點和真實框的中心點
  • ρ(b,bgt)\rho (b, b_{gt})ρ(b,bgt?):表示真實框與預測框中心點之間的歐式距離
  • wcw_cwc?hch_chc?:分別表示最小外接矩形框的寬度和高度

優點:

  • 更直接的收斂目標:直接最小化寬度和高度的差異,為模型提供了更清晰、更直接的優化方向。
  • 更快的收斂速度:由于梯度計算更直接,EIoU 通常比 CIoU 收斂得更快。
  • 更高的定位精度:在許多基準測試中,EIoU 都展現出了比 CIoU 更優的邊界框回歸精度。

Focal-EIoU loss

Focal-EIoU Loss 的思想源于 Focal Loss(最初用于解決分類中的類別不平衡問題)。在目標檢測中,也存在“樣本不平衡”問題:簡單樣本(IOU 高的樣本)和困難樣本(IOU 低的樣本)的數量不平衡。

問題:在一個訓練批次中,大部分邊界框回歸樣本是“簡單”的(即 IoU 已經較高),只有少數是“困難”的(IoU 低)。標準的 IoU 損失對所有這些樣本一視同仁,導致簡單樣本的損失貢獻主導了總損失,模型難以集中精力去學習那些困難的、回歸得不好的樣本。
思路:借鑒 Focal Loss 的思路,降低簡單樣本的權重,讓損失函數更加關注難以回歸的樣本。
Focal-EIoU Loss 在 EIoU Loss 的基礎上增加了一個聚焦系數
LFocal?EIoU=IoUγ?LEIoU{L}_{Focal-EIoU} = IoU^{\gamma} \cdot {L}_{EIoU}LFocal?EIoU?=IoUγ?LEIoU?

其中:
LEIoU{L}_{EIoU}LEIoU?:計算的 EIoU 損失。
γ\gammaγ:聚焦參數(通常 γ>0\gamma > 0γ>0),用于調節權重衰減的速率。
IoUγIoU^{\gamma}IoUγ:聚焦因子,IoUIoUIoU 的值在 [0, 1] 之間。

工作機制

  • 對于一個困難樣本(IoU → 0):IoUγ≈0IoU^{\gamma} \approx 0IoUγ0,但 LEIoU{L}_{EIoU}LEIoU? 很大(接近 1)。最終的損失 LFocal?EIoU{L}_{Focal-EIoU}LFocal?EIoU? 仍然很大,模型會重點關注這個樣本。
  • 對于一個簡單樣本(IoU → 1):IoUγ≈1IoU^{\gamma} \approx 1IoUγ1,但 LEIoU{L}_{EIoU}LEIoU? 很小(接近 0)。最終的損失 LFocal?EIOU{L}_{Focal-EIOU}LFocal?EIOU? 會變得更小,從而降低了簡單樣本在總損失中的權重。

優點:

  • 解決回歸樣本不平衡:顯著提升模型對困難樣本的回歸能力。
  • 進一步提升性能:在 EIOU 的基礎上,通常能獲得更高的檢測精度(mAP)。
  • 即插即用:Focal 的思想可以遷移到其他 IOU 變體(如 Focal-CIOU)進行結合使用。

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

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

相關文章

Android開發之fileprovider配置路徑path詳細說明

第一步在清單文件配置fileprovider屬性<providerandroid:name"androidx.core.content.FileProvider"android:authorities"${applicationId}.fileprovider"android:exported"false"android:grantUriPermissions"true"><meta-d…

【ComfyUI】圖像描述詞潤色總結

在 ComfyUI 的工作流中&#xff0c;圖像反推描述詞能幫我們從圖像里抽取語義信息&#xff0c;但這些原始描述往往還顯得生硬&#xff0c;缺乏創意或流暢性。為了讓提示詞更自然、更有表現力&#xff0c;就需要“潤色”環節。潤色節點的任務&#xff0c;不是重新生成描述&#x…

java面試中經常會問到的IO、NIO問題有哪些(基礎版)

文章目錄一、IO 基礎與分類二、NIO 核心組件與原理三、NIO 與 BIO 的實戰對比四、AIO 與 NIO 的區別五、Netty 相關&#xff08;NIO 的高級應用&#xff09;總結Java 中的 IO&#xff08;輸入輸出&#xff09;和 NIO&#xff08;非阻塞 IO&#xff09;是面試中的重要考點&#…

時序數據庫選型指南:如何為工業場景挑選最強“數據底座”

工業4.0時代&#xff0c;工廠化身為巨大的數據生產中心。數以萬計的傳感器、PLC和設備每時每刻都在產生著海量的時間序列數據&#xff08;Time-Series Data&#xff09;&#xff1a;溫度、壓力、流速、振動、設備狀態……這些帶時間戳的數據是工業互聯網的血液&#xff0c;蘊含…

【排序算法】冒泡 選排 插排 快排 歸并

一、冒泡排序// 冒泡排序var bubbleSort function (arr) {const len arr.length;for (let i 0; i < len; i) {let isSwap false;for (let j 0; j < len - 1; j) {// 每一次遍歷都要比較相鄰元素的大小&#xff0c;如果滿足條件就交換位置if (arr[j] > arr[j 1])…

電子病歷空缺句的語言學特征描述與自動分類探析(以GPT-5為例)(中)

語言學特征刻畫(特征庫) 句法特征 句法特征是識別 SYN 類電子病歷空缺句的核心語言學維度,其量化分析通過構建依存句法結構的形式化指標,實現對語法不完整性的客觀描述。該類特征主要包括依存樹不完備指標、謂詞-論元覆蓋率及從屬連詞未閉合三類核心參數,共同構成 SYN 類…

InnoDB存儲引擎-事務

1. 事務概述事務可由一條簡單的SQL語句組成,也可以由一組復雜的SQL語句組成. 事務是訪問并更新數據庫中各種數據項的一個程序執行單元. 在事務中的操作, 要么都做修改, 要么都不做. 對于 InnoDB存儲引擎而言, 其默認的事務隔離級別 RR , 完全遵循和滿足了事務的 ACID 特性. 1.1…

web項目的目錄結構

web項目的目錄結構 WEB-INF 存放class文件、jar文件和配置文件&#xff0c;對于用戶來說該文件夾是不可見的WEB-INF/web.xml web應用程序的描述文件&#xff0c;用來配置資源&#xff0c;如servlet、過濾器、監聽器等WEB-INF/classes 用于存放class文件&#xff0c;也是該web應…

數據結構_隊列Queue(C語言實現)

一、隊列的基本概念 1.隊列定義 隊列是一種先進先出的線性表數據結構&#xff08;First in First out&#xff09;,現實中的例子就是&#xff0c;排隊購票&#xff0c;先排隊的先購票&#xff0c;購完票之后直接從這個隊中離開&#xff0c;后來的在這個隊后面排隊&#xff0c;這…

C++對CPU緩存的合理利用

緩存體系 在計算機的體系結構中,存儲速度是分了好幾層: CPU緩存,又分成了L1/L2/L3等多層緩存,我們暫時看成同一層。訪問速度最快 內存,訪問速度次之,大概是CPU緩存的幾十分之一 硬盤,訪問速度最慢,是內存訪問速度的幾十分之一 所以,在計算機體系結構中,把下一層的數…

貝葉斯定理:理解概率更新與實際場景應用

貝葉斯定理及其應用&#xff1a;從基礎到實戰 貝葉斯定理&#xff08;Bayes’ Theorem&#xff09;是概率論中最基礎也是最強大的工具之一。它通過將先驗知識與新證據結合&#xff0c;能夠幫助我們在不確定的情況下做出更加精準的判斷。本文將從貝葉斯定理的核心概念、公式開始…

組件之間的傳遞參數傳遞(常用父向子傳遞)

現在&#xff0c;有子組件<MdsWxSourceDetailref"mdsWx":rank-obj"activeRankObj":media-name"activeObj.mediaName" :error-info"activeErrorInfo" ></MdsWxSourceDetail>以上代碼在MdsIndexRankDetail&#xff0…

java畢業設計-基于springboot區塊鏈的電子病歷數據共享平臺設計與實現(附源碼數據庫文檔資料)

博主介紹&#xff1a;??碼農一枚 &#xff0c;專注于大學生項目實戰開發、講解和畢業&#x1f6a2;文撰寫修改等。全棧領域優質創作者&#xff0c;博客之星、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java、小程序技術領域和畢業項目實戰 ??技術范圍&#xff1a;&am…

【新啟航】3D 逆向抄數的三維能力架構:數據采集工具操作 × 幾何處理算法應用 × 行業場景適配技能

摘要3D 逆向抄數的落地效果依賴多維度能力協同&#xff0c;本文提出 “數據采集工具操作 - 幾何處理算法應用 - 行業場景適配技能” 的三維能力架構。通過拆解各維度核心要素&#xff0c;分析數據采集工具&#xff08;激光、結構光等&#xff09;的操作要點&#xff0c;解析幾何…

RocksDB 在 macOS M 系列 上運行時報錯的解決方案

問題現象 項目中引入可Kafka Stream &#xff0c;Windows下啟動不報錯 &#xff0c;但是在 macOS M系列 環境下就會報錯&#xff0c;初步定位是使用 Java 項目調用 RocksDB 時&#xff0c;運行過程中出現以下報錯&#xff1a; UnsatisfiedLinkError: no rocksdbjni in java.lib…

深度學習之第五課卷積神經網絡 (CNN)如何訓練自己的數據集(食物分類)

簡介 之前一直使用的是現有人家的數據集&#xff0c;現在我們將使用自己的數據集進行訓練。 基于卷積神經網絡 (CNN) 的 MNIST 手寫數字識別模型 一、訓練自己數據集 1.數據預處理 我們現在有這樣的數據集如下圖&#xff1a; 每一個文件夾里面有著對應的圖片。我們要將這些…

【Big Data】AI賦能的ClickHouse 2.0:從JIT編譯到LLM查詢優化,下一代OLAP引擎進化路徑

目錄 1. 什么是ClickHouse&#xff1f; 2. 誕生背景與發展歷程 3. 架構設計解析 3.1 存儲引擎&#xff1a;MergeTree家族 3.2 分布式模型&#xff1a;分片與副本 3.3 執行流程&#xff1a;向量化與并行計算 4. 解決的問題與適用場景 4.1 典型問題 4.2 適用場景 5. 關…

Vue實踐篇-02,AI生成代碼

問題描述這個是需求&#xff1a;動態表格、表格里邊下拉框&#xff0c;彈框選擇基礎的列表&#xff0c;還行&#xff0c;這種真的是一時不知如何是好。打算晚上吃了飯找前端同事&#xff0c;幫忙看看。晚飯前&#xff0c;AI一下看看。結果&#xff0c;驚為天人&#xff01;&…

2025-08-28-zabbix5.0創建監控項通過腳本簡單實現監控oracle11g的磁盤組和表空間的使用量

title: zabbix5.0創建監控項通過腳本簡單實現監控oracle11g的磁盤組和表空間的使用量 authors: Loong date: 2025-08-28使用SQLPLUS配合crontab任務 用來執行sql獲取信息的腳本 /home/oracle/zabbix_oracle_check.sh #!/bin/bash #用于zabbix agent被動模式的 非入侵性的檢測 #…

MySQL-Redo Log(重做日志)

MySQL 的 Redo Log&#xff08;重做日志&#xff09;是 InnoDB 存儲引擎的核心組件之一&#xff0c;是保證數據庫持久性&#xff08;Durability&#xff09; 和崩潰恢復&#xff08;Crash Recovery&#xff09; 的關鍵機制。1. 什么是 Redo Log&#xff1f;它的核心作用是什么&…