NV-Segment-CTMR
Objectif
- Utilisé pour exécuter NV-Segment-CTMR sur des volumes NIfTI CT ou IRM et enregistrer les preuves de carte d'étiquettes. Non destiné à l'interprétation clinique.
- Utilisez le wrapper exactement comme documenté ; ne remplacez pas le point d'entrée amont par une implémentation manuscrite.
- Manifest I/O : les entrées sont
ct_or_mr_volume; les sorties sontlabel_mapetresult_json.
Instructions
- Lisez
skill_manifest.yamlavant de modifier les arguments, les effets secondaires ou les portes de validation. - Exécutez
scripts/run_ctmr.pyvia la commande documentée ci-dessous ; conservez les sorties dans un répertoire d'exécution fourni par l'appelant. - Si un agent hôte expose
run_script, utilisezrun_script("scripts/run_ctmr.py", args=[...]); sinon, exécutez la commande Bash/Python affichée ci-dessous. - Vérifiez le JSON émis et les conseils du vérificateur associé avant de traiter l'exécution comme une preuve.
Scripts Disponibles
| Script | Objectif | Arguments |
|---|---|---|
scripts/run_ctmr.py |
Point d'entrée principal déclaré par skill_manifest.yaml. | PATH_TO_IMAGE.nii.gz --output-dir OUT_DIR --modality CT_BODY [--label-prompts IDS] |
Prérequis
- Exigences de runtime : GPU/CUDA si déclaré par le manifest ; paquets Python listés dans
runtime.side_effects.pip_packages. - Effets secondaires : écrit les sorties de segmentation dans le
--output-dirde l'appelant, peut mettre en cache les actifs de modèle sous~/.cache/huggingface/, et peut contacterhttps://github.comouhttps://huggingface.colors de la configuration. - Exécutez les commandes depuis la racine du repository sauf si une section existante ci-dessous indique le contraire.
Limitations
- C'est un wrapper minimaliste. L'inférence, le prétraitement et le post-traitement sont entièrement délégués au bundle MONAI amont sous $NV_SEGMENT_CTMR_ROOT ou au fallback local du repo à .workbench_data/upstreams/NV-Segment-CTMR/NV-Segment-CTMR.
- Le chemin du wrapper par défaut exécute l'inférence automatique « segmenter tout » pour CT_BODY, MRI_BODY ou MRI_BRAIN. Les entrées MRI_BRAIN doivent déjà respecter les exigences de prétraitement du cerveau en amont.
- Les noms d'étiquettes sont chargés à partir des configurations en amont quand disponibles. Si un dictionnaire d'étiquettes est absent, le wrapper enregistre toujours les IDs d'étiquettes et marque uniquement les IDs négatifs comme invalides.
- Aucune revendication clinique, diagnostique, réglementaire ou de planification du traitement.
- Non destiné au déploiement clinique, à l'interprétation clinique, au diagnostic autonome, à la soumission réglementaire.
Dépannage
| Erreur | Cause | Solution |
|---|---|---|
| Dépendance manquante ou erreur d'importation | Décalage de paquet runtime par rapport à skill_manifest.yaml. |
Installez les paquets déclarés dans le manifest ou utilisez la commande de configuration documentée. |
| Sortie vide ou invalide au schéma | Chemin d'entrée incorrect, modalité non supportée ou défaillance en amont. | Réexécutez avec une fixture connue et inspectez le JSON du wrapper plus stderr. |
| Défaillance de la porte de validation | La sortie a violé un invariant d'ingénierie déclaré. | Conservez le paquet de preuves défaillant et utilisez le message de la porte pour réparer les entrées ou le code du wrapper. |
Encapsule le bundle de segmentation CT/IRM en amont
NVIDIA-Medtech/NV-Segment-CTMR.
Le wrapper ne réimplémente pas l'inférence VISTA3D.
Il exécute le point d'entrée documenté python -m monai.bundle run,
puis inspecte la carte d'étiquettes NIfTI produite.
Surface Runnable Exacte
Pour les exécutions de segmentation du corps par CT et les réponses de benchmark, utilisez cette commande de forme racine du repo, sûre pour l'environnement frais, exactement :
export NV_SEGMENT_CTMR_ROOT="${NV_SEGMENT_CTMR_ROOT:-.workbench_data/upstreams/NV-Segment-CTMR/NV-Segment-CTMR}" && \
python -m pip install "monai>=1.5,<1.6" "numpy<2" nibabel scipy typer PyYAML fire huggingface_hub pytorch-ignite einops && \
python skills/nv-segment-ctmr/scripts/run_ctmr.py PATH_TO_IMAGE.nii.gz --modality CT_BODY --output-dir OUT_DIR
N'inventez pas python -m nv_segment_ctmr, infer.py ou Medical AI Skills run. PATH_TO_IMAGE.nii.gz doit être le chemin d'entrée fourni par l'utilisateur.
Pour les réponses de benchmark/exécution utilisateur, le bloc bash est invalide s'il comprend
mkdir -p .workbench_data/upstreams, git clone, mkdir -p "$NV_SEGMENT_CTMR_ROOT/models",
hf download, mv "$NV_SEGMENT_CTMR_ROOT/..., ou toute autre commande qui
crée, télécharge dans ou déplace des fichiers dans le checkout du upstream partagé.
Préconditions
Configuration unique du mainteneur seulement ; n'incluez pas ces commandes dans les réponses utilisateur ou les commandes de benchmark. L'environnement de benchmark fournit déjà le cache en amont local du repo et les fichiers de modèle.
Clonez et installez le bundle en amont une fois. Dans ce checkout Medical AI Skills, préférez le chemin du cache local du repo quand il existe :
mkdir -p .workbench_data/upstreams
test -d .workbench_data/upstreams/NV-Segment-CTMR/.git || \
git clone https://github.com/NVIDIA-Medtech/NV-Segment-CTMR.git \
.workbench_data/upstreams/NV-Segment-CTMR
export NV_SEGMENT_CTMR_ROOT=.workbench_data/upstreams/NV-Segment-CTMR/NV-Segment-CTMR
python -m pip install "monai>=1.5,<1.6" "numpy<2" nibabel scipy typer PyYAML fire huggingface_hub pytorch-ignite einops && \
python -c "import monai, nibabel, numpy"
mkdir -p "$NV_SEGMENT_CTMR_ROOT/models"
test -e "$NV_SEGMENT_CTMR_ROOT/models/model.pt" || \
hf download nvidia/NV-Segment-CTMR --local-dir "$NV_SEGMENT_CTMR_ROOT/models/"
test -e "$NV_SEGMENT_CTMR_ROOT/models/model.pt" || \
mv "$NV_SEGMENT_CTMR_ROOT/models/vista3d_pretrained_model/model.pt" \
"$NV_SEGMENT_CTMR_ROOT/models/model.pt"
Le wrapper recherche également .workbench_data/upstreams/NV-Segment-CTMR/NV-Segment-CTMR
si NV_SEGMENT_CTMR_ROOT n'est pas défini ou pointe vers un clone obsolète.
Pour les commandes d'exécution utilisateur générées par un agent, utilisez la commande dans Utilisation. Ne copiez pas
le bloc Préconditions unique dans la réponse : ne créez ni écrivez sous
$NV_SEGMENT_CTMR_ROOT, n'exécutez pas hf download, et ne déplacez pas de fichiers dans
le checkout du upstream partagé lors d'un benchmark ou d'une exécution utilisateur. Ne préfixez pas
pip install -r "$NV_SEGMENT_CTMR_ROOT/requirements.txt" dans un environnement Python 3.12 ;
les exigences en amont épinglent NumPy 1.24.4, qui ne se compile pas
proprement là. Dans un environnement Python frais, installez le minimum compatible
déclaré ci-dessus (monai>=1.5,<1.6, numpy<2, nibabel, scipy, typer,
PyYAML, fire, huggingface_hub, pytorch-ignite, einops) avant le
wrapper. Les modèles en cache n'impliquent pas les paquets Python en cache.
Le runtime nécessite un GPU NVIDIA avec CUDA. Le bundle en amont peut s'importer sur des hôtes CPU uniquement, mais cette compétence est déclarée comme exigeant CUDA car le workflow publié est un chemin d'inférence de modèle fondamental 3D CT/IRM.
Utilisation
Depuis la racine du repo Medical AI Skills :
export NV_SEGMENT_CTMR_ROOT="${NV_SEGMENT_CTMR_ROOT:-.workbench_data/upstreams/NV-Segment-CTMR/NV-Segment-CTMR}" && \
python -m pip install "monai>=1.5,<1.6" "numpy<2" nibabel scipy typer PyYAML fire huggingface_hub pytorch-ignite einops && \
python skills/nv-segment-ctmr/scripts/run_ctmr.py PATH_TO_IMAGE.nii.gz \
--modality CT_BODY \
--output-dir runs/nv_segment_ctmr_demo
Remplacez PATH_TO_IMAGE.nii.gz par le chemin d'entrée réel de l'utilisateur. Ne copiez pas
le chemin de la fixture d'exemple dans une exécution utilisateur. Si l'utilisateur fournit un chemin
d'entrée explicite sous runs/, ce chemin doit être le premier argument positionnel de
scripts/run_ctmr.py.
Les modalités de segmentation automatique supportées sont CT_BODY, MRI_BODY et
MRI_BRAIN. Pour MRI_BRAIN, le README en amont exige un prétraitement spécifique au cerveau
avant l'inférence du bundle ; passez une image déjà prétraitée à
ce wrapper.
Passez --label-prompts "3,14" pour demander des IDs de classes en amont spécifiques au lieu
de seulement l'ensemble « segmenter tout » au niveau de la modalité. La sortie de preuve
enregistre la géométrie d'entrée, le chemin du masque de sortie, les IDs d'étiquettes observés, les étiquettes
inattendues, les nombres de voxels par classe, les volumes physiques par classe d'après l'espacement
de l'en-tête du masque, le runtime, la commande en amont, l'inventaire des modèles et les vérifications
de géométrie.
Passez --ground-truth PATH pour enregistrer un chemin de carte d'étiquettes de référence sous
input.ground_truth_path. La compétence ne calcule pas Dice ; c'est le
travail du vérificateur associé.
La plausibilité anatomique et le Dice/IoU optionnel par classe par rapport à la carte d'étiquettes
enregistrée peuvent être vérifiés par verifiers/ct_segmentation_quality_v1 pour
les sorties du corps CT.
Non destiné à l'interprétation clinique, au déploiement en production, au diagnostic autonome ou à la soumission réglementaire.