Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial Internet of Things >> Ingebed

Een algoritme trainen om vroege blindheid te detecteren en te voorkomen

Een draagbaar medisch apparaat dat nauwkeurig verschillende stadia van diabetische retinopathie zou kunnen detecteren, zonder dat een internetverbinding nodig is, zou het aantal gevallen van blindheid als gevolg van retinopathie wereldwijd aanzienlijk verminderen. Met embedded machine learning is het nu mogelijk om algoritmen te ontwikkelen die direct op batterijgevoede medische apparaten kunnen werken en detectie of diagnose kunnen uitvoeren. In dit artikel geven we een overzicht van de stappen die nodig zijn om snel een algoritme te trainen om deze mogelijkheid te leveren met behulp van een softwareplatform van Edge Impulse.

Diabetische retinopathie is een aandoening waarbij schade optreedt aan de bloedvaten in de weefsels aan de achterkant van het oog. Het kan voorkomen bij diabetici en bij wie de bloedsuikerspiegel slecht wordt beheerd. In extreme chronische gevallen kan diabetische retinopathie leiden tot blindheid.

Meer dan twee op de vijf Amerikanen met diabetes hebben een vorm van diabetische retinopathie. Dat maakt het vroegtijdig vangen van cruciaal belang, waarna levensstijl of medische interventie kan worden uitgevoerd. Voor landelijke gebieden over de hele wereld waar de toegang tot oogzorg beperkt is, zijn de stadia van retinopathie nog moeilijker eerder te detecteren voordat een geval ernstig wordt. Met detectie van diabetische retinopathie als doel, hebben we gekeken naar openbaar beschikbare medische gegevens en een machine learning-model in Edge Impulse te trainen dat inferentie rechtstreeks op een edge-apparaat kon uitvoeren. Het algoritme zou idealiter in staat zijn om de ernst van diabetische retinopathie te beoordelen tussen beelden van ogen genomen door een retinale camera. De dataset die we voor dit project hebben gebruikt, vind je hier.

Voor dit algoritme hebben we de klassen verdeeld in vijf verschillende datasets:

  • Geen diabetische retinopathie (geen DR)
  • Milde DR
  • Gemiddelde DR
  • Ernstige DR
  • Proliferatieve DR

Zoals bij veel openbaar beschikbare datasets, moesten er wat gegevens worden opgeschoond en gelabeld.

Om de identiteit van de patiënt te beschermen, kreeg elke afbeelding in de dataset eenvoudig een id_code en een diagnose van 0-5, waarbij 0 de laagste ernst is van Geen DR en 5 de ergste of proliferatieve DR.

Om de gegevens in Edge Impulse op te nemen, moesten de afbeeldingen worden gepartitioneerd. Gezien de eenvoudige aard van hoe de gegevens waren verdeeld, besloot ik een VBA-script te schrijven om de afbeelding id_code uit Excel te lezen, de bijbehorende afbeelding te pakken en in de betreffende map te plaatsen. Het script om deze bestanden te verplaatsen is hier gelinkt. Voor degenen met betere Python- of andere scripttaalvaardigheden, zijn er veel manieren om dit te doen, die misschien nog eenvoudiger zijn.

Edge Impulse heeft andere functies voor gegevensopname, zoals integratie van cloudgegevensbuckets of gegevensverzameling van apparaten, maar het uploaden van gegevens was de methode die ik hier gebruikte. Met behulp van de optie voor het uploaden van gegevens kon ik mijn 5 verschillende klassen een reeks van vijf uploads binnenbrengen. Elke upload bestond uit het labelen van de gegevens als een van de 5 klassen en het uploaden van de bijbehorende afbeeldingen in elke map.

Edge Impulse heeft de mogelijkheid om gegevens automatisch op te splitsen in trainings- of testgegevens met een 80/20-verdeling. Ik heb echter handmatig ongeveer 500 afbeeldingen over de verschillende klassen toegevoegd aan de testdataset.

Vervolgens was het tijd om mijn model in te stellen en het signaalverwerkingsblok en het neurale netwerkblok voor dit model te kiezen. Voor dit model heb ik het afbeeldingsblok in een transfer learning-blok ingevoerd met als doel onderscheid te maken tussen vijf verschillende klassen.

