Même après plus de cent ans après son introduction, l'histologie reste l'étalon-or dans le diagnostic et le pronostic des tumeurs. Les anatomopathologistes évaluent l'histologie pour stratifier les patients cancéreux en différents groupes en fonction de leurs génotypes et phénotypes tumoraux et de leur résultat clinique [1,2]. Cependant, l'évaluation humaine des lames histologiques est subjective et non reproductible [3]. De plus, l'évaluation histologique est un processus chronophage qui nécessite des professionnels hautement qualifiés.
Grâce aux avancées technologiques significatives de la dernière décennie, des techniques telles que l'imagerie de diapositives entières (WSI) et l'apprentissage en profondeur (DL) sont désormais largement disponibles. WSI est le balayage de lames de verre de microscopie conventionnelle pour produire une seule image haute résolution à partir de ces lames. Cela permet la numérisation et la collecte de grands ensembles d'images de pathologie, ce qui aurait été d'une durée et d'un coût prohibitifs. La disponibilité de ces ensembles de données crée des moyens nouveaux et innovants d'accélérer le diagnostic en utilisant des techniques telles que l'apprentissage automatique (ML) pour aider les pathologistes à accélérer les diagnostics en identifiant rapidement les caractéristiques d'intérêt.
Dans cet article, nous allons explorer comment les développeurs sans expérience préalable en ML peuvent utiliser Étiquettes personnalisées Amazon Rekognition pour former un modèle qui classe les caractéristiques cellulaires. Les étiquettes personnalisées d'Amazon Rekognition sont une fonctionnalité de Amazon Reconnaissance qui vous permet de créer vos propres capacités spécialisées d'analyse d'images basées sur ML pour détecter des objets et des scènes uniques faisant partie intégrante de votre cas d'utilisation spécifique. En particulier, nous utilisons un ensemble de données contenant des images de diapositives entières de carcinome mammaire canin [1] pour démontrer comment traiter ces images et former un modèle qui détecte les figures mitotiques. Cet ensemble de données a été utilisé avec la permission du Prof. Dr. Marc Aubreville, qui a aimablement accepté de nous permettre de l'utiliser pour ce post. Pour plus d'informations, consultez la section Remerciements à la fin de cet article.
Présentation de la solution
La solution se compose de deux composants :
- Un modèle d'étiquettes personnalisées Amazon Rekognition — Pour permettre à Amazon Rekognition de détecter les figures mitotiques, nous effectuons les étapes suivantes :
- Échantillonnez l'ensemble de données WSI pour produire des images de taille adéquate en utilisant Amazon SageMakerStudio et un code Python s'exécutant sur un notebook Jupyter. Studio est un environnement de développement intégré (IDE) basé sur le Web pour ML qui fournit tous les outils dont vous avez besoin pour faire passer vos modèles de l'expérimentation à la production tout en augmentant votre productivité. Nous utiliserons Studio pour diviser les images en plus petites afin de former notre modèle.
- Entraînez un modèle Amazon Rekognition Custom Labels pour reconnaître les figures mitotiques dans les échantillons d'hématoxyline-éosine à l'aide des données préparées à l'étape précédente.
- Une application frontale — Pour montrer comment utiliser un modèle comme celui que nous avons formé à l'étape précédente, nous effectuons les étapes suivantes :
Le diagramme suivant illustre l'architecture de la solution.
Toutes les ressources nécessaires pour déployer l'implémentation discutée dans ce post et le code pour toute la section sont disponibles sur GitHub. Vous pouvez cloner ou bifurquer le référentiel, apporter les modifications souhaitées et l'exécuter vous-même.
Dans les étapes suivantes, nous parcourons le code pour comprendre les différentes étapes impliquées dans l'obtention et la préparation des données, la formation du modèle et son utilisation à partir d'un exemple d'application.
Costs
Lors de l'exécution des étapes de cette procédure pas à pas, l'utilisation des services AWS suivants entraîne de faibles coûts :
- Amazon Reconnaissance
- AWSFargate
- Équilibreur de charge d'application
- AWS Secrets Manager
De plus, si vous n'êtes plus dans la période ou les conditions de l'offre gratuite, vous pouvez encourir des frais pour les services suivants :
- CodePipeline
- CodeBuild
- ECR d'Amazon
- Amazon Sage Maker
Si vous effectuez correctement les étapes de nettoyage après avoir terminé cette procédure pas à pas, vous pouvez vous attendre à des coûts inférieurs à 10 USD, si le modèle Amazon Rekognition Custom Labels et l'application Web s'exécutent pendant une heure ou moins.
Pré-requis
Pour effectuer toutes les étapes, vous avez besoin des éléments suivants :
Entraînement du modèle de classification des figures mitotiques
Nous exécutons toutes les étapes nécessaires pour entraîner le modèle à partir d'un notebook Studio. Si vous n'avez jamais utilisé Studio auparavant, vous devrez peut-être à bord première. Pour plus d'informations, voir Intégrez rapidement Amazon SageMaker Studio.
Certaines des étapes suivantes nécessitent plus de RAM que ce qui est disponible dans un bloc-notes ml.t3.medium standard. Assurez-vous que vous avez sélectionné un bloc-notes ml.m5.large. Vous devriez voir une indication 2 vCPU + 8 GiB dans le coin supérieur droit de la page.
Le code de cette section est disponible sous forme de Fichier de cahier Jupyter.
Une fois intégré à Studio, suivez ces instructions pour accorder à Studio les autorisations nécessaires pour appeler Amazon Rekognition en votre nom.
Dépendances
Pour commencer, nous devons effectuer les étapes suivantes :
- Mettez à jour les packages Linux et installez les dépendances requises, telles que OpenSlide :
- Installez les bibliothèques fastai et SlideRunner à l'aide de pip :
- Téléchargez l'ensemble de données (nous fournissons un script pour le faire automatiquement) :
Traiter le jeu de données
Nous allons commencer par importer certains des packages que nous utilisons tout au long de l'étape de préparation des données. Ensuite, nous téléchargeons et chargeons la base de données d'annotations pour cet ensemble de données. Cette base de données contient les positions dans l'ensemble des images de diapositives des figures mitotiques (les caractéristiques que nous voulons classer). Voir le code suivant :
Parce que nous utilisons SageMaker, nous créons un nouveau SageMaker Session objet pour faciliter des tâches telles que le téléchargement de notre ensemble de données sur un Service de stockage simple Amazon (Amazon S3). Nous utilisons également le compartiment S3 que SageMaker crée par défaut pour télécharger nos fichiers image traités.
Les slidelist_test
array contient les ID des diapositives que nous utilisons dans le cadre de l'ensemble de données de test pour évaluer les performances du modèle formé. Voir le code suivant :
L'étape suivante consiste à obtenir un ensemble de zones de formation et de diapositives de test, ainsi que les étiquettes qu'elles contiennent, à partir desquelles nous pouvons prendre des zones plus petites à utiliser pour former notre modèle. Le code pour get_slides se trouve dans le fichier sampling.py dans GitHub.
Nous voulons échantillonner au hasard à partir des diapositives de formation et de test. Nous utilisons les listes de diapositives d'entraînement et de test et sélectionnons au hasard n_training_images
fois un fichier pour la formation, et n_test_images
fois un fichier pour test :
Ensuite, nous créons un répertoire pour les images d'entraînement et un autre pour les images de test :
Avant de produire les images plus petites nécessaires pour former le modèle, nous avons besoin d'un code d'assistance qui produit les métadonnées nécessaires pour décrire les données de formation et de test. Le code suivant s'assure qu'une boîte englobante donnée entourant les caractéristiques d'intérêt (figures mitotiques) se trouve bien dans la zone que nous coupons et produit une ligne de JSON qui décrit l'image et les caractéristiques qu'elle contient dans Vérité au sol Amazon SageMaker format, qui est le format requis par Amazon Rekognition Custom Labels. Pour plus d'informations sur ce fichier manifeste pour la détection d'objets, consultez Localisation d'objets dans les fichiers manifestes.
Avec la generate_annotations
fonction en place, nous pouvons écrire le code pour produire les images d'entraînement et de test :
La dernière étape pour avoir toutes les données requises est d'écrire un manifest.json
fichier pour chacun des jeux de données :
Transférer les fichiers vers S3
Nous utilisons les upload_data
méthode que l'objet de session SageMaker expose pour télécharger les images et les fichiers manifestes dans le compartiment SageMaker S3 par défaut :
Former un modèle d'étiquettes personnalisées Amazon Rekognition
Avec les données déjà dans Amazon S3, nous pouvons commencer à former un modèle personnalisé. Nous utilisons la bibliothèque Boto3 pour créer un client Amazon Rekognition et créer un projet :
Avec le projet prêt à l'emploi, vous avez maintenant besoin d'une version de projet qui pointe vers les ensembles de données de formation et de test dans Amazon S3. Idéalement, chaque version pointe vers différents ensembles de données (ou différentes versions de ceux-ci). Cela nous permet d'avoir différentes versions d'un modèle, de comparer leurs performances et de basculer entre elles si nécessaire. Voir le code suivant :
Une fois que nous avons créé la version du projet, Amazon Rekognition démarre automatiquement le processus de formation. Le temps de formation dépend de plusieurs caractéristiques, telles que la taille des images et leur nombre, le nombre de classes, etc. Dans ce cas, pour 500 images, la formation prend environ 90 minutes pour se terminer.
Tester le modèle
Après la formation, chaque modèle dans Amazon Rekognition Custom Labels est dans le STOPPED
Etat. Pour l'utiliser pour l'inférence, vous devez le démarrer. Nous obtenons l'ARN de la version du projet à partir de la description de la version du projet et le transmettons au start_project_version
. Remarquez le MinInferenceUnits
paramètre - nous commençons avec une unité d'inférence. Le nombre maximal réel de transactions par seconde (TPS) pris en charge par cette unité d'inférence dépend de la complexité de votre modèle. Pour en savoir plus sur le TPS, consultez ce blog récents.
Lorsque la version de votre projet est répertoriée comme RUNNING
, vous pouvez commencer à envoyer des images à Amazon Rekognition pour inférence.
Nous utilisons l'un des fichiers du jeu de données de test pour tester le modèle nouvellement démarré. Vous pouvez utiliser n'importe quel fichier PNG ou JPEG approprié à la place.
Application éclairée
Pour démontrer l'intégration avec Amazon Rekognition, nous utilisons une application Python très simple. Nous utilisons le Rationalisé bibliothèque pour créer une interface utilisateur spartiate, où nous invitons l'utilisateur à télécharger un fichier image.
Nous utilisons la librairie Boto3 et le detect_custom_labels
méthode, avec l'ARN de la version du projet, pour appeler le point de terminaison d'inférence. La réponse est un document JSON qui contient les positions et les classes des différents objets détectés dans l'image. Dans notre cas, ce sont les figures mitotiques que l'algorithme a trouvées dans l'image que nous avons envoyée au point final. Voir le code suivant :
Déployer l'application sur AWS
Pour déployer l'application, nous utilisons un script AWS CDK. L'ensemble du projet est à retrouver sur GitHub . Regardons les différentes ressources déployées par le script.
Créer un référentiel Amazon ECR
Comme première étape vers la configuration de notre déploiement, nous créons un référentiel Amazon ECR, où nous pouvons stocker nos images de conteneur d'application :
Créez et stockez votre jeton GitHub dans AWS Secrets Manager
CodePipeline a besoin d'un jeton d'accès personnel GitHub pour surveiller votre référentiel GitHub pour les modifications et extraire le code. Pour créer le jeton, suivez les instructions du Documentation GitHub. Le jeton nécessite les champs d'application GitHub suivants :
- Les
repo
scope, qui est utilisé pour un contrôle total pour lire et extraire les artefacts des référentiels publics et privés dans un pipeline. - Les
admin:repo_hook
scope, qui est utilisé pour un contrôle total des crochets du référentiel.
Après avoir créé le jeton, stockez-le dans un nouveau secret dans AWS Secrets Manager comme suit:
Écrire les paramètres de configuration dans AWS Systems Manager Parameter Store
Le script AWS CDK lit certains paramètres de configuration à partir de Magasin de paramètres AWS Systems Manager, tels que le nom et le propriétaire du référentiel GitHub, le compte cible et la région. Avant de lancer le script AWS CDK, vous devez créer ces paramètres dans votre propre compte.
Vous pouvez le faire en utilisant l'AWS CLI. Invoquez simplement le put-parameter
commande avec un nom, une valeur et le type du paramètre :
Voici une liste de tous les paramètres requis par le script AWS CDK. Tous sont de type String
:
- /rek_wsi/prod/accountId — ID du compte sur lequel nous déployons l'application.
- /rek_wsi/prod/ecr_repo_name — Nom du référentiel Amazon ECR dans lequel les images de conteneur sont stockées.
- /rek_wsi/prod/github/branch — La branche du référentiel GitHub à partir de laquelle CodePipeline doit extraire le code.
- /rek_wsi/prod/github/owner — Le propriétaire du référentiel GitHub.
- /rek_wsi/prod/github/repo — Le nom du référentiel GitHub où notre code est stocké.
- /rek_wsi/prod/github/token — Le nom ou l'ARN du secret dans Secrets Manager qui contient votre jeton d'authentification GitHub. Ceci est nécessaire pour que CodePipeline puisse communiquer avec GitHub.
- /rek_wsi/prod/region — La région où nous allons déployer l'application.
Notez le prod
segment dans tous les noms de paramètres. Bien que nous n'ayons pas besoin de ce niveau de détail pour un exemple aussi simple, cela permettra de réutiliser cette approche avec d'autres projets où différents environnements peuvent être nécessaires.
Ressources créées par le script AWS CDK
Nous avons besoin que notre application, exécutée dans une tâche Fargate, ait les autorisations pour appeler Amazon Rekognition. Nous créons donc d'abord un Gestion des identités et des accès AWS (IAM) Rôle de tâche avec le RekognitionReadOnlyPolicy
politique qui s'y rattache. Remarquez que le assumed_by
paramètre dans le code suivant prend le ecs-tasks.amazonaws.com
chef de service. En effet, nous utilisons Amazon ECS en tant qu'orchestrateur. Nous avons donc besoin d'Amazon ECS pour assumer le rôle et transmettre les informations d'identification à la tâche Fargate.
Une fois construite, notre image de conteneur d'application se trouve dans un référentiel Amazon ECR privé. Nous avons besoin d'un objet qui le décrit que nous pouvons transmettre lors de la création du service Fargate :
Nous créons un nouveau VPC et un cluster pour cette application. Vous pouvez modifier cette partie pour utiliser votre propre VPC en utilisant le from_lookup
méthode de Vpc
classe:
Maintenant que nous avons un VPC et un cluster sur lesquels déployer, nous créons le service Fargate. Nous utilisons 0.25 vCPU et 512 Mo de RAM pour cette tâche, et nous plaçons un Application Load Balancer (ALB) public devant. Une fois déployé, nous utilisons l'ALB CNAME pour accéder à l'application. Voir le code suivant :
Pour créer et déployer automatiquement une nouvelle image de conteneur chaque fois que nous poussons du code vers notre branche principale, nous créons un pipeline simple composé d'une action source GitHub et d'une étape de génération. C'est ici que nous utilisons les secrets que nous avons stockés dans AWS Secrets Manager et AWS Systems Manager Parameter Store lors des étapes précédentes.
CodeBuild a besoin d'autorisations pour transmettre des images de conteneur à Amazon ECR. Pour accorder ces autorisations, nous ajoutons le AmazonEC2ContainerRegistryFullAccess
stratégie à un rôle IAM sur mesure que le principal de service CodeBuild peut assumer :
Le projet CodeBuild se connecte au référentiel Amazon ECR privé, crée l'image Docker avec l'application Streamlit et pousse l'image dans le référentiel avec un appspec.yaml
et le imagedefinitions.json
fichier.
Les appspec.yaml
décrit la tâche (port, version de la plate-forme Fargate, etc.), tandis que le imagedefinitions.json
mappe les noms des images de conteneur à leur URI Amazon ECR correspondant. Voir le code suivant :
Enfin, nous assemblons les différentes étapes du pipeline. La dernière action est la EcsDeployAction
, qui prend l'image du conteneur créée à l'étape précédente et effectue une mise à jour continue des tâches dans notre cluster ECS :
Nettoyer
Pour éviter d'engager des coûts futurs, nettoyez les ressources que vous avez créées dans le cadre de cette solution.
Modèle d'étiquettes personnalisées Amazon Rekognition
Avant d'arrêter votre bloc-notes Studio, assurez-vous d'arrêter le modèle Amazon Rekognition Custom Labels. Si vous ne le faites pas, cela continue d'entraîner des frais.
Vous pouvez également utiliser la console Amazon Rekognition pour arrêter le service :
- Sur la console Amazon Rekognition, choisissez Utiliser des étiquettes personnalisées dans le volet de navigation.
- Selectionnez Projets dans le volet de navigation.
- Choisissez la version 1 du
rek-mitotic-figures-workshop
. - Sur le Utiliser le modèle onglet, choisissez Arrêter.
Application éclairée
Pour détruire toutes les ressources associées à l'application Streamlit, exécutez le code suivant à partir du répertoire de l'application AWS CDK :
AWS Secrets Manager
Pour supprimer le jeton GitHub, suivez les instructions du Documentation.
Conclusion
Dans cet article, nous avons parcouru les étapes nécessaires pour former un modèle d'étiquettes personnalisées Amazon Rekognition pour une application de pathologie numérique utilisant des données du monde réel. Nous avons ensuite appris à utiliser le modèle à partir d'une application simple déployée depuis un pipeline CI/CD vers Fargate.
Amazon Rekognition Custom Labels vous permet de créer des applications de soins de santé compatibles ML que vous pouvez facilement créer et déployer à l'aide de services tels que Fargate, CodeBuild et CodePipeline.
Pouvez-vous penser à des applications pour aider les chercheurs, les médecins ou leurs patients à se faciliter la vie ? Si tel est le cas, utilisez le code de cette procédure pas à pas pour créer votre prochaine application. Et si vous avez des questions, n'hésitez pas à les partager dans la section des commentaires.
Remerciements
Nous tenons à remercier le Prof. Dr. Marc Aubreville de nous avoir gentiment donné la permission d'utiliser l'ensemble de données MITOS_WSI_CMC pour cet article de blog. Le jeu de données est disponible sur GitHub.
Bibliographie
[1] Aubreville, M., Bertram, CA, Donovan, TA et al. Un ensemble de données d'images de diapositives entièrement annotées sur le cancer du sein canin pour aider la recherche sur le cancer du sein humain. Sci Data 7, 417 (2020). https://doi.org/10.1038/s41597-020-00756-z
[2] Khened, M., Kori, A., Rajkumar, H. et al. Un cadre généralisé d'apprentissage en profondeur pour la segmentation et l'analyse d'images de diapositives entières. Sci Rep 11 11579 (2021). https://doi.org/10.1038/s41598-021-90444-8
[3] PNAS 27 mars 2018 115 (13) E2970-E2979 ; publié pour la première fois le 12 mars 2018; https://doi.org/10.1073/pnas.1717139115
À propos de l’auteur
Pablo Nuñez Polcher, MSc, est un architecte de solutions senior travaillant pour l'équipe du secteur public avec Amazon Web Services. Pablo s'attache à aider les clients du secteur public de la santé à créer de nouveaux produits innovants sur AWS conformément aux meilleures pratiques. Il a obtenu son M.Sc. en sciences biologiques de l'Université de Buenos Aires. Dans ses temps libres, il aime faire du vélo et bricoler avec des appareils intégrés compatibles ML.
Razvan Ionasec, PhD, MBA, est le responsable technique des soins de santé chez Amazon Web Services en Europe, au Moyen-Orient et en Afrique. Son travail consiste à aider les clients du secteur de la santé à résoudre les problèmes commerciaux en tirant parti de la technologie. Auparavant, Razvan était le responsable mondial des produits d'intelligence artificielle (IA) chez Siemens Healthineers en charge d'AI-Rad Companion, la famille de solutions de santé numériques basées sur l'IA et basées sur le cloud pour l'imagerie. Il détient plus de 30 brevets en IA/ML pour l'imagerie médicale et a publié plus de 70 publications techniques et cliniques internationales évaluées par des pairs sur la vision par ordinateur, la modélisation informatique et l'analyse d'images médicales. Razvan est titulaire d'un doctorat en informatique de l'Université technique de Munich et d'un MBA de l'Université de Cambridge, Judge Business School.
- '
- "
- &
- 100
- 11
- 110
- 2020
- 2021
- 7
- Qui sommes-nous
- accélérer
- accès
- Compte
- Action
- Afrique
- AI
- algorithme
- Tous
- déjà
- Bien que
- Amazon
- Amazon Reconnaissance
- Amazon Sage Maker
- Amazon Web Services
- selon une analyse de l’Université de Princeton
- Application
- applications
- APT
- architecture
- artificiel
- intelligence artificielle
- Intelligence artificielle (AI)
- Outils
- Authentification
- disponibilité
- disponibles
- AWS
- balancier
- LES MEILLEURS
- les meilleures pratiques
- blog
- stimuler
- Box
- Cancer du sein
- construire
- la performance des entreprises
- Appelez-nous
- cambridge
- Peut obtenir
- Cancer
- recherche sur le cancer
- charge
- classification
- code
- collection
- commentaires
- Informatique
- Vision par ordinateur
- confiance
- configuration
- Console
- Contenant
- Conteneurs
- contient
- continue
- Costs
- La création
- Lettres de créance
- Clients
- données
- Base de données
- bases de données
- l'apprentissage en profondeur
- détruire
- détail
- Détection
- mobiles
- Développement
- Compatibles
- différent
- numérique
- Santé numérique
- numérisation
- Docker
- Docteur
- down
- même
- echo
- Endpoint
- Environment
- Europe
- exemple
- Découvrez
- Exporter
- famille
- Fonctionnalité
- Fonctionnalités:
- Figure
- Prénom
- suivre
- fourche
- le format
- trouvé
- Framework
- Test d'anglais
- plein
- fonction
- avenir
- générer
- géométrie
- GitHub
- Don
- Global
- Or
- subvention
- subventions
- ayant
- front
- Santé
- la médecine
- aider
- ici
- Comment
- How To
- HTTPS
- IAM
- Active
- image
- l'analyse d'image
- segmentation d'image
- Imagerie
- l'importation
- d'information
- technologie innovante
- intégrale
- l'intégration
- Intelligence
- intérêt
- International
- impliqué
- IT
- Jupyter Notebook
- Etiquettes
- gros
- Nouveautés
- lancement
- APPRENTISSAGE
- savant
- apprentissage
- Niveau
- Bibliothèque
- Gamme
- linux
- Liste
- Liste
- charge
- Localisation
- machine learning
- Map
- Mars
- médical
- l'imagerie médicale
- moyenne
- Moyen-Orient
- ML
- modèle
- modélisation statistique
- numériques jumeaux (digital twin models)
- PLUS
- Munich
- noms
- Navigation
- nécessaire
- Détection d'objet
- Onboarding
- Autre
- propriétaire
- Brevets
- pathologie
- patients
- performant
- personnel
- plateforme
- politique
- Directeur
- Privé
- processus
- Vidéo
- productivité
- Produits
- ,une équipe de professionnels qualifiés
- Projet
- projets
- fournir
- fournit
- public
- secteur public
- publications
- Python
- RAM
- un article
- Ressources
- réponse
- Courir
- pour le running
- sagemaker
- balayage
- L'école
- Sciences
- STARFLEET SCIENCES
- secteur
- choisi
- Services
- set
- mise
- Partager
- Siemens
- significative
- étapes
- Taille
- petit
- So
- Solutions
- RÉSOUDRE
- Space
- spécialisé
- scission
- Étape
- Commencer
- j'ai commencé
- Région
- Statut
- storage
- Boutique
- studio
- Les soutiens
- Interrupteur
- Système
- Target
- Technique
- techniques
- Technologie
- tester
- La Source
- Avec
- fiable
- long
- ensemble
- jeton
- les outils
- top
- Formation
- Transactions
- unique
- université
- Université de Cambridge
- Mises à jour
- URI
- us
- USD
- Plus-value
- version
- vision
- W
- web
- services Web
- Basé sur le Web
- Quoi
- Qu’est ce qu'
- WHO
- largement
- dans les
- sans
- Activités principales
- de travail
- pourra
- écriture
- X
- années
- Youtube