关于 bids
使用 BIDS 社区标准组织、验证、查询和转换神经科学及生物医学数据集的技能。支持 MRI 以外的数据类型,包括电生理和行为数据。
主要功能
- 01BIDS 目录与文件命名规范
- 02使用 PyBIDS 查询数据集
- 03检查是否符合规范
- 04元数据与 sidecar 指南
- 05DICOM 到 BIDS 的转换流程
适用场景
- 01整理神经科学研究数据
- 02按受试者、任务或模态查找文件
- 03共享前检查数据集
- 04将扫描仪 DICOM 数据转换为 BIDS
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ crazymsn/ academic-skills --skill bids安装后在 Claude Code 中输入/bids确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/beps.ymlbids_specification.mdconversion_tools.mdmetadata_fields.mdscripts/update_schema.py详细介绍
脑成像数据结构(BIDS)
概述
脑成像数据结构(BIDS)是一项社区标准,用于组织和描述神经科学及生物医学研究数据集。它定义了统一的文件命名规范、目录层级和元数据架构,使人和软件工具都能立即理解数据集。BIDS 由 BIDS 规范(当前为 v1.11.x)管理,并由社区通过 BIDS-Standard GitHub 组织维护。
BIDS 最初面向 MRI,如今的应用范围已远不止神经影像。该规范现已涵盖 11 种模态,横跨成像、电生理和行为数据:
- 成像:MRI(结构、功能、扩散、场图、灌注/ASL)、PET、显微成像
- 电生理:EEG、MEG、iEEG(颅内 EEG)、EMG
- 其他:NIRS(近红外光谱)、动作捕捉、行为数据(不含成像)、MR 波谱
正在推进的 BEP 将进一步扩展 BIDS,尤其是 BEP032(微电极电生理)将添加对细胞外记录的支持,包括 Neuropixels 探针,使 BIDS 能够支持动物神经科学研究中常用的方法(另请参阅 neuropixels-analysis 技能)。
主要数据存储库(OpenNeuro、DANDI)、顶级期刊(NeuroImage、Human Brain Mapping、Scientific Data)和资助机构(NIH、ERC)都要求或强烈建议采用该标准。
BIDS 的 Python 生态系统以 PyBIDS(pybids)为核心,用于查询和索引 BIDS 数据集;并提供 bids-validator(基于 Deno,可通过 PyPI 包 bids-validator-deno 安装,也可直接通过 Deno 使用)来检查规范符合性。DICOM 转换通常使用 HeuDiConv、dcm2bids 或 BIDScoin。
何时使用此技能
在以下情况下使用此技能:
- 将原始神经科学数据(成像、电生理、行为数据)整理为符合 BIDS 规范的目录结构
- 查询现有 BIDS 数据集,按受试者、会话、任务、运行或模态查找特定文件
- 在共享或提交数据集之前,根据 BIDS 规范验证数据集
- 将扫描仪生成的 DICOM 数据转换为 BIDS 格式
- 编写或编辑 JSON 侧车元数据文件
- 创建符合 BIDS 规范的衍生数据(预处理数据、分析输出)
- 为新数据集创建
dataset_description.json - 使用 BIDS 实体(受试者、会话、任务、采集、运行等)
- 配置
.bidsignore,以从验证中排除文件 - 准备数据并上传至 OpenNeuro、DANDI 或其他支持 BIDS 的数据存储库
安装
# Core BIDS querying library
uv pip install pybids
# BIDS validator (Deno-based, installed via PyPI wrapper)
uv pip install bids-validator-deno
# Alternative: install directly via Deno
# deno install -g -A npm:bids-validator
# DICOM-to-BIDS converters (install as needed)
uv pip install heudiconv # HeuDiConv - heuristic-based DICOM conversion
uv pip install dcm2bids # dcm2bids - config-file-based conversion
# BIDScoin: uv pip install bidscoin
# Useful companions
uv pip install nibabel # NIfTI/other neuroimaging file I/O
uv pip install pydicom # DICOM file reading (used by converters)
核心工作流
1. BIDS 目录结构
最简 BIDS 数据集遵循以下布局:
my_dataset/
dataset_description.json # Required: name, BIDSVersion, etc.
participants.tsv # Recommended: subject-level phenotypic data
participants.json # Recommended: column descriptions
README # Recommended: dataset documentation
CHANGES # Recommended: version history
.bidsignore # Optional: patterns to exclude from validation
sub-01/
anat/
sub-01_T1w.nii.gz
sub-01_T1w.json # Sidecar metadata
func/
sub-01_task-rest_bold.nii.gz
sub-01_task-rest_bold.json
sub-01_task-rest_events.tsv # Event timing for task fMRI
sub-01_task-rest_events.json
dwi/
sub-01_dwi.nii.gz
sub-01_dwi.json
sub-01_dwi.bvec
sub-01_dwi.bval
fmap/
sub-01_phasediff.nii.gz
sub-01_phasediff.json
sub-01_magnitude1.nii.gz
perf/
sub-01_asl.nii.gz
sub-01_asl.json
sub-01/
ses-pre/
anat/
sub-01_ses-pre_T1w.nii.gz
func/
sub-01_ses-pre_task-nback_bold.nii.gz
ses-post/
...
要点:
- 每个 NIfTI 文件都应有对应的
.json侧车文件 - 文件名包含实体信息:
sub-<label>[_ses-<label>][_task-<label>][_acq-<label>][_run-<index>]_<suffix>.<extension> - 文件名中的实体顺序由规范固定
- 在根目录层级,只有
dataset_description.json是严格必需的
2. 创建 dataset_description.json
import json
dataset_description = {
"Name": "My Neuroimaging Study",
"BIDSVersion": "1.10.0",
"DatasetType": "raw",
"License": "CC0",
"Authors": ["First Author", "Second Author"],
"Acknowledgements": "Funded by NIH R01-MH123456",
"HowToAcknowledge": "Please cite: Author et al. (2025) Journal Name.",
"Funding": ["NIH R01-MH123456", "NSF BCS-7654321"],
"ReferencesAndLinks": ["https://doi.org/10.xxxx/xxxxx"],
"DatasetDOI": "10.18112/openneuro.ds000001.v1.0.0",
"GeneratedBy": [
{
"Name": "HeuDiConv",
"Version": "1.3.1",
"CodeURL": "https://github.com/nipy/heudiconv"
}
]
}
with open("dataset_description.json", "w") as f:
json.dump(dataset_description, f, indent=4)
对于衍生数据,将 "DatasetType": "derivative" 设为指定值,并添加列出处理流程的 "GeneratedBy":
deriv_description = {
"Name": "fMRIPrep - fMRI PREProcessing",
"BIDSVersion": "1.10.0",
"DatasetType": "derivative",
"GeneratedBy": [
{
"Name": "fMRIPrep",
"Version": "24.1.0",
"CodeURL": "https://github.com/nipreps/fmriprep"
}
]
}
3. 使用 PyBIDS 查询 BIDS 数据集
from bids import BIDSLayout
# Index a BIDS dataset (validates structure on load)
layout = BIDSLayout("/path/to/bids_dataset")
# Basic queries
subjects = layout.get_subjects() # ['01', '02', '03', ...]
sessions = layout.get_sessions() # ['pre', 'post'] or []
tasks = layout.get_tasks() # ['rest', 'nback']
runs = layout.get_runs() # [1, 2] or []
# Find specific files
bold_files = layout.get(
suffix="bold",
extension=".nii.gz",
return_type="filename"
)
# Filter by subject, task, session
nback_sub01 = layout.get(
subject="01",
task="nback",
suffix="bold",
extension=".nii.gz",
return_type="filename"
)
# Get metadata from JSON sidecars (automatic inheritance)
metadata = layout.get_metadata("/path/to/sub-01/func/sub-01_task-rest_bold.nii.gz")
tr = metadata["RepetitionTime"]
# Get all entities for a file
entities = layout.get_entities()
# Build a path from entities using BIDSLayout
bids_file = layout.get(subject="01", suffix="T1w", extension=".nii.gz")[0]
print(bids_file.path)
print(bids_file.get_entities())
要点:
BIDSLayout初始化时会为整个数据集建立索引;对于大型数据集,可使用database_path缓存索引- 元数据继承:较高层级(例如根目录或受试者目录)的 JSON 侧车文件会被其下的所有文件继承,除非被覆盖
- 路径使用
return_type="filename";BIDSFile对象使用return_type="object"(默认值)
4. 验证 BIDS 数据集
通过 PyPI 使用 bids-validator(推荐)
PyPI 包 bids-validator-deno 将基于 Deno 的验证器打包为独立 CLI:
# Install
uv pip install bids-validator-deno
# Validate a dataset
bids-validator /path/to/bids_dataset
# Ignore specific warnings/errors
bids-validator /path/to/bids_dataset --ignoreNiftiHeaders --ignoreSubjectConsistency
直接通过 Deno 使用 bids-validator
如果已安装 Deno,可以不通过 PyPI 安装或运行验证器:
# Install globally via Deno
deno install -g -A npm:bids-validator
# Or run without installing
deno run -A npm:bids-validator /path/to/bids_dataset
旧版 Node.js 验证器
旧版基于 Node.js 的验证器(npm install -g bids-validator)已弃用,建议改用基于 Deno 的版本。Deno 版本是 BIDS Specification v1.9+ 的参考实现。
使用 .bidsignore
在数据集根目录创建 .bidsignore,以从验证中排除文件(采用 gitignore 语法):
# Exclude sourcedata and extra files
sourcedata/
extra_data/
*.log
*_sbref.nii.gz
**/.DS_Store
5. BIDS 实体与文件命名
实体、实体排序、允许的后缀以及所有文件名规则的权威机器可读数据源是 BIDS Schema——一种以结构化 YAML/JSON 表示的规范。此技能随附的 JSON 导出文件位于 references/bids_schema.json。该 Schema 定义在 bids-specification src/schema/ 目录中,并发布于 https://bids-specification.readthedocs.io/en/stable/schema.json。BEP 专用的 Schema 预览可在 https://github.com/bids-standard/bids-schema/tree/main/BEPs 查看。
运行 scripts/update_schema.py,从上游刷新 Schema 和 BEP 列表(除标准库外无其他依赖)。
下表是便于查阅的摘要;如有疑问,请参阅 Schema。
BIDS 文件名由按顺序排列的键值实体对构成:
| 实体 | 键 | 示例 | 必需用途 |
|---|---|---|---|
| 受试者 | sub- | sub-01 | 所有文件 |
| 会话 | ses- | ses-pre | 多会话研究 |
| 任务 | task- | task-rest | func(bold、cbv、phase)、eeg、meg |
| 采集 | acq- | acq-highres | 区分采集参数 |
| 对比增强剂 | ce- | ce-gadolinium | 对比增强图像 |
| 重建 | rec- | rec-magnitude | 重建变体 |
| 方向 | dir- | dir-AP | 场图、DWI、相位编码 |
| 运行 | run- | run-01 | 多次相同采集 |
| 回波 | echo- | echo-1 | 多回波序列 |
| 部分 | part- | part-mag | 幅度/相位拆分 |
| 空间 | space- | space-MNI152NLin2009cAsym | 模板空间中的衍生数据 |
| 描述 | desc- | desc-preproc | 仅用于衍生数据 |
文件名中的实体顺序由规范固定(定义于 bids_schema.json 的 rules.entities)。完整的编号顺序表请参阅 references/bids_specification.md。常见的部分顺序如下:
sub-<label>[_ses-<label>][_task-<label>][_acq-<label>][_ce-<label>][_rec-<label>][_dir-<label>][_run-<index>][_echo-<index>][_part-<label>][_space-<label>][_desc-<label>]_<suffix>.<extension>
按数据类型划分的常见后缀:
| 数据类型 | 后缀 |
|---|---|
| anat | T1w、T2w、FLAIR、T2star、T1map、T2map、defacemask |
| func | bold、cbv、sbref、events、physio、stim |
| dwi | dwi、sbref |
| fmap | phasediff、phase1、phase2、magnitude1、magnitude2、fieldmap、epi |
| perf | asl、m0scan、aslcontext |
| eeg | eeg、channels、electrodes、events |
| meg | meg、channels、coordsystem、events |
| ieeg | ieeg、channels、electrodes、coordsystem、events |
| pet | pet、blood |
6. DICOM 转换为 BIDS
HeuDiConv
HeuDiConv 是最灵活的 DICOM-to-BIDS 转换工具。它支持三种使用模式——从全自动到完全自定义——并可开箱即用地处理重复数据、来源追踪和源数据归档。
模式 1:ReproIn(开箱即用,新研究推荐使用)
如果扫描仪协议名称遵循 ReproIn 命名约定,转换过程完全自动化——无需编写启发式文件:
# Turnkey conversion: HeuDiConv maps ReproIn protocol names to BIDS automatically
heudiconv --files dicom/001 -o /path/to/bids -f reproin --bids --minmeta
ReproIn 协议名称会直接编码 BIDS 实体:
anat-T1w→sub-XX/anat/sub-XX_T1w.nii.gzfunc-bold_task-rest→sub-XX/func/sub-XX_task-rest_bold.nii.gzdwi_dir-AP→sub-XX/dwi/sub-XX_dir-AP_dwi.nii.gzfmap_dir-PA→sub-XX/fmap/sub-XX_dir-PA_epi.nii.gz
可以在定位像上设置一次会话(例如 anat-scout_ses-pre),ReproIn 会将其传播到该 Program 中的所有序列。被试 ID 从 DICOM 元数据中提取。重复扫描会自动编号。
模式 2:将自定义启发式映射到 ReproIn(适用于现有数据)
如果已有数据使用非 ReproIn 协议名称,可以编写一个精简的启发式文件,将这些名称映射为 ReproIn 约定,从而获得 ReproIn 的全部优势(自动处理实体、管理重复数据等)。HOWTO 见 https://github.com/repronim/reproin/issues/18。
模式 3:自定义启发式(完全灵活)
对于复杂的映射,可以编写 Python 启发式文件:
# Step 1: Reconnaissance — discover DICOM series
heudiconv --files dicom/219/itbs/*/*.dcm -o Nifti/ -f convertall -s 219 -c none
# This creates .heudiconv/219/info/dicominfo.tsv — inspect it to understand
# what was acquired and map series to BIDS names.
# Step 2: Write a heuristic file (see references/conversion_tools.md)
# Step 3: Convert
heudiconv --files dicom/219/itbs/*/*.dcm -s 219 -ss itbs \
-f Nifti/code/heuristic.py -c dcm2niix --bids --minmeta -o Nifti/
完整的启发式文件示例请参阅 references/conversion_tools.md。
要点:
- HeuDiConv 使用
dcm2niix执行实际的 DICOM-to-NIfTI 转换 --minmeta:务必使用此标志,以防过多的 DICOM 元数据导致 JSON 侧车文件溢出(可能导致 fMRIPrep/MRIQC 崩溃)- 重复数据处理:在模板中使用
{item:03d},以便在同一协议多次运行时自动编号;如果不使用,后续运行会覆盖之前的结果 .heudiconv/目录:在输出旁创建,用于存储来源记录(所用启发式文件、dicominfo.tsv、转换记录)。为确保可复现性,请将其与数据一同保留sourcedata/:为确保可复现性,HeuDiConv 会将原始 DICOM 归档为sourcedata/下的.tgz文件is_motion_corrected筛选器:在启发式文件中使用,以排除扫描仪生成的 MOCO 序列(例如if not s.is_motion_corrected)- 指定 DICOM 输入时,支持使用
--files(显式路径)和-d(包含{subject}、{session}占位符的模板)
dcm2bids(基于配置文件)
# Step 1: Generate helper output to inspect series
dcm2bids_helper -d /path/to/dicom
# Step 2: Create config file (dcm2bids_config.json)
# Step 3: Convert
dcm2bids -d /path/to/dicom -p 01 -c dcm2bids_config.json -o /path/to/bids_output
详细的配置示例请参阅 references/conversion_tools.md。
7. 元数据侧车文件
每个 BIDS 数据文件都应有一个包含采集参数的 JSON 侧车文件。元数据字段遵循继承原则:较高目录级别的侧车文件适用于其下所有匹配的文件。
继承示例:
my_dataset/
task-rest_bold.json # Applies to ALL rest BOLD files
sub-01/
func/
sub-01_task-rest_bold.json # Overrides/extends for sub-01 only
各模态的关键元数据字段:
对于 func(BOLD):
{
"RepetitionTime": 2.0,
"TaskName": "rest",
"PhaseEncodingDirection": "j-",
"TotalReadoutTime": 0.05,
"SliceTiming": [0, 0.5, 1.0, 1.5],
"EffectiveEchoSpacing": 0.00058,
"EchoTime": 0.03
}
对于 anat:
{
"MagneticFieldStrength": 3,
"Manufacturer": "Siemens",
"ManufacturersModelName": "Prisma",
"RepetitionTime": 2.3,
"EchoTime": 0.00293,
"FlipAngle": 8
}
对于 DWI:
{
"PhaseEncodingDirection": "j-",
"TotalReadoutTime": 0.05,
"EchoTime": 0.089,
"RepetitionTime": 3.4,
"MultipartID": "dwi_1"
}
要点:
dcm2niix会根据 DICOM 头信息自动生成大多数侧车字段- BOLD 必须包含
RepetitionTime和TaskName - fMRI 预处理中的切片时序校正需要
SliceTiming - 畸变校正需要
PhaseEncodingDirection和TotalReadoutTime(或EffectiveEchoSpacing) - 完整字段参考请参阅
references/metadata_fields.md
8. 任务态 fMRI 的事件文件
基于任务的 fMRI 需要 _events.tsv 文件:
onset duration trial_type response_time
0.0 0.5 face 0.435
2.5 0.5 house 0.367
5.0 0.5 face 0.512
7.5 0.5 scrambled 0.298
必需列:
onset- 相对于采集开始时间的事件起始时间,单位为秒duration- 持续时间,单位为秒(瞬时事件使用n/a)
建议列:
trial_type- 条件的类别标签response_time- 反应时间,单位为秒- 根据需要添加自定义列(并在相应的
.json侧车文件中进行说明)
9. 参与者文件
participant_id age sex group handedness
sub-01 25 M control right
sub-02 30 F patient left
sub-03 28 M control right
participants.json 侧车文件用于描述各列:
{
"age": {
"Description": "Age of the participant at time of scanning",
"Units": "years"
},
"sex": {
"Description": "Biological sex",
"Levels": {
"M": "male",
"F": "female"
}
},
"group": {
"Description": "Experimental group",
"Levels": {
"control": "Healthy control",
"patient": "Patient group"
}
},
"handedness": {
"Description": "Dominant hand",
"Levels": {
"right": "Right-handed",
"left": "Left-handed",
"ambidextrous": "Ambidextrous"
}
}
}
10. BIDS 衍生数据
处理后的输出放在 derivatives/ 目录下:
my_dataset/
derivatives/
fmriprep-24.1.0/
dataset_description.json # DatasetType: "derivative"
sub-01/
anat/
sub-01_space-MNI152NLin2009cAsym_desc-preproc_T1w.nii.gz
sub-01_space-MNI152NLin2009cAsym_desc-brain_mask.nii.gz
func/
sub-01_task-rest_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz
sub-01_task-rest_desc-confounds_timeseries.tsv
mriqc-24.0.0/
dataset_description.json
sub-01/
anat/
sub-01_T1w.html
func/
sub-01_task-rest_bold.html
group_T1w.tsv
group_bold.tsv
衍生数据约定:
space-<label>- 模板/参考空间(例如,MNI152NLin2009cAsym、T1w)desc-<label>- 处理说明(例如,preproc、brain、smoothed)res-<label>- 分辨率(例如,2表示 2 mm 等体素)- 每个处理流水线都应在
derivatives/下拥有自己的目录 - 必须拥有自己的
dataset_description.json,其中包含GeneratedBy
11. PyBIDS:高级用法
from bids import BIDSLayout
from bids.layout import BIDSLayoutIndexer
# Cache the layout index for faster repeated access
layout = BIDSLayout("/path/to/dataset", database_path="/path/to/cache.db")
# Include derivatives
layout = BIDSLayout(
"/path/to/dataset",
derivatives=["/path/to/dataset/derivatives/fmriprep-24.1.0"]
)
# Get derivative files
preproc = layout.get(
subject="01",
task="rest",
desc="preproc",
suffix="bold",
space="MNI152NLin2009cAsym",
extension=".nii.gz",
return_type="filename"
)
# Get confound regressors
confounds = layout.get(
subject="01",
task="rest",
desc="confounds",
suffix="timeseries",
extension=".tsv",
return_type="filename"
)
# Build BIDS path from entities
from bids import BIDSLayout
layout = BIDSLayout("/path/to/dataset")
path = layout.build_path(
{
"subject": "01",
"session": "pre",
"task": "rest",
"suffix": "bold",
"extension": ".nii.gz",
"datatype": "func"
},
validate=True
)
# Get all files for a subject as a DataFrame
import pandas as pd
files_df = layout.to_df()
sub01_df = files_df[files_df["subject"] == "01"]
12. BIDS 应用
BIDS 应用是容器化的分析流水线,接受 BIDS 数据集作为输入:
# General BIDS-App invocation pattern
docker run -v /path/to/bids:/data:ro -v /path/to/output:/out \
<bids-app-image> /data /out participant --participant_label 01
# Common BIDS-Apps:
# fMRIPrep - fMRI preprocessing
docker run nipreps/fmriprep /data /out participant \
--participant-label 01 --fs-license-file /license.txt
# MRIQC - MRI quality control
docker run nipreps/mriqc /data /out participant \
--participant-label 01
# QSIPrep - diffusion MRI preprocessing
docker run pennbbl/qsiprep /data /out participant \
--participant-label 01
BIDS 应用接口约定:
bids-app input_dataset output_dir {participant|group} [options]
participant级别:逐个受试者运行group级别:跨所有受试者运行(汇总/组统计)
参考资料
此技能包含详细的参考文档:
- bids_schema.json:机器可读的 BIDS 架构(来自 https://bids-specification.readthedocs.io/en/stable/schema.json)。这是实体定义、排序规则、文件名模板、各数据类型允许的后缀以及元数据字段要求的权威来源。BEP 专属架构位于 https://github.com/bids-standard/bids-schema/tree/main/BEPs。
- beps.yml:所有 BIDS 扩展提案的当前列表,包含标题、负责人、状态和链接(来自 bids-website)
- bids_specification.md:关于实体表、数据类型参考、目录结构规则、模板空间和规范变更日志的易读摘要
- metadata_fields.md:每种 BIDS 模态(anat、func、dwi、fmap、eeg、meg、pet 等)所需和推荐的 JSON 旁文件字段
- conversion_tools.md:HeuDiConv、dcm2bids 和 BIDScoin 的详细工作流,包括启发式/配置示例和故障排除
使用以下命令更新架构和 BEP:python scripts/update_schema.py
常见问题与解决方案
1. 验证器报告“Not a BIDS dataset”
原因:根目录下缺少 dataset_description.json。
解决方法:创建该文件,至少包含 {"Name": "...", "BIDSVersion": "1.10.0"}。
2. 受试者不一致警告
原因:并非所有受试者都拥有相同的一组文件(有些缺少会话、运行等)。
解决方法:这是警告,而非错误。如果这是有意的,请使用 --ignoreSubjectConsistency。在 participants.tsv 或 scans.tsv 中记录缺失数据。
3. 缺少 SliceTiming
原因:dcm2niix 无法从 DICOM 头信息中提取切片时序。
解决方法:根据扫描协议确定切片顺序,并手动添加到 JSON 旁文件中。常见模式:升序、降序、交错(奇数优先或偶数优先)。
4. 相位编码方向混淆
原因:轴标签(i/j/k 与 x/y/z 与 LR/AP/SI)容易混淆。
解决方法:在 BIDS 中,使用 NIfTI 图像轴:i=第一轴,j=第二轴,k=第三轴。- 表示负方向。对于标准轴位采集,j 通常表示前后方向。请根据采集协议进行确认。
5. PyBIDS 在大型数据集上速度较慢
原因:每次调用 BIDSLayout() 时都会对整个文件系统进行索引。
解决方法:使用 database_path 将索引缓存到 SQLite 文件中:
layout = BIDSLayout("/data", database_path="/data/.pybids_cache.db")
6. PyBIDS 未找到衍生数据
原因:衍生数据目录缺少自己的 dataset_description.json。
解决方法:每个衍生数据目录都必须包含 dataset_description.json,其中设置 "DatasetType": "derivative"。
7. 事件文件的时序不正确
原因:onset 时间使用了错误的参考点(例如触发时间而非第一个体积的时间)。
解决方法:onset 必须以秒为单位,相对于该次运行采集的第一个体积。若丢弃了空扫描,请将其考虑在内。
8. TSV 文件验证失败
原因:编码或分隔符问题(使用空格而非制表符、BOM 字符、Windows 换行符)。
修复方法:确保使用 UTF-8 编码和 Unix 换行符(\n),并以制表符分隔值。缺失值请使用 n/a(不要使用 NA、NaN 或空值)。
最佳实践
-
尽早并经常验证 - 每次转换或修改后都运行 BIDS 验证器。在错误累积之前修复它们。
-
使用元数据继承 - 将共享元数据(例如
TaskName、扫描仪参数)放在顶层 sidecar 文件中,而不是在每个受试者的目录中重复存放。 -
保留 sourcedata - 将原始 DICOM(或其他原始)数据存放在
sourcedata/下,以便转换过程可复现。将sourcedata/添加到.bidsignore。 -
从一开始就使用一致的命名方式 - 在数据采集前定义 BIDS 命名方案。使用 ReproIn 命名约定来命名扫描协议,以便自动转换。
-
记录数据集信息 - 编写详尽的
README,描述研究设计、采集参数、已知问题以及任何偏离 BIDS 的情况。 -
使用 scans.tsv 记录运行级元数据 - 记录每次运行的采集时间和质量备注:
filename acq_time quality func/sub-01_task-rest_bold.nii.gz 2025-01-15T10:30:00 good -
对数据集进行版本控制 - 使用
CHANGES记录数据集修改。对于大型数据集,可考虑使用 DataLad 进行完整版本控制。 -
对解剖图像进行面部去识别 - 在分享前,从 T1w/T2w 图像中移除面部特征(例如,使用
pydeface、mri_deface或afni_refacer)。将去识别版本存为主要数据,或使用_defacemask文件。 -
使用 BIDS URI 记录来源 - 在衍生数据中,使用 BIDS URI 引用源文件:
bids::sub-01/anat/sub-01_T1w.nii.gz。 -
优先使用社区工具 - 尽可能使用成熟的 BIDS-Apps(fMRIPrep、MRIQC、QSIPrep),而不是自定义流水线。它们能正确处理 BIDS 输入/输出,并生成符合 BIDS 规范的衍生数据。
-
研究 bids-examples - bids-examples 仓库是原型 BIDS 数据集的权威集合,涵盖不同模态和使用场景(MRI、fMRI、DWI、EEG、MEG、iEEG、PET、ASL、遗传学、衍生数据等)。在构建自己的数据集时,可将其用作参考;也可将其作为 BIDS 工具的测试数据,或了解特定模态应如何组织。每个示例都通过了 BIDS 验证器的验证。
BIDS 扩展提案(BEP)
BEP 是由社区推动的提案,旨在将 BIDS 扩展到新的模态、衍生数据或元数据。包含状态、负责人和链接的完整列表见 references/beps.yml(从 bids-website 获取)。BEP 专属的 schema 预览可在 https://github.com/bids-standard/bids-schema/tree/main/BEPs 查看。
当前 BEP(截至 schema 更新):
| BEP | 标题 | 内容 | 状态 |
|---|---|---|---|
| 004 | 磁化率加权成像 | 原始数据 | 正在寻找新负责人 |
| 011 | 结构预处理衍生数据 | 衍生数据 | 已有 PR(#518) |
| 012 | 功能预处理衍生数据 | 衍生数据 | 已有 PR(#519),schema 已实现 |
| 014 | 仿射变换和非线性场扭曲 | 衍生数据 | X5 格式开发中 |
| 016 | 扩散加权成像衍生数据 | 衍生数据 | 已有 PR(#2211) |
| 017 | 通用 BIDS 连通性数据 schema | 衍生数据 | 开发中 |
| 021 | 通用电生理衍生数据 | 衍生数据 | 开发中 |
| 023 | PET 预处理衍生数据 | 衍生数据 | 开发中 |
| 024 | 计算机断层扫描 | 原始数据 | 正在寻找贡献者 |
| 026 | 微电极记录 | 原始数据 | 正在寻找新负责人 |
| 028 | 溯源信息 | 元数据 | 已有 PR(#2099) |
| 032 | 微电极电生理学 | 原始数据 | 已有 PR(#2307),提供预览 — 涵盖 Neuropixels 和其他细胞外探针;与 neuropixels-analysis skill 相关 |
| 033 | 高级扩散加权成像 | 原始数据 | 正在寻找贡献者 |
| 034 | 计算建模 | 衍生数据 | 已有 PR(#967) |
| 035 | 使用不合规衍生数据进行大型分析 | 衍生数据 | 开发中 |
| 036 | 表型数据指南 | 原始数据 | 社区审查中 |
| 037 | 无创脑刺激 | 原始数据 | 开发中 |
| 039 | 基于降维的网络 | 原始数据 | 开发中 |
| 040 | 功能超声 | 原始数据 | 开发中 |
| 041 | 统计模型衍生数据 | 衍生数据 | 正在收集反馈 |
| 043 | BIDS 术语映射 | 元数据 | 正在收集反馈 |
| 044 | 刺激材料 | 原始数据 | 已有 PR(#2022),社区审查中 |
| 045 | 外周生理记录 | 原始数据 | 已有 PR(#2267) |
| 046 | 扩散纤维束成像 | 衍生数据 | 开发中 |
| 047 | 行为实验音频/视频录制 | 原始数据 | 已有 PR(#2231) |
相关标准:
- BIDS-Stats Models:用于定义基于 GLM 的神经影像分析的 JSON 规范
- BIDS-Derivatives(BEP003):预处理/分析输出的标准(部分内容已合并到规范中)
相关工具生态
| 工具 | 用途 |
|---|---|
| fMRIPrep | fMRI 预处理(生成 BIDS 衍生数据) |
| MRIQC | MRI 质量控制(生成 BIDS 衍生数据) |
| QSIPrep | 扩散 MRI 预处理 |
| TemplateFlow | 采用类似 BIDS 命名方式的神经影像模板和图谱 |
| Fitlins | BIDS Stats Models 实现 |
| DataLad | 大型数据集的版本控制,与 BIDS 集成 |
| OpenNeuro | 免费的 BIDS 数据集存储库 |
| DANDI | 神经生理数据档案(部分模态使用 BIDS) |
| HeuDiConv | 使用启发式 Python 文件将 DICOM 转换为 BIDS |
| dcm2bids | 使用 JSON 配置将 DICOM 转换为 BIDS |
| BIDScoin | 使用 GUI 和 YAML 配置将 DICOM 转换为 BIDS |
| nwb2bids | 将 NWB(Neurodata Without Borders)文件转换为 BIDS |
| CuBIDS | BIDS 数据集整理与协调 |
| bids2table | 对 BIDS 数据集进行高效的表格化索引 |
| bids-examples | 涵盖所有模态的典型 BIDS 数据集权威集合 |
文档
- BIDS 规范:https://bids-specification.readthedocs.io/
- BIDS 网站:https://bids.neuroimaging.io/
- PyBIDS 文档:https://bids-standard.github.io/pybids/
- BIDS 验证器:https://github.com/bids-standard/bids-validator
- BIDS 入门套件:https://bids-standard.github.io/bids-starter-kit/
- BIDS 示例:https://github.com/bids-standard/bids-examples — 涵盖每种 BIDS 模态的规范参考数据集;可用作模板和测试数据
- HeuDiConv 文档:https://heudiconv.readthedocs.io/
- BIDS 原始论文:Gorgolewski 等人(2016),Scientific Data,doi:10.1038/sdata.2016.44