Kommenter DICOM-bilder og bygg en ML-modell ved hjelp av MONAI-rammeverket på Amazon SageMaker

Kilde node: 893877

DICOM (Digital Imaging and Communications in Medicine) er et bildeformat som inneholder visualiseringer av røntgenstråler og MR samt eventuelle tilknyttede metadata. DICOM er standarden for medisinske fagpersoner og helsepersonell for visualisering og tolking av røntgenstråler og MR. Hensikten med dette innlegget er å løse to problemer:

  • Visualiser og merk DICOM-bilder ved hjelp av en tilpasset arbeidsflyt for datamerking Amazon SageMaker Ground Truth, en fullstendig administrert datamerkingstjeneste som støtter innebygde eller egendefinerte arbeidsmerker for datamerking
  • Utvikle en DenseNet-bildeklassifiseringsmodell ved hjelp av MONAI rammeverk på Amazon SageMaker, en omfattende og fullt administrert datavitenskapplattform med spesialbygde verktøy for å forberede, bygge, trene og distribuere maskinlæringsmodeller (ML) i skyen

For dette innlegget bruker vi et bryst X-Ray DICOM bilder datasett fra MIMIC røntgenstråler (MIMIC-CXR) Database, en offentlig tilgjengelig database med røntgenbilder av brystet i DICOM-format og tilhørende radiologirapporter som fritekstfiler. For å få tilgang til filene, må du være en Registrert bruker og signere avtalen for databruk.

Vi merker bildene gjennom Ground Truth private arbeidsstyrke. AWS kan også tilby profesjonelt administrerte arbeidsstyrker med erfaring med å merke medisinske bilder.

Løsningsoversikt

Følgende diagram viser arbeidsflyten på høyt nivå med følgende nøkkelkomponenter:

  1. DICOM-bildene lagres i tredjepart bilde arkivering og kommunikasjonssystem (PACS) eller Leverandør nøytralt arkiv (VNA), og hentet gjennom DICOMwebTM.
  2. An input manifest.json-fil lastes opp til Amazon enkel lagringstjeneste (Amazon S3). Filen inneholder DICOM-forekomst-ID som datakilde og potensielle etiketter som brukes av kommentatorer når de utfører merkingsjobber.
  3. To AWS Lambda funksjoner er avgjørende for å skape merkingsjobber på bakken sannhet:
  4. A HTML-mal med Crowd-elementer for å sende inn merkingsjobber og behandle utgangsobjektet. Deretter lagres utdataene fra merkingsjobber i en utdataetikett S3-bøtte.
  5. A SageMaker-notatbok kan hente utdataene fra merkingsjobber og bruke dem til å trene en overvåket ML-modell.

Vi har bygget en HTML-mal som du kan bruke til å klassifisere røntgen DICOM-bilder i brystet i en eller flere kategorier, av 13 mulige akutte og kroniske kardiopulmonale tilstander. HTML-malen bygget på toppen av hjørnestein.js støtter DICOM-bildegjenfinning og interaktiv visualisering, pluss flere kommentarer og generelle Hjørnesteinverktøy som et eksempel.

I de neste avsnittene går vi gjennom å bygge DICOM arbeidsflyt for datamerking og utføre ML-modellopplæring ved å bruke utdata fra merkingsjobber.

Distribuere en tredjeparts PACS på AWS

Vi bruker Orthanc som en åpen kildekode, lett PACS for dette innlegget, der PACS eller VNA som støtter DICOMwebTM kan bli brukt. Du kan distribuere Orthanc for Docker container på AWS ved å lansere følgende AWS skyformasjon stable:

Fyll ut nødvendig informasjon under distribusjonen, inkludert Amazon Elastic Compute Cloud (Amazon EC2) nøkkelpar for å få tilgang til hosting EC2-forekomsten og nettverksinfrastrukturen (VPC og undernett). En NGINX-server er lagt til i containeren til proxy HTTPS-trafikken til Orthanc-serveren i port 8042, som også legger til Access-Control-Allow-Origin-overskrifter for deling av ressurser på tvers av opprinnelse (CORS). Orthanc-containeren er distribuert på Amazon Elastic Container Service (Amazon ECS) og koblet til en Amazonas Aurora PostgreSQL-database.

Etter at CloudFormation-stakken er opprettet, må du merke Orthanc-endepunkt-URL-en på Utganger fanen.

Opprett Lambda-funksjonene, S3-bøtte og SageMaker-notatbokforekomst

Følgende CloudFormation-stabel oppretter de nødvendige Lambda-funksjonene med passende AWS identitets- og tilgangsadministrasjon (JEG ER) roller, S3 bøtte for inndata og utdatafiler, og SageMaker notatbokforekomst med eksempel på Jupyter-notatbok:

