1. 度量学习:三元组损失 (Triplet Loss)
重识别的核心是让同一目标在特征空间中聚类,让不同目标分离。三元组损失形式化为:
Ltriplet=i=1∑N[∥f(xia)−f(xip)∥22−∥f(xia)−f(xin)∥22+α]+
其中:
- xia:锚点 (Anchor) 样本
- xip:正样本 (Positive),与锚点同一鱼类
- xin:负样本 (Negative),不同鱼类
- α:间距超参数 (margin),通常取 0.3
- [⋅]+:ReLU 截断,确保损失非负
余弦相似度变体
在水下场景中,光照变化剧烈,我们改用余弦距离:
dcos(fi,fj)=1−∥fi∥2⋅∥fj∥2fi⋅fj
实验表明在 FishDataset-v2 上较欧氏距离 mAP 提升 +3.2%。
2. 卡尔曼滤波:BoT-SORT 运动预测
BoT-SORT 使用线性卡尔曼滤波对目标做帧间运动预测,状态向量定义为:
x=[cx,cy,w,h,c˙x,c˙y,w˙,h˙]⊤
预测步骤 (Predict):
x^k∣k−1=Fxk−1∣k−1
Pk∣k−1=FPk−1∣k−1F⊤+Q
更新步骤 (Update):
Kk=Pk∣k−1H⊤(HPk∣k−1H⊤+R)−1
xk∣k=x^k∣k−1+Kk(zk−Hx^k∣k−1)
Pk∣k=(I−KkH)Pk∣k−1
其中 Q 为过程噪声协方差,R 为观测噪声协方差,水下场景中二者均需根据水流扰动幅度自适应调整。
3. 匈牙利算法:最优代价匹配
给定检测框集合 D={d1,…,dm} 与轨迹集合 T={t1,…,tn},代价矩阵 C∈Rm×n 定义为 IoU 与外观距离的加权融合:
Cij=λ⋅(1−IoUij)+(1−λ)⋅dcos(fdi,ftj)
匈牙利算法求解最优二分匹配:
σ∗=argσ∈Snmini=1∑mCi,σ(i)
时间复杂度为 O(n3),在实时场景中(目标数 n≤50)完全可接受。
4. 量化结果
| 指标 | 基线 (DeepSORT) | BoT-SORT + Re-ID | 提升 |
|---|
| MOTA | 74.3% | 82.1% | +7.8% |
| IDF1 | 68.9% | 79.4% | +10.5% |
| mAP@0.5 | 81.2% | 87.6% | +6.4% |
| FPS (Jetson Orin) | 31 | 23 | -8 FPS |
吞吐量下降来自 Re-ID 特征提取的额外计算,通过 TensorRT FP16 量化可恢复至 28 FPS。