Un abonnement JoVE est requis pour visualiser ce contenu. Connectez-vous ou commencez votre période d'essai gratuite.

Article de méthode

Analyse quantitative automatisée des vasculatures pulmonaires dans la hernie diaphragmatique congénitale utilisant l’apprentissage profond

117 vues

DOI :

10.3791/70428

8 mai 2026

Dans cet article

Résumé

Ce protocole décrit un pipeline d’apprentissage profond entièrement automatisé pour segmenter et analyser la vascularisation pulmonaire lors des scanners néonatals. La méthode permet une évaluation morphométrique quantitative du développement vasculaire chez les sujets hernies diaphragmatiques congénitales (CDH) et témoins, soutenant la caractérisation non invasive de l’hypoplasie pulmonaire et du sous-développement vasculaire.

Résumé

La hernie diaphragmatique congénitale (HCD) se caractérise par une hypoplasie pulmonaire et un sous-développement vasculaire, entraînant un altération des échanges gazeux et une forte mortalité néonatale. Une évaluation précise et quantitative de la vascularisation pulmonaire est cruciale pour comprendre la gravité de la maladie, mais la segmentation manuelle des réseaux vasculaires tridimensionnels dans les images médicales est longue et dépend de l’opérateur.

Ce protocole propose une méthode entièrement automatisée basée sur l’apprentissage profond pour la segmentation des vaisseaux pulmonaires et l’analyse morphométrique utilisant des scanners postnatals (CT). Le pipeline comprend des étapes de prétraitement standardisées – conversion en unités de Hounsfield, fenêtrage, rééchantillonnage isotrope et égalisation adaptative d’histogrammes limités par contraste (CLAHE) – afin de normaliser les données d’imagerie et d’améliorer la visibilité vasculaire. Une architecture de réseau de neurones convolutionnel (CNN) U-Net est ensuite entraînée pour segmenter la vascularisation pulmonaire, suivie d’un algorithme de squelettisation tridimensionnelle pour quantifier les paramètres morphométriques tels que le nombre de branches, la longueur moyenne des branches et la profondeur générationnelle.

Les résultats représentatifs démontrent que le modèle proposé atteint une grande précision de segmentation, la configuration d’apprentissage par transfert offrant les meilleures performances. L’analyse morphométrique quantitative révèle une complexité vasculaire nettement réduite dans la CDH par rapport aux poumons témoins, ce qui correspond aux caractéristiques pathologiques connues de l’hypoplasie pulmonaire.

Cette approche automatisée permet une évaluation reproductible, quantitative et non invasive de la morphologie vasculaire pulmonaire dans la CDH. La méthode peut être adaptée à d’autres modalités d’imagerie et appliquée à des études sur le développement pulmonaire fœtal et néonatal, facilitant la recherche translationnelle et l’intégration clinique future.

Introduction

La hernie diaphragmatique congénitale (HAM) est une anomalie congénitale potentiellement mortelle, caractérisée par un défaut diaphragmatique, entraînant la hernie des viscères abdominaux enthorax 1,2. Cette compression physique altère gravement le développement pulmonaire, entraînant une hypoplasie pulmonaire et une hypertension pulmonaire persistante (HPHN), qui sont les principaux facteurs de morbidité et de mortalité. En plus de l’hypoplasie pulmonaire et du sous-développement vasculaire, un développement cardiaque altéré et une dysfonction ventriculaire ont également montré une influence significative sur les résultats cliniques chez les nouveau-nés atteints de CDH. La physiopathologie sous-jacente implique un développement anormal des voies respiratoires et du lit vasculaire pulmonaire, entraînant une réduction du nombre de vaisseaux, une muscularisation accrue des artérioles et, par conséquent, une résistance vasculaire élevée 3,4. Des biomarqueurs objectifs et quantitatifs sont nécessaires pour stratifier avec précision le risque, guider les interventions et surveiller la réponse au traitement chez les patients atteints deCDH 5. Un aspect crucial de cette évaluation est l’analyse détaillée du vascularisation pulmonaire, qui peut fournir des éclairages sur l’étendue de l’hypoplasie pulmonaire et la capacité fonctionnelle des poumons. Les avancées dans les techniques d’imagerie, en particulier la tomodensitométrie (CT), ont amélioré notre capacité à visualiser et quantifier la vascularisation pulmonaire en détail 6,7.

Bien que la tomodensitométrie postnatale (CT) offre un détail anatomique haute résolution des poumons, l’analyse de l’arbre vasculaire pulmonaire complexe reste difficile. Les méthodes existantes de segmentation vasculaire reposent souvent sur des techniques traditionnelles de traitement d’image qui nécessitent une intervention manuelle importante, sont sujettes aux artefacts d’image, et peuvent ne pas être robustes face aux distorsions anatomiques sévères de laCDH 7,8,9,10. L’apprentissage profond, en particulier les réseaux neuronaux convolutionnels (CNN) tels que l’architecture U-Net, a connu un succès remarquable dans la segmentation automatisée d’images médicales. Cependant, de nombreux modèles existants sont entraînés sur des sujets sains ou sur d’autres contextes pathologiques, limitant leur applicabilité aux anomalies congénitales telles que les CDH 10,11,12,13.

Malgré ces avancées, il subsiste des lacunes importantes dans la littérature. De nombreuses études se sont concentrées sur des individus en bonne santé ou des affections pulmonaires spécifiques, avec une attention limitée aux anomalies congénitales comme laCDH 12. De plus, bien que les modèles d’apprentissage profond aient montré de meilleures performances, ils nécessitent souvent de grands ensembles de données annotés pour l’entraînement, qui ne sont pas toujours disponibles pour des conditions rares telles que la CDH. De plus, les modèles existants n’ont pas encore pleinement relevé le défi de distinguer les différents types de vaisseaux pulmonaires (par exemple, artères et veines) en présence de distorsions anatomiques sévères causées par la CDH. Cette limitation souligne la nécessité de recherches supplémentaires pour développer des modèles plus robustes capables de segmenter et d’analyser avec précision la vascularisation pulmonaire chez les patients atteints de CDH.

