2
0

backend.md 4.6 KB

后端部分说明

文件夹概览

.
├── bci_core                                // bci核心代码
│   ├── __init__.py
│   ├── feature_extractors.py               // 特征提取:主要为连续数据带通滤波及取包络
│   ├── frequencybandselection_helpers.py   // 频率选择:用于评估不同频带的可分性差异
│   ├── model.py                            // Riemann和Wiener两种模型的embedder构建
│   ├── online.py                           // HMM模型
│   ├── pipeline.py                         // 模型载入及调用流程接口
│   ├── utils.py                            // 评价函数、数据切分、重参考等功能
│   ├── viz.py                              // 可视化
│   └── setup.py                            // 安装bci_core, pip install -e .
├── data                                    // 数据文件夹
│   └── suject_name
│       ├── train_info.yml                  // 训练数据及参数
│       ├── val_info.yml                    // 测试数据及参数
│       └── model_config.yml                // 受试模型配置
├── dataloaders                             // 数据读取接口
│   ├── __init__.py
│   ├── neo.py
│   └── utils.py
├── device                                  // 外设控制接口
│   ├── __init__.py
│   ├── data_client.py                      // NEO软件转发
│   ├── fubo_pneumatic_finger.py            // fubo气动手
│   └── trigger_box.py                      // NEO triggerbox接口
├── settings                                // 全局设置
│   └── config.py
├── static
│   ├── audios
│   ├── images
│   └── models   
├── band_selection.py                       // 频带选择脚本
├── daily_routine.psyexp                    // 日常范式
├── daily_routine.py                        
├── free_grasp.psyexp                       // 自由抓握范式
├── free_grasp.py 
├── general_grasp_training.psyexp           // 抓握训练范式
├── general_grasp_training.py   
├── online_sim.py                           // 在线模拟脚本
├── train_hmm.py                            // HMM参数拟合
├── training.py                             // 模型训练范式
├── validation.py                           // 模型验证范式
└── tests                                   // 单元测试

主要功能接口

模型训练

  • training.py 拟合分类模型
    • --subj: 受试名
    • --model-type: 模型类型(riemann或baseline),默认为baseline,建议设为riemann
    • 保存路径:./static/models/{subject_name}/{model_type}_{events}_{datetime}.pkl
  • train_hmm.py 拟合HMM模型
    • --subj: 受试名
    • --model-filename: 分类模型的文件名,不需要前置路径
    • 保存路径:./static/models/{subject_name}/{model_name}_transmat.txt
  • 参数配置文件

    • train_info.yml
    • sessions:训练分类器所用数据列表
    • hmm_sessions:训练HMM所有数据列表,建议使用自由抓握范式数据
    • ori_epoch_length:不同事件的持续时长。对于抓握任务,一般设为1.5s(不考虑实际时长)
    • val_info.yml
    • sessions:测试分类器所用数据列表
    • ori_epoch_length:不同事件的持续时长。对于抓握任务,一般设为1.5s(不考虑实际时长)
    • model_config.yml
    • 模型频带配置,参见如下示例:

      baseline:
      freqs: [20, 150, 15]
      riemann:
      lf_bands: 
          - [25, 35]
      hg_bands: 
          - [55, 95]
      

模型评估

  • validation.py 片段层面评估
    • --subj: 受试名
    • --model-filename: 分类模型的文件名,不需要前置路径
    • 运行结果为数据ersd图,分类混淆矩阵图,保存在受试data文件夹下,以及AUC, accuracy, f1-score等指标
  • online_sim.py 事件层面评估
    • --subj: 受试名
    • --state-change-threshold: 状态切换阈值,只有HMM似然概率大于该阈值才会切换状态
    • --state-trans-prob: 状态切换概率,如果没有运行过HMM拟合,则使用该处输入定义HMM中的状态转移概率
    • --momentum: 概率平滑系数,数值越大概率约平滑
    • --model-filename: 分类模型的文件名,不需要前置路径
    • 运行结果包括使用了HMM和未使用HMM的预测状态转移图、precision, recall, f1-score, accuracy等指标