For parameteren PreLabelLambdaSourceEndpointURL, skriv inn Orthanc-endepunkt-URL fra forrige trinn, som forhåndsmerkingsoppgaven Lambda-funksjonen bruker for å generere WADO-URI for en gitt DICOM-forekomst-ID. Vi anbefaler at du lager en bærbar forekomsttype ml.m5.xlarge for å utføre ML-modelleringen etter bildekommentarer.

Etter stabledistribusjonen, merk deg utgangene, inkludert SMGTLabelingExecutionRole og SageMakerAnnotationS3Bucket verdier.

IAM-rollen SMGTLabelingExecutionRole brukes til å lage Ground Truth-merkingsjobben. For mer informasjon om å legge til disse retningslinjene, samt en trinnvis veiledning om hvordan du kjører Ground Truth-merkejobben etter lansering av CloudFormation-stakken, se Bygg en tilpasset arbeidsmerking for datamerking med Amazon SageMaker Ground Truth.

Last opp DICOM-bilder og forbered inputmanifestet

Du kan laste opp DICOM-bildene til Orthanc-serveren enten via nettgrensesnittet eller WADO-RS REST API. Etter at DICOM-bildene er lastet opp, kan du hente DICOM-forekomst-ID-ene for dem, og generere en manifestfil med forekomst-ID-ene. Hvert JSON-objekt atskilt med et standard linjeskift i manifestfilen representerer en inngangsoppgave sendt til arbeidsstyrken for merking. Dataobjektet i dette tilfellet inneholder forekomst-ID og metadata for de potensielle etikettene, som er 13 mulige sykdommer angitt av bildet. Forutsatt at en DICOM-forekomst-ID er 502b0a4b-5cb43965-7f092716-bd6fe6d6-4f7fc3ce, tilsvarer JSON-objektet i manifestfilen slik:

{"source": "502b0a4b-5cb43965-7f092716-bd6fe6d6-4f7fc3ce", "labels": "Atelectasis,Cardiomegaly,Consolidation,Edema,Enlarged Cardiomediastinum,Fracture,Lung Lesion,Lung Opacity,Pleural Effusion,Pneumonia,Pneumothorax,Pleural Other,Support Devices,No Finding"}

Etter at manifest.json-filen er kompilert, kan du laste den opp til S3-bøtta opprettet tidligere: SageMakerAnnotationS3Bucket.

Bygg en egendefinert datamerkingsjobb:

Du skal nå kunne lage en tilpasset merkingsjobb på bakken sannhet:

  1. Opprett et privat arbeidsteam og legg til medlemmer i teamet.

Arbeiderne mottar en e-post med merkeportalens påloggings-URL, som også er tilgjengelig på Amazon SageMaker-konsollen.

AWS kan også tilby medisinske billedeksperter for å merke dataene dine. Kontakt AWS-teamet ditt for mer informasjon.

  1. Spesifiser stedene for inn- og utdata ved hjelp av SageMakerAnnotationS3Bucket bøtte opprettet tidligere.
  2. Spesifiser SMGTLabelingExecutionRole som IAM-rolle for merkejobben.
  3. Til Oppgavekategori, velg Custom.

  1. Skriv inn innholdet i væske.html i Tilpasset mal tekstfelt.
  2. Konfigurer gt-prelabel-task-lambda og gt-postlabel-task-lambda funksjoner opprettet tidligere.
  3. Velg Opprett.

  1. Når du har konfigurert den tilpassede merkingsoppgaven, velger du Forhåndsvisning.

Følgende video viser vår forhåndsvisning.

Hvis du opprettet en privat arbeidsstyrke, kan du gå til Merking av arbeidsstyrker kategorien og finn linken til merknadskonsollen.

Du kan komme i gang med en grunnleggende HTML-mal, eller endre prøve grensesnittoppgavens brukergrensesnitt for bilde-, tekst- og lyddatamerkingsjobber. De grunnleggende byggesteinene for den tilpassede malen er Crowd HTML-elementer. De mengden-form og mengdeknapp er avgjørende for å sende inn kommentarene til jordens sannhet. I tillegg trenger du Flytende objekter i malen for jobbautomatisering, spesielt oppgavens inputobjekt som er lest inn av forhåndsmerkingen Lambda-funksjonen:

<div id="document-text" style="display: none;" {{ task.input.text }}
</div>
<div id="document-image" style="display:none;"> {{ task.input.taskObject }}
</div>
<div id="document-labels"> {{ task.input.labels }}
</div>

Vi bruker Hjørnesteins JavaScript-bibliotek å bygge merkingsgrensesnittet som viser et DICOM-bilde i moderne nettlesere som støtter HTML5-lerretelementet, og bruke hjørnesteinverktøyene til å støtte interaksjoner og aktivere regioner av interesse (ROI) -kommentarer i forskjellige former. I tillegg bruker vi Hjørnestein WADO Image Loader å hente Nettilgang til DICOM Objects (WADO) URI via DICOMwebTM plugg inn på en ekstern Orthanc-server.

