• 20-08-2016, 10:21:28
    #1
    Merhaba, arkadaslar su rakam tanima olayini gercekten bilen biri var mi? Bir resim icinden rakami tespit edip onu okuyabilen bir sistem gelistirmis bir arkadas, su isin mantigini anlatabilir mi? Yapay sinir aglari konusunu cidden oturtamadim, o kadar makale okudum ama yok yani, ya cidden kafam basmiyor herhalde bu isi halletmem gerek. Hayrina veya Ucretiyle anlatcak varsada olur.
  • 20-08-2016, 11:39:15
    #2
    Çözümün OCR araştır
  • 20-08-2016, 12:42:18
    #3
    Ureticy adlı üyeden alıntı: mesajı görüntüle
    Çözümün OCR araştır
    Bu cevabın geleceğini anlamalıydım OCR bu işin genel ismi nette bir sürü kütüphane var zaten Burda asıl olan yapay sinir ağları kısmı hocam, rakam sadece bir örnekti, nesne tanıma, mesela bir rakamı görüp sınırlarını çizdirip o rakamın kaç oldugunu bulabilmek, yada yüz tanıma, işim kütüphanelere kalsa yapamayacagım bişey yok, ama kütüphane çok kısıtlıyor. Ben bu işin temeli olan yapay sinir ağlarını çözmek istiyorum. cvp için tşk ederim
  • 20-08-2016, 12:44:13
    #4
    rica ederim : )
  • 21-08-2016, 11:07:50
    #5
    bir suredir login olmamistim buraya, konundaki cevaplari gordum de yazmak istedim..

    Simdi bu konu oyle iki dakikada anlatilacak bir sey degil. Ama elimden geldigince kisaca anlatmaya calisayim.


    Gunumuzde Machine Learning denilen teknoloji onemini arttiriyor ve bir cok olay bununla cozulebiliyor. bu konuda guzel calismalari var,
    ornek (bastan sona izlemeni tavsiye ederim)

    Simdi bu rakam olayina gelince bunla ilgili bir proje yaptik. Elimizde uc tane veri seti var. Bunlar; training, test ve validation.

    Oncelikle bilgisayara traning datalarini vererek, ogrenme islemlerini gerceklestireceksin. Bizim elimizdeki datasetlerin ozellikleri soyle




    Ama elimizde 60 bin tane traning verisi ve 10 bin tane de test verisi var. Olay soyle, bu 60 bin tane veri yani bizim durumumuzda bunlar rakam oluyor. Atiyorum her rakamdan 6000 tane sekil var. Yani sifir rakamanini ele alirsak, insanlarin cizdigi 6000 tane sifir rakami var. Haliyle 6000 i de birbirinden farkli. Bir ornek verirsem



    Gordugun gibi degisik formlarda 0 rakami var, bunlardan 6 binser tane ve her rakam icin mevcut.

    Asagida da test verilerini goruyorsun..




    Simdi bilgisayara belirli parametreler vererek ogretme islemi gerseklestiriliyor.

    noron numarasi, epoch numarasi, ogrenme orani ve traning samples.. Traning samples i acarsam biraz; yukaridaki her hangi bir resmi pixel bazinda dusun. Her pixel in belirli bir renk kodu mevcut. Ustte verdigim gibi bizdeki her bir resmin boyutu 28x28 (uzunluk, genislik) dir, ve bunlar ayni zamanda pixel sayisini veriyor. Yani yatay olarak bir satirda 28, dikey olarak da bir satirda 28 pixel vardir, dolayisyla toplamda 784 tane pixel var.

    Benim amacim spesifik ozellikleri cikarmak olacak boylece farkli rakamlar arasindaki farklari bulabilecegim. Rakam olarak 1 ve 0 i dusunelim simdi. Farklari nedir? 1 rakaminda sadece duz bir cizgi ve ust tarafta bir cikinti var. Sifir rakami dis cercevesi dolu ama ici bos.

    Simdi ben bu iki rakami birbirinden ayirmak icin ne yapabilirim? Mesela elimdeki 28x28 lik resmi dikey olarak 4 parcaya boldugumu dusunelim..

    Simdi 1 rakami icin ne bekleriz? Siyah renkli pixellerin genelde hep ortada toplanmis oldugunu ve bir sol tarafindaki parcada da bir parca siyah pixeller olmasini bekleriz.

    Peki 0 rakami icin ne bekleriz? 4 parcada da siyah pixellerin olmasini bekleriz ama 1 ve 4 parcada daha cok olmasini bekleriz ama her halukarda beyaz pixeller siyahlardan daha fazla olmali.

    Not: Resim isleme yapilirken oncelikle resmi beyaz-siyah haline cevirmek gerekiyor, bu sayede isler kolaylasir.

    Ustte kendimce bir sey pattern/sablon belirledim ve bunu kullanarak pixel saydirma islemi yapiyorum. Tum sifir rakamani barindiran resimler icin 4 parcalik resmin ortak pixel sayisi bulunur, ayni islemi 1, 2,3... rakamlari icin de yapilir boylece her rakam icinde farkliliklar cikarilir. Bu patterne feature deniyor ve birden fazla feature belirleyebilirsin. Mesela sen de yatay olarak 4 parcaya bol, ya da 20 parcaya bol ya da 28 parcaya bol.. Bunun gibi cesitli sekillerde features olusturup bunlarla o resmi ayirt edici ozellik olarak kullanabilirsin.

    Featureslarimizi belirledikten sonra makine bunu belirli bir formata cevirip belleginde tutuyor. Simdi sira validation datasetini vermeye geldi. Validation setin amaci, parametrelerimizi optimize etmektir. Features larimizi ve parametrelerimizi degistirerek en iyi sonucu elde etmeye calisiriz.

    Validation dataseti de ustteki resimler gibi cizilmiz rakam resimlediridir. Bu dataseti de bilgisayara veririz ve ayni parametrelerle bunun da ozellikleri cikarilir.

    Suan elimizde tranining datasetinden elde ettigimiz features lar var ve validation datasetinden elde ettigimiz featureslar var. Simdi yapilan is ise validation den elde ettigimiz features larin hangi rakama ait oldugunu, training datasetinden ogrendigimiz ortak verilerle karsilastirarak bulabiliriz. Mesela dedigim gibi 1 rakaminin siyah pixelleri genelde orta noktalardadir, o halde validation datasetteki sadece ortada birikmis siyah pixeller var ise, makine bunu 1 olarak yorumlayacaktir ve sayisina gore bir dogruluk orani verecektir.

    ornek olarak sonuc soyle cikmis..



    Testlerde verilen parametrede bilgisayarin verdigi sonuc yukaridaki resimde. Burada goruldugu gibi

    ilk sonuc 8 rakamini 8 olarak tahmin etmis (gercek rakam, tahmin edilen rakam seklinde yazili)

    ikinci de ise 5 rakamini 2 olarak tahmin etmis (yanlis tabi)
    3 rakamini da dogru tahmin etmis.. En sonda da dogruluk orani 1 uzerinden 0.81 imis. Yani %81 dogru tahmin etmis.

    Yapilacak is parametrelerimizi ve featureslari degistirip bu orani yukseltmek. Max. dogruluk oranini yakaladimigizda atiyorum (%92), bu sefer de test datasetini kullanarak dogruluk oranina bakacagiz. Test veri tabanindaki resimler, validation datasetinden daha fazladir. Cunku bize cok farkli resimler gerekmekte boylece kurguladigimiz features ve parametrelerin dogrulugunu daha net gorebiliriz.
    Training-validation da yapilan karsilastirma mantigi aynen training-test de de gecerlidir.

    Not: Yukarida verdigim sonuc tablosu aslinda test datasetindeki dogruluklari gosteriyor ama ben senaryoyu bozmamak icin boyle anlattim.

    Sonuc olarak bu bir machine learning islemidir ve NN (neural network kullanilarak cozulmustur)

    Not: Features karsilastirma olayina detayli giremedim ama bunlari kitaplardan, makalelerden ogrenebilirsin. Boylece NN nin nasil calistigini gorebilirsin. Bunun haricinde HMM (hidden markov model) e de bak.

    Faydali olmasi dilegiyle,
    Ertan
  • 21-08-2016, 12:02:10
    #6
    ertan hocam, daha yazınızın yarısında 1 ve 0 ayrımında siyah piksellerin nerde toplandığına bakarak dediğiniz an, kafamda şimşekler çaktı.

    Sizin gibi insanlar çok nadir bulunur. Bu nadide bilgileri hiç bir yerde bulamadım. Kime sorduysamda saçma sapan yuvarlak cevaplar aldım.

    Yapay sinir ağları konusunda çok bilgili birisiniz belliki.. Hocam sizin gibi insanlar eğitim versin bizim gibi bu işe meraklı insanlara, bu ülke bu şekilde gelişir. Takip edebileceğim bir web siteniz yada eğitmenseniz bulunduğunuz kurum neredeyse öğrenmeye hazırım. Sizin gibi insanlara bu ülkenin ihtiyacı var.
  • 21-08-2016, 12:26:35
    #7
    http://neuralnetworksanddeeplearning.com/

    Konu hakkında genel bilgi edinmek için bu siteyi de inceleyebilirsiniz.
  • 21-08-2016, 15:42:49
    #8
    Selamlar,

    Maalesef websitem vs yok (pek zamanim da yok bu isler icin) ve egitmen de degilim.

    Image Processing de her sey matematik temellidir. Bilgisayar bilisimciler belirli matematik teoremleri uzerinde calisir ve onlari image processing e uygularlar. Mesela atiyorum bir resmi blurlastirmak icin pixelleriyle oynamak yeterlidir. Mesela bir matrix grubu alinir (atiyorum 3x3) bu grup icerisinde pixel degerleriyle belirli algoritmalar esliginde oynanarak tuzlama,bulaniklastirma vs gibi seyler elde edilebilinir. Pixel yogunlugunu bulmak icin yatay/dikey historgram cikarman gerekiyor gibi..


    Hazir Image Processing kutuphanelerinde de bazi teoremleri bulabirsiniz http://opencv.org/documentation.html

    ama genel dokumanlar icin ingilizce bilmeniz gerekir (mesela mean filter, median filter gibi seylere bakabilirsiniz)..

    Bu isler icin en uygunu aslinda MATLAB dir. Ben c# ile kendim yapiyordum ama matlab in image processing tool'unu kurarsan benim gibi cok ugrasmana gerek olmadan yapabilirsin. Ama oncelikle bunla ilgili kitaplar okumani ve uygulama gelistirmeni tavsiye ederim.



    Buradaki videolardan da baslayabilirsin. Belirli bir yere kadar ilerleme sansin var


    https://www.youtube.com/watch?v=-cSV...nHvx5n&index=1


    Kitap olarak da;

    Practical Image and Video Processing Using MATLAB - O. Marques (Wiley_IEEE, 2011)
    A guide to MATLAB for beginners and experienced users (Hunt, Lipsman, Rosenberg - 2001 - Cambridge university press)

    Algorithms for Image Processing and Computer Vision, J. R. Parker


    Tavsiye ederim. Videoda anlamadigin metodlarin detaylarina/arkaplanlarina bakabilirsin.

    Ayrica; turkiye'deki bu alanda uzman olan Birol Kuyumcu'nun kitabini alabilirsin.

    http://www.dr.com.tr/Kitap/OpenCv/Bi...=0000000664997

    Keza bu arkadasin blogunu da takip edebilirsin. Resim isleme uzerine cok sey ogrenebilirsin

    http://derindelimavi.blogspot.com/

    kolay gelsin.
  • 24-08-2016, 17:10:01
    #9
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Şöyle bir yöntem de geliştirilebilir;

    9X9 bir dizide satır ve stun değerleri resmin siyah beyaz piksellerine göre çizilip satır ve stun değerlerin çarpımı ile elde edilen değer 6000 şablonun değerleri ile karşılaştırılıp eleme yapılabilir örneğin;


    --123456789
    1 ---00---- = 9
    2 --0-0---- = 16
    3 -0--0---- = 21
    4 ----0---- = 20
    5 ----0---- = 25
    6 ----0---- = 30
    7 ----0---- = 35
    8 ----0---- = 40
    9 ----0---- = 45
    (Bu resimde 1 rakamı için 241)


    --123456789
    1 000000000 = 45
    2 -------0- = 18
    3 ------0-- = 24
    4 -----0--- = 28
    5 ----0---- = 25
    6 ---0----- = 24
    7 ---0----- = 28
    8 ---0----- = 32
    9 ---0----- = 36
    (Bu resimde 7 rakamı için 260)


    Gibi gibi...