È richiesta un abbonamento a JoVE per visualizzare questo contenuto. Accedi o inizia la tua prova gratuita.

Articolo metodologico

Analisi Quantitativa Automatizzata della Vascolarizzazione Polmonare nell'Ernia Diaframmatica Congenita utilizzando il Deep Learning

112 visualizzazioni

DOI:

10.3791/70428

8 maggio 2026

In questo articolo

Sommario

Questo protocollo descrive una pipeline di deep learning completamente automatizzata per segmentare e analizzare la vascolarizzazione polmonare nelle TAC neonatali. Il metodo consente la valutazione morfometrica quantitativa dello sviluppo vascolare in soggetti congeniti di ernia diaframmatica (CDH) e di controllo, supportando la caratterizzazione non invasiva dell'ipoplasia polmonare e dello sviluppo vascolare.

Abstract

L'ernia diaframmatica congenita (CDH) è caratterizzata da ipoplasia polmonare e sottosviluppo vascolare, che porta a uno scambio gassoso compromesso e un'elevata mortalità neonatale. Una valutazione accurata e quantitativa della vascolarizzazione polmonare è fondamentale per comprendere la gravità della malattia, ma la segmentazione manuale delle reti vascolari tridimensionali nelle immagini mediche richiede tempo e dipende dall'operatore.

Questo protocollo presenta un metodo completamente automatizzato basato su deep learning per la segmentazione dei vasi polmonari e l'analisi morfometrica utilizzando tomotomografia computerizzata postnatale (TC). La pipeline include passaggi standardizzati di preprocessing - conversione a unità di Hounsfield, windowing, ricampionamento isotropo e equalizzazione adattativa a contrasto limitato (CLAHE) - per normalizzare i dati di imaging e migliorare la visibilità vascolare. Viene quindi addestrata un'architettura di rete neurale convoluzionale (CNN) U-Net per segmentare la vascolatura polmonare, seguita da un algoritmo di scheletro tridimensionale per quantificare parametri morfometrici come numero di rami, lunghezza media del ramo e profondità generazionale.

I risultati rappresentativi dimostrano che il modello proposto raggiunge un'elevata accuratezza di segmentazione, con la configurazione di transfer learning che offre le migliori prestazioni. L'analisi morfometrica quantitativa rivela una complessità vascolare marcatamente ridotta nella CDH rispetto ai polmoni di controllo, coerente con le caratteristiche patologiche note dell'ipoplasia polmonare.

Questo approccio automatizzato consente una valutazione riproducibile, quantitativa e non invasiva della morfologia vascolare polmonare nella CDH. Il metodo può essere adattato ad altre modalità di imaging e applicato a studi sullo sviluppo polmonare fetale e neonatale, facilitando la ricerca traslazionale e l'integrazione clinica futura.

Introduzione

L'ernia diaframmatica congenita (CDH) è un'anomalia congenita potenzialmente letale caratterizzata da un difetto diaframmatico, che porta all'ernia delle viscere addominali neltorace 1,2. Questa compressione fisica compromette gravemente lo sviluppo polmonare, causando ipoplasia polmonare e ipertensione polmonare persistente (PPHN), che sono i principali fattori che causano morbilità e mortalità. Oltre all'ipoplasia polmonare e allo sviluppo vascolare inferiore, è stato dimostrato che lo sviluppo cardiaco compromesso e la disfunzione ventricolare influenzano significativamente gli esiti clinici nei neonati con CDH. La fisiopatologia sottostante comporta uno sviluppo anomalo sia delle vie aeree che del letto vascolare polmonare, portando a una riduzione del numero di vasi, aumento della muscolazione delle arteriole e, di conseguenza, a una resistenza vascolareelevata 3,4. Sono necessari biomarcatori oggettivi e quantitativi per stratificare accuratamente il rischio, guidare gli interventi e monitorare la risposta al trattamento nei pazientiCDH 5. Un aspetto fondamentale di questa valutazione è l'analisi dettagliata della vascolatura polmonare, che può fornire indicazioni sull'entità dell'ipoplasia polmonare e sulla capacità funzionale dei polmoni. I progressi nelle tecniche di imaging, in particolare la tomografia computerizzata (TC), hanno migliorato la nostra capacità di visualizzare e quantificare la vascolarizzazione polmonare in grandedettaglio 6,7.

Sebbene la Tomografia Computerizzata (TC) postnatale fornisca dettagli anatomici ad alta risoluzione dei polmoni, l'analisi dell'intricato albero vascolare polmonare rimane impegnativa. I metodi esistenti per la segmentazione vascolare spesso si basano su tecniche tradizionali di elaborazione delle immagini che richiedono un intervento manuale significativo, sono suscettibili ad artefatti dell'immagine e potrebbero non essere robusti alle gravi distorsioni anatomiche presenti inCDH 7,8,9,10. Il deep learning, in particolare le reti neurali convoluzionali (CNN) come l'architettura U-Net, ha ottenuto un successo notevole nella segmentazione automatica delle immagini mediche. Tuttavia, molti modelli esistenti sono addestrati su soggetti sani o su altri contesti di malattia, limitandone l'applicabilità ad anomalie congenite come CDH 10,11,12,13.

Nonostante questi progressi, persistono notevoli lacune nella letteratura. Molti studi si sono concentrati su individui sani o specifiche condizioni polmonari, con un'attenzione limitata ad anomalie congenite come laCDH 12. Inoltre, sebbene i modelli di deep learning abbiano mostrato prestazioni migliorate, spesso richiedono grandi dataset annotati per l'addestramento, che non sono sempre disponibili per condizioni rare come la CDH. Inoltre, i modelli esistenti non hanno ancora affrontato pienamente la sfida di distinguere tra diversi tipi di vasi polmonari (ad esempio, arterie e vene) in presenza di gravi distorsioni anatomiche causate dalla CDH. Questa limitazione sottolinea la necessità di ulteriori ricerche per sviluppare modelli più robusti in grado di segmentare e analizzare con precisione la vascolarizzazione polmonare nei pazienti con CDH.

