From 8b3955fd7a046fe4a5f495bf5e96d7d10b5534eb Mon Sep 17 00:00:00 2001 From: duxin Date: Wed, 29 Jul 2026 10:51:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8E=A8=E7=90=86=E7=AB=AF=20DualStream?= =?UTF-8?q?=5FMNF=20=E7=9B=B4=E9=80=9A=20Pipeline=20=E2=80=94=20=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E8=B5=B0=E6=97=A7=E9=87=8D=E9=87=87=E6=A0=B7+WQI?= =?UTF-8?q?=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 训练时 Pipeline 保存了完整 MNFTransformer(mean_/W_mnf_) 和 PhysicalFeatureExtractor(wavelengths/_feat_cols_) - 推理端新增快速通道:检测到 DualStream_MNF 时,直接调用 Pipeline 的 imputer.transform + preproc.transform,复用训练时 fit 好的变换矩阵,无需手动光谱重采样和 WQI 补齐 - 旧模型(非 DualStream_MNF)保持原有逻辑不变 --- src/core/prediction/inference_batch.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/core/prediction/inference_batch.py b/src/core/prediction/inference_batch.py index 3072d25..4767d22 100644 --- a/src/core/prediction/inference_batch.py +++ b/src/core/prediction/inference_batch.py @@ -475,6 +475,21 @@ class WaterQualityInference: model = self.loaded_model_data['model'] metadata = self.loaded_model_data.get('metadata', {}) + + # ═══════════════════════════════════════════════════════════ + # ★ DualStream_MNF 快速通道:Pipeline 已内置 MNF + 物理指数 + # 无需手动重采样或 WQI 补齐,直接走 Pipeline 的 preproc 步骤 + # ═══════════════════════════════════════════════════════════ + if actual_preprocess_method == "DualStream_MNF" and isinstance(model, Pipeline): + print("[DualStream_MNF] 推理直通 Pipeline(MNF+物理指数已内置)") + # Pipeline 的 imputer + preproc 步骤会处理一切 + spectra_processed = model.named_steps['imputer'].transform(spectra.values) + spectra_processed = model.named_steps['preproc'].transform(spectra_processed) + spectra_processed = np.nan_to_num(spectra_processed, nan=0.0, posinf=0.0, neginf=0.0) + print(f"[DualStream_MNF] 预处理完成: {spectra_processed.shape}") + print(f"[特征对齐] 最终输入维度: {spectra_processed.shape}") + return spectra_processed + train_wavelengths = metadata.get('train_wavelengths', None) # 旧模型无 train_wavelengths → 不做波长匹配,走下方分支 B 的 linspace 路径 train_columns = metadata.get('train_columns', None)