Cette étude vise à combler ces lacunes en développant et validant un cadre d’apprentissage profond entièrement automatisé pour segmenter la vascularisation pulmonaire et extraire des caractéristiques morphométriques quantitatives à partir des scanners CT. Une innovation clé de notre approche est d’entraîner notre modèle sur un ensemble de données combiné de patients atteints de CDH et de témoins, ce qui lui permet d’apprendre une représentation robuste des schémas vasculaires normaux et pathologiques. Bien que l’imagerie CT implique des radiations ionisantes, ce qui la rend inadaptée au dépistage longitudinal de routine, cette étude constitue une preuve de concept cruciale. L’objectif principal de cette étude est d’établir que la quantification radiologique automatisée de la structure vasculaire est réalisable et peut différencier de manière fiable les patients atteints de CDH des témoins. Le succès dans ce domaine fournit la validation nécessaire pour adapter ce cadre quantitatif aux modalités d’imagerie sans radiation, telles que l’imagerie par résonance magnétique (IRM), pour de futures applications cliniques.

Accès restreint. Veuillez vous connecter ou commencer un essai pour afficher ce contenu.

Protocole

Toutes les procédures impliquant des participants humains ont été menées conformément aux directives du comité d’éthique de la recherche humaine institutionnelle et ont été approuvées par le Conseil d’Éthique Institutionnel (IRB #2017-6361). L’étude a été réalisée en conformité avec les normes réglementaires applicables. Les données des patients ont été collectées rétroactivement et désidentifiées avant l’analyse. Un aperçu du système développé est présenté à la Figure 1.

1. Prétraitement d’image

  1. Chargez les scanners bruts des patients néonatals au format DICOM dans l’environnement de travail.
    1. Ouvrez le logiciel d’analyse d’images médicales et créez un nouvel espace de travail de projet.
    2. Cliquez sur Fichier > Importer > série DICOM .
    3. Naviguez jusqu’au dossier contenant le scanner thoracique néonatal au format DICOM et sélectionnez la série complète d’images.
    4. Vérifiez que toutes les tranches de la série sont correctement détectées et ordonnées en fonction des métadonnées d’acquisition (par exemple, numéro d’instance).
    5. Confirmez les dimensions de l’image, l’espacement des voxels et l’épaisseur des tranches dans le panneau de métadonnées pour garantir la cohérence entre les scans.
    6. Chargez la série dans l’espace de travail et inspectez visuellement les vues axiale, coronale et sagittale pour confirmer la bonne orientation et l’absence d’erreurs de chargement.
  2. Convertir les fichiers DICOM au format NIfTI à l’aide de logiciels open source pour faciliter la manipulation et l’analyse.
    1. Ouvrez une fenêtre de terminal dans l’environnement informatique scientifique.
    2. Naviguez jusqu’au répertoire contenant la série d’images DICOM en utilisant la commande CD.
    3. Exécutez l’outil de conversion DICOM-vers-NIfTI en utilisant la structure de commandes suivante : dcm2niix -z y -f output_filename -o /output_directory /input_directory
    4. Assurez-vous que la compression est activée (-z y) pour générer un fichier .nii.gz compressé.
    5. Vérifiez que le fichier de sortie est généré avec succès dans le répertoire de sortie spécifié.
    6. Ouvrez le fichier NIfTI converti dans un visualiseur d’images médicales et inspectez visuellement les plans axial, coronal et sagittal pour confirmer la bonne orientation spatiale et l’intégrité de l’image.
    7. Confirmez l’espacement des voxels et les dimensions de l’image pour garantir la cohérence entre tous les sujets avant le prétraitement.
  3. Convertir les intensités d’image en unités de Hounsfield (HU) à l’aide de métadonnées spécifiques au scanner ou de formules standard.
    1. Extraire les paramètres de métadonnées DICOM Rescale Slope et Rescale Intercept de l’en-tête de l’image pour chaque scan.
    2. Pour chaque valeur d’intensité voxel (I_raw), calculez l’unité de Hounsfield (HU) correspondante en utilisant la formule suivante : HU = (I_raw × Pente de rééchelle) + Intercept de remise à niveau.
    3. Appliquez la conversion à l’ensemble du volume de l’image 3D en utilisant des opérations matricielles élément par élément dans l’environnement informatique scientifique.
    4. Confirmez la conversion correcte en vérifiant que les régions d’air sont d’environ −1000 HU et que les régions des tissus mous restent dans les plages physiologiques attendues.
    5. Enregistrez le volume converti comme un nouveau fichier NIfTI pour préserver les données originales.
  4. Appliquez un fenêtrement pour mettre en valeur les poumons et les tissus mous. Réglez le niveau de fenêtre (WL) à -400 HU et la largeur de fenêtre (WW) à 1500 HU.
    1. Ouvrez le fichier NIfTI converti dans le logiciel de visualisation d’images.
    2. Naviguez vers l’affichage de l’image ou le panneau de réglages d’intensité.
    3. Sélectionnez l’option d’ajustement Fenêtre/Niveau .
    4. Réglez manuellement la valeur du Niveau de Fenêtre (WL) à -400 unités de Hounsfield (HU).
    5. Réglez la valeur de largeur de fenêtre (WW) à 1500 HU.
    6. Confirmez et appliquez les paramètres pour mettre à jour la visualisation de l’image.
    7. Vérifiez que le parenchyme pulmonaire et les vaisseaux pulmonaires sont clairement distinguables des structures osseuses et médiastinales avant de procéder aux étapes de prétraitement supplémentaires.
  5. Effectuer un rééchantillonnage isotrope pour garantir que les dimensions des voxels sont uniformes (par exemple, 1 mm × 1 mm × 1 mm) en utilisant une interpolation trilinéaire.
    1. Chargez l’image NIfTI dans l’environnement Python à l’aide d’une bibliothèque de traitement d’images médicales.
    2. Extraire l’espacement original des voxels à partir des métadonnées de l’en-tête de l’image.
    3. Définissez l’espacement isotrope de la cible comme (1,0, 1,0, 1,0) mm.
    4. Calculez les nouvelles dimensions de l’image en utilisant la formule : new_size = original_size × (original_spacing / target_spacing)
    5. Initialiser un objet de rééchantillonnage.
    6. Réglez la méthode d’interpolation sur interpolation trilinéaire.
    7. Attribuez l’espacement des voxels cibles (1,0 mm × 1,0 mm × 1,0 mm).
    8. Définissez la nouvelle taille d’image calculée.
    9. Conservez la direction de l’image originale et les métadonnées d’origine.
    10. Exécutez l’opération de rééchantillonnage.
    11. Sauvegardez l’image rééchantillonnée au format NIfTI pour les étapes suivantes de prétraitement.
    12. Vérifiez l’espacement isotrope en vérifiant les dimensions mises à jour des voxels dans l’en-tête de l’image avant de procéder.
  6. Appliquer l’égalisation adaptative par histogramme limité par contraste (CLAHE) pour améliorer le contraste et la visibilité des structures vasculaires.
    1. Importez la bibliothèque de traitement d’image nécessaire dans l’environnement Python.
    2. Convertir le volume CT 3D rééchantillonné en format en niveaux de gris 8 bits si nécessaire, en utilisant une normalisation linéaire d’intensité pour cartographier la plage HU sélectionnée à 0–255.
    3. Traiter le volume CT tranche par tranche dans le plan axial pour appliquer CLAHE en 2D.
    4. Initialiser l’objet CLAHE en utilisant les paramètres suivants : clipLimit = 2.0, tileGridSize = (8, 8).
    5. Pour chaque tranche axiale, appliquez la fonction CLAHE pour renforcer le contraste local.
    6. Reconstruis les tranches traitées en un volume 3D après l’application CLAHE.
    7. Sauvegardez le volume amélioré par contraste au format NIfTI pour la segmentation ultérieure.
    8. Vérifiez visuellement que les vaisseaux pulmonaires sont plus distinguables du parenchyme environnant sans amplification excessive du bruit avant de procéder.
  7. Inspectez visuellement un sous-ensemble d’images prétraitées afin d’assurer la qualité et la cohérence à travers l’ensemble de données.
    1. Sélectionnez au hasard au moins 10 % de l’ensemble des jeux de données pour une évaluation manuelle de la qualité.
    2. Ouvrez chaque volume prétraité sélectionné dans le visualiseur d’images médicales.
    3. Inspecter les plans axial, coronal et sagittal pour vérifier les éléments suivants : Orientation spatiale correcte ; Absence d’artefacts de troncature ; Application appropriée des paramètres de fenêtrage ; Rééchantillonnage isotrope réussi (espacement uniforme des voxels) ; Amélioration adéquate du contraste après CLAHE.
    4. Confirmez que les vaisseaux pulmonaires sont clairement distinguables des structures parenchymaires adjacentes sans amplification excessive du bruit.
    5. Comparez les images prétraitées avec les volumes originaux convertis par HU afin de s’assurer que les étapes de prétraitement n’introduisent pas de distorsion ou d’incohérences anatomiques.
    6. Documentez toute erreur de prétraitement et répétez le prétraitement pour les cas concernés si nécessaire.

2. Annotation manuelle

  1. Sélectionnez un sous-ensemble représentatif de scanners CT provenant à la fois de patients témoins et atteints de CDH à utiliser pour l’annotation manuelle. Assurez-vous d’une répartition équilibrée de la variabilité anatomique.
    1. Identifiez tous les scanners CT prétraités éligibles provenant des cohortes témoins et CDH.
    2. Excluez les scans présentant des artefacts de mouvement sévères ou une couverture pulmonaire incomplète.
    3. Sélectionnez au hasard un nombre prédéfini de cas dans chaque groupe pour assurer une représentation équilibrée.
    4. Assurez-vous d’inclure des cas présentant une gamme de variabilité anatomique, y compris des différences de volume pulmonaire, de densité vasculaire et de gravité du déplacement médiastinal.
    5. Confirmez que certains cas de CDH présentent des degrés variables d’hypoplasie pulmonaire, lorsque cela est possible.
    6. Documentez les identifiants de cas sélectionnés avant de procéder à l’annotation manuelle.
  2. Chargez les images NIfTI prétraitées dans un outil d’annotation d’images médicales 3D.
    1. Ouvre le logiciel d’annotation d’images médicales 3D.
    2. Créez un nouveau projet ou une session de segmentation.
    3. Cliquez sur Fichier > Ouvrir l’image (ou option d’importation équivalente).
    4. Naviguez dans le répertoire contenant le fichier NIfTI prétraité (.nii ou .nii.gz) et sélectionnez l’image.
    5. Confirmez le chargement réussi en vérifiant la bonne orientation de l’image dans les vues axiale, coronale et sagittale.
    6. Ajustez les paramètres d’affichage si nécessaire pour optimiser la visualisation.
    7. Créez une nouvelle étiquette de segmentation ou une couche de masque pour stocker les annotations vasculaires manuelles.
    8. Sauvegardez le fichier projet avant d’initier l’annotation manuelle.
  3. En utilisant les vues axiale, coronale et sagittale, segmentez manuellement la vasculature pulmonaire en délimitant les structures vasculaires de chaque tranche concernée.
    1. Activez la couche d’étiquettes de segmentation créée à l’étape 2.2.
    2. Sélectionnez l’outil de dessin manuel ou de pinceau dans le logiciel d’annotation.
    3. Ajustez dynamiquement la taille du brosse selon le diamètre du récipient pour garantir un tracé précis des limites.
    4. En utilisant les tranches axiales comme plan de référence principal, délimitez manuellement les structures vasculaires pulmonaires visibles, incluant les branches artérielles et veineuses.
    5. Excluez les structures non vasculaires telles que les bronches, les parois des voies respiratoires et les tissus médiastinaux.
    6. Faites défiler tranche par tranche l’ensemble du volume pulmonaire pour assurer une annotation continue de chaque branche vasculaire.
    7. Validez chaque région annotée en vue coronale et sagittale afin de confirmer la cohérence anatomique et d’éviter les discontinuités.
    8. Inclure les récipients jusqu’aux plus petites branches visuellement discernables tout en évitant la sursegmentation des artefacts sonores.
    9. Affichez périodiquement un aperçu 3D de la segmentation pour vérifier la continuité spatiale de l’arbre vasculaire.
    10. Sauvegardez le masque de segmentation complété au format NIfTI avant de procéder à l’entraînement du modèle.
  4. N’annoter que les vaisseaux pulmonaires, à l’exclusion du cœur, des bronches et des principales structures non pulmonaires.
    1. Identifier les artères et veines pulmonaires à l’intérieur du parenchyme pulmonaire en utilisant les tranches axiales comme référence principale.
    2. Incluent les branches vasculaires intraparenchymaires provenant des principales artères pulmonaires et s’étendant distalement dans les champs pulmonaires.
    3. Excluez les cavités cardiaques, les oreillettes, les ventricules et les grands vaisseaux.
    4. Excluez les structures des voies respiratoires, y compris les bronches et les parois bronchiques, en les distinguant des vaisseaux en fonction de la morphologie et des caractéristiques luminales.
    5. Évitez d’étiqueter les tissus mous médiastinaux, la plèvre et les structures de la paroi thoracique.
    6. Utilisez des vues multiplanaires (axiale, coronale, sagittale) pour confirmer que les structures annotées suivent la continuité vasculaire et les schémas de ramification attendus.
    7. Lorsque la différenciation vaisseau-voies respiratoires est incertaine, vérifier la continuité entre les tranches adjacentes afin de confirmer la trajectoire vasculaire avant le marquage.
    8. Effectuez un rendu 3D final du volume segmenté pour s’assurer que seul l’arbre vasculaire pulmonaire a été inclus.
  5. Si disponible, consultez des experts en imagerie clinique pour valider les régions ambiguës lors de l’annotation.
    1. Identifiez les régions où les limites des vaisseaux sont incertaines en raison d’un faible contraste, d’une distorsion anatomique ou de la proximité des bronches ou des structures médiastinales.
    2. Signalez ces régions dans le logiciel d’annotation à l’aide d’un outil temporaire d’étiquette ou de commentaire.
    3. Présentez les zones signalées à un expert en imagerie clinique.
    4. Examinez ensemble les vues axiale, coronale et sagittale pour déterminer si la structure représente la vascularisation pulmonaire.
    5. Modifiez le masque de segmentation selon le consensus des experts.
    6. Documentez les régions corrigées avant de finaliser le masque de la réalité sur le terrain.
  6. Effectuez une validation inter-évaluateurs en faisant revoir et affiner chaque segmentation par au moins deux annoteurs indépendants. En cas de désaccord, parvenez à un consensus par discussion ou arbitrage.
    1. Attribuez chaque scanner sélectionné à deux annoteurs indépendants ayant de l’expérience en analyse d’imagerie thoracique.
    2. Assurez-vous que les annotateurs effectuent la segmentation indépendamment et soient aveugles face aux résultats des autres.
    3. Après avoir terminé les annotations indépendantes, comparez les masques de segmentation à l’aide d’une métrique quantitative de chevauchement (par exemple, le coefficient de similarité de Dice).
    4. Identifier les zones de désaccord en calculant les différences voxelles entre masques.
    5. Examinez conjointement les régions discrepantes dans les plans axial, coronal et sagittal.
    6. Atteindre un consensus par une discussion structurée.
    7. Si un désaccord persiste, il faut faire appel à un troisième évaluateur senior pour arbitrer la décision finale.
    8. Gardez le masque de segmentation consensuel comme dernière étiquette de vérité sur le terrain pour l’entraînement du modèle.
  7. Sauvegardez les masques annotés des vaisseaux dans la même résolution et espace que les images CT originales. Stockez-les au format NIfTI en utilisant des conventions de nommage cohérentes.
    1. Assurez-vous que le masque de segmentation consensus final est stocké sous forme d’une carte d’étiquettes binaire, où les voxels vasculaires reçoivent une valeur de 1 et les voxels de fond une valeur de 0.
    2. Confirmez que le masque de segmentation conserve le même espacement voxel, les dimensions de l’image, l’origine et la matrice d’orientation que l’image CT prétraitée correspondante.
    3. Exportez le masque de segmentation au format NIfTI (.nii ou .nii.gz) en utilisant la fonction d’exportation du logiciel d’annotation.
    4. Utilisez une convention de nommage cohérente structurée comme suit : SubjectID_Group_VesselMask.nii.gz ; (par exemple, CDH_012_VesselMask.nii.gz).
    5. Stockez les masques dans un répertoire dédié parallèle au jeu de données image pour maintenir la cohérence des appariements.
    6. Effectuer une vérification finale en rechargeant à la fois l’image CT et son masque correspondant afin de confirmer un alignement spatial parfait avant l’entraînement du modèle.
  8. Utilisez ces segmentations étiquetées manuellement comme la vérité de terrain pour l’entraînement et l’évaluation du modèle.

3. Entraînement et validation du modèle

  1. Organisez le jeu de données en trois sous-ensembles : ensembles d’entraînement, de validation et de test. Dans cette étude, utilisez 35 cas témoins et 20 cas CDH pour la formation, 5 cas témoins et 10 cas CDH pour la validation, et réservez le reste pour des tests indépendants.
    1. Compiler toutes les images CT prétraitées et leurs masques de vaisseaux consensus correspondants dans un seul ensemble de données.
    2. Effectuer la division des jeux de données au niveau du patient pour éviter la fuite de données entre sous-ensembles.
    3. Attribuez aléatoirement 35 cas témoins et 20 cas CDH à l’ensemble d’entraînement.
    4. Attribuez aléatoirement 5 cas témoins et 10 cas CDH à l’ensemble de validation.
    5. Assigner tous les cas restants à un ensemble de tests indépendant de retenue qui n’est pas accédé lors de l’entraînement du modèle ou de l’ajustement des hyperparamètres.
    6. Assurez-vous que chaque image CT et son masque de segmentation correspondant restent appariés tout au long du processus de séparation.
    7. Vérifiez la répartition des classes dans chaque sous-ensemble afin de maintenir la représentation des cas contrôle et CDH.
    8. Documenter l’allocation finale des identifiants de sujet pour la reproductibilité.
  2. Normaliser les valeurs d’intensité de toutes les images entre 0 et 1 afin d’améliorer la convergence des réseaux neuronaux pendant l’entraînement.
    1. Pour chaque volume CT, restreignez d’abord les valeurs d’intensité à une plage d’unités de Hounsfield prédéfinie afin d’éliminer les valeurs extrêmes.
    2. Appliquez un clipping d’intensité de sorte que les valeurs inférieures à −1000 HU soient fixées à −1000 HU et les valeurs supérieures à 500 HU.
    3. Effectuer la normalisation min–max indépendamment pour chaque volume en utilisant la transformation suivante : Valeur normalisée = (I − I_min) / (I_max − I_min), où I_min et I_max correspondent aux valeurs d’intensité minimale et maximale découpées du volume.
    4. Appliquez la normalisation au volume 3D complet en utilisant des opérations élément par élément dans l’environnement de calcul.
    5. Vérifiez que toutes les intensités voxel sont dans l’intervalle [0, 1] avant d’entrer les données dans le réseau de neurones.
    6. Assurez-vous que les paramètres de normalisation sont dérivés indépendamment pour chaque image afin d’éviter la fuite d’information entre les ensembles d’entraînement, de validation et de test.
  3. Implémentez une architecture de réseau neuronal convolutionnel U-Net en utilisant un cadre d’apprentissage profond tel que PyTorch ou TensorFlow.
    1. Créez un nouveau projet dans un environnement de développement de deep learning et établissez une graine aléatoire fixe pour la reproductibilité.
    2. Définissez une architecture U-Net 2D (Figure 2) pour la segmentation binaire avec une structure encodeur-décodeur et des connexions à saut.
    3. Définissez l’entrée du modèle en tranches CT à canal unique (niveaux de gris) et définissez la sortie du modèle comme une carte de probabilité à canal unique représentant la vraisemblance du vaisseau.
    4. Configurez la couche finale pour utiliser une fonction d’activation sigmoïde afin de produire des valeurs dans l’intervalle [0, 1].
    5. Définir la fonction de perte pour la segmentation binaire (par exemple, l’entropie croisée binaire) et initialiser un optimiseur.
    6. Spécifiez les hyperparamètres d’entraînement, y compris la taille du lot, le nombre d’époques et le taux d’apprentissage, et notez ces valeurs pour les rapports.
    7. Préparez les chargeurs de données pour alimenter les ensembles de données d’entraînement et de validation dans le modèle avec un mélange et un batch cohérents.
    8. Conservez la définition complète du modèle et la configuration des hyperparamètres pour la reproductibilité.
  4. Configurez le modèle avec une structure encodeur-décodeur, incorporant des connexions à saut et des couches de normalisation batch pour améliorer la précision de segmentation.
    1. Définissons un encodeur composé de blocs convolutionnels répétés. Assurez-vous que chaque bloc inclut :
      Deux couches convolutionnelles 2D consécutives (taille du noyau 3 × 3, bourrage = 1)
      Normalisation par lots appliquée après chaque convolution
      Activation de l’unité linéaire rectifiée (ReLU)
    2. Appliquez 2 × 2 de pooling max avec un pas de 2 après chaque bloc d’encodeur pour réduire progressivement la résolution spatiale.
    3. Doublez le nombre de canaux de feature après chaque étape de downsampling.
    4. Définissez le décodeur en utilisant la convolution transposée (noyau 2 × 2, stride 2) pour l’upsampling.
    5. Concaténer des caractéristiques correspondant entre la couche encodeur et la couche décodeur via des connexions de saut pour préserver l’information spatiale.
    6. Appliquez deux couches convolutionnelles avec normalisation batch et activation ReLU après chaque étape de concaténation.
    7. Utilisez une couche finale de convolution 1 × 1 pour mapper les caractéristiques vers une sortie à canal unique.
    8. Appliquer une fonction d’activation sigmoïde pour produire une carte de probabilité voxel par voxel pour la segmentation des vaisseaux.
  5. Train trois configurations du modèle :
    1. Modèle de base (entraînement à partir de zéro)
      1. Initialiser les poids U-Net de manière aléatoire (par exemple, initialisation He).
      2. Utilisez uniquement le jeu de données artères-veines annoté manuellement en entrée.
      3. Redimensionnez les images saisies à 512 × 512 pixels.
      4. Normaliser les valeurs d’intensité à la plage [0,1].
      5. Réglez la taille du lot à 8 (ou le maximum autorisé par la mémoire GPU).
      6. Utilisez l’optimiseur Adam avec un taux d’apprentissage = 1 × 10⁻4.
      7. Utilisez la Cross-Entropie binaire (pour la segmentation binaire) ou la Cross-Entropy loss (pour la classification artère et veine).
      8. Entraînez-vous pour 30 époques.
      9. Surveillez la perte de validation après chaque époque.
      10. Sauvegardez les poids du modèle correspondant à la perte de validation la plus faible.
      11. Dans PyTorch, suivez les étapes 3.5.1.13–3.5.1.14.
      12. Définir optimiseur : torch.optim.Adam(model.parameters(), lr=1e-4)
      13. Définissez la perte : torch.nn.BCEWithLogitsLoss() ou torch.nn.CrossEntropyLoss()
      14. Utilisez model.train() pendant la formation et model.eval() pendant la validation.
    2. Modèle d’entrée segmentation (entrée du masque auxiliaire du récipient)
      1. Modifiez la couche d’entrée pour accepter deux canaux :
        Canal 1 : Image CT
        Canal 2 : Masque binaire de segmentation de vaisseaux
      2. Concatatelez l’image CT et le masque du vaisseau le long de la dimension du canal avant de les alimenter dans le réseau.
      3. Gardez l’architecture identique au modèle de base.
      4. Utilisez le même optimiseur, le même taux d’apprentissage, la taille du lot et le même nombre d’époque que dans l’étape 3.5.1.
      5. Sauvegardez les poids les mieux performants en fonction du score de validation F1.
    3. Modèle d’apprentissage par transfert (initialisation pré-entraînée)
      1. Chargez les poids U-Net préentraînés entraînés sur un ensemble de données générique de segmentation de vaisseaux (comme décrit dans le rapport d’avancement).
      2. Gelez les couches d’encodeurs pour les 5 premières époques (étape de stabilisation optionnelle).
      3. Dégelez toutes les couches et continuez les ajustements finis pour les époques restantes.
      4. Utilisez un taux d’apprentissage réduit = 5 × 10⁻5 lors de l’ajustement fin.
      5. Entraînez-vous pendant 30 époques au total.
      6. Applique le flipping horizontal comme augmentation de données pendant l’entraînement.
      7. Sauvegardez le modèle avec le score F1 de validation le plus élevé.
  6. Utilisez la perte binaire d’entropie croisée et l’optimiseur Adam avec un taux d’apprentissage initial de 0,001. Réduisez le taux d’apprentissage de manière adaptative si la perte de validation stagne.
    1. Définition de la fonction de perte
      1. Pour la segmentation binaire des vaisseaux, utilisez la perte binaire d’entropie croisée avec logites.
      2. Dans PyTorch, définissez : critère = torch.nn.BCEWithLogitsLoss()
      3. Si vous effectuez une classification multi-classes artères-veines, utilisez : critère = torche.nn.CrossEntropyLoss()
    2. Définition de l’optimiseur
      1. Utilisez l’optimiseur Adam avec un taux d’apprentissage initial de 0,001.
      2. Dans PyTorch : optimiser = torch.optim.Adam(model.parameters(), lr=0.001)
    3. Permettre la réduction du taux d’apprentissage adaptatif
      1. Mettez en place un planificateur de taux d’apprentissage pour réduire le taux d’apprentissage lorsque la perte de validation cesse de s’améliorer.
      2. Utilisez le planificateur ReduceLROnPlateau.
      3. Dans PyTorch : planificateur = torch.optim.lr_scheduler. ReduceLROnPlateau(
        Optimiseur,
        mode='min',
        facteur = 0,5,
        patience=5,
        verbose=Vrai
        )
      4. Après chaque phase de validation, appelez : scheduler.step(validation_loss)
    4. Configuration de la boucle d’entraînement.
      1. Pour chaque époque, suivez les étapes 3.6.4.2–3.6.4.7 :
      2. Définir le modèle en mode entraînement : model.train()
      3. Effectuez une passe en avant.
      4. Perte de calcul.
      5. Rétropropagation : loss.backward()
      6. Pondérations à jour : optimizer.step()
      7. Zéro gradient avant la prochaine itération : optimizer.zero_grad()
      8. Après la phase d’entraînement, passez en mode évaluation en utilisant model.eval() et calculez la perte de validation.
    5. Arrêt anticipé (optionnel mais recommandé)
      1. Si la perte de validation ne s’améliore pas pendant 10 époques consécutives, arrêtez l’entraînement pour éviter le sur-ajustement.
  7. Appliquer des techniques d’augmentation de données telles que des rotations aléatoires, des retournements et des déformations élastiques pour augmenter la robustesse et réduire le surajustement.
    1. Définition d’un pipeline d’augmentation
      1. Appliquez les augmentations uniquement au jeu de données d’entraînement.
      2. Appliquez des transformations spatiales identiques à l’image CT et à son masque de segmentation correspondant.
    2. Des rotations aléatoires.
      1. Appliquez des rotations aléatoires dans le plan entre -15° et +15°.
      2. Dans PyTorch (en utilisant la vision torche ou les albumentations) : RotationRandom (degrés=15)
    3. Flips horizontaux et verticaux.
      1. Appliquez un retournement horizontal avec une probabilité p = 0,5.
      2. Appliquer un retournement vertical avec une probabilité p = 0,5 (si anatomiquement acceptable).
    4. Déformation élastique.
      1. Appliquez une transformation élastique pour simuler la variabilité anatomique.
      2. Utilisez de petits paramètres de déformation pour éviter une distorsion irréaliste.
    5. Exemple d’implémentation (PyTorch + Albumentations)
      1. Définissez le pipeline de transformation avant l’entraînement :
        transform = A.Compose([
        A. Rotate(limit=15, p=0,5),
        A.HorizontalFlip(p=0,5),
        A.ElasticTransform(alpha=1, sigma=50, alpha_affine=10, p=0,3)
        ])
      2. Appliquez la transformation dans la méthode __getitem__() de l’ensemble de données pour garantir une transformation synchronisée de l’image et du masque.
    6. Validation et ensembles de tests
      1. N’appliquez pas d’augmentation aux jeux de données de validation ou de test.
      2. N’utilisez que la normalisation et le redimensionnement pour ces ensembles.
    7. Contrôle qualité.
      1. Inspectez visuellement les échantillons augmentés avant la formation afin d’en assurer la plausibilité anatomique.
      2. Vérifiez que les masques restent alignés avec les images transformées.
  8. Entraînez le modèle pour un nombre fixe d’époques ou jusqu’à la convergence, en surveillant la performance sur l’ensemble de validation après chaque époque.
    1. Définition de la durée de l’entraînement
      1. Fixez le nombre maximal d’époques d’entraînement à 30.
      2. Sinon, continuez l’entraînement jusqu’à ce que les critères de convergence soient atteints (voir Arrêt précoce ci-dessous).
    2. Boucle d’entraînement
      1. Pour chaque époque, suivez les étapes 3.8.2.2–3.8.2.10 :
      2. Réglez le modèle en mode entraînement : model.train()
      3. Répétez tous les mini-lots du set d’entraînement.
      4. Chargez un lot d’images CT et des masques correspondants.
      5. Effectuez une passe en avant.
      6. Calculer la perte en utilisant la fonction de perte définie.
      7. Gradients rétropropagés : loss.backward()
      8. Mettre à jour les poids des modèles : optimizer.step()
      9. Réinitialisez les gradients avant le prochain lot : optimizer.zero_grad()
      10. Calculez la perte moyenne d’entraînement pour l’époque.
    3. Étape de validation (après chaque époque)
      1. Passer au modèle en mode d’évaluation : model.eval()
      2. Désactiver le calcul du gradient : avec torch.no_grad() :
      3. Itérer sur le jeu de données de validation.
      4. Effectuez une passe en avant.
      5. Calculez la perte de validation.
      6. Calculer les métriques de performance (score F1, précision, sensibilité, score DICE).
      7. Enregistrer les pertes de validation et les métriques.
    4. Ajustement du taux d’apprentissage
      1. Mise à jour du planificateur après l’étape de validation : scheduler.step(validation_loss)
    5. Critères de convergence
      1. Arrêtez l’entraînement si la perte de validation ne s’améliore pas pendant 10 époques consécutives (arrêt précoce), ou si les indicateurs de performance stagnent.
    6. Pointage de contrôle des modèles
      1. Sauvegardez les poids du modèle chaque fois que le score de validation F1 s’améliore.
      2. Conserver le modèle le mieux performant pour l’évaluation finale sur l’ensemble de test.
    7. Exploitation forestière
      1. Stocker les valeurs de perte d’entraînement et de validation par époque.
      2. Tracez les courbes d’apprentissage (perte vs. époque) pour vérifier le comportement de convergence.
  9. Sélectionnez le modèle le mieux performant en fonction du score F1 le plus élevé dans le jeu de données de validation.
    1. Suivi de la métrique de validation
      1. Après chaque époque, calculez le score F1 sur le jeu de données de validation.
      2. Stockez le score F1 avec le numéro d’époque correspondant.
    2. Comparaison de modèles
      1. Comparez les scores de validation F1 à travers toutes les époques.
      2. Identifier l’époque qui a obtenu le score de validation F1 le plus élevé.
    3. Pointage de contrôle des modèles
      1. Pendant l’entraînement, sauvegardez les poids du modèle chaque fois que le score de validation F1 s’améliore.
    4. Sélection finale du modèle
      1. Après la fin de l’entraînement, chargez les poids correspondant au score de validation le plus élevé en F1 :
        model.load_state_dict(torch.load(« best_model.pth »))
    5. Essais indépendants
      1. Évaluer le modèle sélectionné une seule fois sur le jeu de données de test indépendant.
      2. N’utilisez pas la performance du jeu de test pour la sélection du modèle.
    6. Reproductibilité
      1. Enregistrez le numéro d’époque sélectionné et les métriques de validation correspondantes.
      2. Corrigez les graines aléatoires pour garantir la reproductibilité.
  10. Sauvegardez les poids et configurations entraînés des modèles pour les tâches de segmentation en aval.

4. Segmentation et squelettisation

  1. Chargez le modèle U-Net entraîné et appliquez-le aux scanners CT prétraités dans l’ensemble de test indépendant.
  2. Pour chaque scan, générez un masque de segmentation binaire du vasculaire pulmonaire en appliquant un seuil à la sortie probabiliste du modèle.
  3. Inspectez visuellement les résultats de segmentation pour confirmer la plausibilité anatomique, en particulier dans les régions affectées par la distorsion induite par la CDH.
  4. Convertir les masques binaires 3D segmentés en représentations squelettisées à l’aide d’un algorithme d’amincissement 3D implémenté en logiciel.
  5. Nommer le squelette vasculaire à l’aide d’un algorithme de recherche en largeur, en désignant le tronc pulmonaire comme nœud racine et en attribuant des niveaux de génération à chaque branche en fonction de la connectivité.
  6. Supprimez les petits composants déconnectés ou les branches parasites probablement dues au bruit ou à des erreurs de segmentation, en utilisant un seuil minimal de taille de voxel ou de longueur de branche.
  7. Sauvegardez les structures squelettisées dans des formats 3D mesh ou graphiques compatibles (par exemple, VTK ou SWC) pour une analyse morphométrique ultérieure.

5. Extraction des caractéristiques morphométriques

  1. Chargez les graphiques vasculaires squelettisés générés à partir des images CT segmentées.
  2. Identifier toutes les branches individuelles en parcourant la structure du graphe entre les points de bifurcation et les nœuds terminaux.
  3. Calculez le nombre total de branches en additionnant tous les segments identifiés dans le graphique vasculaire.
  4. Calculez la longueur de chaque branche en additionnant les distances euclidiennes entre les voxels connectés le long du squelette.
  5. Déterminez la longueur moyenne des branches en moyennant les longueurs de toutes les branches dans le squelette de chaque sujet.
  6. Attribuer des niveaux de génération à chaque branche en partant de l’artère pulmonaire principale comme génération 0 et augmentant d’un à chaque bifurcation en traversant en largeur la première.
  7. Calculez le nombre maximal de générations distales en identifiant le chemin le plus long entre le nœud racine et une branche terminale.
  8. Calculez le nombre maximal de générations proximales en identifiant le chemin le plus long de toute branche périphérique jusqu’à la racine.
  9. Stockez toutes les caractéristiques morphométriques dans un tableau structuré ou un format de base de données (par exemple, CSV ou SQL) avec les identifiants de sujet, le groupe de diagnostic et les métriques extraites.
  10. Inspectez visuellement un sous-ensemble de graphes squelettes et les caractéristiques morphométriques correspondantes afin de confirmer l’exactitude et la plausibilité biologique.

6. Analyse de classification

  1. Importez le jeu de données structuré contenant les caractéristiques morphométriques (par exemple, le nombre total de branches, la longueur moyenne des branches, la profondeur de génération distale et proximale) ainsi que les étiquettes diagnostiques correspondantes (CDH ou témoins).
  2. Divisez le jeu de données en ensembles d’entraînement et de test en utilisant un échantillonnage stratifié pour maintenir la distribution des classes.
  3. Implémentez des classificateurs Random Forest et Decision Tree en utilisant une bibliothèque standard d’apprentissage automatique.
  4. Configurez les paramètres du modèle tels que le nombre d’estimateurs (par exemple, 100 arbres pour la forêt aléatoire) et la profondeur maximale basée sur la performance de validation croisée.
  5. Entraînez chaque classificateur en utilisant le sous-ensemble d’entraînement des données.
  6. Évaluer la performance de classification sur l’ensemble de tests de résistance en utilisant la précision comme principale métrique.
  7. Générez des matrices de confusion pour évaluer les taux de vrai positif, de vrai négatif, de faux positif et de faux négatifs pour la détection de CDH.
  8. Comparez les performances des classificateurs de forêt aléatoire et d’arbre de décision, et sélectionnez le modèle le plus précis pour rapporter des résultats représentatifs.
  9. Visualisez les résultats de classification à l’aide de graphiques à barres, de courbes ROC ou d’arbres de décision si applicable, et enregistrez les résultats pour les inclure dans les figures.
  10. Documentez tous les paramètres du modèle, les indicateurs de performance et tout prétraitement appliqué aux données afin d’assurer leur reproductibilité.

Accès restreint. Veuillez vous connecter ou commencer un essai pour afficher ce contenu.

Résultats

Le modèle d’apprentissage profond entraîné par transfert a obtenu la performance de segmentation la plus élevée parmi toutes les configurations, avec une précision de 0,714, une sensibilité de 0,706 et un score F1 de 0,672 sur l’ensemble de test indépendant. Le modèle de base entraîné à partir de zéro montrait une performance réduite (précision : 0,703, sensibilité : 0,589, score F1 : 0,551), tandis que le modèle segmentation-entrée a performé modérément (score F1 : 0,630).

Accès restreint. Veuillez vous connecter ou commencer un essai pour afficher ce contenu.

Discussion

Plusieurs étapes de ce protocole sont cruciales pour obtenir des résultats précis et reproductibles. L’étape de prétraitement de l’image doit être exécutée avec soin, en particulier la conversion en unités de Hounsfield et l’application de fenêtres (WL = -400 HU, WW = 1500 HU), car ces paramètres déterminent la visibilité des structures vasculaires 14,15,16,17....

Accès restreint. Veuillez vous connecter ou commencer un essai pour afficher ce contenu.

Déclarations de divulgation

Les auteurs n’ont aucune divulgation financière à déclarer.

Remerciements

Emrah Aydin a été soutenue par le Programme international de bourses postdoctorales 2219 du Conseil de la recherche scientifique et technologique de Turquie (TÜBİTAK) pour les citoyens turcs (1059B191501313). Aslıgül Aksan et Mustafa Ekrem Erkan ont été soutenus par le Conseil de la recherche scientifique et technologique de Turquie (TÜBİTAK) 2209-A - Programme de soutien aux projets de recherche pour étudiants de premier cycle.

Accès restreint. Veuillez vous connecter ou commencer un essai pour afficher ce contenu.

Matériaux

Liste des matériaux utilisés dans cet article
NomEntrepriseNuméro de catalogueCommentaires
Analyse 12.0AnalyzeDirecthttps://analyzedirect.com/Utilisé pour la relecture, l’édition et les mesures d’images CT
Données du scanner (scanners thoraciques postnataux)Archives institutionnellesN/AJeu de données rétrospectif des nouveau-nés CDH et témoins
DCM2NIIXOpen source (GitHub)https://github.com/rordenlab/dcm2niixConversion de DICOM au format NIfTI
ITK-SNAPOpen source (http://www.itksnap.org)http://www.itksnap.orgOutil d’annotation d’images médicales 3D
NetworkXOpen sourcehttps://networkx.orgUtilisé pour l’analyse d’arbres vasculaires basés sur des graphes
OpenCV (fonction CLAHE)Open sourcehttps://opencv.orgUtilisé pour l’amélioration du contraste d’image
Pandas, InsensiblesOpen sourcehttps://pandas.pydata.org, https://numpy.orgGestion des données et opérations numériques
Python 3.8+Fondation Python Softwarehttps://www.python.orgLangage de programmation pour l’analyse et le développement de modèles
PyTorch 1.13+Méta IAhttps://pytorch.orgCadre d’apprentissage profond pour la mise en œuvre d’U-Net
Image ScikitOpen sourcehttps://scikit-image.orgBibliothèque de traitement d’image utilisée pour la squelettisation
Scikit-learnOpen sourcehttps://scikit-learn.orgBibliothèque d’apprentissage automatique pour la classification
Ubuntu 20.04 LTSCanoniquehttps://ubuntu.comSystème d’exploitation utilisé lors de tous les traitements
Station de travail avec GPU NVIDIA RTX 3090NVIDIAhttps://www.nvidia.comIndispensable pour l’entraînement de modèles d’apprentissage profond

Références

  1. Keijzer, R., et al. Dual-hit hypothesis explains pulmonary hypoplasia in the nitrofen model of congenital diaphragmatic hernia. Am J Pathol. 156 (4), 1299-1306 (2000).
  2. Aydin, E., et al. The survivorship bias in congenital diaphragmatic hernia. Children. 9 (2), 218(2022).
  3. Harting, M. T. Congenital diaphragmatic hernia-associated pulmonary hypertension. Semin Pediatr Surg. 26 (3), 147-153 (2017).
  4. Kool, H., et al. Pulmonary vascular development goes awry in congenital lung abnormalities. Birth Defects Res C Embryo Today. 102 (4), 343-358 (2014).
  5. Leeuwen, L., Fitzgerald, D. A. Congenital diaphragmatic hernia. J Paediatr Child Health. 50 (9), 667-673 (2014).
  6. Aydin, E., et al. Optimization of pulmonary vasculature tridimensional phenotyping in the rat fetus. Sci Rep. 9 (1), 1244(2019).
  7. Aydin, E., et al. Pulmonary vasculature development in congenital diaphragmatic hernia: a novel automated quantitative imaging analysis. Pediatr Surg Int. 40 (1), 1244(2024).
  8. Memon, N. A., Mirza, A. M., Gilani, S. A. M. Segmentation of lungs from CT scan images for early diagnosis of lung cancer. World Acad Sci Eng Technol. 20, 1050-1055 (2008).
  9. Fetita, C., Brillet, P. Y., Preteux, F. J. Morpho-geometrical approach for 3D segmentation of pulmonary vascular tree in multi-slice CT. Proceedings of SPIE - The International Society for Optical Engineering. , (2009).
  10. Orkisz, M., et al. Segmentation of the pulmonary vascular trees in 3D CT images using variational region-growing. IRBM. 35 (1), 11-19 (2014).
  11. Fabijanska, A. Segmentation of pulmonary vascular tree from 3D CT thorax scans. Biocybern Biomed Eng. 35 (2), 106-119 (2015).
  12. Zhai, Z., Staring, M., Stoel, B. C. Lung vessel segmentation in CT images using graph-cuts. , SPIE Medical Imaging. San Diego, California, United States. (2016).
  13. Khanna, A., Londhe, N. D., Gupta, S. Detection of pulmonary vessels in 3D lung CT using improved graph cut. 2018 5th International Conference on Signal Processing and Integrated Networks (SPIN), Noida, India, , (1109).
  14. DenOtter, T. D., Schubert, J. Hounsfield Unit. , StatPearls Publishing. Treasure Island, FL. (2023).
  15. Detection and classification of brain hemorrhage based on Hounsfield values and convolution neural network technique. Phan, A. C., Nguyen, T. M. N., Phan, T. C. 2019 IEEE-RIVF International Conference on Computing and Communication Technologies (RIVF), Danang, Vietnam, , (2019).
  16. Xue, Z., et al. Window classification of brain CT images in biomedical articles. AMIA Annu Symp Proc. 2012, 1023-1029 (2012).
  17. Contrast-limited adaptive histogram equalization: speed and effectiveness. Pizer, S. M., et al. Proceedings of the First Conference on Visualization in Biomedical Computing, Atlanta, GA, USA, , (1990).
  18. Moccia, S., De Momi, E., El Hadji, S., Mattos, L. S. Blood vessel segmentation algorithms – Review of methods, datasets and evaluation metrics. Comput Methods Programs Biomed. 158, 71-91 (2018).

Accès restreint. Veuillez vous connecter ou commencer un essai pour afficher ce contenu.

Réimpressions et autorisations

Mots-clés

Segmentation des vaisseaux pulmonairesanalyse morphom triquetomographie informatis earchitecture U Netapprentissage par transfertmorphologie vasculairealgorithme de squelettisation
Vidéo bientôt disponible