Questo studio mira a colmare queste lacune sviluppando e convalidando un framework di deep learning completamente automatizzato per segmentare la vascolatura polmonare ed estrarre caratteristiche morfometriche quantitative dalle TAC. Una delle principali innovazioni del nostro approccio è l'addestramento del nostro modello su un dataset combinato di pazienti CDH e di controllo, permettendogli di apprendere una rappresentazione robusta sia dei modelli vascolari normali che patologici. Sebbene l'imaging CT preveda radiazioni ionizzanti, rendendole inadatte allo screening longitudinale di routine, questo studio rappresenta una prova di concetto cruciale. L'obiettivo principale di questo studio è stabilire che la quantificazione radiologica automatizzata della struttura vascolare sia fattibile e possa differenziare in modo affidabile i pazienti CDH dai controlli. Il successo in questo ambito fornisce la validazione necessaria per adattare questo quadro quantitativo a modalità di imaging prive di radiazioni, come la Magnetic Resonance Imaging (MRI), per applicazioni cliniche future.

Accesso limitato. Accedi o avvia una prova gratuita per visualizzare questo contenuto.

Protocollo

Tutte le procedure che hanno coinvolto partecipanti umani sono state condotte in conformità con le linee guida del comitato etico della ricerca umana istituzionale e sono state approvate dall'Institutional Review Board (IRB #2017-6361). Lo studio è stato condotto in conformità con gli standard normativi applicabili. I dati dei pazienti sono stati raccolti retrospettivamente e deidentificati prima dell'analisi. Una panoramica del sistema sviluppato è mostrata nella Figura 1.

1. Preprocessing delle immagini

  1. Caricare le TAC grezze dei pazienti neonatali in formato DICOM nell'ambiente di lavoro.
    1. Apri il software di analisi delle immagini mediche e crea un nuovo spazio di lavoro per il progetto.
    2. Clicca su File > Importa > serie DICOM .
    3. Naviga nella cartella contenente la TAC toracica neonatale in formato DICOM e seleziona la serie completa di immagini.
    4. Verifica che tutte le fette della serie siano correttamente rilevate e ordinate in base ai metadati di acquisizione (ad esempio, Numero di Istanze).
    5. Conferma le dimensioni dell'immagine, la spaziatura voxel e lo spessore delle slice nel pannello metadati per garantire la coerenza tra le scansioni.
    6. Carica la serie nello spazio di lavoro e ispeziona visivamente le viste assiali, coronali e sagittali per confermare l'orientamento corretto e l'assenza di errori di caricamento.
  2. Converti i file DICOM in formato NIfTI utilizzando software open-source per facilitare la manipolazione e l'analisi.
    1. Apri una finestra terminale all'interno dell'ambiente di calcolo scientifico.
    2. Naviga alla directory contenente la serie di immagini DICOM usando il comando cd.
    3. Esegui lo strumento di conversione da DICOM a NIfTI utilizzando la seguente struttura di comando: dcm2niix -z y -f output_filename -o /output_directory /input_directory
    4. Assicurati che la compressione sia abilitata (-z y) per generare un file .nii.gz compresso.
    5. Verifica che il file di output sia stato generato con successo nella directory di output specificata.
    6. Apri il file NIfTI convertito in un visualizzatore di immagini mediche e ispeziona visivamente i piani assiale, coronale e sagittale per confermare la corretta orientazione spaziale e l'integrità dell'immagine.
    7. Conferma la spaziatura dei voxel e le dimensioni dell'immagine per garantire la coerenza su tutti i soggetti prima della pre-elaborazione.
  3. Converti le intensità dell'immagine in Unità di Hounsfield (HU) utilizzando metadati specifici per scanner o formule standard.
    1. Estrarre i parametri dei metadati DICOM Rescale Slope e Rescale Intercept dall'intestazione dell'immagine per ogni scansione.
    2. Per ogni valore di intensità voxel (I_raw), calcola la corrispondente Unità di Hounsfield (HU) usando la seguente formula: HU = (I_raw × Pendenza di riscala) + Intercetta di riscala.
    3. Applicare la conversione all'intero volume dell'immagine 3D utilizzando operazioni matriciali elemento per elemento all'interno dell'ambiente di calcolo scientifico.
    4. Confermare la conversione corretta verificando che le regioni aeree siano approssimative di −1000 HU e che le regioni dei tessuti molli rientrino nei range fisiologici attesi.
    5. Salva il volume convertito come nuovo file NIfTI per preservare i dati originali.
  4. Applica la finestra per mettere in risalto i polmoni e i tessuti molli. Imposta il livello della finestra (WL) a -400 HU e la larghezza della finestra (WW) a 1500 HU.
    1. Apri il file NIfTI convertito nel software di visualizzazione delle immagini.
    2. Naviga sul display dell'immagine o sul pannello delle impostazioni dell'intensità.
    3. Seleziona l'opzione di regolazione Finestra/Livello .
    4. Imposta manualmente il valore del Livello Finestra (WL) a -400 Unità di Hounsfield (HU).
    5. Imposta il valore di Larghezza della Finestra (WW) a 1500 HU.
    6. Conferma e applica le impostazioni per aggiornare la visualizzazione dell'immagine.
    7. Verifica che il parenchima polmonare e i vasi polmonari siano chiaramente distinguibili dalle strutture ossee e mediastinali prima di procedere con ulteriori fasi di pre-elaborazione.
  5. Eseguire un ricampionamento isotropo per garantire che le dimensioni dei voxel siano uniformi (ad esempio, 1 mm × 1 mm × 1 mm) utilizzando interpolazione trilineare.
    1. Carica l'immagine NIfTI nell'ambiente Python usando una libreria di elaborazione di immagini mediche.
    2. Estrai la spaziatura originale dei voxel dai metadati dell'intestazione dell'immagine.
    3. Definisci la spaziatura isotropica del bersaglio come (1,0, 1,0, 1,0) mm.
    4. Calcola le nuove dimensioni dell'immagine usando la formula: new_size = original_size × (original_spacing / target_spacing)
    5. Inizializzare un oggetto di ricampionamento.
    6. Imposta il metodo di interpolazione su interpolazione trilineare.
    7. Assegna la distanza dei voxel target (1,0 mm × 1,0 mm × 1,0 mm).
    8. Imposta la nuova dimensione dell'immagine calcolata.
    9. Conserva i metadati originali della direzione e dell'origine dell'immagine.
    10. Esegui l'operazione di ricampionamento.
    11. Salva l'immagine ricampionata in formato NIfTI per i passaggi successivi di pre-elaborazione.
    12. Verifica la distanza isotropa controllando le dimensioni aggiornate dei voxel nell'intestazione dell'immagine prima di procedere.
  6. Applicare l'Equalizzazione Adattiva Istografica Limitata al Contrasto (CLAHE) per aumentare il contrasto e migliorare la visibilità delle strutture vascolari.
    1. Importa la libreria di elaborazione immagini richiesta nell'ambiente Python.
    2. Convertire il volume CT 3D ricampionato in formato in scala di grigi a 8 bit se necessario, utilizzando la normalizzazione lineare dell'intensità per mappare l'intervallo HU selezionato da 0 a 255.
    3. Processare il volume CT taglio per taglio nel piano assiale per applicare CLAHE in 2D.
    4. Inizializzare l'oggetto CLAHE usando i seguenti parametri: clipLimit = 2.0, tileGridSize = (8, 8).
    5. Per ogni taglio assiale, applica la funzione CLAHE per aumentare il contrasto locale.
    6. Ricostruisci i slice elaborati in un volume 3D dopo l'applicazione CLAHE.
    7. Salva il volume con contrasto aumentato in formato NIfTI per la segmentazione successiva.
    8. Verifica visivamente che i vasi polmonari siano più distinguibili dal parenchima circostante senza un'eccessiva amplificazione del rumore prima di procedere.
  7. Ispeziona visivamente un sottoinsieme di immagini preprocessate per garantire qualità e coerenza nel dataset.
    1. Seleziona casualmente almeno il 10% del dataset totale per la valutazione manuale della qualità.
    2. Apri ogni volume preprocessato selezionato nel visualizzatore di immagini mediche.
    3. Ispezionare i piani assiale, coronale e sagittale per verificare quanto segue: Orientamento spaziale corretto; Assenza di artefatti di troncamento; Applicazione corretta dei parametri di finestre; Ricampionamento isotropo riuscito (spaziatura uniforme dei voxel); Adeguato potenziamento del contrasto dopo CLAHE.
    4. Confermare che i vasi polmonari sono chiaramente distinguibili dalle strutture parenchimali adiacenti senza un'amplificazione eccessiva del rumore.
    5. Confronta le immagini preprocessate con i volumi originali convertiti in HU per assicurarti che i passaggi di pre-elaborazione non abbiano introdotto distorsioni o incoerenze anatomiche.
    6. Documentare eventuali errori di preprocessing e ripetere la preprocessing per i casi interessati se necessario.

