SpecSure Alpha 冲刺小结(Alpha 1/3)


SpecSure Alpha 冲刺小结(Alpha 1/3)

本周主要推进:后端 + CNN
所有工作文档、代码以 Github 仓库为准,本报告只做阶段性梳理:


一、项目与团队

小组分工:

  • 前端:於佳杰
  • 后端 & 组长:刘芳宇
  • CNN 模型:陈怡冰
  • SVM 模型:邓林

本次 Alpha 冲刺目标(1/3)
在前期选题与准备的基础上,完成系统的原型雏形

  • 需求与数据流程梳理
  • 模型初版(SVM / CNN)
  • 后端接口草案
  • 前端页面原型

前期资料可参考仓库 dos/w9/ 中的文档(选题说明、分工参考、项目准备、预期功能等)。


二、本周整体进展概览

从功能模块看,本周主要成果可以归纳为四块:

  1. 前端:完成需求梳理 + 页面原型(静态版),确定整体交互与可视化结构
  2. 后端:完成 FastAPI 框架 + 一套可联调的 mock API
  3. 模型:CNN / SVM 两条线路都已有可跑通的 baseline
  4. 项目管理:分支策略、文档组织、会议记录等基本框架搭好

下面按角色分别小结。


三、模块进展

1. 前端进展(於佳杰)

(1)前端需求整理

结合系统整体设计,前端共规划了四个主界面 / 模块:

  1. 数据导入(Data Import)
    • 上传 .hsi / .hdr / .mat 等高光谱数据
    • 显示低分辨率假彩色图
    • 点击像素查看光谱曲线
    • 管理近期上传数据集
  2. 预处理(Preprocessing)
    • 降噪:前后对比预览
    • 波段选择:多选 + 区间滑条
    • 标准化流程:MinMax / Z-score 等
    • 统一通过参数调用后端,不在前端做实际计算
  3. 模型训练(Model Training)
    • 双模型:SVM / CNN
    • SVM:C、gamma、kernel 等参数设置 + 状态展示
    • CNN:epoch、learning rate、optimizer、batch size 等
    • 展示训练曲线(loss / acc)与进度反馈
  4. 结果与评估(Results & Evaluation)
    • 分类结果伪彩色图(鼠标悬浮显示类别)
    • 光谱曲线对比(预测 vs 原始)
    • 混淆矩阵可视化
    • 指标展示(accuracy / recall 等)
    • 结果下载(mask / 图像 / log)

(2)页面原型(静态版)

  • 使用 React + TailwindCSS 搭建基础页面结构
  • 预留训练曲线、混淆矩阵等可视化区域
  • 按“数据导入 → 预处理 → 训练 → 结果”工作流设计页面布局
  • 采用 Tab / 卡片式布局区分 SVM 与 CNN

(3)前后端接口对齐(前端视角)

与后端协商并确认了几个核心接口的参数格式,包括:

  • /upload_hsi:上传数据,返回 dataset_id、预览图、光谱样本等
  • /preprocess:输入预处理参数,返回处理前后预览与光谱变化
  • /classify_svm/classify_cnn:提交训练参数,获得训练进度 / 结果
  • /evaluate:返回混淆矩阵与评估指标

后续计划 & 问题

  • 计划
    • 基于 mock API 完成前后端初次联调
    • 逐步替换为真实模型输出
  • 困难
    • 高光谱数据的可视化形式较多(伪彩色、光谱曲线、混淆矩阵),需要与后端和模型同学持续磨合数据格式与展示方式

2. 后端 & 组长工作(刘芳宇)

(1)后端框架搭建

  • 使用 FastAPI 搭建项目基础框架
  • 按 RESTful 风格设计接口
  • 目前已可在本地通过 mock 数据完整跑通一条流程

(2)mock 接口

在模型完全接入前,先用 mock 实现了接口形态,方便前端和联调:

  • /upload_hsi:接收文件并返回示例元数据
  • /preprocess:根据输入参数返回固定结构的预处理结果
  • /classify_svm/classify_cnn:返回示例分类结果矩阵
  • /evaluate:返回固定的 OA / Kappa 等指标

目前已尝试将 CNN 同学提供的代码接入后端,但本地联调还在继续打通中。

(3)模拟前端 & 协作对接

  • 为了便于测试接口,先写了一个简易的前端页面,用来走完整流程
  • 与前端同学一起确认:
    • dataset_id 的使用方式
    • 图像 / 矩阵的传输格式
    • 日志与训练状态返回格式

(4)项目管理 & 文档

  • 组织组内讨论与会议(线上 / 线下)
  • 编写并维护:
    • 预期结果描述
    • 预期结果草图
    • 分工参考
    • 项目命名说明
    • 项目准备工作
    • 分支管理办法等

后续计划 & 困难

  • 计划
    • 优先打通 CNN 与后端的完整链路
    • 在此基础上给前端提供稳定的真实数据接口
  • 困难
    • 目前与 CNN 部分的联调还不完全顺利,需要在数据格式与运行环境上继续排查

3. CNN 模块进展(陈怡冰)

