|
|
32832f122d
|
perf: 水域掩膜改为分块生成 + GDAL 原生栅格化,消除全幅驻留
ndwi() 走新增的 generate_water_mask_chunked:按块读取 float32 计算 NDWI 并直接写盘,替代 calculate_NDWI + extract_water 的全幅浮点流程(峰值内存 10GB+)。分母为 0 的像元置 NaN,保持与原 extract_water 一致的 ignore 语义。
rasterize_shp 重写为 GDAL RasterizeLayer 原生烧录,消灭 Python 双重循环。因直接烧入 ENVI driver 会静默失败,ENVI(.dat/.bil/.bsq) 输出先烧到临时 GTiff 载体再 CreateCopy 转格式。
掩膜输出 dtype 收紧为 GDT_Byte(二值省 4 倍空间),格式跟随扩展名:.tif/.tiff 写 GTiff+LZW,其余沿用项目 ENVI 惯例。
保留 calculate_NDWI / extract_water 兼容层并标注废弃,仅供旧脚本直接 import。
|
2026-09-15 10:34:39 +08:00 |
|
|
|
abc8fe5694
|
fix: 修复 GTiff 输出缺失 .hdr 导致的波长元数据断链
copy_hdr_info 原实现要求目标 .hdr 已存在,但 GTiff/BIGTIFF 输出时 GDAL 不会自动生成 .hdr,导致波长信息丢失、下游采样无法解析波段。
改为:源 .hdr 候选路径兼容 x.hdr / x.bip.hdr / x.HDR 等多种命名;目标无 .hdr 时直接以源 .hdr 为基底旁置创建,已存在时仍走 write_fields_to_hdrfile 合并逻辑。
|
2026-09-15 10:34:36 +08:00 |
|
|
|
f97527598d
|
feat: 各步骤产物改为原子化落盘,复用前校验 .done 完成标记
跳过条件从 Path.exists() 改为 is_file_complete(),产物成功落盘后统一补 mark_file_complete()。涉及 step1 水域掩膜、step3 去耀斑、SHP 栅格化缓存三处快路径。
step3 去耀斑新增清理分支:无 .done 标记的旧文件一律视为半成品,先删除再重跑(Kutser/Goodman/Hedley/SUGAR 四种方法一致)。
模型落盘改为 atomic_filepath:modeling_batch 批量建模与 automl_trainer 的 AutoML 结果均先写 .__wip 再原子替换,避免中断产生半个 joblib 文件。
|
2026-09-15 10:34:34 +08:00 |
|
|
|
75c74c644d
|
feat: 新增产物完整性标记、原子写入与大图输出数据集工具
is_file_complete/mark_file_complete:以同名 .done 侧标判定产物是否真正生成完毕,替代"存在即跳过",杜绝中断遗留的半成品被下游复用。
atomic_filepath:原子写入上下文管理器,先写 .__wip 临时文件,无异常走完后 os.replace 同卷原子提交并自动打 .done,异常则回滚删除临时文件。
create_output_dataset:ENVI driver 对"单波段 > 2GB 且多波段"的 BSQ 输出存在 int32 偏移溢出,此类大图自动改走 GTiff + BIGTIFF=YES。
|
2026-09-15 10:34:31 +08:00 |
|
|
|
91e234827c
|
chore: 补齐 .gitignore 规则,忽略构建产物/离线包/临时调试脚本
忽略约 3GB 本地产物:1_2/ (PyInstaller 输出)、perfect_env.zip、MegaWater.zip、offline_packages/ 离线 wheel、src/postprocessing/work_dir/ 运行期报告。
补上 src/new/**/__pycache__/:原 "!/src/new/**" 反忽略规则会把字节码目录重新放出来。
忽略根目录一次性调试脚本 (_ast_check/_tmp_*/_verify_*/audit_*/debug_probe/verify_*) 与文档类产物 (_audit_report_v2.md、generate_ppt.py、physical_features.json、reqs.txt、*.pptx),文件仍保留在本地磁盘。
|
2026-09-15 10:34:29 +08:00 |
|
|
|
2f7b90725e
|
fix: 采样点地图底图RGB改用GDAL buf降采样防OOM
- _read_hyperspectral 原整幅读3波段再np.stack(34914x19177 float32 ~7.5GiB),现将预览最长边限制到2048,用 ReadAsArray(buf_xsize/buf_ysize) 抽样
- 返回'显示坐标系'(原点不变、像元尺寸×抽样比),geo_to_pixel 直接得显示像素,比例尺/指北针一致;移除下采样暂被禁用分支
|
2026-09-09 10:33:28 +08:00 |
|
|
|
61a0a9dde4
|
fix: 采样光谱源头量级收敛(全图探测+均值缩放),避免整块重铸OOM
- 新增 _detect_global_reflectance_scale():采样前全图散布窗口粗扫,判定 0-10000 放大反射率
- chunked/non-chunked 在采样均值层面按统一因子收敛到 0~1(均值线性,零大数组开销)
- 修复整分块 astype/除法导致的 10.9GB 二次分配 OOM
(注:该文件另含先前本地未提交改动,一并入库)
|
2026-09-08 17:31:55 +08:00 |
|
|
|
8f416c728b
|
fix: 推理端反射率量级统管收敛为_align_reflectance_scale单一入口
- 新增 _align_reflectance_scale():光谱列 >10 则 /10000 收敛到 0~1,并清洗 NaN/负值
- inference_pipeline / batch_inference / batch_inference_multi_data 三处散装 /10000 魔法逻辑统一收敛
(注:该文件另含先前本地未提交改动,一并入库)
|
2026-09-08 17:31:51 +08:00 |
|
|
|
81ae400294
|
fix: 影像预览图GDAL buf降采样防OOM
- 预览图不再整幅读入 34914x19177x3 float32(~7.5GiB),按 MAX_PREVIEW_DIM=2048 buf 降采样
- 耀斑单波段掩膜 RGB 白色由 255 改为 1.0,消除 imshow clipping 警告
|
2026-09-08 17:26:18 +08:00 |
|
|
|
4d49753cca
|
fix: 实测站坐标改osr重投影+GDAL逆仿射,提取光谱写CSV前统一0~1量纲
- geo_to_pixel 改用 gdal.InvGeoTransform 全仿射(含旋转项);坐标列正则收紧,只认经纬度,剔除 pixel/utm 误判
- get_spectral_in_coor 主流程由错误 UTM 数学公式改为 osr.CoordinateTransformation(EPSG源->影像原生CRS) 重投影
- 提取光谱列写 CSV 前做 >10 则 /10000 量级收敛(不动实测值列)
|
2026-09-08 17:26:18 +08:00 |
|
|
|
c6523cebd8
|
fix: GUI 模型加载改为按 metric 遍历所有 .joblib 选最优
旧行为: _scan_external_model_dir 盲目取 joblib_files[0]
→ 字母序选到 LinearRegression 而非 SVR
→ 所有目标永远是 D1,因为字母序 D1 < SNV
新行为:
- 读取 GUI 中用户选择的 metric (R²/RMSE/MAE)
- 遍历每个子目录下全部 .joblib 文件
- 按指标自动选择最优模型:
R² → 取最大值
RMSE → 取最小值
MAE → 取最小值
- 控制台打印: [模型加载] 目标 BGA 根据 R² 自动选择最佳模型: BGA_spxy_SNV_SVR.joblib, 分数: 0.899001
|
2026-08-04 09:10:34 +08:00 |
|
|
|
04f9a647d8
|
fix: 推理端自适应反射率缩放 + Pipeline 列精确对齐
1. 自适应反射率量级缩放 (inference_pipeline/batch_inference/batch_inference_multi_data):
- 检测光谱列 max > 10 时自动 ÷10000 统一到 0-1 区间
- 三个推理入口全量同步保护
2. Pipeline 列精确对齐 (preprocess_spectra 两处):
- 旧: not in 盲目排除多余列 → 140个光谱列被当多余移除
- 新: 遍历 train_cols,精确字符串匹配 → math.isclose 浮点近似
匹配列重命名为训练列名,缺失列补零
最终 spectra[train_cols] 严格按训练顺序输出
- 兼容路径同步修复
3. 误导性日志修正:
- 改前: '正在应用预处理方法: D1' → 让用户以为推理端在手动做 D1
- 改后: '[模型信息] 训练预处理方法: D1 — 由 Pipeline 内部自动执行'
|
2026-08-04 09:10:26 +08:00 |
|
|
|
f801b481fe
|
fix: SVR+MNF 训练管线三个致命 Bug 修复
1. SVR y 尺度修复 (modeling_batch.py):
- TransformedTargetRegressor 包裹 SVR,自动标准化 y 后训练
- 超参前缀 model__ → model__regressor__ (穿透包裹层)
- _find_svr_in_pipeline 兼容新的 TransformedTargetRegressor 嵌套
2. MNF 噪声估计修复 (spectral_Preprocessing.py):
- 旧: noise = X[1:] - X[:-1] (假设空间连续,对打乱数据错误)
- 新: noise = X - savgol_filter(X) (SG 滤波残差提取纯光谱噪声)
- 附带波段数检查和异常兜底
3. DualStream_MNF 补标准 (spectral_Preprocessing.py):
- FeatureUnion 外再包 Pipeline + StandardScaler
- MNF 主成分(±10) 和 Physical 指数(0.001) 统一量纲后再送 SVR
|
2026-08-04 09:10:18 +08:00 |
|
|
|
e3a08e0ad0
|
feat: 推理端光谱覆盖率智能预警
- 新增 _check_spectral_coverage() 静态方法
- 比较预测波长 vs 训练波长的起止范围
- 左端缺口 >15nm → 黄色警告:蓝端/紫外特征丢失
- 右端缺口 >15nm → 黄色警告:近红外特征丢失
- 在 _preprocess_dual_stream 和 preprocess_spectra 两处调用
- 使用 ANSI \033[93m 黄色高亮,不中断程序运行
|
2026-07-30 13:12:19 +08:00 |
|
|
|
f0b9f178da
|
feat: 光谱黄金区间过滤 — 训练波长统一收缩到 400-1000nm
- 新增 WAVELENGTH_RANGE = (400.0, 1000.0) 类常量
- 新增 _is_wavelength_in_range() 范围感知波长列判断
- _extract_train_wavelengths() 自动过滤超出区间的波长
- _extract_feature_columns / train_single_model / pre-scan 三处调用点
统一切换为范围感知判断
- 效果: 308 波段 → 300 波段 (裁掉 <400nm 的 4 个 + >1000nm 的 4 个)
- 推理端通过 metadata train_wavelengths 自动继承过滤后的网格
|
2026-07-30 13:12:14 +08:00 |
|
|
|
b19cb427b9
|
feat: MNF 诊断系统 + 全局对齐两遍扫描法
【MNFTransformer 增强】(spectral_Preprocessing.py)
- fit() 存储 eigvals_w_/eigvals_ratio_/eigvals_cumsum_ 实例属性
- _print_band_selection() 精简 3 行控制台输出 (总成分/选中数/Top3 贡献率)
- get_diagnostics_dict() 返回结构化诊断字典供 JSON 导出
【模型保存增强】(modeling_batch.py)
- save_model: joblib.dump 前注入 metadata['mnf_diagnostics']
- save_model: 并行导出 *_mnf_diag.json 独立诊断文件
- 部署 npz 新增 mnf_eigvals/_ratio/_cumsum 三个特征值数组
【批量训练报告】(modeling_batch.py)
- _generate_mnf_report() 生成 batch_mnf_eigenvalue_report.md
- 按目标列+模型分块,每个选中成分按特征值降序列出具体数值
- 容错:无 MNF 模型时标注警告,不崩溃
【MNF 全局对齐 — 两遍扫描法】(modeling_batch.py)
- 第一遍预扫描: 对每个目标 fit MNFTransformer(0.95),记录所需成分数
- 取全局最大值 global_max_mnf_components (兜底 50)
- 第二遍正式训练: 所有 Pipeline 统一使用固定整型成分数
- 仅当启用 DualStream_MNF 时触发,非 MNF 场景透明跳过
- get_preprocessing_transformer 新增 mnf_n_components 参数透传链
|
2026-07-30 12:43:49 +08:00 |
|
|
|
314d947d34
|
fix: 推理端三项修复 — 光谱断崖 + 全零拦截 + MNF 加载诊断
【修复 1】np.interp 边缘断崖 (3 处)
- _preprocess_dual_stream + preprocess_spectra 主/兼容重采样路径
- left/right 从 np.nan 改为 y_vals[0]/y_vals[-1] 恒定外推
- 彻底杜绝 NaN→0.0 造成的光谱曲线两端零值断崖
【修复 2】全零光谱像素 NaN 拦截
- 新增 _mask_zero_spectra_pixels() 静态方法
- 检测 NDWI 掩膜外的全零陆地像素,强制预测值为 NaN
- 覆盖 inference_pipeline / batch_inference / batch_inference_multi_data
- Kriging/IDW 插值天然忽略 NaN,制图时陆地直接留白
【新增】MNF 诊断信息在模型加载时自动输出
- _print_mnf_info_if_available() 递归查找 Pipeline 中的 MNFTransformer
- load_best_model / load_specific_model 加载后自动打印精简 3 行诊断
|
2026-07-30 12:43:29 +08:00 |
|
|
|
5410bf74ae
|
fix: 修复 sampling 垃圾列 Bug — dir() 遍历方法名泄露为 CSV 列
- 旧代码用 dir(calc) 遍历 WaterQualityIndexCalculator 的所有属性和方法名,
导致 DEFAULT_CSV/calculate_many/calculate_one/get_formula_info/list_available
等 5 个非公式名被错误写入 sampling_spectra.csv 列头,值为全 NaN。
- 改为 calc.list_available() 获取真实公式列表 + calc.calculate_many() 批量计算。
- 消除了下游推理端 load_sampling_data 面临的 5 个垃圾空列隐患。
|
2026-07-30 12:43:08 +08:00 |
|
|
|
37d3dcfd39
|
feat: NDWI 水域掩膜新增 SieveFilter 去小碎斑
- ndwi() 新增 sieve_threshold 参数(默认20像素)
- 输出后自动调用 gdal.SieveFilter 消除孤立小斑块
- sieve_threshold=0 可关闭此功能
|
2026-07-29 18:05:06 +08:00 |
|
|
|
27acf3cfe0
|
refactor: PhysicalFeature 精炼至 15 个指数 — 砍冗余比值 + 补 BGA 公式
- 删除 6 个无明确物理意义的波段比值(R700_R670 等)
- 新增 PC_ND: (R650-R620)/(R650+R620) 藻蓝归一化差值
- 最终 15 个: 通用4 + Chl5 + BGA3 + Turb3
|
2026-07-29 17:43:15 +08:00 |
|
|
|
88dd1ae1d8
|
revert: 回退 StandardScaler — 跨传感器场景下双重归一化导致推理坍缩
- 删除 Pipeline 中 scaler(StandardScaler) 步骤
- 删除 save_model 中 scaler_mean/scaler_scale 导出
- 删除 StandardScaler import
- 恢复: imputer → FeatureUnion → cleaner → SVR
- MNF 白化本身就是尺度对齐,无需额外标准化
|
2026-07-29 15:54:05 +08:00 |
|
|
|
67900c7aa6
|
fix: 补充 StandardScaler 导入
|
2026-07-29 15:46:14 +08:00 |
|
|
|
3edb73b652
|
fix: DualStream Pipeline 三项修复 — StandardScaler + 部署导出 + 推理拆弹
任务1: Pipeline 插入 StandardScaler
imputer → FeatureUnion → cleaner → scaler(StandardScaler) → SVR
MNF(≈1e4量级)与物理指数(≈1e0量级)统一尺度后入SVR
任务2: .npz 导出 scaler_mean / scaler_scale
C++端可复现 (X - mean) / scale
任务3: 推理端 train_wavelengths 缺失时直接抛异常
不再静默裸退308列导致 SimpleImputer 维度不匹配崩溃
|
2026-07-29 15:41:25 +08:00 |
|
|
|
7ecdf6a2a0
|
fix: PhysicalFeatureExtractor 除零 → 设零而非人为放大
- 之前 np.sign(x)*1e-12 在 x=0 时得 0,a/0=inf
- 固定 1e-12 兜底又会制造极端比值(14080/1e-12=1.4e16)
- 改为: 分母<1e-10 时直接设 ratio=0,不做人为放大
- 物理意义: 波段为零的像素,光谱比值无意义
|
2026-07-29 14:36:35 +08:00 |
|
|
|
60403b7a3f
|
fix: PhysicalFeatureExtractor 除零保护 — np.sign(0)=0 导致 inf
- 分母保护 np.sign(x)*1e-12 在 x=0 时变为 0,a/0 → inf
- 改为固定 1e-12 兜底 + nan_to_num + clip 安全阀
- 同时修复 ratio 型和 ratio_single 型两处
|
2026-07-29 14:35:05 +08:00 |
|
|
|
6849ff6877
|
feat: 新增 Physical_Only 预处理分支 — 纯物理特征+标准化,与 MNF A/B 对比
spectral_Preprocessing.py:
- 新增 Physical_Only 分支: Pipeline[PhysicalFeatureExtractor + StandardScaler]
- 纯物理特征流: 20个指数 → StandardScaler → SVR
- DualStream_MNF 逻辑完全不变
modeling_batch.py:
- preprocessing_methods 新增 Physical_Only
- 训练时 Physical_Only 也只取纯光谱50列
- 波长列表传递覆盖 Physical_Only
GUI:
- 两个面板同步新增「纯物理特征 (指数+标准化)」选项
|
2026-07-29 14:32:59 +08:00 |
|
|
|
f3150f7807
|
refactor: 抽取 _preprocess_dual_stream 独立方法
- preprocess_spectra 中 DualStream_MNF 分支从 25 行内联代码
变为 1 行方法调用: self._preprocess_dual_stream(spectra, metadata)
- 新方法含完整文档、fallback 路径、重采样逻辑
- 与旧 WQI 补齐/linspace 路径完全解耦
|
2026-07-29 13:23:13 +08:00 |
|
|
|
f4a927386b
|
refactor: DualStream 纯光谱输入 — 消除 WQI 冗余双向断层
训练端:
- DualStream_MNF 时只取纯光谱列(50列)传给 Pipeline
- PhysicalFeatureExtractor + MNFTransformer 都只收纯光谱
- 不再从 CSV 预读 WQI 列混入输入
推理端:
- 只做 308→50 光谱重采样,不补 WQI
- pipeline.predict() 自动完成 Physical 指数计算 + MNF 降维
- 删除 30+ 行 WQI 补齐代码
训练/推理完全对称: 纯光谱入 → FeatureUnion → SVR 出
|
2026-07-29 13:15:10 +08:00 |
|
|
|
6f1f222baa
|
style: 专题图 colormap 替换 — 高对比度 diverging → 柔和 sequential
- coolwarm/Spectral/turbo/RdYlBu 等在小差值下色阶刺眼
- 全部换为 sequential: Greens/Blues/BuPu/cividis/viridis/YlOrBr
- 保留 inferno(TDS) 和 YlOrBr(Turbidity)
|
2026-07-29 12:03:03 +08:00 |
|
|
|
3414f0207a
|
fix: DualStream_MNF 推理重建113列后交给 Pipeline.predict() 完整处理
- 之前手动调 imputer/preproc.transform 后返回, predict() 又套一层
Pipeline → SimpleImputer 收到44列不匹配113列
- 改为重建113列训练特征集,返回后让 model.predict() 完整走
Pipeline: imputer→preproc→cleaner→SVR,与训练完全一致
|
2026-07-29 10:58:26 +08:00 |
|
|
|
c9374a489b
|
fix: DualStream_MNF 推理先重采样308→训练网格再进Pipeline
- 推理数据 308 波段 vs 训练时 113 列(50光谱+63WQI)维度不同
- SimpleImputer fit在113列上不接受308列输入
- 修复: 先 np.interp 重采样到训练波长网格, 再 WQI 补齐,
然后喂入 Pipeline 的 imputer+preproc+cleaner 最终进 SVR
|
2026-07-29 10:53:58 +08:00 |
|
|
|
8b3955fd7a
|
fix: 推理端 DualStream_MNF 直通 Pipeline — 不再走旧重采样+WQI路径
- 训练时 Pipeline 保存了完整 MNFTransformer(mean_/W_mnf_)
和 PhysicalFeatureExtractor(wavelengths/_feat_cols_)
- 推理端新增快速通道:检测到 DualStream_MNF 时,直接调用
Pipeline 的 imputer.transform + preproc.transform,复用训练时
fit 好的变换矩阵,无需手动光谱重采样和 WQI 补齐
- 旧模型(非 DualStream_MNF)保持原有逻辑不变
|
2026-07-29 10:51:01 +08:00 |
|
|
|
40f12b569e
|
fix: 部署导出 _feat_cols_ 解包适配新4元组(name,ftype,ia,ib)
|
2026-07-29 10:42:17 +08:00 |
|
|
|
3fe05a0edb
|
fix: PhysicalFeature 改为精选20指数 — 保留NDVI/NDWI + 覆盖Chl/BGA/Turb
- 63个公式方案丢掉了NDVI/NDWI/FAI/EVI等通用指数
- 改为精选20个比值/指数,直接根据波长匹配最近波段:
通用: NDVI, NDWI, MNDWI, EVI (4个)
Chl: NDCI, CIgreen, CIrededge, MCI, SABI (5个)
BGA: PC_ratio1, PC_ratio2 (2个)
Turb: Turb_RedNIR, Turb_GreenRed, Turb_NIRGreen (3个)
单波段比值: R700/R670, R550/R670, R800/R550 等 (6个)
- 不再依赖 WaterQualityIndexCalculator,Pipeline 内计算更快
|
2026-07-29 10:39:32 +08:00 |
|
|
|
58bad4081e
|
feat: PhysicalFeature 扩展到全部63个水色指数 + MNF成分数自动确定
PhysicalFeatureExtractor:
- 废弃硬编码3指数(NDVI/NDWI/AlgaeRatio),改为调用
WaterQualityIndexCalculator.calculate_many() 计算全部63个公式
- 涵盖 BGA(25)/Chl(16)/Turb(10)/TSM(3) 等完整指数集
MNFTransformer:
- n_components 支持 float(0~1): 根据累积方差比自动确定成分数
n_components=0.95 → 保留95%方差的成分
- fit 后保存 n_components_ (实际成分数) 供部署导出使用
- Wp 显式按特征值降序排列
|
2026-07-29 10:37:09 +08:00 |
|
|
|
495857913d
|
refactor: RandomizedSearchCV → GridSearchCV — SVR 超参全量穷举
- SVR 参数网格仅 216 种组合(4×6×3×3),全量搜索 ~2s 完成
- 之前 n_iter=10 只抽样 4.6%,靠运气撞最优参数
- 删除 n_iter 和 random_state 参数(GridSearchCV 不需要)
- 保留 RandomizedSearchCV import 供其他模型(参数空间大的)使用
|
2026-07-29 10:28:17 +08:00 |
|
|
|
6aaaea5abd
|
fix: inf→NaN 清洗兼容 ndarray(spxy/ks 返回 ndarray 无 .replace)
|
2026-07-29 10:22:47 +08:00 |
|
|
|
80189a9f44
|
fix: 补充 BaseEstimator/TransformerMixin 导入
|
2026-07-29 10:20:57 +08:00 |
|
|
|
12866f12b0
|
fix: Pipeline 安全网 — preproc 与 model 间插入 _SafeFiniteTransformer
- 新增 _SafeFiniteTransformer: np.nan_to_num + clip(±1e15)
- 放在 Pipeline preproc→model 之间,无论 MNF 数值溢出还是
PhysicalFeatureExtractor 除零,SVR 收不到 inf/NaN
- X_train/X_test 入口先 replace(inf→NaN),SimpleImputer 接力填充
|
2026-07-29 10:20:00 +08:00 |
|
|
|
f3af45ccff
|
fix: MNFTransformer 数值稳定性 — 防 inf/NaN 导致 SVR 拒绝输入
- fit: 正则化按协方差总迹的1%自适应 + 截断噪声主导特征值
- fit: 输入先做 nan_to_num 清洗
- transform: 输出 clip 到 float32 安全范围,防止极端值
- 噪声协方差正则化从固定 1e-9 改为 trace*0.01,对 113 维特征更稳健
|
2026-07-29 10:16:56 +08:00 |
|
|
|
09f8d89b56
|
fix: PhysicalFeatureExtractor 修复 ndarray 输入时波长丢失问题
- SimpleImputer 把 DataFrame → ndarray,PhysicalFeatureExtractor.fit()
收不到列名导致 ValueError: 必须在 __init__ 中提供 wavelengths
- get_preprocessing_transformer 新增 wavelengths 可选参数
- train_single_model 在 DualStream_MNF 时提取 X_raw 波长列表传入工厂
- PhysicalFeatureExtractor 已有 ndarray + wavelengths 参数的处理分支
|
2026-07-29 10:11:01 +08:00 |
|
|
|
ef9187fc7b
|
fix: GUI 训练面板补全 WVAE + DualStream_MNF 预处理选项
- 旧 GUI 硬编码列表缺少 WVAE 和 DualStream_MNF,与 modeling_batch 不同步
- 两个 GUI 面板同步补全,中文名分别为「小波去噪」和「双流MNF」
|
2026-07-29 10:06:46 +08:00 |
|
|
|
4347988ab2
|
feat: 训练框架适配 DualStream_MNF + 部署矩阵 .npz 导出
modeling_batch.py:
- preprocessing_methods 新增 DualStream_MNF
- save_model 新增 C++/Rust 部署导出逻辑:
自动检测 Pipeline 中的 MNFTransformer + SVR,
提取 mean_/W_mnf_/dual_coef_/support_vectors_/
intercept_/gamma/kernel 等纯量矩阵,
保存为 *_deploy.npz 文件
- 新增 _find_mnf_in_pipeline / _find_svr_in_pipeline /
_find_physical_extractor_in_pipeline 辅助方法,
支持 FeatureUnion 嵌套递归查找
|
2026-07-29 10:02:37 +08:00 |
|
|
|
7d8d848e58
|
feat: 新增 MNFTransformer + PhysicalFeatureExtractor + DualStream_MNF
spectral_Preprocessing.py:
- MNFTransformer: 纯 numpy/scipy 实现的 MNF 降维
fit: 噪声协方差→白化→PCA 旋转,导出 self.mean_/self.W_mnf_
transform: (X - mean) @ W_mnf_[:, :n_components]
- PhysicalFeatureExtractor: 从原始波段提取 NDVI/NDWI/蓝藻比值
支持 DataFrame(列名波长) 和 ndarray(wavelengths参数) 输入
- get_preprocessing_transformer: DualStream_MNF 返回 FeatureUnion
并行连接 PhysicalFeatureExtractor(3维) + MNFTransformer(10维)
|
2026-07-29 10:02:31 +08:00 |
|
|
|
c4c70b2ff6
|
fix: 耀斑检测默认关闭大面积连通域过滤
- max_area 默认值 50 → 0(不过滤),大范围耀斑区域不再被误删
- 原逻辑: Otsu → 移除 >50px 连通域 → 扔掉浅水/岸边大亮斑
- 现逻辑: Otsu → 跳过面积过滤 → 保留所有亮斑区域
- 用户可手动调大 max_area 重新启用过滤
|
2026-07-28 17:42:12 +08:00 |
|
|
|
80e46c8476
|
fix: 单步模式下自动发现耀斑掩膜文件
- 单步运行时 PipelineContext 不保留 step2 的 glint_mask_path,
导致采样时无法剔除耀斑区域
- 新增自动发现:兜底扫描 2_Glint_Detection/severe_glint_area.dat
- 补充缺失的 import os
|
2026-07-28 17:25:41 +08:00 |
|
|
|
241b138bb5
|
fix: 异常值裁剪 P1/P99 → P2/P98,避免边界垃圾值污染
- P1-P99 对 pH/DO 等参数不够保守:边界像素模型预测 pH=-22
导致 P1=-2.38,裁剪后仍保留物理上不可能的值
- 改为 P2-P98(4% 裁剪),IQR 8.3-8.5 的主体数据完全不受影响
- 两处同步:预测端 _clip_outliers + 插值端 _perform_interpolation
|
2026-07-28 17:09:42 +08:00 |
|
|
|
3f2eef4536
|
fix: 克里金采样点上限解除 — 修正可用内存检测 + 提高硬上限
- psutil 在 Windows 下 available 因进程占用而偏低(4GB vs 实际 11-12GB),
改为 max(available, free) 获取更真实的内存余量
- 安全余量系数 0.5→0.6,兜底值 4GB→8GB
- 硬上限 20000→50000,32GB 实测可安全容纳更多采样点
- 之前 45958 点 → 强制抽稀到 16384,损失了大量空间细节
|
2026-07-28 16:55:03 +08:00 |
|
|
|
1efe10adb6
|
revert: 回退克里金多线程并发,恢复串行处理
并发实测无提速(32GB 内存下单个克里金已用 5-6GB,两个并发
竞争内存带宽导致实际耗时相同),回退为简单串行循环。
|
2026-07-28 16:53:15 +08:00 |
|
|
|
aa5d9d9392
|
feat: GUI 面板专题图生成支持多线程并发克里金
- step11_map_panel.run() 串行 for 循环改为 ThreadPoolExecutor 并发
- 默认 2 线程并行,通过过滤已存在文件跳过重复生成
- 支持取消信号:_done Event 通知 worker 线程提前退出
- 线程安全:_lock 保护共享计数器,Qt 信号从 QThread 安全 emit
- 修复 Tuple 类型导入缺失
|
2026-07-28 16:45:46 +08:00 |
|