2. Annotazione manuale

  1. Seleziona un sottoinsieme rappresentativo di TAC sia di pazienti di controllo che CDH da utilizzare per annotazioni manuali. Garantire una distribuzione equilibrata della variabilità anatomica.
    1. Identificare tutte le TAC preprocessate idonee sia da quelle di controllo che da quelle CDH.
    2. Escludere le scansioni con gravi artefatti di movimento o copertura polmonare incompleta.
    3. Seleziona casualmente un numero predefinito di casi da ogni gruppo per garantire una rappresentazione equilibrata.
    4. Assicurarsi l'inclusione di casi che dimostrino una gamma di variabilità anatomica, incluse differenze nel volume polmonare, nella densità vascolare e nella gravità dello spostamento mediastinale.
    5. Confermare che alcuni casi selezionati di CDH rappresentano diversi gradi di ipoplasia polmonare, dove disponibili.
    6. Documenta gli identificatori dei casi selezionati prima di procedere con l'annotazione manuale.
  2. Carica le immagini NIfTI preelaborate in uno strumento di annotazione di immagini mediche 3D.
    1. Apri il software di annotazione delle immagini mediche 3D.
    2. Crea un nuovo progetto o una sessione di segmentazione.
    3. Clicca su File > Apri Immagine (o opzione di importazione equivalente).
    4. Naviga nella directory contenente il file NIfTI preelaborato (.nii o .nii.gz) e seleziona l'immagine.
    5. Confermare il caricamento riuscito verificando la corretta orientazione dell'immagine nelle viste assiale, coronale e sagittale.
    6. Regola le impostazioni di visualizzazione se necessario per ottimizzare la visualizzazione.
    7. Crea una nuova etichetta di segmentazione o uno strato di maschera per memorizzare annotazioni vascolari manuali.
    8. Salva il file del progetto prima di avviare l'annotazione manuale.
  3. Utilizzando le viste assiali, coronali e sagittali, segmenta manualmente la vascolarità polmonare delineando le strutture vascolari in ciascuna sezione rilevante.
    1. Attiva il livello di etichetta di segmentazione creato nel passo 2.2.
    2. Seleziona lo strumento di disegno manuale o pennello all'interno del software di annotazione.
    3. Regola dinamicamente la dimensione della spazzola in base al diametro del recipiente per garantire un tracciamento accurato dei confini.
    4. Utilizzando le tacce assiali come piano di riferimento primario, delineare manualmente le strutture vascolari polmonari visibili, inclusi sia i rami arteriosi che quelli venosi.
    5. Escludere strutture non vascolari come bronchi, pareti delle vie aeree e tessuti mediastinali.
    6. Scorri fetta per fetta l'intero volume polmonare per assicurare un'annotazione continua di ogni ramo vascolare.
    7. Validare incrociatamente ogni regione annotata nelle viste coronale e sagittale per confermare la coerenza anatomica ed evitare discontinuità.
    8. Includere i recipienti fino ai rami più piccoli e visivamente distinguibili, evitando però la sovrasegmentazione degli artefatti rumorosi.
    9. Periodicamente renderizza un'anteprima 3D della segmentazione per verificare la continuità spaziale dell'albero vascolare.
    10. Salva la maschera di segmentazione completata in formato NIfTI prima di procedere con l'addestramento del modello.
  4. Annota solo i vasi polmonari, escludendo cuore, bronchi e le principali strutture non polmonari.
    1. Identificare le arterie polmonari e le vene all'interno del parenchima polmonare utilizzando le fette assiali come riferimento principale.
    2. Includere i rami vascolari intraparenchimi che hanno origine dalle principali arterie polmonari e si estendono distalmente all'interno dei campi polmonari.
    3. Escludere le camere cardiache, gli atri, i ventricoli e i grandi vasi.
    4. Escludere le strutture delle vie aeree, inclusi bronchi e pareti bronchiali, distinguendole dai vasi in base alla morfologia e alle caratteristiche luminali.
    5. Evita di etichettare tessuti molli mediastinali, pleura e strutture della parete toracica.
    6. Utilizzare le viste multiplanari (assiali, coronale, sagittali) per confermare che le strutture annotate seguano la continuità vascolare attesa e i modelli di ramificazione.
    7. Quando la differenziazione vaso-via aerea è incerta, verificare la continuità tra le fette adiacenti per confermare la traiettoria vascolare prima dell'etichettatura.
    8. Esegui una rappresentazione 3D finale del volume segmentato per assicurarti che sia stato incluso solo l'albero vascolare polmonare.
  5. Se disponibile, consulta esperti di imaging clinico per validare le regioni ambigue durante l'annotazione.
    1. Identificare le regioni in cui i confini dei vasi sono incerti a causa di basso contrasto, distorsione anatomica o vicinanza a bronchi o strutture mediastiniche.
    2. Segnala queste regioni all'interno del software di annotazione usando uno strumento temporaneo di etichetta o commento.
    3. Presenta le aree segnalate a un esperto di imaging clinico.
    4. Esaminare insieme le viste assiale, coronale e sagittale per determinare se la struttura rappresenta la vascolarizzazione polmonare.
    5. Modifica la maschera di segmentazione in base al consenso degli esperti.
    6. Documenta eventuali regioni corrette prima di definire la maschera di verità sul terreno.
  6. Esegui la validazione tra valutatori facendo revisionare e affinare ogni segmentazione da almeno due annotatori indipendenti. In caso di disaccordo, raggiungere un consenso tramite discussione o arbitrato.
    1. Assegnare ogni TAC selezionata a due annotatori indipendenti con esperienza nell'analisi di imaging toracico.
    2. Assicurati che gli annotatori effettuino la segmentazione in modo indipendente e siano accecati ai risultati degli altri.
    3. Dopo il completamento delle annotazioni indipendenti, confrontare le maschere di segmentazione usando una metrica di sovrapposizione quantitativa (ad esempio, coefficiente di somiglianza di Dado).
    4. Identificare le regioni di disaccordo calcolando le differenze voxel tra maschere.
    5. Esaminare le regioni discrepanti congiuntamente nei piani assiale, coronale e sagittale.
    6. Raggiungere il consenso attraverso una discussione strutturata.
    7. Se persistono disaccordi, coinvolgere un terzo revisore senior per arbitrare la decisione finale.
    8. Salva la maschera di segmentazione del consenso come etichetta finale di verità sul terreno per l'addestramento del modello.
  7. Salva le maschere dei vasi annotati nella stessa risoluzione e spazio delle immagini CT originali. Memorizzali in formato NIfTI usando convenzioni di denominazione coerenti.
    1. Assicurarsi che la maschera di segmentazione di consenso finale venga memorizzata come mappa binaria di etichetta, dove i voxel vascolari ricevono un valore di 1 e i voxel di fondo uno di 0.
    2. Confermare che la maschera di segmentazione mantenga la stessa spaziatura voxel, dimensioni dell'immagine, origine e matrice di orientamento della corrispondente immagine CT pretrattata.
    3. Esporta la maschera di segmentazione in formato NIfTI (.nii o .nii.gz) utilizzando la funzione di esportazione del software di annotazione.
    4. Usa una convenzione di denominazione coerente strutturata come segue: SubjectID_Group_VesselMask.nii.gz; (ad esempio, CDH_012_VesselMask.nii.gz).
    5. Memorizza le maschere in una directory dedicata parallela al dataset immagine per mantenere la coerenza delle coppie.
    6. Eseguire una verifica finale ricaricando sia l'immagine CT che la maschera corrispondente per confermare l'allineamento spaziale perfetto prima dell'addestramento del modello.
  8. Usa queste segmentazioni etichettate manualmente come verità fondamentale per l'addestramento e la valutazione del modello.

