附录
<div style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 20px; border-radius: 12px; margin-bottom: 30px;">
<h3 style="color: white; margin: 0;">🎯 附录概览</h3>
<p style="color: #f0f0f0; margin: 10px 0 0 0;">提供代码修改指南、答辩文档、常见问题解答和参考文献</p>
</div>
🏗️ 附录导航
- [[#附录A:代码修改指南]]
- [[#附录B:答辩文档]]
- [[#附录C:常见问题解答]]
- [[#附录D:参考文献]]
<div style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 20px; border-radius: 12px; margin-bottom: 30px;">
<h3 style="color: white; margin: 0;">🔧 附录A:代码修改指南</h3>
<p style="color: #f0f0f0; margin: 5px 0 0 0;">系统配置和参数调整指南</p>
</div>
A.1 配置路径修改
问题描述:需要修改数据集路径、输出目录或OpenFace路径。
修改位置:config.py
修改前:
# 数据集根目录
DATASET_ROOT = r"E:\L\DAIC-WOZ"
# 数据集子目录
DATA_DIR = os.path.join(DATASET_ROOT, "数据集")
# 输出目录
OUTPUT_DIR = os.path.join(DATASET_ROOT, "项目执行新文件")
# OpenFace配置
OPENFACE_PATH = r"D:\Desktop\Python\bi_ye_she_ji\环境\OpenFace_2.2.0_win_x64\FeatureExtraction.exe"
修改后:
# 数据集根目录
DATASET_ROOT = r"你的数据集路径"
# 数据集子目录
DATA_DIR = os.path.join(DATASET_ROOT, "数据集")
# 输出目录
OUTPUT_DIR = os.path.join(DATASET_ROOT, "项目执行新文件")
# OpenFace配置
OPENFACE_PATH = r"你的OpenFace路径\FeatureExtraction.exe"
修改原因:适配不同用户的文件系统结构。
优势:无需修改其他代码,只需更新配置文件即可适配新环境。
A.2 本地测试系统配置修改
问题描述:本地测试系统需要使用不同的模型目录或报告保存路径。
修改位置:本地测试系统/config_local.py
修改前:
# 模型目录
MODEL_DIR = r"E:\L\DAIC-WOZ\项目执行新文件"
# 报告保存目录
REPORT_SAVE_DIR = os.path.join(os.path.dirname(__file__), '保存报告')
修改后:
# 模型目录
MODEL_DIR = r"你的模型目录路径"
# 报告保存目录
REPORT_SAVE_DIR = r"你的报告保存路径"
修改原因:适配本地测试环境的文件路径。
优势:灵活配置本地测试环境,支持不同的部署场景。
A.3 特征提取参数调整
问题描述:需要调整音频特征提取的参数,如MFCC数量、采样率等。
修改位置:2.提取音视频特征.py 和 本地测试系统/feature_extractor.py
音频采样率修改:
# 修改前
y, sr = librosa.load(audio_path, sr=16000)
# 修改后
y, sr = librosa.load(audio_path, sr=22050) # 改为22050Hz采样率
MFCC数量修改:
# 修改前
mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
# 修改后
mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=20) # 改为20个MFCC系数
修改原因:根据不同的应用场景调整特征提取参数。
优势:灵活调整特征维度,适应不同的模型需求。
A.4 模型参数优化
问题描述:需要调整逻辑回归的正则化参数、迭代次数等。
修改位置:3.训练模型.py
修改前:
clf = LogisticRegression(
penalty='l1',
solver='liblinear',
class_weight='balanced',
random_state=42,
max_iter=1000
)
修改后:
clf = LogisticRegression(
penalty='l2', # 改为L2正则化
solver='lbfgs', # 改为lbfgs求解器
class_weight='balanced',
random_state=42,
max_iter=2000, # 增加迭代次数
C=0.5 # 调整正则化强度
)
修改原因:优化模型性能,调整正则化强度和求解器。
优势:根据数据特点优化模型参数,提高模型性能。
A.5 阈值调整
问题描述:需要手动调整分类阈值以优化召回率或精确率。
修改位置:4.本地测试.py 和 本地测试系统/config_local.py
修改前:
DEFAULT_THRESHOLDS = {
'audio': 0.798,
'visual': 0.726,
'multimodal': 0.885
}
修改后:
DEFAULT_THRESHOLDS = {
'audio': 0.7, # 降低阈值提高召回率
'visual': 0.65,
'multimodal': 0.8
}
修改原因:根据实际需求调整阈值,平衡召回率和精确率。
优势:灵活调整模型的分类标准,适应不同的应用场景。
附录B:答辩文档
B.1 项目演示脚本
演示步骤:
-
环境展示:
- 展示项目目录结构
- 展示配置文件内容
-
数据预处理演示:
- 运行
1.数据预处理.py - 展示数据验证结果
- 展示特征提取过程
- 运行
-
模型训练演示:
- 运行
3.训练模型.py - 展示5折交叉验证结果
- 展示模型保存过程
- 运行
-
本地测试演示:
- 运行
本地测试系统/gui_main.py - 展示GUI界面
- 上传测试文件
- 展示评估过程
- 展示评估报告
- 运行
-
结果分析:
- 展示模型评估结果
- 分析特征重要性
- 展示混淆矩阵
演示脚本:
# 1. 展示项目结构
ls -la
# 2. 展示配置文件
cat config.py
# 3. 运行数据预处理
python "1.数据预处理.py"
# 4. 运行特征提取
python "2.提取音视频特征.py"
# 5. 运行模型训练
python "3.训练模型.py"
# 6. 运行模型评估
python "5.准确率评估.py"
# 7. 启动GUI
python "本地测试系统/gui_main.py"
B.2 答辩PPT大纲
幻灯片1:封面
- 标题:多模态抑郁检测系统
- 副标题:基于音频和视频特征的抑郁风险评估
- 姓名、学号、指导教师
幻灯片2:目录
- 项目背景
- 技术方案
- 实验结果
- 系统演示
- 总结与展望
幻灯片3:项目背景
- 抑郁症的现状
- 传统诊断方法的局限性
- 多模态抑郁检测的优势
幻灯片4:技术架构
- 系统架构图
- 数据层、模型层、应用层、部署层
- 技术栈介绍
幻灯片5:数据预处理
- DAIC-WOZ数据集介绍
- 数据预处理流程
- 特征提取方法
幻灯片6:特征提取
- 音频特征:基频、能量、MFCC等
- 视频特征:面部动作单元AU
- 特征处理:标准化、特征选择
幻灯片7:模型训练
- 模型选择:逻辑回归
- 类别不平衡处理:SMOTE
- 交叉验证:5折交叉验证
幻灯片8:实验结果
- 多模态模型:F1分数0.75,召回率0.82
- 仅音频模型:F1分数0.72,召回率0.78
- 仅视觉模型:F1分数0.68,召回率0.75
- 混淆矩阵展示
幻灯片9:系统演示
- GUI界面展示
- 操作流程演示
- 评估报告展示
幻灯片10:核心创新点
- 多模态融合策略
- 动态阈值校准
- 特征重要性分析
- 用户友好的界面
幻灯片11:系统优势
- 自动化检测
- 客观评估
- 早期筛查
- 辅助诊断
幻灯片12:局限性
- 数据集限制
- 环境要求
- 专业诊断替代
- 语言限制
幻灯片13:未来展望
- 模型优化
- 功能扩展
- 应用拓展
- 研究方向
幻灯片14:总结
- 项目成果
- 技术亮点
- 应用价值
幻灯片15:致谢
- 感谢指导教师
- 感谢同学帮助
- 参考文献
B.3 答辩高频问题
技术类问题:
-
问题:为什么选择逻辑回归而不是深度学习模型?
回答:逻辑回归具有可解释性强、训练效率高、鲁棒性好等优点,适合本项目的特征维度和数据规模。深度学习模型需要大量数据和计算资源,而逻辑回归在本项目中已经取得了较好的性能。 -
问题:如何处理类别不平衡问题?
回答:采用了SMOTE算法进行过采样,设置class_weight=’balanced’,使用F2分数作为评估指标,以及动态阈值校准等多种策略。 -
问题:多模态融合的具体方法是什么?
回答:采用加权决策融合策略,音频权重0.55,视频权重0.45,基于实验结果优化得到的最佳权重组合。 -
问题:特征选择的方法是什么?
回答:使用SelectKBest算法,基于f_classif评分选择最具判别力的25个特征。 -
问题:如何评估模型的性能?
回答:采用5折交叉验证,使用准确率、精确率、召回率、F1分数、F2分数和AUC等多个指标进行综合评估。
应用类问题:
-
问题:系统的适用场景是什么?
回答:适用于社区心理健康筛查、医院门诊辅助诊断、企业员工心理健康评估和远程医疗咨询等场景。 -
问题:如何确保用户隐私安全?
回答:所有数据处理和模型推理都在本地完成,不涉及数据上传;生成的报告文件不包含原始音视频数据;临时文件会自动清理;支持自定义报告保存路径。 -
问题:系统的部署方式是什么?
回答:支持本地部署,使用PyInstaller打包为可执行文件,便于分发和安装。 -
问题:系统的维护成本如何?
回答:硬件要求低,普通PC即可运行;软件依赖简单,主要是Python库;模型可以通过重新训练进行更新;系统设计模块化,便于维护和扩展。 -
问题:系统的局限性是什么?
回答:基于DAIC-WOZ数据集训练,可能存在人群偏差;需要良好的录音和录像环境;仅作为辅助工具,不能替代专业诊断;目前仅支持英语语音;主要适用于成年人。
附录C:常见问题解答
C.1 环境配置问题
问题1:安装依赖时出现错误
症状:运行 pip install -r requirements.txt 时出现安装错误。
解决方案:
- 确保Python版本为3.8或更高版本
- 升级pip:
python -m pip install --upgrade pip - 逐个安装依赖包:
pip install numpy pandas librosa parselmouth scikit-learn imbalanced-learn joblib pillow moviepy pydub - 如果parselmouth安装失败,尝试从wheel文件安装:
pip install https://github.com/YannickJadoul/Parselmouth/releases/download/0.4.3/parselmouth-0.4.3-cp38-cp38-win_amd64.whl
问题2:OpenFace无法运行
症状:运行特征提取时提示OpenFace未找到或运行出错。
解决方案:
- 确认OpenFace路径配置正确:
OPENFACE_PATH = r"正确的OpenFace路径\FeatureExtraction.exe" - 下载正确版本的OpenFace:https://github.com/TadasBaltrusaitis/OpenFace/releases
- 确保Visual C++ Redistributable已安装:https://support.microsoft.com/zh-cn/help/2977003/the-latest-supported-visual-c-downloads
- 检查视频文件格式是否受支持(建议使用MP4格式)
问题3:音频特征提取失败
症状:提取音频特征时出现"音频加载失败"错误。
解决方案:
- 确认音频文件格式正确(支持.wav, .mp3, .flac等)
- 检查文件路径是否包含中文或特殊字符
- 尝试转换音频格式:
ffmpeg -i input.mp3 -acodec pcm_s16le -ar 16000 -ac 1 output.wav - 检查librosa版本:
pip show librosa,建议使用0.9.0或更高版本
C.2 数据处理问题
问题1:数据集路径错误
症状:运行数据预处理时提示"文件未找到"。
解决方案:
- 确认
config.py中的路径配置正确 - 检查数据集目录结构是否符合要求:
DAIC-WOZ/ └── 数据集/ ├── 300_P/ │ ├── 300_AUDIO.wav │ ├── 300_CLNF_AUs.txt │ └── ... ├── 301_P/ └── ... - 确认参与者文件夹命名格式为
{pid}_P
问题2:特征提取速度慢
症状:提取特征时耗时过长。
解决方案:
- 使用多线程并行处理:修改
2.提取音视频特征.py,启用多线程 - 减少特征维度:降低MFCC数量或减少提取的AU数量
- 使用缓存机制:实现特征缓存,避免重复提取
- 关闭不必要的特征提取:注释掉不需要的特征提取代码
问题3:特征文件缺失
症状:训练模型时提示"特征文件未找到"。
解决方案:
- 确认特征提取已成功运行
- 检查输出目录是否生成了特征文件:
multimodal_train_features_multithread.csvfeature_schema.json
- 重新运行特征提取脚本
C.3 模型训练问题
问题1:模型训练失败
症状:运行3.训练模型.py时出现错误。
解决方案:
- 确认特征文件存在且格式正确
- 检查特征列是否完整
- 尝试减少特征数量或调整模型参数
- 查看详细错误信息,定位具体问题
问题2:模型性能不佳
症状:模型评估结果显示准确率或召回率较低。
解决方案:
- 调整特征选择参数:修改
SelectKBest的k值 - 优化SMOTE参数:调整
k_neighbors参数 - 调整模型参数:修改逻辑回归的正则化参数
- 尝试其他分类算法:如SVM、随机森林等
问题3:模型文件过大
症状:保存的模型文件体积过大。
解决方案:
- 使用更高效的序列化格式:如
joblib替代pickle - 减少特征数量:通过特征选择减少维度
- 使用模型压缩技术:如量化、剪枝等
C.4 本地测试问题
问题1:GUI界面无法启动
症状:运行gui_main.py时出现错误。
解决方案:
- 确认所有依赖已安装
- 检查
config_local.py中的路径配置 - 确认模型文件存在于指定目录
- 查看详细错误信息,定位具体问题
问题2:报告生成失败
症状:评估完成后无法生成报告图片。
解决方案:
- 确认报告保存目录存在且可写
- 检查PIL库是否正确安装:
pip install pillow - 尝试使用不同的字体:修改
generate_report_image函数中的字体设置 - 检查内存是否足够:报告生成需要一定的内存
问题3:预测结果不准确
症状:评估结果与预期不符。
解决方案:
- 确认模型文件正确加载
- 检查特征提取是否正确
- 调整分类阈值:在设置中修改阈值参数
- 检查输入文件质量:确保音视频文件清晰、无噪声
附录D:参考文献
D.1 学术文献
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30