(1)模型初版完成

  • 参考 HybridSN 论文与代码,改写为 PyTorch 版本 3D CNN
  • 实现了:
    • patch 提取
    • 训练脚本
    • 评估模块

(2)初次训练与评估

基于现有数据集(如 PaviaU)进行了首次训练,得到:

  • Overall Accuracy(OA)
  • Average Accuracy(AA)
  • Kappa 系数
  • 每类准确率
  • 混淆矩阵
  • 完整分类报告 classification_report_pytorch.txt

(3)推理能力

  • 支持对整张高光谱图逐像素预测
  • 跳过零标签像素
  • 使用训练时保存的 PCA 转换器(目前受到训练集大小的限制)
  • 输出:预测可视化图、地面真值图等

支持 --inference_only 模式,只做推理不训练。

后续计划 & 困难

  • 计划
    • 根据后端给出的数据格式重新适配
    • 输出可部署的模型权重
    • 尝试多模态方向(光谱 + 空间纹理)
    • 进行代码重构与模块化
  • 困难
    • GPU 资源有限,训练较慢
    • 部分评估代码(如 eval_epoch)位置需要调整
    • 当前代码集中在单文件中,可维护性一般
    • 缺少训练过程可视化与早停机制

4. SVM 模块进展(邓林)

(1)SVM baseline

  • 实现 SVM 训练与预测的基础流程
  • 支持线性核与 RBF 核
  • 完成高光谱数据预处理、训练与分类图生成(二位预测矩阵)

(2)性能评估与接口

  • 指标:OA、Kappa、混淆矩阵
  • 与 CNN 同学对齐输入数据维度,保证兼容性
  • 基于 FastAPI 实现训练与预测接口:
    • POST /api/modelA/train
    • POST /api/modelA/predict(输出 .npy 分类结果等)

后续计划 & 困难

  • 计划
    • 调参优化精度(C、gamma、核函数对比)
    • 导出可部署模型(.joblib / .pkl
    • 生成性能对比图(不同参数 / 核函数的 OA / Kappa)
    • 配合 PCA / 波段选择减少维度、加速训练
  • 困难
    • 高维数据训练时间较长
    • 类别边界模糊,部分类别难以区分,需要更多特征与后处理

四、本轮 Alpha 1/3 冲刺成果汇总

综合来看,本轮冲刺主要达成了这些里程碑:

  1. UI & 前端结构
    • 完成系统四大模块的界面原型:数据导入、预处理、训练、结果展示
    • 为后续联调预留好各类可视化区域和交互布局
  2. 后端接口雏形
    • FastAPI 项目结构成型
    • mock API 已覆盖完整工作流,前后端数据格式基本对齐
  3. 模型初版
    • SVM 与 CNN 两条模型线均已跑通基础版本
    • 已具备生成分类图、评估指标等能力,为后端接入准备好基础
  4. 项目协作与管理
    • 确立分支策略(main + 各 feature 分支)
    • 明确模块分工与时间线
    • 定期站会同步进度与问题

五、会议与协作记录(简要)

  • 最近一次站立会议:
    • 时间:11 月 26 日
    • 地点:实验室
    • 主要内容:
      • 确认整体 UI 原型结构
      • 同步 SVM / CNN 初版训练情况
      • 讨论后端 API 对接细节与数据格式
      • 是否引入多模态(目前保留为调研方向)
      • 安排下周任务:前端主攻联调,后端优先接入真实模型

六、一些个人感受与踩坑记录

这一轮 Alpha 冲刺下来,最大的感受其实不是功能做了多少,而是体会到多模块系统联调的复杂度。

一开始大家各自推进的时候,其实都还挺顺利:

  • 前端原型能跑
  • 后端 mock 接口也通
  • SVM 和 CNN 单独跑脚本也都没问题

1. CNN 联调

CNN 是这一轮最痛苦的部分。

模型在本地用脚本跑是 OK 的,但一旦尝试接入后端,就会遇到一堆现实问题:

  • 数据格式不一致
    • 训练时的数据维度
    • 后端传过来的数据结构
    • 推理时是否还要复用训练阶段的 PCA。这些细节只要有一个没对齐,结果就不是报错就是结果全错。
  • 训练集与推理耦合太紧
    目前 CNN 推理依赖训练时保存的 PCA 和参数,这在脚本里没问题,但一放到服务端就需要重新考虑数据流和状态管理。
  • 代码结构偏实验代码
    所有功能都写在一个文件里,做研究没问题,但一旦想“工程化”,就会明显感觉维护成本偏高。

2. GPU

这次训练 CNN 最大的现实限制是 GPU 资源

  • 本地 GPU 不稳定 / 显存有限
  • 远程 GPU 使用成本高
  • 每次训练都要精打细算 epoch 和 batch size

结果就是:

  • 不敢随便改结构
  • 不敢频繁重训
  • 调参速度明显被拖慢

这也让我们在 Alpha 阶段更多把精力放在流程跑通,而不是极限追求精度。


Author: linda1729
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source linda1729 !
评论
  TOC