3. Addestramento e validazione del modello

  1. Organizza il dataset in tre sottoinsiemi: addestramento, convalidazione e set di test. In questo studio, utilizzare 35 casi di controllo e 20 casi CDH per l'addestramento, 5 casi di controllo e 10 casi CDH per la validazione, e tenere il resto per test indipendenti.
    1. Compila tutte le immagini CT preelaborate e le corrispondenti maschere di vasi di consenso in un unico dataset.
    2. Eseguire la suddivisione del dataset a livello di paziente per prevenire la fuga di dati tra sottoinsiemi.
    3. Assegnare casualmente 35 casi di controllo e 20 casi CDH al set di addestramento.
    4. Assegna casualmente 5 casi di controllo e 10 casi CDH al set di validazione.
    5. Assegnare tutti i casi rimanenti a un set di test indipendente di riserva che non viene utilizzato durante l'addestramento del modello o la sintonia degli iperparametri.
    6. Assicurati che ogni immagine CT e la corrispondente maschera di segmentazione rimangano accoppiate durante tutto il processo di divisione.
    7. Verifica la distribuzione delle classi in ogni sottoinsieme per mantenere la rappresentazione sia dei casi di controllo che di quelli CDH.
    8. Documentare l'assegnazione finale degli identificatori di soggetto per la riproducibilità.
  2. Normalizzare i valori di intensità di tutte le immagini tra 0 e 1 per migliorare la convergenza della rete neurale durante l'allenamento.
    1. Per ogni volume CT, si limitano innanzitutto i valori di intensità a un intervallo predefinito di unità di Hounsfield per rimuovere outlier estremi.
    2. Applicare clipping di intensità in modo che valori inferiori a −1000 HU siano impostati a −1000 HU e valori superiori a 500 HU.
    3. Eseguire la normalizzazione min–max indipendentemente per ogni volume utilizzando la seguente trasformazione: Valore normalizzato = (I − I_min) / (I_max − I_min), dove I_min e I_max corrispondono ai valori di intensità minima e massima tagliati del volume.
    4. Applicare la normalizzazione all'intero volume 3D utilizzando operazioni elemento per elemento all'interno dell'ambiente computazionale.
    5. Verifica che tutte le intensità voxel rientrino nell'intervallo [0, 1] prima di inserire i dati nella rete neurale.
    6. Assicurarsi che i parametri di normalizzazione siano derivati indipendentemente per ogni immagine per evitare perdite di informazioni tra addestramenti, validazioni e set di test.
  3. Implementare un'architettura di rete neurale convoluzionale U-Net utilizzando un framework di deep learning come PyTorch o TensorFlow.
    1. Crea un nuovo progetto in un ambiente di sviluppo deep learning e imposta un seed casuale fisso per la riproducibilità.
    2. Definisci un'architettura U-Net 2D (Figura 2) per la segmentazione binaria con una struttura codificatore-decodificatore e connessioni di salto.
    3. Imposta l'input del modello come slices CT single-channel (scala di grigi) e imposta l'output del modello come una mappa di probabilità a canale singolo che rappresenta la verosimiglianza del recipiente.
    4. Configura il livello finale per utilizzare una funzione di attivazione sigmoid per produrre valori nell'intervallo [0, 1].
    5. Definisci la funzione di perdita per la segmentazione binaria (ad esempio, entropia binaria incrociata) e inizializza un ottimizzatore.
    6. Specificare iperparametri di addestramento, inclusi la dimensione del lotto, il numero di epoche e il tasso di apprendimento, e registrare questi valori per il report.
    7. Prepara i data loader per inserire i dataset di addestramento e validazione nel modello con un mescolamento e un batching costanti.
    8. Salva la definizione completa del modello e la configurazione degli iperparametri per la riproducibilità.
  4. Configurare il modello con una struttura encoder-decoder, incorporando connessioni skip e strati di normalizzazione batch per migliorare la precisione della segmentazione.
    1. Definiamo un codificatore costituito da blocchi convoluzionali ripetuti. Assicurati che ogni blocco includa:
      Due strati convoluzionali consecutivi 2D (dimensione del nucleo 3 × 3, riempitura = 1)
      Normalizzazione batch applicata dopo ogni convoluzione
      Attivazione dell'Unità Lineare Rectificata (ReLU)
    2. Applica 2 × 2 max pooling con un passo di 2 dopo ogni blocco encoder per ridurre progressivamente la risoluzione spaziale.
    3. Raddoppia il numero di canali feature dopo ogni fase di downcampionamento.
    4. Definisci il decoder usando la convoluzione trasposta (kernel 2 × 2, stride 2) per l'upsampling.
    5. Concatena le mappe di caratteristiche dal corrispondente livello encoder al livello decoder tramite connessioni skip per preservare le informazioni spaziali.
    6. Applicare due strati convoluzionali con normalizzazione batch e attivazione ReLU dopo ogni passaggio di concatenazione.
    7. Usa un ultimo livello di convoluzione 1 × 1 per mappare le caratteristiche a un'uscita a canale singolo.
    8. Applicare una funzione di attivazione sigmoide per produrre una mappa di probabilità voxel per segmentazione del vaso.
  5. Traina tre configurazioni del modello:
    1. Modello di base (addestramento da zero)
      1. Inizializzare i pesi U-Net in modo casuale (ad esempio, inizializzazione He).
      2. Usa solo il dataset arteria-vena annotato manualmente come input.
      3. Ridimensiona le immagini di input a 512 × 512 pixel.
      4. Normalizza i valori di intensità all'intervallo [0,1].
      5. Imposta la dimensione del lotto a 8 (o al massimo consentito dalla memoria GPU).
      6. Usa Adam Optimizer con tasso di apprendimento = 1 × 10⁻4.
      7. Usa la Binary Cross-Entropia (per la segmentazione binaria) o la Cross-Entropy loss (per la classificazione arteria-vena).
      8. Allenati per 30 epoche.
      9. Monitora la perdita di validazione dopo ogni epoca.
      10. Salva i pesi del modello corrispondenti alla perdita di validazione più bassa.
      11. In PyTorch, segui i passaggi 3.5.1.13–3.5.1.14.
      12. Definisci ottimizzatore: torch.optim.Adam(model.parameters(), lr=1e-4)
      13. Definisci perdita: torch.nn.BCEWithLogitsLoss() o torch.nn.CrossEntropyLoss()
      14. Usa model.train() durante l'addestramento e model.eval() durante la validazione.
    2. Modello di segmentazione-input (ingresso maschera ausiliaria del recipiente)
      1. Modifica lo strato di ingresso per accettare due canali:
        Canale 1: Immagine CT
        Canale 2: Maschera binaria di segmentazione dei vasi
      2. Concatena l'immagine CT e la maschera del vaso lungo la dimensione del canale prima di inserirli nella rete.
      3. Mantieni l'architettura identica al modello base.
      4. Usa lo stesso ottimizzatore, la stessa velocità di apprendimento, la dimensione del lotto e il numero di epoche del passo 3.5.1.
      5. Salva i pesi con le migliori prestazioni basandoti sulla validazione del punteggio F1.
    3. Modello di apprendimento tramite trasferimento (inizializzazione pre-addestrata)
      1. Caricare pesi U-Net preaddesati addestrati su un dataset generico di segmentazione delle navi (come descritto nel rapporto di progresso).
      2. Congela i livelli degli encoder per le prime 5 epoche (fato fatica di stabilizzazione).
      3. Scongela tutti gli strati e continua a perfezionare per le epoche rimanenti.
      4. Usare un tasso di apprendimento ridotto = 5 × 10⁻5 durante la messa a punto.
      5. Allenati per un totale di 30 epoche.
      6. Applica il flipping orizzontale come potenziamento dati durante l'addestramento.
      7. Salva il modello con il punteggio F1 di validazione più alto.
  6. Usa perdita binaria di entropia incrociata e l'ottimizzatore di Adam con un tasso di apprendimento iniziale di 0,001. Riduci il tasso di apprendimento in modo adattivo se la perdita di validazione si stabilizza.
    1. Definizione della funzione di perdita
      1. Per la segmentazione binaria dei vasi, si utilizza la perdita binaria di entropia incrociata con logiti.
      2. In PyTorch, definire: criterion = torch.nn.BCEWithLogitsLoss()
      3. Se si effettua una classificazione arteria-vena multiclasse, si utilizza: criterion = torch.nn.CrossEntropyLoss()
    2. Definizione dell'ottimizzatore
      1. Usa l'ottimizzatore Adam con un tasso di apprendimento iniziale di 0,001.
      2. In PyTorch: ottimizzatore = torch.optim.Adam(model.parameters(), lr=0.001)
    3. Abilitazione della riduzione della velocità di apprendimento adattivo
      1. Implementa uno scheduler della velocità di apprendimento per ridurre la velocità di apprendimento quando la perdita di validazione smette di migliorare.
      2. Usa lo scheduler ReduceLROnPlateau.
      3. In PyTorch: scheduler = torch.optim.lr_scheduler. ReduceLROnPlateau(
        ottimizzatore,
        mode='min',
        fattore=0,5,
        pazienza=5,
        verbose=True
        )
      4. Dopo ogni fase di validazione, chiama: scheduler.step(validation_loss)
    4. Configurazione del ciclo di addestramento.
      1. Per ogni epoca, segui i passaggi 3.6.4.2–3.6.4.7:
      2. Imposta il modello in modalità allenamento: model.train()
      3. Esegui un passaggio in avanti.
      4. Calcolo la perdita.
      5. Retropropagazione: perdita.indietro ()
      6. Pesi di aggiornamento: optimizer.step()
      7. Zero gradienti prima della prossima iterazione: optimizer.zero_grad()
      8. Dopo la fase di addestramento, si passa alla modalità di valutazione usando model.eval() e calcola la perdita di validazione.
    5. Fermata anticipata (opzionale ma consigliata)
      1. Se la perdita di validazione non migliora per 10 epoche consecutive, interrompi l'addestramento per evitare il sovrafitting.
  7. Applicare tecniche di aumento dei dati come rotazioni casuali, ribaltamenti ed elasticità per aumentare la robustezza e ridurre il sovrafitting.
    1. Definizione di una pipeline di aumento
      1. Applica gli aumenti solo al dataset di addestramento.
      2. Applicare trasformazioni spaziali identiche sia all'immagine CT che alla sua corrispondente maschera di segmentazione.
    2. Rotazioni casuali.
      1. Applicare rotazioni casuali nel piano tra -15° e +15°.
      2. In PyTorch (usando torchvision o Albumentations): RandomRotation(degrees=15)
    3. Capriole orizzontali e verticali.
      1. Applicare un flip orizzontale con probabilità p = 0,5.
      2. Applicare un flip verticale con probabilità p = 0,5 (se anatomicamente accettabile).
    4. Deformazione elastica.
      1. Applicare una trasformazione elastica per simulare la variabilità anatomica.
      2. Usa parametri di deformazione piccoli per evitare distorsioni irrealistiche.
    5. Esempio di implementazione (PyTorch + Albumentations)
      1. Definisci la pipeline di trasformazione prima dell'addestramento:
        trasformazione = A.Compose([
        A. Ruota (limite=15, p=0,5),
        A.RuotaOrizzontale(p=0.5),
        A.ElasticTransform(alpha=1, sigma=50, alpha_affine=10, p=0.3)
        ])
      2. Applica la trasformazione all'interno del dataset __getitem__(() per garantire la trasformazione sincronizzata di immagine e maschera.
    6. Serie di validazione e test
      1. Non applicare aumenti a dataset di validazione o test.
      2. Usa solo normalizzazione e ridimensionamento per questi set.
    7. Controllo qualità.
      1. Ispezionare visivamente i campioni aumentati prima dell'addestramento per verificarne la plausibilità anatomica.
      2. Verifica che le maschere rimangano allineate con le immagini trasformate.
  8. Addestrare il modello per un numero fisso di epoche o fino alla convergenza, monitorando le prestazioni sul set di validazione dopo ogni epoca.
    1. Definizione della durata dell'allenamento
      1. Imposta il numero massimo di epoche di addestramento a 30.
      2. In alternativa, si può continuare l'addestramento fino a quando non sono soddisfatti i criteri di convergenza (vedi Arresto Precoce più avanti).
    2. Ciclo di addestramento
      1. Per ogni epoca, segui i passaggi 3.8.2.2–3.8.2.10:
      2. Imposta il modello in modalità allenamento: model.train()
      3. Itera su tutti i mini-lotti del set di addestramento.
      4. Carica un lotto di immagini TC e maschere corrispondenti.
      5. Esegui un passaggio in avanti.
      6. Calcolare la perdita usando la funzione di perdita definita.
      7. Gradienti di retropropagazione: loss.backward()
      8. Aggiorna i pesi dei modelli: optimizer.step()
      9. Reset gradienti prima del prossimo lotto: optimizer.zero_grad()
      10. Calcola la perdita media di addestramento per l'epoca.
    3. Fase di validazione (dopo ogni epoca)
      1. Passa al modello in modalità di valutazione: model.eval()
      2. Disabilita il calcolo del gradiente: con torch.no_grad():
      3. Iterare sul dataset di validazione.
      4. Esegui un passaggio in avanti.
      5. Calcolare la perdita di validazione.
      6. Calcola le metriche di performance (punteggio F1, precisione, sensibilità, punteggio DICE).
      7. Registra la perdita di validazione e le metriche.
    4. Aggiustamento della velocità di apprendimento
      1. Aggiorna lo scheduler dopo il passaggio di validazione: scheduler.step(validation_loss)
    5. Criteri di convergenza
      1. Interrompi l'addestramento se la perdita di validazione non migliora per 10 epoche consecutive (stop anticipato), o se le metriche di performance si stabilizzano.
    6. Checkpoint modello
      1. Salva i pesi del modello ogni volta che il punteggio di validazione F1 migliora.
      2. Mantenere il modello con le migliori prestazioni per la valutazione finale sul set di test.
    7. Disboscamento
      1. Memorizza i valori di perdita di addestramento e validazione per epoca.
      2. Traccia curve di apprendimento (perdita vs. epoca) per verificare il comportamento di convergenza.
  9. Seleziona il modello con le migliori prestazioni in base al punteggio F1 più alto nel dataset di validazione.
    1. Tracciamento della metrica di validazione
      1. Dopo ogni epoca, calcola il punteggio F1 sul dataset di validazione.
      2. Memorizza il punteggio F1 insieme al corrispondente numero di epoca.
    2. Confronto modelli
      1. Confronta i punteggi di validazione F1 in tutte le epoche.
      2. Identifica l'epoca che ha raggiunto il punteggio di validazione F1 più alto.
    3. Checkpoint modello
      1. Durante l'addestramento, conserva i pesi del modello ogni volta che il punteggio di validazione F1 migliora.
    4. Selezione finale del modello
      1. Dopo il completamento dell'addestramento, caricare i pesi corrispondenti al punteggio di validazione F1 più alto:
        model.load_state_dict(torch.load("best_model.pth"))
    5. Test indipendenti
      1. Valuta il modello selezionato una sola volta sul dataset di test indipendente.
      2. Non utilizzare le prestazioni del set di test per la selezione del modello.
    6. Riproducibilità
      1. Registra il numero di epoca selezionato e le corrispondenti metriche di validazione.
      2. Correggi i semi casuali per garantirne la riproducibilità.
  10. Conserva i pesi e le configurazioni addestrate del modello per compiti di segmentazione a valle.