Følgende to funksjoner er viktige for å hente og vise DICOM-bildet:

  • Last nedAndView () - Legger til wadouri: til begynnelsen av URL-en slik at cornerstone.js filen kan finne bildelaster
  • loadAndViewImage () - Bruker hjørnesteinsbiblioteket til å vise bildet og tillater tilleggsfunksjoner som zoom, panorering og ROI-kommentar

Du bør kunne kommentere ethvert DICOM-bilde ved å bruke følgende tilpasset HTML-mal, som viser mulige etiketter som flere valg for bildeklassifiseringsoppgaven.

Bygg en ML-modell ved hjelp av MONAI-rammeverket

Nå som vi har et merket datasett i form av output-manifest.json-filen, kan vi starte ML-modellbyggingsprosessen. Vi opprettet en SageMaker-notatbokforekomst tidligere gjennom stabeldistribusjonen vår. Alternativt kan du opprett en ny forekomst for notisbok. De MONAI bibliotek og andre tilleggspakker administreres i krav.txt, som er i samme mappe i treningsskriptet.

Datainnlasting og forbehandling

Etter at du har åpnet Jupyter-notatboken, laster du inn output-manifest.json fil som har DICOM URL-er og etiketter.

Følgende eksempel fra dicom_training.ipynb analyserer merket datasett fra output-manifest.json:

# Get SageMaker Ground Truth labeling data from annotation file
datadir = 'data'
metadata = '{}/output-manifest.json'.format(datadir)
s3 = boto3.client('s3')
s3.download_file(bucket, bucket_path, metadata) # Load Labels
with open(metadata) as f: manifest = json.load(f) class_names = list(json.loads(manifest[0]['annotations'][0]['annotationData']['content'])['disease'].keys()) for i, j in enumerate(manifest): label_dict = json.loads(json.loads(manifest[i]['annotations'][0]['annotationData']['content'])['labels']) image_url_list.extend([label_dict['imageurl']]) image_label_list.extend([class_names.index(label_dict['label'][0])])

Nå som vi har DICOM-nettadressene image_url_list og tilsvarende etiketter i image_label_list, kan vi laste ned DICOM-filene fra Orthanc DICOM-serveren direkte til Amazon S3 for SageMaker-opplæring:

import urllib3
import requests
import os
from io import BytesIO
import contextlib; image_file_list = [] #Load DICOM images to S3
for i, j in enumerate(image_url_list): file_name = image_url_list[i].split("/file")[0].split("instances/")[1] + '.dcm' response = requests.get(image_url_list[i], auth=(user, password), stream=True, verify=False) fp = BytesIO(response.content) s3.upload_fileobj(fp, bucket, file_name) image_file_list.append(file_name)

Etter at du har lastet bildene til S3-bøtta, kan du vise et eksempel på bildene med etiketter fra den analyserte JSON-filen ved hjelp av MONAI-rammeverket:

import monai
from monai.transforms import Compose, LoadImage, Resize, SqueezeDim
import matplotlib.pyplot as plt #Display sample of DICOM Images
trans = Compose([LoadImage(image_only=True), Resize(spatial_size=(108,96)),SqueezeDim()])
plt.subplots(1, 3, figsize=(8, 8))
for i in range(0,3): s3.download_file(bucket, image_file_list[i], datadir+'/'+image_file_list[i]) img = trans(datadir+'/'+image_file_list[i]) plt.subplot(1, 3, i + 1) plt.xlabel(class_names[image_label_list[i]]) plt.imshow(img, cmap='gray')
plt.tight_layout()
plt.show()

Følgende bilder viser et eksempel på DICOM-bilder med etiketter.

Vi bruker MONAI-transformasjonene under modellopplæring for å laste DICOM-filene direkte og behandle dem på forhånd. MONAI har transformasjoner som støtter både ordbok- og matriseformater, og er spesialisert for høydimensjonaliteten til DICOM medisinske bilder. Transformene inkluderer flere kategorier som beskjæring og pad, intensitet, I / O, etterbehandling, romlig og verktøy. I følgende utdrag kjeder Compose-klassen en serie bilder som forvandles sammen og returnerer en enkelt tensor av bildet:

#Load and transform DICOM images
class DICOMDataset(Dataset): def __init__(self, image_files, labels, transforms): self.image_files = image_files self.labels = labels self.transforms = transforms def __len__(self): return len(self.image_files) def __getitem__(self, index): return self.transforms(self.image_files[index]), self.labels[index] train_transforms = Compose([ LoadImage(image_only=True), ScaleIntensity(), RandRotate(range_x=15, prob=0.5, keep_size=True), RandFlip(spatial_axis=0, prob=0.5), RandZoom(min_zoom=0.9, max_zoom=1.1, prob=0.5, keep_size=True), Resize(spatial_size=(108,96)), ToTensor()
]) dataset = DICOMDataset(trainX, trainY, train_transforms) train_sampler = torch.utils.data.distributed.DistributedSampler(dataset) if is_distributed else None train_loader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=train_sampler is None, sampler=train_sampler, **kwargs)
…

