Rozpoznávání a klasifikace fotografií pivních přepravek



Podobné dokumenty
Testování neuronových sítí pro prostorovou interpolaci v softwaru GRASS GIS

PV021 Vícevrstvá neuronová síť pro rozeznávání mikroteček. Matúš Goljer, Maroš Kucbel, Michal Novotný, Karel Štěpka 2011

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

Algoritmus a implementace

Algoritmy a struktury neuropočítačů ASN - P11

Úvod do Operačních Systémů

Zobrazování barev Josef Pelikán CGG MFF UK Praha.

Algoritmy a struktury neuropočítačů ASN - P10. Aplikace UNS v biomedicíně

Strojové učení se zaměřením na vliv vstupních dat

DETEKCE HRAN V BIOMEDICÍNSKÝCH OBRAZECH

IV122 Matematika a programování Úvod kurzu. Radek Pelánek

LOKALIZACE ZDROJŮ AE NEURONOVÝMI SÍTĚMI NEZÁVISLE NA ZMĚNÁCH MATERIÁLU A MĚŘÍTKA

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

Experimentální systém pro WEB IR

Úvod do Operačních Systémů

Raspberry Pi - security system

Software pro vzdálenou laboratoř

Automatické testování softwaru. Testujte svůj kód! Předpoklady: Příklad: sum_digits() Možnost 1: Zkusíme funkci použít v konzoli Pythonu.

BASH. Kouzla s příkazovou řádkou. Petr Koloros

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Střední odborná škola a Střední odborné učiliště, Hořovice

Využití neuronové sítě pro identifikaci realného systému

Profilová část maturitní zkoušky 2013/2014

Programování v Pythonu

Fiala P., Karhan P., Ptáček J. Oddělení lékařské fyziky a radiační ochrany Fakultní nemocnice Olomouc

NG C Implementace plně rekurentní

Vytěžování znalostí z dat

5. Vyhledávání a řazení 1

Třídění a vyhledávání Searching and sorting

Použití technik UI v algoritmickém obchodování III

Úvod do Operačních Systémů

Manuál Multitag čtečka

Ing. Petr Hájek, Ph.D. Podpora přednášky kurzu Aplikace umělé inteligence

Komprimace/Dekomprimace

Neuronové sítě. 1 Úvod. 2 Historie. 3 Modely neuronu

Vývoj řízený testy Test Driven Development

Architektura - struktura sítě výkonných prvků, jejich vzájemné propojení.

Využití FWTools a UMN MapServer. dat

Diskrétní 2D konvoluce

PSK3-9. Základy skriptování. Hlavička

Trénování sítě pomocí učení s učitelem

KLASIFIKÁTOR MODULACÍ S VYUŽITÍM UMĚLÉ NEURONOVÉ SÍTĚ

Rozpoznávání písmen. Jiří Šejnoha Rudolf Kadlec (c) 2005

METODY DOLOVÁNÍ V DATECH DATOVÉ SKLADY TEREZA HYNČICOVÁ H2IGE1

Kybernetika a umělá inteligence, cvičení 10/11

Cvičení MI-PRC I. Šimeček

Semestrální práce Mozaika aneb Co všechno umí pan Voronoi

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

ANALÝZA A KLASIFIKACE BIOMEDICÍNSKÝCH DAT. Institut biostatistiky a analýz

Vytěžování znalostí z dat

KRY. Projekt č. 2. Kamil Dudka xdudka00

Sekvenční a podmíněné provádění

Dolování z textu. Martin Vítek

Chyby a výjimky. Chyba. Odkud se chyby berou? Kdo chyby opravuje? Co můžete dělat jako programátor? Dvě hlavní metody práce s chybami.

Funkce, podmíněný příkaz if-else, příkaz cyklu for

AUTOMATICKÁ DETEKCE JAZYKA TEXTOVÉHO DOKUMENTU LANGUAGE IDENTIFICATION OF TEXT DOCUMENT

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

ZEMĚMĚŘICKÝ ÚŘAD. Výzkum a vývoj programového aparátu pro generalizaci státního mapového díla. Ing. Přemysl JINDRÁK

DigiDepot: JPEG 2000 jako ukládací formát

KMA/PDB. Karel Janečka. Tvorba materiálů byla podpořena z prostředků projektu FRVŠ č. F0584/2011/F1d