4. Segmentazione e scheletizzazione

  1. Carica il modello U-Net addestrato e applicalo alle scansioni CT preprocessate nel set di test indipendente.
  2. Per ogni scansione, si genera una maschera di segmentazione binaria della vascolarizzazione polmonare applicando una soglia all'output probabilistico del modello.
  3. Ispezionare visivamente i risultati della segmentazione per confermare la plausibilità anatomica, in particolare nelle regioni colpite dalla distorsione indotta dalla CDH.
  4. Converti le maschere binarie 3D segmentate in rappresentazioni scheletriche utilizzando un algoritmo di assottigliamento 3D implementato in software.
  5. Etichettare lo scheletro vascolare usando un algoritmo di ricerca in larghezza, designando il tronco polmonare come nodo radice e assegnando livelli di generazione a ciascun ramo in base alla connettività.
  6. Rimuovere piccoli componenti disconnessi o rami spuri che probabilmente sono dovuti a rumore o errori di segmentazione, utilizzando una soglia minima di dimensione voxel o lunghezza di ramo.
  7. Salvare le strutture scheletriche in formati 3D compatibili con mesh o grafi (ad esempio, VTK o SWC) per ulteriori analisi morfometriche.

5. Estrazione delle caratteristiche morfometriche

  1. Carica i grafici vascolari scheletrici generati dalle immagini TC segmentate.
  2. Identificare tutti i singoli rami attraversando la struttura del grafo tra i punti di biforcazione e i nodi terminali.
  3. Calcola il numero totale di rami sommando tutti i segmenti identificati all'interno del grafico vascolare.
  4. Calcola la lunghezza di ogni ramo sommando le distanze euclidee tra voxel connessi lungo lo scheletro.
  5. Determinare la lunghezza media dei rami facendo la media delle lunghezze di tutti i rami nello scheletro di ciascun soggetto.
  6. Assegnare livelli di generazione a ogni ramo a partire dall'arteria polmonare principale come generazione 0 e incrementare di uno a ogni biforcazione usando la traversata in larghezza.
  7. Calcola il numero massimo di generazioni distali identificando il percorso più lungo dal nodo radice a qualsiasi ramo terminale.
  8. Calcola il numero massimo di generazioni prossimali identificando il percorso più lungo da qualsiasi ramo periferico fino alla radice.
  9. Memorizza tutte le caratteristiche morfometriche in un foglio di calcolo strutturato o in formato database (ad esempio, CSV o SQL) con identificatori di soggetto, gruppo di diagnosi e metriche estratte.
  10. Ispezionare visivamente un sottoinsieme di grafi scheletroni e le corrispondenti caratteristiche morfometriche per confermare accuratezza e plausibilità biologica.

