fMRIPrep的安装及运行

fMRIPrep是一种基于Python的软件,用于对功能磁共振成像(fMRI)数据进行预处理和分析,旨在提高分析的效率和可重复性。它是一个自动化工具,可以将原始fMRI数据转换为常用的分析格式,并将其预处理以减少可能影响数据解释的伪差异。这些步骤包括去除头部运动、去除噪声、校准时间偏移等。该软件的目标是使fMRI数据处理更容易、更快速、更准确,从而提高神经影像学研究的质量和可靠性。

这里我用的是docker 容器的形式使用fMRIPrep, 主要是简单无脑。

本教程总结安装过程和使用过程中遇到OSError: [Errno 28] No space left on device,

File Path: Files with such naming scheme are not part of BIDS specification和sqlite3.OperationalError: database is locked的问题并且解决方案如下:

安装

先确保已经安装了docker,docker安装可自行去官网查看。

docker pull nipreps/fmriprep #下载fMRIPrep的镜像,这个镜像包含了额外包(FSL,FreeSurfer在内)的所有配置
docker run --rm nipreps/fmriprep:latest --version # 测试下是否能运行

然后去FreeSurfer 那里下载license许可证文件

这个是网站:https://surfer.nmr.mgh.harvard.edu/registration.html

下载好许可证后,记得保存在你的工作目录中,以便代码运行时需要

运行

之后根据你的预处理需求进行代码。以下是代码例子:

docker run --rm \
    -v /path/to/input/data:/data \
    -v /path/to/output:/out \
    -v /path/to/freesurfer/license.txt:/opt/freesurfer/license.txt \
    nipreps/fmriprep:latest \
    /data /out \
    participant \
    --participant-label sub-01 \
    --fs-license-file /opt/freesurfer/license.txt \
    --use-aroma \
    --notrack \
    --output-spaces MNI152NLin2009cAsym:res-2mm T1w \
    --fs-no-reconall \
    --use-syn-sdc \
    --nthreads 8 \
    --mem_mb 32000 \
    --work-dir /out/working_dir \
    --skip_bids_validation \

在这个示例中,代码使用了 nipreps
/fmriprep 的 Docker 镜像,将输入数据目录
/path/to/input/data 和输出目录
/path/to/output 挂载到了 Docker 容器中,并设置了

–participant-label 参数来指定预处理特定的参与者。其他参数包括:

–fs-license-file:指定 FreeSurfer 许可文件的路径

–use-aroma:使用 ICA-AROMA 去除数据中的伪影

–notrack:禁用匿名使用追踪

–output-spaces:指定输出数据的空间,这里输出了两个空间:MNI152NLin2009cAsym:res-2mm 和 T1w

–fs-no-reconall:禁用 FreeSurfer 的重建过程

–use-syn-sdc:使用 SyN 算法进行畸变校正

–nthreads:指定 CPU 线程数

–mem_mb:指定最大内存量

–work-dir:指定工作目录,这里为
/out/working_dir

–skip_bids_validation:跳过 BIDS 数据验证

运行中遇到的问题:

  1. OSError: [Errno 28] No space left on device

原因是:fmriprep会把预处理的中间结果保存在local directory,那本机直接满了就弹出问题;
查询过程:先在本机上 df -h,查询哪里满了。df -h /var/lib/docker/
然后df -h /var/lib/docker/,弹出/dev/mapper/ubuntu–vg-ubuntu–lv 197G 57G 131G 31% / 的使用情况。 你会发现占用100%。

解决方案:设置work-dir,将中间结果保存在别的directory,比如挂载磁盘或者外接磁盘,总之空间要大。将下面的代码分别加入到代码中

-v (your work_dir path)/work:/work \

–work-dir /work \

第二种就是扩容磁盘 sudo vgdisplay 然后查看Free PE / Size 还有多少可以扩容

然后进行操作:

lvextend -L 100G /dev/mapper/ubuntu--vg-ubuntu--lv    # 增加至 10 G
lvextend -L +100G /dev/mapper/ubuntu--vg-ubuntu--lv   # 再增加 100 G 

运行完后记得:

resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv # 进行调整。
df -h #检查是否成功

2. File Path: Files with such naming scheme are not part of BIDS specification

先去https://bids-standard.github.io/bids-validator/ 检查BIDS 是否正确,也就是你数据集的目录格式

如果是从openneuro下载的,确认无误后,继续运行。

但还是出现该问题,加这个代码

–skip_bids_validation #跳过检验。

3. sqlite3.OperationalError: database is locked”

这个问题似乎是在挂载服务器上,存在的访问权限问题。

解决方案是-bids-database-dir 标志到本地目录。避免将数据集在挂载磁盘上。