Även efter mer än hundra år efter dess introduktion är histologi fortfarande guldstandarden för tumördiagnostik och prognos. Anatomiska patologer utvärderar histologi för att stratifiera cancerpatienter i olika grupper beroende på deras tumörgenotyper och fenotyper, och deras kliniska resultat [1,2]. Men mänsklig utvärdering av histologiska objektglas är subjektiv och inte repeterbar [3]. Vidare är histologisk bedömning en tidskrävande process som kräver högutbildad personal.
Med betydande tekniska framsteg under det senaste decenniet är tekniker som helbildsavbildning (WSI) och djupinlärning (DL) nu allmänt tillgängliga. WSI är skanningen av konventionella objektglas för att producera en enda högupplöst bild från dessa objektglas. Detta möjliggör digitalisering och insamling av stora uppsättningar patologibilder, vilket skulle ha varit oöverkomligt tidskrävande och dyrt. Tillgängligheten av sådana datauppsättningar skapar nya och innovativa sätt att påskynda diagnosen genom att använda tekniker som maskininlärning (ML) för att hjälpa patologer att påskynda diagnoser genom att snabbt identifiera funktioner av intresse.
I det här inlägget kommer vi att utforska hur utvecklare utan tidigare ML-erfarenhet kan använda Amazon Rekognition anpassade etiketter att träna en modell som klassificerar cellulära funktioner. Amazon Rekognition Custom Labels är en funktion i Amazon-erkännande som gör att du kan bygga dina egna specialiserade ML-baserade bildanalysfunktioner för att upptäcka unika objekt och scener som är integrerade i ditt specifika användningsfall. I synnerhet använder vi en datauppsättning som innehåller hela diabilder av bröstcancer hos hundar [1] för att demonstrera hur man bearbetar dessa bilder och tränar en modell som upptäcker mitotiska figurer. Denna datauppsättning har använts med tillstånd från prof. Dr. Marc Aubreville, som vänligen har gått med på att tillåta oss att använda den för detta inlägg. För mer information, se avsnittet Acknowledgements i slutet av det här inlägget.
Lösningsöversikt
Lösningen består av två komponenter:
- En Amazon Rekognition Custom Labels-modell — För att göra det möjligt för Amazon Rekognition att upptäcka mitotiska figurer genomför vi följande steg:
- Prova WSI-datauppsättningen för att producera bilder med adekvat storlek med hjälp av Amazon SageMaker Studio och en Python-kod som körs på en Jupyter-anteckningsbok. Studio är en webbaserad, integrerad utvecklingsmiljö (IDE) för ML som ger alla verktyg du behöver för att ta dina modeller från experiment till produktion samtidigt som du ökar din produktivitet. Vi kommer att använda Studio för att dela upp bilderna i mindre för att träna vår modell.
- Träna en Amazon Rekognition Custom Labels-modell för att känna igen mitotiska figurer i hematoxylin-eosinprover med hjälp av data som bereddes i föregående steg.
- En frontend-applikation — För att demonstrera hur man använder en modell som den vi tränade i föregående steg genomför vi följande steg:
Följande diagram illustrerar lösningsarkitekturen.
Alla nödvändiga resurser för att distribuera implementeringen som diskuteras i det här inlägget och koden för hela avsnittet är tillgängliga på GitHub. Du kan klona eller dela förvaret, göra alla ändringar du önskar och köra det själv.
I nästa steg går vi igenom koden för att förstå de olika stegen som är involverade i att hämta och förbereda data, träna modellen och använda den från en exempelapplikation.
Kostar
När du kör stegen i denna genomgång får du små kostnader för att använda följande AWS-tjänster:
- Amazon-erkännande
- AWS Fargate
- Application Load Balancer
- AWS Secrets Manager
Dessutom, om du inte längre är inom Free Tier-perioden eller villkoren, kan du ådra dig kostnader från följande tjänster:
- CodePipeline
- CodeBuild
- Amazon ECR
- Amazon SageMaker
Om du slutför rensningsstegen korrekt efter att ha avslutat den här genomgången kan du förvänta dig att kostnaderna blir mindre än 10 USD, om Amazon Rekognition Custom Labels-modellen och webbapplikationen körs i en timme eller mindre.
Förutsättningar
För att slutföra alla steg behöver du följande:
Träning av klassificeringsmodellen för mitotiska figurer
Vi kör alla steg som krävs för att träna modellen från en Studio-anteckningsbok. Om du aldrig har använt Studio tidigare kan du behöva göra det ombord först. För mer information, se Gå snabbt ombord till Amazon SageMaker Studio.
Vissa av följande steg kräver mer RAM-minne än vad som är tillgängligt i en vanlig ml.t3.medium-notebook. Se till att du har valt en ml.m5.large anteckningsbok. Du bör se en 2 vCPU + 8 GiB indikation i det övre högra hörnet på sidan.
Koden för detta avsnitt är tillgänglig som en Jupyter anteckningsbok fil.
Efter ombordstigning till Studio, följ dessa instruktioner att ge Studio nödvändiga tillstånd att ringa Amazon Rekognition å dina vägnar.
beroenden
Till att börja med måste vi slutföra följande steg:
- Uppdatera Linux-paket och installera nödvändiga beroenden, som OpenSlide:
- Installera fastai- och SlideRunner-biblioteken med hjälp av pip:
- Ladda ner datasetet (vi tillhandahåller ett skript för att göra detta automatiskt):
Bearbeta datamängden
Vi börjar med att importera några av de paket som vi använder under hela databeredningsstadiet. Sedan laddar vi ner och laddar annoteringsdatabasen för denna datauppsättning. Denna databas innehåller positionerna i hela diabilden av de mitotiska figurerna (de funktioner vi vill klassificera). Se följande kod:
Eftersom vi använder SageMaker skapar vi en ny SageMaker session objekt för att underlätta uppgifter som att ladda upp vår datauppsättning till en Amazon enkel lagringstjänst (Amazon S3) hink. Vi använder också S3-hinken som SageMaker skapar som standard för att ladda upp våra bearbetade bildfiler.
Smakämnen slidelist_test
array innehåller ID:n för bilderna som vi använder som en del av testdatauppsättningen för att utvärdera prestandan för den tränade modellen. Se följande kod:
Nästa steg är att skaffa en uppsättning områden med tränings- och testbilder, tillsammans med etiketterna på dem, från vilka vi kan ta mindre områden att använda för att träna vår modell. Koden för get_slides finns i filen sampling.py i GitHub.
Vi vill ta ett slumpmässigt urval från tränings- och testbilderna. Vi använder listorna med tränings- och testbilder och väljer slumpmässigt n_training_images
gånger en fil för träning, och n_test_images
gånger en fil för test:
Därefter skapar vi en katalog för träningsbilder och en för testbilder:
Innan vi tar fram de mindre bilderna som behövs för att träna modellen behöver vi lite hjälpkod som producerar den metadata som behövs för att beskriva tränings- och testdata. Följande kod säkerställer att en given begränsningsruta som omger de intressanta särdragen (mitotiska figurer) ligger väl inom den zon vi klipper, och producerar en JSON-linje som beskriver bilden och funktionerna i den i Amazon SageMaker Ground Sannhet format, vilket är det format som Amazon Rekognition Custom Labels kräver. För mer information om denna manifestfil för objektdetektering, se Objektlokalisering i manifestfiler.
Med generate_annotations
funktion på plats kan vi skriva koden för att producera tränings- och testbilder:
Det sista steget mot att ha all nödvändig data är att skriva en manifest.json
fil för var och en av datamängderna:
Överför filerna till S3
Vi använder upload_data
metod som SageMaker-sessionsobjektet exponerar för att ladda upp bilderna och manifestfilerna till SageMaker S3-standardhinken:
Träna en Amazon Rekognition Custom Labels-modell
Med datan som redan finns i Amazon S3 kan vi börja träna en anpassad modell. Vi använder Boto3-biblioteket för att skapa en Amazon Rekognition-klient och skapa ett projekt:
Med projektet klart att använda behöver du nu en projektversion som pekar på utbildnings- och testdatauppsättningarna i Amazon S3. Varje version pekar helst på olika datamängder (eller olika versioner av den). Detta gör att vi kan ha olika versioner av en modell, jämföra deras prestanda och växla mellan dem efter behov. Se följande kod:
Efter att vi skapat projektversionen startar Amazon Rekognition automatiskt utbildningsprocessen. Träningstiden beror på flera funktioner, såsom storleken på bilderna och antalet av dem, antalet klasser och så vidare. I det här fallet, för 500 bilder, tar träningen cirka 90 minuter att avsluta.
Testa modellen
Efter träning är varje modell i Amazon Rekognition Custom Labels i STOPPED
stat. För att använda den för slutledning måste du starta den. Vi hämtar projektversionen ARN från projektversionsbeskrivningen och skickar den över till start_project_version
. Lägg märke till MinInferenceUnits
parameter — vi börjar med en slutledningsenhet. Det faktiska maximala antalet transaktioner per sekund (TPS) som denna slutledningsenhet stöder beror på din modells komplexitet. För att lära dig mer om TPS, se detta blogginlägg.
När din projektversion är listad som RUNNING
, kan du börja skicka bilder till Amazon Rekognition för slutledning.
Vi använder en av filerna i testdataset för att testa den nystartade modellen. Du kan använda valfri lämplig PNG- eller JPEG-fil istället.
Strömbelyst applikation
För att demonstrera integrationen med Amazon Rekognition använder vi en mycket enkel Python-applikation. Vi använder Strömbelyst biblioteket för att bygga ett spartanskt användargränssnitt, där vi uppmanar användaren att ladda upp en bildfil.
Vi använder Boto3-biblioteket och detect_custom_labels
metod, tillsammans med projektversionen ARN, för att anropa slutpunktens slutpunkt. Svaret är ett JSON-dokument som innehåller positionerna och klasserna för de olika objekten som detekteras i bilden. I vårt fall är det de mitotiska figurerna som algoritmen har hittat i bilden vi skickade till slutpunkten. Se följande kod:
Distribuera applikationen till AWS
För att distribuera applikationen använder vi ett AWS CDK-skript. Hela projektet finns på GitHub . Låt oss titta på de olika resurserna som används av skriptet.
Skapa ett Amazon ECR-förråd
Som det första steget mot att ställa in vår distribution skapar vi ett Amazon ECR-förråd, där vi kan lagra våra applikationsbehållarebilder:
Skapa och lagra din GitHub-token i AWS Secrets Manager
CodePipeline behöver en GitHub Personal Access Token för att övervaka ditt GitHub-lager för ändringar och pull-kod. För att skapa token, följ instruktionerna i GitHub-dokumentation. Tokenen kräver följande GitHub-omfång:
- Smakämnen
repo
scope, som används för full kontroll för att läsa och dra artefakter från offentliga och privata arkiv till en pipeline. - Smakämnen
admin:repo_hook
scope, som används för full kontroll av förvarskrokar.
När du har skapat token, lagra den i en ny hemlighet i AWS Secrets Manager enligt följande:
Skriv konfigurationsparametrar till AWS Systems Manager Parameter Store
AWS CDK-skriptet läser några konfigurationsparametrar från AWS Systems Manager Parameter Store, till exempel namnet och ägaren till GitHub-förvaret, och målkonto och region. Innan du startar AWS CDK-skriptet måste du skapa dessa parametrar i ditt eget konto.
Du kan göra det genom att använda AWS CLI. Anropa helt enkelt put-parameter
kommando med ett namn, ett värde och typen av parameter:
Följande är en lista över alla parametrar som krävs av AWS CDK-skriptet. Alla är av typ String
:
- /rek_wsi/prod/accountId — ID för kontot där vi distribuerar programmet.
- /rek_wsi/prod/ecr_repo_name — Namnet på Amazon ECR-förvaret där behållarbilderna lagras.
- /rek_wsi/prod/github/branch — Grenen i GitHub-förvaret från vilken CodePipeline behöver hämta koden.
- /rek_wsi/prod/github/owner — Ägaren till GitHub-förvaret.
- /rek_wsi/prod/github/repo — Namnet på GitHub-förrådet där vår kod lagras.
- /rek_wsi/prod/github/token — Namnet eller ARN för hemligheten i Secrets Manager som innehåller din GitHub-autentiseringstoken. Detta är nödvändigt för att CodePipeline ska kunna kommunicera med GitHub.
- /rek_wsi/prod/region — Regionen där vi kommer att distribuera applikationen.
Lägg märke till prod
segment i alla parameternamn. Även om vi inte behöver denna detaljnivå för ett så enkelt exempel, kommer det att göra det möjligt att återanvända detta tillvägagångssätt med andra projekt där olika miljöer kan vara nödvändiga.
Resurser skapade av AWS CDK-skriptet
Vi behöver vår applikation, som körs i en Fargate-uppgift, för att ha behörighet att anropa Amazon Rekognition. Så vi skapar först en AWS identitets- och åtkomsthantering (IAM) Uppgift Roll med RekognitionReadOnlyPolicy
policy kopplad till den. Lägg märke till att assumed_by
parametern i följande kod tar ecs-tasks.amazonaws.com
tjänstehuvudman. Detta beror på att vi använder Amazon ECS som orkestrator, så vi behöver Amazon ECS för att ta på sig rollen och överföra referenserna till Fargate-uppgiften.
När den väl har byggts sitter vår applikationsbehållarebild i ett privat Amazon ECR-förråd. Vi behöver ett objekt som beskriver det som vi kan skicka när vi skapar Fargate-tjänsten:
Vi skapar en ny VPC och ett kluster för denna applikation. Du kan modifiera den här delen för att använda din egen VPC genom att använda from_lookup
metod för Vpc
klass:
Nu när vi har en VPC och ett kluster att distribuera till skapar vi Fargate-tjänsten. Vi använder 0.25 vCPU och 512 MB RAM för denna uppgift, och vi placerar en offentlig Application Load Balancer (ALB) framför den. När vi har distribuerat det använder vi ALB CNAME för att komma åt applikationen. Se följande kod:
För att automatiskt bygga och distribuera en ny containerbild varje gång vi skjuter kod till vår huvudgren skapar vi en enkel pipeline som består av en GitHub-källåtgärd och ett byggsteg. Det är här vi använder hemligheterna vi lagrade i AWS Secrets Manager och AWS Systems Manager Parameter Store i de tidigare stegen.
CodeBuild behöver behörighet för att skicka containerbilder till Amazon ECR. För att ge dessa behörigheter lägger vi till AmazonEC2ContainerRegistryFullAccess
policy till en skräddarsydd IAM-roll som CodeBuild-tjänstehuvudmannen kan ta:
CodeBuild-projektet loggar in på det privata Amazon ECR-förvaret, bygger Docker-bilden med Streamlit-applikationen och skjuter in bilden i förvaret tillsammans med en appspec.yaml
och en imagedefinitions.json
fil.
Smakämnen appspec.yaml
filen beskriver uppgiften (port, Fargate-plattformsversion och så vidare), medan imagedefinitions.json
fil mappar namnen på behållarbilderna till deras motsvarande Amazon ECR URI. Se följande kod:
Slutligen sätter vi ihop de olika stegen i pipeline. Den sista åtgärden är EcsDeployAction
, som tar behållarbilden som byggdes i föregående steg och gör en rullande uppdatering av uppgifterna i vårt ECS-kluster:
Städa
För att undvika framtida kostnader, rensa upp de resurser du skapade som en del av denna lösning.
Amazon Rekognition Custom Labels-modell
Innan du stänger av din Studio-anteckningsbok, se till att du stoppar Amazon Rekognition Custom Labels-modellen. Om du inte gör det fortsätter det att medföra kostnader.
Alternativt kan du använda Amazon Rekognition-konsolen för att stoppa tjänsten:
- Välj på Amazon Rekognition-konsolen Använd anpassade etiketter i navigeringsfönstret.
- Välja Projekt i navigeringsfönstret.
- Välj version 1 av
rek-mitotic-figures-workshop
projektet. - På Använd modell fliken, välj Sluta.
Strömbelyst applikation
För att förstöra alla resurser som är kopplade till Streamlit-applikationen, kör följande kod från AWS CDK-programkatalogen:
AWS Secrets Manager
För att ta bort GitHub-token, följ instruktionerna i dokumentation.
Slutsats
I det här inlägget gick vi igenom de nödvändiga stegen för att träna en Amazon Rekognition Custom Labels-modell för en digital patologiapplikation som använder verkliga data. Vi lärde oss sedan hur man använder modellen från en enkel applikation som distribueras från en CI/CD-pipeline till Fargate.
Med Amazon Rekognition Custom Labels kan du bygga ML-aktiverade vårdapplikationer som du enkelt kan bygga och distribuera med hjälp av tjänster som Fargate, CodeBuild och CodePipeline.
Kan du komma på några applikationer för att hjälpa forskare, läkare eller deras patienter att göra deras liv enklare? Om så är fallet, använd koden i den här genomgången för att bygga din nästa applikation. Och om du har några frågor, vänligen dela dem i kommentarsfältet.
Erkännanden
Vi vill tacka Prof. Dr. Marc Aubreville för att han vänligt gett oss tillåtelse att använda MITOS_WSI_CMC-datauppsättningen för detta blogginlägg. Datauppsättningen finns på GitHub.
Referensprojekt
[1] Aubreville, M., Bertram, CA, Donovan, TA et al. En fullständigt kommenterad hel bilddatauppsättning av bröstcancer hos hundar för att hjälpa mänsklig bröstcancerforskning. Sci Data 7, 417 (2020). https://doi.org/10.1038/s41597-020-00756-z
[2] Khened, M., Kori, A., Rajkumar, H. et al. Ett generaliserat ramverk för djupinlärning för bildsegmentering och analys av hela bilden. Sci Rep 11 11579 (2021). https://doi.org/10.1038/s41598-021-90444-8
[3] PNAS 27 mars 2018 115 (13) E2970-E2979; publicerades först 12 mars 2018; https://doi.org/10.1073/pnas.1717139115
Om författaren
Pablo Nuñez Pölcher, MSc, är en Senior Solutions Architect som arbetar för den offentliga sektorns team med Amazon Web Services. Pablo fokuserar på att hjälpa offentliga hälsovårdskunder att bygga nya, innovativa produkter på AWS i enlighet med bästa praxis. Han tog sin M.Sc. i biologiska vetenskaper från Universidad de Buenos Aires. På fritiden tycker han om att cykla och mixtra med ML-aktiverade inbyggda enheter.
Razvan Ionasec, PhD, MBA, är teknisk ledare för sjukvård på Amazon Web Services i Europa, Mellanöstern och Afrika. Hans arbete fokuserar på att hjälpa sjukvårdskunder att lösa affärsproblem genom att utnyttja teknik. Tidigare var Razvan global chef för produkter för artificiell intelligens (AI) på Siemens Healthineers med ansvar för AI-Rad Companion, familjen av AI-drivna och molnbaserade digitala hälsolösningar för bildbehandling. Han har 30+ patent inom AI/ML för medicinsk bildbehandling och har publicerat 70+ internationella peer-reviewed tekniska och kliniska publikationer om datorseende, beräkningsmodellering och medicinsk bildanalys. Razvan tog sin doktorsexamen i datavetenskap från Technical University Munich och MBA från University of Cambridge, Judge Business School.
- '
- "
- &
- 100
- 11
- 110
- 2020
- 2021
- 7
- Om oss
- accelerera
- tillgång
- Konto
- Handling
- afrika
- AI
- algoritm
- Alla
- redan
- Även
- amason
- Amazon-erkännande
- Amazon SageMaker
- Amazon Web Services
- analys
- Ansökan
- tillämpningar
- APT
- arkitektur
- konstgjord
- artificiell intelligens
- Konstgjord intelligens (AI)
- Tillgångar
- Autentisering
- tillgänglighet
- tillgänglig
- AWS
- gunga
- BÄST
- bästa praxis
- Blogg
- öka
- Box
- Bröstcancer
- SLUTRESULTAT
- företag
- Ring
- cambridge
- Kan få
- Cancer
- cancerforskning
- laddning
- klassificering
- koda
- samling
- kommentarer
- Datavetenskap
- Datorsyn
- förtroende
- konfiguration
- Konsol
- Behållare
- Behållare
- innehåller
- fortsätter
- Kostar
- Skapa
- referenser
- Kunder
- datum
- Databas
- databaser
- djupt lärande
- förstöra
- detalj
- Detektering
- utvecklare
- Utveckling
- enheter
- olika
- digital
- Digital hälsa
- digitalisering
- Hamnarbetare
- Läkare
- ner
- lätt
- missar
- Slutpunkt
- Miljö
- Europa
- exempel
- erfarenhet
- export
- familj
- Leverans
- Funktioner
- Figur
- Förnamn
- följer
- gaffel
- format
- hittade
- Ramverk
- Fri
- full
- fungera
- framtida
- generera
- geometri
- GitHub
- Ge
- Välgörenhet
- Gold
- bevilja
- bidrag
- har
- huvud
- Hälsa
- hälso-och sjukvård
- hjälpa
- här.
- Hur ser din drömresa ut
- How To
- HTTPS
- IAM
- Identitet
- bild
- bildanalys
- bildsegmentering
- Imaging
- importera
- informationen
- innovativa
- integrerad
- integrering
- Intelligens
- intresse
- Internationell
- involverade
- IT
- Jupyter Notebook
- Etiketter
- Large
- senaste
- lansera
- LÄRA SIG
- lärt
- inlärning
- Nivå
- Bibliotek
- linje
- linux
- Lista
- listor
- läsa in
- Lokalisering
- maskininlärning
- kartor
- Mars
- medicinsk
- medicinsk bildbehandling
- Medium
- Mellanöstern
- ML
- modell
- modellering
- modeller
- mer
- Munich
- namn
- Navigering
- behövs
- Objektdetektion
- Onboarding
- Övriga
- ägaren
- Patent
- patologi
- patienter
- prestanda
- personlig
- plattform
- policy
- Principal
- privat
- process
- Produktion
- produktivitet
- Produkter
- yrkesmän/kvinnor
- projektet
- projekt
- ge
- ger
- allmän
- offentlig sektor
- publikationer
- Python
- RAM
- forskning
- Resurser
- respons
- Körning
- rinnande
- sagemaker
- scanning
- Skola
- Vetenskap
- VETENSKAPER
- sektor
- vald
- Tjänster
- in
- inställning
- Dela
- siemens
- signifikant
- Enkelt
- Storlek
- Small
- So
- Lösningar
- LÖSA
- Utrymme
- specialiserad
- delas
- Etapp
- starta
- igång
- Ange
- status
- förvaring
- lagra
- studio
- Stöder
- Växla
- System
- Målet
- Teknisk
- tekniker
- Teknologi
- testa
- källan
- Genom
- tid
- tidskrävande
- tillsammans
- token
- verktyg
- topp
- Utbildning
- Transaktioner
- unika
- universitet
- Universitetet i Cambridge
- Uppdatering
- URI
- us
- USD
- värde
- version
- syn
- W
- webb
- webbservice
- Webb-baserad
- Vad
- Vad är
- VEM
- brett
- inom
- utan
- Arbete
- arbetssätt
- skulle
- skrivning
- X
- år
- Youtube