Mesterseges Intelligencia házifeladat:

A VIK Wikiből
(MiKeziras szócikkből átirányítva)

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


Kézírás felismerése

Feladat

8. Rendszeres mammográfiai vizsgálatok segítségével nagy a mellrák korai felismerésének esélye, és így nagyban csökken a kockázata is. Óriási munka azonban feldolgozni a nagymennyiségű röntgenképet. Kórházunkban ma a következőképpen történik a feldolgozás. Egy technikus elkészíti a röntgenképet, majd egy szakorvos diagnosztizálja (a pozitív leleteken bekarikázza a kóros elváltozást és mellé írja, hogy „RÁK”), ezután egy asszisztens a leleteket kétfelé válogatja (pozitívak–negatívak), végül a pozitív leletek alapján megkezdődik a kezelés. Láthatóan minden egyes képpel több embernek is foglalkoznia kell, és sajnos nem mindegyik váltható ki számítógépes megoldással. Az Ön feladata azonban egy olyan MLP hálózat alkalmazás elkészítése lesz, mely képes az asszisztens munkáját elvégezni. Figyeljen arra, hogy előfordul, hogy az orvos egy negatív leletre is felír valamit (például „KAR”, ha belógott a képbe a páciens karja), ezeket meg kell tudnia különböztetni a „RÁK” felirattól!

Megoldás

Egy tetszőleges JPEG képen meg kell találni hogy hol van írás piros filccel, majd ezt betűkre szétbontani, és felismerni hogy a RÁK szó vagy sem.

A szöveg megtalálásához a piroshoz közeli szineken kívül mindent ki kell szűrni. Majd a betűk közti hézagokat figyelve szétbontani. Belefoglalni egy téglalapba. A megtalált szövegben a betűket egyforma méretűre kell méretezni, hiszen kézírással különböző méretűek lehetnek. Ezeket az egyforma képeket egy mátrixként felfogva kezeltem. Az egyes értékek az adott pixel RGB értékéből a pirosat jelentették. A képmanipulációra a forrásban külön osztályok vannak.

A felismeréshez egy teljesen általános MLP hálózatkezelő programot gyártottam Java-ban. Menthető és betölthető bármilyen réteg-és neuronszámú hálóstruktúra. A tanító példákat fájlból veszi, külön a kimenetet és a bemenetet, ezért általánosan minden MLP feladatra újrafelhasználható. A forrás elég jól van kommentezve, és a különböző funkciókhoz külön class-okat írtam. Ennek ellenére nehezen lehet rajta elmenni mert jó hosszú a kód. Ráadásul még GUI is van. Ha valakit érdekel akkor írjon mail-t, mert itt hosszadalmas lenne részleteznem.

Neurális háló és hibavisszaterjesztés

Egy jól használható (angol) segédlet az algoritmus és a háló leprogramozásához Darabos Dániel oldalán található (MIT tanszék Phd hallgatók). Az oldal alján lévő mátrixos felírás a nyerő. Ezen kívül van ott egy Python forrás is. A kettővel már érthető nagyjából hogy kell nekiesni.

Én kicsit máshogy oldottam meg mint ott van, hogy általános legyen. Minden súlyt egyetlen mátrixban tárolok, és a rétegekhez megfelelő részmátrixokat ebből veszem ki. Külön osztály van a mátrixműveletekre is, azt bármihez lehet használni. Ezekkel a műveletekkel már viszonylag egyszerű a hibaisszaterjesztést megoldani.


-- GorcsGergely - 2006.01.09.