end-to-end csővezeték tüdőgyulladás kimutatására Röntgenképekből
a tüdőgyulladás kockázata sokak számára óriási, különösen a fejlődő országokban, ahol milliárdok szembesülnek energiaszegény és támaszkodnak szennyező energiaformákra. A WHO becslése szerint évente több mint 4 millió korai haláleset fordul elő háztartási légszennyezéssel kapcsolatos betegségek, beleértve a tüdőgyulladást is. Évente több mint 150 millió ember fertőződik meg tüdőgyulladással, különösen az 5 év alatti gyermekek. Az ilyen régiókban a probléma tovább súlyosbodhat az orvosi erőforrások és a személyzet hiánya miatt. Afrika 57 országában például 2,3 millió orvos és nővér hiányzik. Ezeknek a populációknak a pontos és gyors diagnózis mindent jelent. Garantálhatja a kezelésekhez való időben történő hozzáférést, és sok időt és pénzt takaríthat meg azok számára, akik már most is szegénységben élnek.
Ez a projekt a Kaggle-n tartott mellkasi röntgenfelvételek (tüdőgyulladás) része.
készítsen egy algoritmust, amely automatikusan azonosítja, hogy a beteg tüdőgyulladásban szenved-e vagy sem, a mellkas röntgenfelvételeinek megtekintésével. Az algoritmusnak rendkívül pontosnak kellett lennie, mert az emberek élete forog kockán.
környezet és eszközök
scikit-learn
keras
numpy
pandák
matplotlib
adatok
az adatkészlet letölthető a Kaggle weboldaláról, amely itt található.
hol van a kód?
sok minden nélkül kezdjük el a kódot. A github teljes projektje itt található.
kezdjük az összes könyvtár és függőség betöltésével.
ezután megjelenítettem néhány normál és tüdőgyulladásos képet, hogy megnézzem, mennyire különböznek szabad szemmel. Hát nem sok!
minta képek ezután az adatkészletet három csoportra osztom-vonat, érvényesítés és tesztkészletek.
ezután írtam egy funkciót, amelyben elvégeztem néhány adatnagyítást, betápláltam a képzési és tesztkészleteket a hálózatba. A képekhez címkéket is készítettem.
az adatnagyítás gyakorlata hatékony módszer a képzési készlet méretének növelésére. A képzési példák kibővítése lehetővé teszi a hálózat számára, hogy diverzifikáltabb, de mégis reprezentatív adatpontokat “lásson” a képzés során.
ezután meghatároztam egy pár adatgenerátort: az egyik a képzési adatokhoz, a másik az érvényesítési adatokhoz. Az adatgenerátor képes betölteni a szükséges mennyiségű adatot (egy mini képcsomag) közvetlenül a forrásmappából, konvertálni őket képzési adatokká (a modellbe táplálva) és képzési célokká (attribútumok vektora — a felügyeleti jel).
kísérleteimhez általában a batch_size = 64
értéket állítom be. Általában a 32 és 128 közötti értéknek jól kell működnie. Általában meg kell növelni/csökkenteni a tétel méretét szerint számítási erőforrások és a modell teljesítményét.
ezután meghatároztam néhány állandót a későbbi használathoz.
a következő lépés a modell elkészítése volt. Ezt a következő 5 lépésben lehet leírni.
öt konvolúciós blokkot használtam, amelyek konvolúciós rétegből, max-poolingból és batch-normalizációból álltak.
a tetején egy simított réteget használtam, amelyet négy teljesen összekapcsolt réteg követett.
között is használtam a lemorzsolódásokat a túlzott illesztés csökkentésére.
az aktiválási funkció Relu volt, kivéve az utolsó réteget, ahol Sigmoid volt, mivel ez egy bináris osztályozási probléma.
Adam-et használtam optimalizálóként, a kereszt-entrópia pedig veszteségként.
edzés előtt a modell hasznos egy vagy több visszahívás meghatározásához. Nagyon praktikus, a következők: ModelCheckpoint
és EarlyStopping
.
ModelCheckpoint: amikor a képzés sok időt igényel a jó eredmény eléréséhez, gyakran sok iterációra van szükség. Ebben az esetben jobb, ha a legjobban teljesítő modell másolatát csak akkor menti el, ha a mutatókat javító korszak véget ér.
EarlyStopping: néha az edzés során észrevehetjük, hogy az általánosítási rés (azaz az edzés és az érvényesítési hiba közötti különbség) csökkenni kezd, ahelyett, hogy csökkenne. Ez a túltöltés tünete, amely sokféleképpen megoldható (a modell kapacitásának csökkentése, a képzési adatok növelése, az adatok bővítése, a szabályozás, a lemorzsolódás stb.). Gyakran praktikus és hatékony megoldás az edzés leállítása, amikor az általánosítási rés egyre rosszabb.
korai leállítás
ezután 10 korszakra képeztem a modellt 32-es tételmérettel. Felhívjuk figyelmét, hogy általában a nagyobb kötegméret jobb eredményeket ad, de a nagyobb számítási terhek rovására. Egyes kutatások azt is állítják, hogy van egy optimális tételméret a legjobb eredmény érdekében, amelyet egy kis idő befektetésével lehet megtalálni hiper-paraméter hangolás.
vizualizáljuk a veszteséget és a pontosságot.
pontosság vs EPOCH/veszteség vs epoch eddig olyan jó. A modell konvergál, ami megfigyelhető a veszteség csökkenéséből és a validációs veszteségből a korszakokkal. Szintén képes elérni a 90% – os érvényesítési pontosságot mindössze 10 korszakban.
ábrázoljuk a zavartsági mátrixot, és kapjunk néhány más eredményt is, mint a pontosság, a visszahívás, az F1 pontszám és a pontosság.
CONFUSION MATRIX ------------------ ] TEST METRICS ---------------------- Accuracy: 91.02564102564102% Precision: 89.76190476190476% Recall: 96.66666666666667% F1-score: 93.08641975308642 TRAIN METRIC ---------------------- Train acc: 94.23
a modell 91,02% – os pontosságot képes elérni, ami a használt adatok méretét figyelembe véve elég jó.
következtetések
bár ez a projekt messze nem teljes, de figyelemre méltó, hogy a siker a mély tanulás ilyen változatos valós problémák. Megmutattam, hogyan lehet osztályozni a pozitív és negatív tüdőgyulladásos adatokat egy röntgenkép-gyűjteményből. A modell a semmiből készült, amely elválasztja más módszerektől, amelyek nagymértékben támaszkodnak az átviteli tanulási megközelítésre. A jövőben ez a munka kiterjeszthető a tüdőrákból és tüdőgyulladásból álló röntgenfelvételek kimutatására és osztályozására. A tüdőrákot és tüdőgyulladást tartalmazó röntgenképek megkülönböztetése az utóbbi időben nagy kérdés volt, és a következő megközelítésünk ennek a problémának a kezelése.