# graduation_final **Repository Path**: xiioxiao/graduation_final ## Basic Information - **Project Name**: graduation_final - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-25 - **Last Updated**: 2026-05-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于深度学习的多视图子空间聚类算法设计与实现 ## 项目简介 本项目是西南科技大学本科毕业设计,课题为 **"基于深度学习的多视图子空间聚类算法设计与实现"**。项目基于 IEEE TMM 2021 论文 **DMSC-UDL (Deep Multi-view Subspace Clustering with Unified and Discriminative Learning)**,实现了一种融合统一表示学习与判别性约束的深度多视图子空间聚类算法,并配套开发了基于 Django 的 Web 可视化平台,支持数据集管理、模型训练监控、结果对比分析等功能。 > **论文引用:** Qianqian Wang, Jiafeng Cheng, Quanxue Gao, et al. *Deep Multi-view Subspace Clustering with Unified and Discriminative Learning*, IEEE Transactions on Multimedia, 2021. [[Paper]](https://ieeexplore.ieee.org/abstract/document/9204408/) ## 研究内容 项目研究内容分为五个层次,逐级递进: ``` 多视图图像数据集 → 数据预处理与多视图构建 → 特征工程与自表达建模 → DMSC-UDL 模型建立 → 模型对比与评估 → 聚类可视化平台开发 ``` 1. **数据预处理与多视图构建**:图像缩放归一化(统一 28×28)、边缘检测(Canny/Sobel 算子)生成第二视图、MAT 格式转换 2. **特征工程与自表达建模**:双视图卷积编码器(3层 Conv2d → 1470维特征)、共享自表达层(可学习连接矩阵 Q)、双视图卷积解码器 3. **DMSC-UDL 模型建立**:多损失联合优化(重构损失 + 自表达损失 + 图正则损失 + 判别约束 + Center Loss)、两阶段训练策略(AE 预训练 + 联合微调)、迁移学习机制 4. **模型对比与评估**:与传统方法(LRR / LT-MSC / CMSR)及深度方法对比,使用 ACC、NMI、ARI、Recall、F1-Score 评估 5. **聚类可视化平台开发**:Django Web 框架 + 数据集管理 + 训练配置与监控 + 模型注册表管理 + 结果对比分析 ## 项目结构 ``` graduration-design/ ├── DMSC-UDL-main/ # 核心算法与平台代码 │ ├── Fashion-MNIST-2/ # 算法核心实现 │ │ ├── models/ # 模型定义 │ │ │ ├── network.py # DMSC-UDL 网络结构(双编码器-解码器 + 自表达层) │ │ │ ├── metrics.py # 聚类评估指标(ACC, NMI, ARI) │ │ │ ├── AE1.pth # 预训练自编码器权重(视图1) │ │ │ └── AE2.pth # 预训练自编码器权重(视图2) │ │ ├── data/ # 数据加载模块 │ │ │ ├── dataset.py # MNIST/Fashion 数据集加载器 │ │ │ └── dataloader.py # DataLoader 封装 │ │ ├── baselines/ # 对比基线算法 │ │ │ ├── lrr.py # 低秩表示(Low-Rank Representation) │ │ │ ├── lt_msc.py # 低秩张量约束多视图子空间聚类 │ │ │ ├── cmsr.py # 一致多视图子空间聚类(Schatten p-norm) │ │ │ └── run_baselines.py # 基线算法统一运行与评估脚本 │ │ ├── rand/ # 数据集 │ │ │ ├── ExtendedYaleB/ # Extended Yale B 人脸数据集(28类,16380样本) │ │ │ ├── convert_yale.py # Yale 数据集转换脚本 │ │ │ └── convert_extended_yaleb.py # Extended Yale B 转换脚本 │ │ ├── train.py # 主训练脚本(支持命令行/配置文件/Web调用) │ │ ├── test_baselines.py # 基线算法测试入口 │ │ ├── config_example.json # 训练配置文件示例 │ │ ├── ACC_FM.mat # Fashion-MNIST ACC 曲线数据 │ │ ├── NMI_FM.mat # Fashion-MNIST NMI 曲线数据 │ │ └── commonZ*.mat # 中间自表达矩阵保存文件 │ ├── clustering_platform/ # Django Web 平台(功能完整版) │ │ ├── manage.py # Django 管理入口 │ │ ├── clustering_platform/ # 项目配置 │ │ │ ├── settings.py # Django 设置 │ │ │ ├── urls.py # URL 路由 │ │ │ └── wsgi.py / asgi.py # WSGI/ASGI 入口 │ │ ├── core/ # 核心业务模块 │ │ │ ├── views.py # 视图函数(数据集管理、训练、预测、对比) │ │ │ ├── urls.py # 路由配置 │ │ │ ├── models.py # 数据模型 │ │ │ ├── train_script.py # Web 端训练脚本 │ │ │ └── predict_script.py # Web 端预测脚本 │ │ └── templates/core/ # 前端模板 │ │ ├── index.html # 首页 │ │ ├── dashboard.html # 仪表盘 │ │ ├── dataset_list.html # 数据集列表 │ │ ├── dataset_preview.html # 数据集预览 │ │ ├── train_config.html # 训练配置 │ │ ├── train_monitor.html # 训练监控 │ │ ├── train_history.html # 训练历史 │ │ ├── predict_config.html # 预测配置 │ │ ├── predict_result.html # 预测结果 │ │ ├── model_list.html # 模型列表 │ │ ├── model_registry.html # 模型注册表 │ │ ├── baseline_comparison.html # 基线对比 │ │ ├── baseline_result.html # 基线结果 │ │ ├── analysis_list.html # 分析列表 │ │ ├── analysis_visualize.html # 可视化分析 │ │ └── error.html # 错误页面 │ ├── dmsc_web/ # Django Web 平台(精简版) │ │ ├── manage.py # Django 管理入口 │ │ ├── dmsc_web/ # 项目配置 │ │ │ ├── settings.py # Django 设置 │ │ │ └── urls.py # URL 路由 │ │ ├── experiments/ # 实验管理模块 │ │ │ ├── views.py # 视图(上传、配置、训练、状态查询) │ │ │ ├── urls.py # 路由 │ │ │ └── utils.py # 工具函数(实验指标加载、可视化路径) │ │ └── experiments/templates/experiments/ # 前端模板 │ │ ├── base.html # 基础模板 │ │ ├── index.html # 首页 │ │ ├── detail.html # 实验详情 │ │ ├── upload.html # 数据上传 │ │ └── configure.html # 参数配置 │ ├── extract_doc.py # Word 文档内容提取工具 │ └── 研究内容组织框图.md # 研究内容 Mermaid 流程图 ├── 2025毕业设计任务书/ # 毕业设计任务书及相关文档 ├── DMSC-UDL-main.zip # 项目压缩包 └── 2025毕业设计任务书.rar # 任务书压缩包 ``` ## 核心算法:DMSC-UDL ### 模型架构 DMSC-UDL 采用双视图卷积自编码器结构,核心组件包括: | 组件 | 说明 | |------|------| | **双视图编码器** | 每个视图独立使用 3 层 Conv2d(通道数 10→20→30),将 28×28 图像编码为 1470 维特征向量 | | **共享自表达层** | 可学习连接矩阵 `Q`(n_samples × n_samples),建模样本间相似关系 | | **双视图解码器** | 3 层 ConvTranspose2d,将自表达重构特征映射回原始图像空间 | | **聚类预测头** | 全连接层 `model1/model2`,将编码特征映射为聚类概率分布 | ### 损失函数 | 损失项 | 公式含义 | 默认权重 | |--------|---------|---------| | 重构损失 L_rec | MSE(解码输出, 原始输入) | 0.01 | | 自表达损失 L_self | MSE(自表达重构特征, 编码特征) | 0.5 | | 图正则损失 L_graph | 图拉普拉斯正则化,保留局部几何结构 | 0.7(动态增长) | | 判别约束 L1 | 跨视图特征 Hadamard 积,促进视图一致性 | 0.001 | | Center Loss | 聚类中心约束,增强类内紧凑性 | 0.01 | ### 两阶段训练策略 - **第一阶段(AE 预训练)**:仅优化重构损失,训练自编码器提取有效特征,使用 CosineAnnealing 学习率调度 - **第二阶段(联合微调)**:同时优化全部损失项,图损失权重从 0.1 动态增长到配置值,Center Loss 在前 20% 轮次后激活 ### 迁移学习 支持加载预训练的编码器/解码器权重,可设置冻结轮数(`freeze_encoder_epochs`)和微调学习率(`finetune_lr`),加速在新数据集上的收敛。 ## 数据集 | 数据集 | 样本数 | 类别数 | 视图 | 说明 | |--------|--------|--------|------|------| | **Fashion-MNIST** | 2000 | 10 | 原始灰度图 + 边缘特征 | 服装产品图像 | | **Yale 人脸** | 165 | 15 | 原始灰度图 + 边缘特征 | Yale 人脸数据库 | | **Extended Yale B** | 16380 | 28 | 原始灰度图 + 边缘特征 | 扩展 Yale B 人脸(多光照条件) | 多视图构建方式:原始图像作为视图1,通过 Canny/Sobel 边缘检测提取的边缘特征作为视图2。 ## 快速开始 ### 环境要求 - Python 3.6+ - PyTorch 1.0+ - 其他依赖:numpy, scipy, scikit-learn, django, pillow, matplotlib ### 安装依赖 ```bash pip install torch numpy scipy scikit-learn django pillow matplotlib ``` ### 数据准备 将数据集 `.mat` 文件放置在 `DMSC-UDL-main/Fashion-MNIST-2/rand/` 目录下。数据格式要求包含 `X`(多视图数据,shape `(1, n_views)`,每个元素为 `(n_samples, feat_dim)` 的 ndarray)和 `groundtruth`(标签,shape `(1, n_samples)`)。 如需从原始图像构建数据集,可使用提供的转换脚本: ```bash # 转换 Extended Yale B 数据集 cd DMSC-UDL-main/Fashion-MNIST-2/rand/ python convert_extended_yaleb.py # 转换 Yale 数据集 python convert_yale.py ``` ### 使用配置文件训练 ```bash cd DMSC-UDL-main/Fashion-MNIST-2 # 使用 JSON 配置文件训练 python train.py --config config_example.json # 使用命令行参数覆盖配置 python train.py --dataset rand/fm_2000_edge_ori.mat --n-clusters 10 --epoch1 1001 --epoch2 2000 --lr 0.0005 ``` ### 配置文件说明 (`config_example.json`) ```json { "dataset": "rand/fm_2000_edge_ori.mat", "output_dir": "./results", "lr": 0.001, "weight_decay": 0.0, "epoch1": 1001, "epoch2": 2001, "n_clusters": 10, "loss_r": 0.01, "loss_re": 0.1, "loss_e": 0.1, "loss_g": 0.5, "l1_weight": 0.001 } ``` ### 迁移学习训练 ```bash python train.py \ --dataset rand/extended_yaleb_16380.mat \ --n-clusters 28 \ --pretrained models/AE1.pth \ --freeze-encoder-epochs 100 \ --finetune-lr 0.00005 \ --lr 0.0005 ``` ### 运行基线算法对比 ```bash cd DMSC-UDL-main/Fashion-MNIST-2 # 运行所有基线对比 python baselines/run_baselines.py --mat_path rand/fm_2000_edge_ori.mat --output_dir ./baseline_results # 在 test_baselines.py 中修改数据集路径后运行 python test_baselines.py ``` 支持的基线方法: - **LRR**(Low-Rank Representation):低秩表示子空间聚类 - **LT-MSC**(Low-Rank Tensor Constrained MSC):低秩张量约束多视图子空间聚类 - **CMSR**(Consistent Multi-view Subspace Clustering):一致多视图子空间聚类(Schatten p-norm) ## Web 可视化平台 项目包含两个 Django Web 平台: ### 1. clustering_platform(功能完整版) 提供完整的数据集管理、训练监控、模型管理和结果分析功能。 ```bash cd DMSC-UDL-main/clustering_platform # 初始化数据库 python manage.py migrate # 启动服务 python manage.py runserver 0.0.0.0:8000 # 访问 http://localhost:8000 ``` **功能模块:** - **数据集管理**:浏览、预览数据集内容和统计信息 - **训练配置**:Web 界面配置训练参数(学习率、损失权重、聚类数量等) - **训练监控**:实时查看训练日志、ACC/NMI 曲线 - **训练历史**:查看历史训练任务记录 - **模型注册表**:管理已训练的模型(模型文件、训练信息 JSON) - **预测配置**:加载模型对新数据进行聚类预测 - **基线对比**:运行传统基线方法并对比结果 - **可视化分析**:展示 ACC/NMI 曲线图、t-SNE 降维图 ### 2. dmsc_web(精简版) 提供数据上传、参数配置和训练触发的轻量级接口。 ```bash cd DMSC-UDL-main/dmsc_web # 初始化数据库 python manage.py migrate # 启动服务 python manage.py runserver 0.0.0.0:8001 # 访问 http://localhost:8001 ``` **API 接口:** - `POST /upload/` - 多视图数据上传(支持图片/文本/mat) - `POST /configure_and_train/` - 配置参数并触发训练 - `GET /get_train_status/?thread_id=xxx` - 查询训练状态和日志 ## 评估指标 | 指标 | 全称 | 说明 | |------|------|------| | **ACC** | 聚类准确率 | 通过匈牙利算法最优匹配后的标签准确率 | | **NMI** | 归一化互信息 | 衡量聚类结果与真实标签的互信息归一化值 | | **ARI** | 调整兰德指数 | 考虑随机一致性的聚类相似度 | | **Recall** | 召回率 | 宏平均召回率 | | **F1-Score** | F1 分数 | 宏平均精确率与召回率的调和平均 | ## 实验结果 训练过程中每 100 个 epoch 评估一次,ACC 和 NMI 曲线保存在 `ACC_FM.mat` 和 `NMI_FM.mat` 中。训练完成后自动生成 `training_info_{task_id}.json`,包含完整的配置参数和指标历史。 ## 文件说明 | 文件 | 说明 | |------|------| | `train.py` | 主训练脚本,支持命令行参数和 JSON 配置文件,支持迁移学习 | | `test_baselines.py` | 基线方法测试入口 | | `test.py` | 简单数据处理测试脚本 | | `config_example.json` | 训练配置文件模板 | | `convert_yale.py` | Yale 人脸数据集转换脚本(原始图像 → MAT 格式 + 边缘视图) | | `convert_extended_yaleb.py` | Extended Yale B 数据集转换脚本 | | `extract_doc.py` | Word 文档内容提取工具 | | `extract_doc2.py` | Word 文档内容提取工具(备用) | | `extract_pdf.py` | PDF 文档内容提取工具 | | `研究内容组织框图.md` | 研究内容 Mermaid 流程图 | ## BibTeX ```bibtex @article{Wang2020deepm, title={Deep Multi-view Subspace Clustering with Unified and Discriminative Learning}, author={Wang, Qianqian and Cheng, Jiafeng and Gao, Quanxue and Zhao, Guoshuai and Jiao, Licheng}, journal={IEEE Transactions on Multimedia}, volume={99}, number={9}, pages={1-11}, year={2021} } ``` ## 致谢 本项目在西南科技大学计算机科学与技术学院指导下完成,核心算法基于 DMSC-UDL 论文实现。