6. Analisi della classificazione

  1. Importare il dataset strutturato contenente caratteristiche morfometriche (ad esempio, numero totale di rami, lunghezza media dei rami, profondità di generazione distale e prossimale) e le corrispondenti etichette diagnostiche (CDH o controllo).
  2. Dividere il dataset in set di addestramento e test usando campionamento stratificato per mantenere la distribuzione delle classi.
  3. Implementare classificatori Random Forest e Decision Tree utilizzando una libreria standard di machine learning.
  4. Configurare parametri del modello come il numero di stimatori (ad esempio, 100 alberi per Random Forest) e la profondità massima basata sulle prestazioni di validazione incrociata.
  5. Addestra ogni classificatore usando il sottoinsieme di addestramento dei dati.
  6. Valutare le prestazioni di classificazione sul set di test di sospeso utilizzando l'accuratezza come metrica primaria.
  7. Generare matrici di confusione per valutare i tassi di veri positivi, veri negativi, falsi positivi e falsi negativi per il rilevamento della CDH.
  8. Confrontare le prestazioni dei classificatori Random Forest e Decision Tree, e selezionare il modello con la massima accuratezza per riportare i risultati rappresentativi.
  9. Visualizza i risultati della classificazione utilizzando grafici a barre, curve ROC o alberi decisionali se applicabili, e salva gli output per includerli nelle figure.
  10. Documentare tutti i parametri del modello, le metriche di performance e qualsiasi preelaborazione applicata ai dati per garantire la riproducibilità.