Neuronové časové řady (ANN-TS)

Emergence chování robotických agentů: neuroevoluce

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Vybraná zajímavá Lotus Notes řešení použitelná i ve vašich aplikacích. David Marko TCL DigiTrade

Přechod webových aplikací na Python 3 Tomáš Pazderka 6. listopadu 2018

Algoritmy pro spojitou optimalizaci

Tvorba nových dat. Vektor. Geodatabáze. Prezentace prostorových dat. Základní geometrické objekty Bod Linie Polygon. Vektorová

Histogram. 11. února Zadání

Profilová část maturitní zkoušky 2017/2018

Efektivní komunikace díky inovativním hlasovým technologiím. Praha, Call centrum ve finančních službách

Skripty - úvod. Linux - skripty 2

Automatická detekce anomálií při geofyzikálním průzkumu. Lenka Kosková Třísková NTI TUL Doktorandský seminář,

Lekce 9 - Migrace dat

5. Umělé neuronové sítě. Neuronové sítě

PSK3-5. Přesměrování vstupu a výstupu. Vstup a výstup

Webové stránky. 16. Obrázky na webových stránkách, optimalizace GIF. Datum vytvoření: str ánk y. Vytvořil: Petr Lerch.

Python profesionálně: dynamické parametry, generátory, lambda funkce... with. Dynamické parametry

DETEKCE ANOMÁLNÍHO CHOVÁNÍ UŽIVATELŮ KATASTRÁLNÍCH MAPOVÝCH SLUŽEB

Příprava dat v softwaru Statistica

Příloha č. 18. Specifikace bloku PŘÍPRAVA. Příloha k zadávací dokumentaci veřejné zakázky Integrační nástroje, vstupní a výstupní subsystém

Firewally a iptables. Přednáška číslo 12

Téma: Vektorová grafika. Určete pravdivost následujícího tvrzení: "Grafická data jsou u 2D vektorové grafiky uložena ve voxelech."

JPEG Formát pro archivaci a zpřístupnění.

Tvorba povrchového modelu (ndsm) v časové řadě a jeho využití k detekci lesní těžby

Omezení barevného prostoru

Michal Krátký, Miroslav Beneš

Algoritmizace prostorových úloh

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

2C Tisk-ePROJEKTY

Počítače a grafika. Ing. Radek Poliščuk, Ph.D. Přednáška č.7. z předmětu

1 Uživatelská dokumentace

Semestrální práce: Rozpoznání hláskované řeči a převedení na text

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

PROGRAMOVÁNÍ V SHELLU

Výstupní testování studentů 4. ročníku

VYSOKÁ ŠKOLA BÁŇSKÁ TECHNICKÁ UNIVERZITA OSTRAVA FAKULTA STROJNÍ DATABÁZOVÉ SYSTÉMY ARCHITEKTURA DATABÁZOVÝCH SYSTÉMŮ. Ing. Lukáš OTTE, Ph.D.

Osvědčené postupy pro zpracování tiskových dat s vynikající kvalitou tisku

ZÍSKÁVÁNÍ ZNALOSTÍ Z DATABÁZÍ

3. Vícevrstvé dopředné sítě

Počítačové zpracování obrazu Projekt Učíme se navzájem

Transkript:

