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 数据验证
运行中遇到的问题:
-
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 标志到本地目录。避免将数据集在挂载磁盘上。