Accesso limitato. Accedi o avvia una prova gratuita per visualizzare questo contenuto.

Risultati

Il modello di deep learning addestrato con transfer learning ha raggiunto la massima performance di segmentazione tra tutte le configurazioni, con una precisione di 0,714, sensibilità di 0,706 e punteggio F1 di 0,672 sul set di test indipendente. Il modello di base, addestrato da zero, mostrava prestazioni ridotte (precisione: 0,703, sensibilità: 0,589, punteggio F1: 0,551), mentre il modello di segmentazione-input ha avuto prestazioni moderate (punteggio F1: 0,630).

Accesso limitato. Accedi o avvia una prova gratuita per visualizzare questo contenuto.

Discussione

Diversi passaggi di questo protocollo sono fondamentali per ottenere risultati accurati e riproducibili. La fase di pre-elaborazione dell'immagine deve essere eseguita con attenzione, in particolare la conversione alle Unità di Hounsfield e l'applicazione del windowing (WL = -400 HU, WW = 1500 HU), poiché questi parametri determinano la visibilità delle strutturevascolari 14,15,16,17....

Accesso limitato. Accedi o avvia una prova gratuita per visualizzare questo contenuto.

Dichiarazioni

Gli autori non hanno alcuna dichiarazione finanziaria da dichiarare.