Rozpoznávání a klasikace fotograí pivních přepravek Seminární práce z předmětu Neuronové sítě v aplikacích: Rozpoznávání obrazu Ondřej Veselý, N-II Inženýrská informatika, Automatizace řízení a informatika Úvod Rozpoznávání obrazu je důležitou úlohou oboru umělé inteligence. Ke klasikaci obrazových dat se nejčastěji používá fuzzy rozhodování a neuronové sítě. Tato práce se bude zabývat klasikací obrazů za použití klasické vícevrstvé neuronové sítě. Popis použitých technologií Nástroj Convert z balíku Imagemagick pro změnu vzorkování rastrových dat Bash shell pro řízení preprocessingu Python pro implementaci algoritmu na detekci hran Jazyk C a Fast Articial Neural Network Library pro implementaci neuronové sítě Metodika Z důvodu snadnějšího a rychlejšího zpracování obrazu jsem se rozhodl nepoužívat převod na vektory, ale po celou dobu pracovat s rastrovými daty. Proto v prvním kroku předzpracování provádím škálování obrazu na nižší rozlišení pomocí nástroje Convert. Vzhledem k tomu, že zdrojové obrazy byly různě nasvětleny, považoval jsem za nejdůležitější součást předzpracování obrazu detekci hran. Protože taková implementace je poměrně triviální, použil jsem několikařádkové řešení v Pythonu (operátor Sobel využívající konvolučních masek). Tento skript rovnou převádí obrázek na číselný vektor, přičemž se zahazuje informace o barvách a škála šedé se redukuje pouze na šestnáct odstínů. Celý preprocessing je řízen shellovým skriptem, který parsuje názvy vstupních souborů, vytváří z nich další údaje potřebné pro učení a ty spolu s číselným vektorem ukládá do tzv. prepo souboru, který už je ve formátu kompatibilním s metodami knihovny FANN. Testovací sadu jsem vytvořil vždy z prvního obrázku v sadě; na ostatních se síť učila. Vlastní učení jednouchý program využívající vysokoúrovňových metod zmíněné knihovny. Naučená síť je uložena jako soubor. Testování dat je implementování opět Cčkovým programem. Ten načte neuronovu síť ze souboru; pak testovací sadu předzpracovanou shellovým skriptem a vypíše pro každý testovací záznam dva údaje nejpravděpodobnější index vzorku a míru jistoty. Síť jsem testoval na standardním vzorku třiceti ořezaných fotek přepravek; průběh experimentu popisuji dále. Podobnou procentuální úspěšnost síť vykazovala i na dvojnásobném vzorku lépe předpřipravených fotek. Vlastní experiment Jako výkonnostně snesitelné se ještě ukázala být neuronová síť s řádově jednotky tisíc vstupních neuronů; proto jsem se rozhodl pro rozměr 60 x 60 pixelů, tedy 3600 vstupních neuronů. Parametry použité neuronové sítě

Aktivační funkce: sigmoidální, symetrická Počet vstupních neuronů: 3600 Počet výstupních neuronů: 30 Počet vrstev: 3 Počet neuronů ve skryté vrstvě: 90 Počet expoch: 25 Trvání jednotlivých částí experimentu akce čas (s) Preprocessing tréninkových dat 55 Učení 12 Preprocessing testovacích dat 22 Testování testovacích dat 1 Výsledky název sady číslo sady rozpoznaná přepravka Míra jistoty (-1 až 1) určeno správně bakalarlogo 1 22-0,44! ne bakalar 2 2 0,01 ano bazantt 3 3 0,87 ano bazant 4 11-0,17! ne birell 5 5 0,81 ano branik 6 6 0,72 ano cernahora 7 7 0,90 ano dudak 8 8 0,70 ano gambrinus 9 9 0,98 ano gorgon 10 10 0,86 ano horden 11 11 0,42 ano hostan 12 12 0,63 ano chotebor 13 13 0,21 ano ch 14 14-0,37! ano klaster 15 15 0,85 ano koruna 16 16 0,39 ano most 17 17 0,32 ano ostravar 18 18-0,55! ano passau 19 19-0,40! ano pelhrimov 20 20 0,81 ano plzen 21 21-0,71! ano popper 22 22 0,79 ano postrizinske 23 23-0,19! ano primator 24 24-0,21! ano primus 25 25 0,97 ano purkmistr 26 26 0,60 ano rr 27 27 0,87 ano

schoffer 28 28-0,28! ano steiger 29 29 0,70 ano urpiner 30 30 0,48 ano Úspěšnost sítě v tomto experimentu je tedy přibližně 93%. Diskuze Síť měla problémy nejčastěji s přepravkou bazant. Následující série obrázků znázorňuje 1. přepravku bazant 2. přepravku bazant tak jak je posílána na vstup neuronové síti a 3. přepravku horden, která je nejčastěji chybně určována místo přepravky bazant. 1) 2) 3) V tomto případě se neúspěch podobností loga, které nebylo zachyceno v dostatečném rozlišení. Vzhledem k tomu, že jsem neprováděl rozsáhlé množstí experimentů, které by vedly k doladění parametrů, má tato síť pravěpodobně skrytý potenciál jak v oblasti preprocessingu tak při samotném učení. Preprocessing bych doporučil vylepšit tak, aby generoval hned dva obrazy ke zpracování hrubý rastr 12 x 12 pixelů celé přepravky a pak o něco větší výřez detekovaného loga (zde se ovšem objevuje nutnost detekce polohy loga). Závěr I přes zmíněné kvalitatvní nedostatky úspěšnost sítě předčila mé očekávání, přesto že podávala dobré výsledky rovnou bez jakéhokoli ladění. Především je velice rychlá. Celá implementace je navíc provedena relativně nízkoúrovňově a dá se snadno přizpůsobit dalším úlohám, nebo snadno zaintegrovat např. do automatizovaného serverového řešení.