Vanaf hier ging ik het neurale netwerk trainen. Spelen met de instellingen van het neurale netwerk, de beste nauwkeurigheid die ik kreeg was ongeveer 74%. Niet slecht, maar het model liep vast als het ging om enkele van de randgevallen. Ernstige DR werd bijvoorbeeld soms geclassificeerd als milde DR. Het model was niet supernauwkeurig naarmate DR vorderde, zoals je kunt zien in de onderstaande schermafbeelding.

Dit zette me aan het denken over de real-life toepassingen van een project als dit en of dit niveau van nauwkeurigheid acceptabel zou zijn. Idealiter zou een soort draagbare camera voor retinale beeldvorming (in een omgeving met weinig draadloze connectiviteit) een dergelijk algoritme op het apparaat zelf kunnen uitvoeren. Wanneer de foto is gemaakt, verwerkt en een resultaat wordt weergegeven, kan de persoon die de oogtest uitvoert de patiënt vertellen dat hij verdere medische hulp of interventie moet zoeken, afhankelijk van het resultaat.

Voor deze toepassing is het belangrijker om DR in alle stadia op te lopen, zodat de patiënt ofwel een preventieve behandeling kan beginnen, of in ernstigere gevallen onmiddellijk medische hulp kan zoeken. Gezien deze use case, dient het model zijn potentiële toepassing relatief goed.

Uit mijn hoofd zijn er een paar wijzigingen of verbeteringen die ik in het model zou kunnen aanbrengen, waardoor de resulterende uitvoer nauwkeuriger zou kunnen zijn in termen van het diagnosticeren van de ernst van DR:

  • Meer gegevens is altijd beter. Gezien deze beperkte dataset zou echter verdere gegevensverzameling nodig zijn.
  • Een idee zou kunnen zijn om klassen te combineren, door een milde – matige klasse en een proliferatieve – strenge klasse te creëren. Ik vraag me af of dat het algoritme zou kunnen helpen om beter te classificeren, gezien de overeenkomsten tussen bepaalde gevallen van milde en matige DR, die nu allemaal in dezelfde groep zouden vallen.

Speel met het aantal lagen binnen het neurale netwerk (NN), evenals de uitval.

Vanuit een implementatieperspectief had dit getrainde model een grotere voetafdruk in termen van geheugen, met naar schatting 306 kB Flash en 236 kB RAM. Afhankelijk van het apparaat dat is geselecteerd om inferentie op uit te voeren, was de hoeveelheid tijd die nodig was om een ​​inferentieresultaat terug te geven tussen 0,8 seconden en 6 seconden, bij benchmarking op een Cortex-M4 op 80 MHz of Cortex-M7 op 216 MHz. Aangezien dit eindproduct echter foto's zou moeten maken, verwacht ik dat zoiets als de verwerkingsmogelijkheden van de Cortex-M7 of hoger nodig zijn.

Samenvattend konden we met behulp van een open-source dataset een relatief goed werkend machine learning-model trainen voor het detecteren van verschillende vormen van diabetische retinopathie (DR). Het einddoel zou zijn om modellen zoals deze direct op de embedded microcontroller of Linux-apparaat te implementeren en meer medische apparaten zoals die hieronder inferentie aan de rand te laten uitvoeren. Dit opent nieuwe mogelijkheden voor gezondheidsdiensten, door medische technologie te bieden die kan worden gebruikt in landelijke gebieden, zonder draadloze connectiviteit om tests uit te voeren voor populaties die weinig toegang hebben tot gezondheidszorg.

Er is inderdaad een goede kans voor de inzet van embedded machine learning (ML) in medische apparaten. Meer details over dit project, inclusief verder verbeterpotentieel zijn hier beschikbaar.


Ingebed

  1. Hoe werd titanium ontdekt en gebruikt door mensen?
  2. Cloud en hoe het de IT-wereld verandert
  3. Filosofie en documentatie
  4. Vier soorten cyberaanvallen en hoe u ze kunt voorkomen
  5. Hoe u veelvoorkomende problemen met zware machines en apparatuur kunt voorkomen
  6. Wat is lasporositeit en hoe kan dit worden voorkomen?
  7. Wat is roesten en hoe voorkom je roest? Een volledige gids
  8. Belangrijkste oorzaken van machinestoringen en hoe ze te voorkomen
  9. Wat is interoperabiliteit en hoe kan mijn bedrijf dit bereiken?
  10. Valvallen bij machinebewaking en hoe u ze kunt voorkomen
  11. Lekken opsporen en verhelpen