Sunday, October 26, 2014

NVidia, GPU, (Derin Öğrenim) Deep Learning

Bilgisayarin ana mikroislemcisi (CPU) yerine video kartlari uzerinde olan GPU kullanma yaklasimi iyice populerlesmeye basladi. Oyle populerlesti ki video kart ureticisi NVidia disaridan bilgisayara dahil edilebilen ayri bir ufak GPU unitesi bile yaratti. Unitenin ismi Jetson karti.    

Kart uzerinde Ubuntu isleyebiliyor, network aktaricisi (router) dahil edilip hemen ssh ile alete baglanabiliyorsunuz. Yapay ogrenim ile ugrasanlar icin muthis haber GPU uzerinde mevcut 192 cekirdek asiri seviyede paralelism isteyen deep learning yaklasimi icin bicilmis kaftan, ki burada birisi denemis, ve nasil yapilabilecegi anlatiliyor. Blog sahibi Pete Warden imaj uzerinde yapay ogrenim algoritmalari kullanma konusunda uzmanlardan biridir, bu is icin kurdugu sirketini gecende Google satin aldi.

Almanya'da satan sirket surada.

Felzenswalb Gruplamasi (Felzenswalb Clustering)

Thursday, October 16, 2014

emacs-ipython

Emacs'te LaTeX modundan direk iPython kodu isletip sonucu metin / grafik olarak alip yine LaTeX icinde gosterebilen Emacs eklentisi emacs-ipython'u ayri bir proje olarak yayinladik.

Wednesday, October 15, 2014

Felzenswalb Gruplama (Clustering) Algoritmasi

Imaji bolumlere ayirma (segmentation) baglaminda en iyi algoritmalardan biri Felzenswalb algoritmasidir. Altta makalesi ve isleyen C++ kodu paylasilmis,

http://cs.brown.edu/~pff/segment/

Scikit-image projesi ayni algoritmayi pakete dahil etmis, bu guzel haber.

Ilginc bir durum: Koda yakinda bakilirsa, bir grafik bir de grafiksel olmayan, pur kumeleme yapan ayri bolumleri oldugu gorulebiliyor. Burada Felzenswalb'i kutlamak lazim, cok temiz bir kod yazmis, neyin ne oldugu gayet bariz. Ilginc olan su, grafiksel olmayan gruplama (clustering) kisminin islemek icin sadece noktalararasi uzaklik bilgisine ihtiyaci var, bu verilmis ise pat diye (bazi basit esik degerleri uzerinden) dogru kumeleri buluyor, gorsellik olsun olmasin. Uzaklik bilgisi herhangi bir olcut olabilir, illa Oklitsel olmasi gerekmez, eger veri tabaninda musteriler var ise, belki kosinus uzakligi, ya da Jaccard, ya da bir baska sey.

Biz sunu farkettik ki, ufak bir takla ile gorsel olmayan ve cok iyi isleyen kumeleme kismi cikartilabilir, ve ayri bir kumeleme algoritmasi olarak kullanilabilir. Uzaklik bilgisini bir seyrek matris (mtx) formatindan okuyacak bir ufak C++ eki yaptik, bu kod bilgiyi alip Felzenswalb'in kodunu cagiriyor. Bu kodu ayri bir proje olarak paylasiyoruz, 

https://github.com/burakbayramli/felzenszwalb

Felzenswalb imaj ayirma kodu da aslinda benzer bir isi yapiyor ama bunu imajlar uzerinde yapiyor (cunku ana amaci bu), yani imaj renkleri uzerinden bir uzaklik yaratiyor ve onu kodun geri kalanina aktariyor. Biz sadece ic gruplama kismini genellestirdik.

Bu sayede O(E log E) cetrefilliginde isleyen ve optimal kumeleri bulan (kume sayisini tanimlamaya gerek yok, mesela KMeans'de oldugu gibi) bir algoritma elde etmis olduk. Acikcasi bu kadar basit bir kullanimin niye baskalari tarafindan yapilmamis oldugunu anlayamadik. Herhalde ya yapildi ama paylasilmiyor, ya da hakikaten gozden kacirilmis.

Altta uzaklik bilgisi uzerinden kumeleme yapan diger algoritmalarin listesi goruluyor, mesela Affinity Propagation, ya da Spectral Kumeleme. Onlara kiyasla Felzenswalb oldukca iyi durumda.

http://scikit-learn.org/stable/modules/clustering.html

Felzenswalb kumelemesi bu arada Minimum Kapsamli Agac (Minimum Spanning Tree) kavramini kullanir ve aslinda Kruskal algoritmasinin bir varyasyonudur.