fMRIPrep是融合了FSL, AFNI, freesurfer,ants的pipeline。DPABISurf就是调用了fMRIPrep的workflow,基本可以这么说,DPABISurf的预处理都是fMRIPrep工作的。
fMRIPrep的安装,可以看官网,https://fmriprep.org/en/stable/index.html
也可以看看下面博主写的内容:
https://zhuanlan.zhihu.com/p/148115966
作者:QKmeans
fMRIPrep的好处在于,预设好代码,会按照最优的方式进行预处理,预处理的数据质量很好,而且全程处理步骤可控,非常棒的一个pipeline。下面一起来学习下。
虽然有python的安装等等,但是还是推荐使用官网建议的方式,用docker,docker的使用其实很简单,跟conda一样,起到一个虚拟环境和容器的作用,而且在linux下不用担心性能损耗的问题(比打开matlab要好很多)。
对于我们医学生来说,常用的docker命令也就这么几个:
- docker info # 查看docker安装的所有信息
- docker images # 列出所有的包
- docker ps -ls #查看包和状态
安装好docker以后,输入下面的命令就pull下来了包(docker中叫镜像),
docker pull nipreps/fmriprep
fMRIPrep是NiPreps的一个应用程序,这个nipreps感觉还挺值得关注的,他们貌似想把功能像、结构像的workflow都给包了,他们是专注于python的。之前我学习的MVPA有关的nibabel和nilearn都是nipreps的。
如果是python下源代码安装的,就是下面的命令:
fmriprep <input_bids_path> <derivatives_path> <analysis_level> <named_options>
如果是docker安装的,就是下面的命令:
<container_command_and_options> <container_image> \
<input_bids_path> <derivatives_path> <analysis_level> <fmriprep_named_options>
这里面的区别点就在于docker上,因为docker运行images时,需要指定images。
例如用docker在bash上运行一个名为“ubuntu”的images,命令如下:
sudo docker run -i -t ubuntu /bin/bash
但是,对于我们来说,其实我们更习惯用fmriprep XX XX XX这样符合bash习惯的命令方式。贴心的是,官方做了一个python小脚本,能以我们习惯的方式去自动生成docker命令,这就是fmriprep-docker。
按理说,有了python和docker以后,要先pull images才能运行fmriprep-docker,不过官方更贴心了,如果你忘记了pull imeage,它会在运行之前先自动下载images,很棒。
pip install --user --upgrade fmriprep-docker
在开始分析之前,还有个问题,就是fmriprep的workflow,输入的是BIDS格式,典型的BIDS格式如下:
我们从西门子核磁机器导出来的原始数据是DICOM格式,虽然说可以用dparsf转换成BIDS,但是不方便,官网给出了转换成BIDS的方法,就是BIDS App。
BIDS转换以后,就可以进行fmriprep的工作流,以下是usage介绍:
usage: fmriprep [-h] [--version] [--skip_bids_validation]
[--participant-label PARTICIPANT_LABEL [PARTICIPANT_LABEL ...]]
[-t TASK_ID] [--echo-idx ECHO_IDX] [--bids-filter-file FILE]
[--anat-derivatives PATH] [--bids-database-dir PATH]
[--nprocs NPROCS] [--omp-nthreads OMP_NTHREADS]
[--mem MEMORY_MB] [--low-mem] [--use-plugin FILE]
[--anat-only] [--boilerplate_only] [--md-only-boilerplate]
[--error-on-aroma-warnings] [-v]
[--ignore {fieldmaps,slicetiming,sbref,t2w,flair} [{fieldmaps,slicetiming,sbref,t2w,flair} ...]]
[--longitudinal]
[--output-spaces [OUTPUT_SPACES [OUTPUT_SPACES ...]]]
[--bold2t1w-init {register,header}] [--bold2t1w-dof {6,9,12}]
[--force-bbr] [--force-no-bbr] [--medial-surface-nan]
[--slice-time-ref SLICE_TIME_REF] [--dummy-scans DUMMY_SCANS]
[--random-seed _RANDOM_SEED] [--use-aroma]
[--aroma-melodic-dimensionality AROMA_MELODIC_DIM]
[--return-all-components]
[--fd-spike-threshold REGRESSORS_FD_TH]
[--dvars-spike-threshold REGRESSORS_DVARS_TH]
[--skull-strip-template SKULL_STRIP_TEMPLATE]
[--skull-strip-fixed-seed]
[--skull-strip-t1w {auto,skip,force}] [--fmap-bspline]
[--fmap-no-demean] [--use-syn-sdc] [--force-syn]
[--fs-license-file FILE] [--fs-subjects-dir PATH]
[--no-submm-recon] [--cifti-output [{91k,170k}] |
--fs-no-reconall] [--output-layout {bids,legacy}]
[-w WORK_DIR] [--clean-workdir] [--resource-monitor]
[--reports-only] [--config-file FILE] [--write-graph]
[--stop-on-first-crash] [--notrack]
[--debug {compcor,all} [{compcor,all} ...]] [--sloppy]
bids_dir output_dir {participant}
bids_dir :BIDS 有效数据集的根文件夹(应在此文件夹的顶层找到子 XXXXX 文件夹)
output_dir :预处理和可视化报告结果的输出路径
analysis_level :输入participant
–skip_bids_validation, –skip-bids-validation 假设输入数据集符合 BIDS 并跳过验证
–anat-derivatives:重复使用来自另一个 fMRIPrep 运行(不推荐)
–bids-database-dir:PyBIDS 数据库文件夹的路径,用于更快的索引(特别适用于大型数据集)
–nprocs, –nthreads, –n_cpus, –n-cpus:所有进程的最大线程数
–low-mem :尝试减少内存使用量(将增加工作目录中的磁盘使用量)
–anat-only:仅运行解剖工作流
–error-on-aroma-warnings:如果 ICA_AROMA 没有产生合理的输出(例如,如果所有组件都被归类为信号或噪声),则引发错误
workflow:
–ignore:可以选择 fieldmaps, slicetiming, sbref, t2w, flair来不执行一些任务
–output-spaces:将解剖和功能图像重新采样到的标准和非标准空间。
–bold2t1w-init:可以选择register, header
–bold2t1w-dof:可以选择6、9、12.将 BOLD 注册到 T1w 图像时的自由度。默认使用 6 度(旋转和平移)
–force-bbr:始终使用基于边界的配准(无拟合优度检查)
–force-no-bbr:不使用基于边界的配准
–slice-time-ref:将 BOLD 值校正为参考切片的时间。0 表示开始,0.5 表示中点,1 表示采集结束,默认0.5.
ICA-AROMA选项:
–use-aroma:将 ICA_AROMA 添加到预处理流中
–aroma-melodic-dimensionality:要估计的 MELODIC 分量的精确或最大数量(positive = 精确,negative = 最大值)
ANTS选项:
–skull-strip-template:选择使用 antsBrainExtraction 进行头骨剥离的模板
失真校正:
–use-syn-sdc:使用syn失真校正
FreeSurfer选项:
–fs-license-file:许可证
皮层选项:
–no-submm-recon:禁用亚毫米重建
–fs-no-reconall:禁用freesurfer预处理
其他选项:
–output-layout:可以选择bids, legacy,默认legacy
-w, –work-dir:存储中间结果的路径
–clean-workdir:清除内容的工作目录。在运行 fMRIPrep 的并发进程时,不推荐使用此标志。
–config-file:使用预先生成的配置文件
–write-graph:编写工作流图。
–notrack:选择不向 FMRIPREP 开发人员发送此运行的跟踪信息
需要注意的是,docker里面没有这么多自定义的参数,docker下的usage:
usage: fmriprep-docker [-h] [--version] [-i IMG] [-w WORK_DIR]
[--output-spaces [OUTPUT_SPACES [OUTPUT_SPACES ...]]]
[--fs-license-file PATH] [--fs-subjects-dir PATH]
[--config-file PATH] [--anat-derivatives PATH]
[--use-plugin PATH] [--bids-database-dir PATH]
[--patch PACKAGE=PATH [PACKAGE=PATH ...]] [--shell]
[--config PATH] [-e ENV_VAR value] [-u USER]
[--network NETWORK] [--no-tty]
[bids_dir] [output_dir] [{participant}]
DICOM到BIDS的话,使用heudiconv的images
docker pull nipy/heudiconv
nipreps/fmriprep 14.4GB
cgyan/dpabi 23.6GB
nipy/heudiconv 1.2GB
心理所的dpabisurf是在fmriprep基础上加了一点代码,然后做成了UI,使用起来有方便的地方,也有不方便的地方。
docker run --rm -it -v ${PWD}:/base nipy/heudiconv:latest -d /base/dicom/{subject}/*/*/*.dcm -o /base/Nifti/ -f convertall -s 219 -c none #官网命令
sudo docker run --rm -it -v /home/dell/project:/base nipy/heudiconv:latest -d /base/SourceData/{subject}/{session}/*/*.dcm -o /base/RawData/ -f convertall -s 001 -ss pretreatment -c none --overwrite #up主命令
fmriprep工作小组在文献中提出这项自动化管道能增强数据的稳定性和结果的可重复性,can help ensure the validity of inference and the interpretability of results,目前了解下来确实还不错,其直接提供了写作的方法学模板也是非常nice。
总体而言,可以尝试今后把所有的预处理工作,包括皮层预处理、体空间预处理尝试放到fmriprep上进行。