Příloha 1: Kód skriptu řídící preprocessing #!/bin/sh # skript vytvori soubor prepo-$1 pro nacteni neuronovou siti # pracuje se sadou obrazku v adresari bedny # author: ondrej.vesely@orwen.org # nastavime parametry podle toho jaka data chceme predzpracovat if [ "all" = "$1" ] maximalni_sada=30 hlavicka="100 3600 30" echo "Generuji ucici sadu pro vsechna data" if [ "vsekromenuly" = "$1" ] maximalni_sada=30 hlavicka="70 3600 30" echo "Generuji ucici sadu pro ne-prvni obrazky ze sady" if [ "pouzenuly" = "$1" ] maximalni_sada=30 hlavicka="30 3600 30" echo "Generuji ucici sadu pro prvni obrazky ze sady" if [ "" = "$1" ] [! "$hlavicka" ] echo "nespravne parametry" exit 1 echo $hlavicka > prepro.data sadanum=0 for fname in `ls bedny/*.png sort`; do # parse lenames to get metadata sada=`echo $fname cut -f1 -d'0' cut -f2 -d'/'` obrazek=`echo $fname cut -f2 -d'0' cut -f1 -d'.'` if [ $obrazek -eq 1 ] sadanum=$((sadanum+1)) # pokud nechceme zahrnout testovaci obrazky, vynechame cyklus if [ "vsekromenuly" = "$1" ] && [ $obrazek -eq 1 ] continue # pokud ucime pouze testovaci obrazky, vynechame cyklus if [ "pouzenuly" = "$1" ] && [! $obrazek -eq 1 ] continue echo "Processing: sada $sada number $sadanum, obrazek $obrazek..." convert -resize 62x62! $fname tmp.png./s.py tmp.png >> prepro.data # zmena velikosti # normalizace dat v obrazku

done # pozadovany vystup z neuronky for i in `seq 1 $maximalni_sada`; do if [ $i -eq $sadanum ]; echo -n "1 " >> prepro.data else echo -n "-1 " >> prepro.data done echo >> prepro.data rm tmp.png rm tmp.png.png mv prepro.data prepo-$1.data echo "Normalised data saved to prepo-$1.data"

Příloha 2: Normalizace vstupních dat v jednom obrázku #!/usr/bin/python # Provede prevod do sede skaly a detekci hran; zapise je do obrazku. Ten ulozi jako $1.png # Na vystup vypise radu cisel odpovidajici tmavosti pixelu. # prevzato a prizpusobeno z # http://lu-vision-dock.blogspot.com/2009/04/sobel-edge-detection.html import sys import Image import math import opencv def sobel(img): if img.mode!= "RGB": img = img.convert("rgb") out_image = Image.new(img.mode, img.size, None) imgdata = img.load() outdata = out_image.load() gx = [[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]] gy = [[-1, -2, -1], [0, 0, 0], [1, 2, 1]] p = 0 for row in xrange(1, img.size[0]-1): for col in xrange(1, img.size[1]-1): pixel_gx = pixel_gy = 0 pxval = sum(imgdata[row,col])/3 for i in range(-1, 2): for j in range(-1, 2): val = sum(imgdata[row+i,col+j])/3 pixel_gx += gx[i+1][j+1] * val pixel_gy += gy[i+1][j+1] * val newpixel = math.sqrt(pixel_gx * pixel_gx + pixel_gy * pixel_gy) newpixel = 255 - int(newpixel) outdata[row, col] = (newpixel, newpixel, newpixel) print (newpixel / 16), return out_image img = Image.open(sys.argv[1]) out = sobel(img) out.save(sys.argv[1] + ".png")