SpecSure Alpha 冲刺小结(Alpha 1/3)
本周主要推进:后端 + CNN。
所有工作文档、代码以 Github 仓库为准,本报告只做阶段性梳理:
- 本周目录:
dos/w10/- 仓库地址:https://github.com/linda1729/SpecSure 组长博客更新会略慢于 Github(因为网页部署有次数限制)。
一、项目与团队
- 项目名:SpecSure(澜瞳)——海岸带高光谱数据分类系统
- 小组名:BlueArray(潮霸)
- 团队 ID:01
- 组长博客:https://blog.linda1729.com/columns/specsure/
- Github 仓库:https://github.com/linda1729/SpecSure
小组分工:
- 前端:於佳杰
- 后端 & 组长:刘芳宇
- CNN 模型:陈怡冰
- SVM 模型:邓林
本次 Alpha 冲刺目标(1/3):
在前期选题与准备的基础上,完成系统的原型雏形:
- 需求与数据流程梳理
- 模型初版(SVM / CNN)
- 后端接口草案
- 前端页面原型
前期资料可参考仓库 dos/w9/ 中的文档(选题说明、分工参考、项目准备、预期功能等)。
二、本周整体进展概览
从功能模块看,本周主要成果可以归纳为四块:
- 前端:完成需求梳理 + 页面原型(静态版),确定整体交互与可视化结构
- 后端:完成 FastAPI 框架 + 一套可联调的 mock API
- 模型:CNN / SVM 两条线路都已有可跑通的 baseline
- 项目管理:分支策略、文档组织、会议记录等基本框架搭好
下面按角色分别小结。
三、模块进展
1. 前端进展(於佳杰)
(1)前端需求整理
结合系统整体设计,前端共规划了四个主界面 / 模块:
- 数据导入(Data Import)
- 上传
.hsi/.hdr/.mat等高光谱数据 - 显示低分辨率假彩色图
- 点击像素查看光谱曲线
- 管理近期上传数据集
- 上传
- 预处理(Preprocessing)
- 降噪:前后对比预览
- 波段选择:多选 + 区间滑条
- 标准化流程:MinMax / Z-score 等
- 统一通过参数调用后端,不在前端做实际计算
- 模型训练(Model Training)
- 双模型:SVM / CNN
- SVM:C、gamma、kernel 等参数设置 + 状态展示
- CNN:epoch、learning rate、optimizer、batch size 等
- 展示训练曲线(loss / acc)与进度反馈
- 结果与评估(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/trainPOST /api/modelA/predict(输出.npy分类结果等)
后续计划 & 困难
- 计划:
- 调参优化精度(C、gamma、核函数对比)
- 导出可部署模型(
.joblib/.pkl) - 生成性能对比图(不同参数 / 核函数的 OA / Kappa)
- 配合 PCA / 波段选择减少维度、加速训练
- 困难:
- 高维数据训练时间较长
- 类别边界模糊,部分类别难以区分,需要更多特征与后处理
四、本轮 Alpha 1/3 冲刺成果汇总
综合来看,本轮冲刺主要达成了这些里程碑:
- UI & 前端结构
- 完成系统四大模块的界面原型:数据导入、预处理、训练、结果展示
- 为后续联调预留好各类可视化区域和交互布局
- 后端接口雏形
- FastAPI 项目结构成型
- mock API 已覆盖完整工作流,前后端数据格式基本对齐
- 模型初版
- SVM 与 CNN 两条模型线均已跑通基础版本
- 已具备生成分类图、评估指标等能力,为后端接入准备好基础
- 项目协作与管理
- 确立分支策略(
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 阶段更多把精力放在流程跑通,而不是极限追求精度。