Modelltrening

MONAI inkluderer dype nevrale nettverk som UNet, DenseNet, GAN og andre, og gir glidende vindusledninger for store medisinske bildevolumer. I DICOM-bildeklassifiseringsmodellen trener vi MONAI DenseNet-modellen på DICOM-bilder lastet og transformert ved hjelp av DataLoader klasse i de forrige trinnene i 10 epoker mens man måler tap. Se følgende kode:

#Instantiate model device = torch.device("cuda")
model = densenet121( spatial_dims=spatial_dims_num, in_channels=in_channels_num, out_channels=out_channels_num
).to(device)
loss_function = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), 1e-5) #Train DICOM model
for epoch in range(epoch_num): model.train() epoch_loss = 0 step = 0 for batch_data in train_loader: step += 1 inputs, labels = batch_data[0].to(device), batch_data[1].to(device) optimizer.zero_grad() outputs = model(inputs) loss = loss_function(outputs, labels) loss.backward() optimizer.step() epoch_loss += loss.item() epoch_len = len(train_loader.dataset) // train_loader.batch_size epoch_loss /= step epoch_loss_values.append(epoch_loss)

Følgende eksempel viser hvordan du bruker SageMaker Python SDK i en Jupyter-notatbok for å starte en treningsjobb og kjøre DICOM-modellopplæringsskriptet:

inputs = sagemaker_session.upload_data(path=datadir, bucket=bucket) from sagemaker.pytorch import PyTorch estimator = PyTorch(entry_point='monai_dicom.py', source_dir='source', role=role, framework_version='1.5.0', py_version='py3', instance_count=1, instance_type='ml.m5.xlarge', hyperparameters={ 'backend': 'gloo', 'epochs': 10 }) estimator.fit({'train': inputs})

Når du ringer til fit metoden i dette eksemplet, starter den treningsinstansen med en beregningsstørrelse basert på instance_type parameter, instantierer den innebygde PyTorch deep learning container, installerer de MONAI-avhengige pakkene som finnes i krav.txt, og kjører treningsskriptet det refereres til av entry_point=’monai_dicom.py’ parameter.

For mer informasjon om hvordan du bruker MONAI-rammeverket i SageMaker til å bygge og distribuere dine medisinske bildemodeller, se Bygg en medisinsk bildeanalyserørledning på Amazon SageMaker ved hjelp av MONAI-rammeverket. Hvis du vil lære om andre tilpassede arbeidsmerker for datamerking, se Bygg en tilpasset arbeidsmerking for datamerking med Amazon SageMaker Ground Truth.

konklusjonen

Dette innlegget viste hvordan du lager en DICOM-arbeidsflyt for merking med Ground Truth. I tillegg viste vi deg hvordan du tar utdata-manifestfilen generert fra merkingsarbeidsflyten din og bruker den som et merket datasett for å bygge en DenseNet-bildeklassifiseringsmodell ved hjelp av MONAI-rammeverket.

Hvis du har noen kommentarer eller spørsmål om dette innlegget, kan du bruke kommentarfeltet. For å finne den siste utviklingen av denne løsningen, sjekk ut GitHub repo.


Om forfatterne

Nihir Chadderwala er en AI / ML-løsningsarkitekt i Global Healthcare and Life Sciences team. Hans bakgrunn er å bygge big data og AI-drevne løsninger på kundeproblemer på en rekke domener som programvare, media, bilindustri og helsetjenester. På fritiden liker han å spille tennis, og se og lese om Cosmos.

Gjenge Fu er Senior Healthcare Solutions Architect hos AWS. Han har doktorgrad i farmasøytisk vitenskap fra University of Mississippi og har over 10 års erfaring innen teknologi og biomedisinsk forskning. Han er lidenskapelig opptatt av teknologi og innvirkningen den kan ha på helsetjenester.

Bryan Marsh er Senior Solutions Architect i Academic Medical Center-teamet på Amazon Web Services. Han har kompetanse innen bedriftsarkitektur med fokus på helsesektoren. Han er lidenskapelig opptatt av å bruke teknologi for å forbedre helseopplevelsen og pasientens resultater.

Kilde: https://aws.amazon.com/blogs/machine-learning/annotate-dicom-images-and-build-an-ml-model-using-the-monai-framework-on-amazon-sagemaker/

Tidstempel:

Mer fra AWS maskinlæringsblogg