Ringraziamenti

Emrah Aydin è stata sostenuta dal Programma Internazionale di Borse di Ricerca Postdottorale per Cittadini Turchi (1059B191501313) del Consiglio Scientifico e Tecnologico della Ricerca della Turchia (TÜBİTAK) 2219 (1059B191501313). Aslıgül Aksan e Mustafa Ekrem Erkan sono stati sostenuti dal Consiglio di Ricerca Scientifica e Tecnologica della Turchia (TÜBİTAK) 2209-A - Programma di Supporto ai Progetti di Ricerca per Studenti Triennali.

Accesso limitato. Accedi o avvia una prova gratuita per visualizzare questo contenuto.

Materiali

Elenco dei materiali utilizzati in questo articolo
NomeAziendaNumero di catalogoCommenti
Analizza 12.0AnalyzeDirecthttps://analyzedirect.com/Utilizzato per la revisione, la modifica e le misurazioni di immagini CT
Dati della TAC (scansioni toraciche postnatali)Archivio IstituzionaleN/ADataset retrospettivo dei neonati CDH e di controllo
DCM2NIIXOpen source (GitHub)https://github.com/rordenlab/dcm2niixConverte DICOM al formato NIfTI
ITK-SNAPOpen-source (http://www.itksnap.org)http://www.itksnap.orgStrumento di annotazione delle immagini mediche 3D
NetworkXOpen-sourcehttps://networkx.orgUtilizzato per l'analisi basata su grafi basata su alberi vascolari
OpenCV (funzione CLAHE)Open-sourcehttps://opencv.orgUtilizzato per il potenziamento del contrasto dell'immagine
Pandas, InsensibiliOpen-sourcehttps://pandas.pydata.org, https://numpy.orgGestione dei dati e operazioni numeriche
Python 3.8+Python Software Foundationhttps://www.python.orgLinguaggio di programmazione per l'analisi e lo sviluppo di modelli
PyTorch 1.13+Meta AIhttps://pytorch.orgFramework di deep learning per l'implementazione di U-Net
Scikit-immagineOpen-sourcehttps://scikit-image.orgLibreria di elaborazione immagini utilizzata per la scheletizzazione
Scikit-learnOpen-sourcehttps://scikit-learn.orgLibreria di machine learning per la classificazione
Ubuntu 20.04 LTSCanonicohttps://ubuntu.comSistema operativo utilizzato durante tutta l'elaborazione
Workstation con GPU NVIDIA RTX 3090NVIDIAhttps://www.nvidia.comRichiesto per addestrare modelli di deep learning

Riferimenti

  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).

Accesso limitato. Accedi o avvia una prova gratuita per visualizzare questo contenuto.

Ristampe e permessi

Tag

Segmentazione dei vasi polmonarianalisi morfometricatomografia computerizzataarchitettura U Netapprendimento per trasferimentomorfologia vascolarealgoritmo di scheletrizzazione
Video in arrivo