Sayfalar

Cuma, Ocak 01, 2016

Caffe for Windows

Caffe bir derin öğrenme kütüphanesi ve uygulaması. Derin öğrenme yazılarımızın üçüncüsünde kısaca bahsetmiştik.

Caffe hali hazırda görüntü tanıma üzerine çalışma yapacaklar için en oturmuş ve en hızlı kütüphane. Üç şekilde kullanma imkanına sahibiz. komut satırı, python, matlab. Nedendir bilinmez python dili epey bir revaçta. Derin öğrenme yazılarımızın dördücüsünde görebileceğiniz gibi çoğu kütüphane ya tamamen  python ile yada hız faktörü yüzünden çekirdek kısmı C++ yazılıp kullanımını pythona üzerinden yapmışlar. Python bilmeyen biri için buna malesef demek zorundayım. İnşallah ilerde en azından böyle Caffe gibi çekirdeği C++ yazılmış kütüphaneler için doğru düzgün bir C / C++ arabirimi yazsınlar. Beklemek yerine elbette bizimde bir taraftan python öğrenmeye çalışmamız gerekiyor. Caffe için biz bu sıkıntıyı komut satırı kullanımı ile aşmayı planlıyoruz.

Derin Öğrenme kütüphanelerinin genel ikinci sıkınıtısı genel olarak Windows desteği olmaması. Bence bir başka hatada bu. Akademik camiada makale için bir şeyler yapılacaksa elbette windows la muhatp olmak zorunda olmayabilirsiniz. Fakat Ticari bir faaliyete girilecekse, windows işletim sistemini dışlamak müşteri portföyünüzü küçültmek anlamına gelir.

Caffe de resmi windows dağıtımı yok malesef. Resmi dağıtım dışı bazı çalışmalar var

Caffeyi kullanmak için ilk etapta bu linklerden birine müracaat edin. Yada Daha Önce derlenmiş bir paket bulun.  Biz derlemek için İlk alternatifi kullandık. Linki verilen siteden zip olarak indirip harddiskte bir dizine açtık.
  • Öncesinde  yapmanız gerekenler
  • Cuda desteği olan bir derleyiciyi kurun Visual Studio gibi 
  • Cuda ve CuDNN kütüphanelerini  indirip kurun - NVIDIA sitelerinden -
  • halen kurulu değilse CMake i kurun



 CMake ile kaydettiğimiz  dizine gelin ve orda derlemek için bir dizin oluşturun derleyiciyi seçin.  Önce Configure sonra Generate ile önce gereken indirmeleri internetten kendisi otomatik yapacaktır. en sonda derlemek için seçtiğiniz derleyiciye göre -solution file - derleme projelerini oluşturacaktır.
Visual Studio ile biz bu dosyayı açtık ver derlmeye başlattık. Cuda kodlarıda içerdiğinden derleme işlemi epey bir uzun sürüyor. İşlemin sonunda çalıştırılabilir dosyaları elde ederiz.



isim adının peşine -d olanlar debug olarak derlenmiş olanlar. Burda en önemli dosya elebette caffe.exe . Derleyemediysenizde canınızı sıkmayın bizden temin edebilirsiniz. Windowsun nimetlerinden.

Peki Nasıl kullanacağız ?

Önce resmi sayfadan CommandLine  kısmını okumanızı öneririm.

genel kullanımı 
caffe

şeklinde komutlar   { train  , test ,device_query, time } dan oluşuyor parametreler ile  birlikte
caffe ile komut satrından pek çok işlemi yapabiliyorsunuz. Mesela Grafik işlemcinizin durumunu sorgulamak için
caffe device_query -gpu 0

dediğinizde



yukardaki gibi bir ekran gelir Elbette CUDA destekli bir GPU olması lazım.

train komutu eğitim için için kullanılır. Caffede Eğitim işlemi için elbette verilere ve  bu verilerin üzerinde eğitim için kullanılacağı model dosyasına ihtiyaç vardır.  Model dosyası prototxt  denen bir formatta tutuluyor. text bir dosya ve okunabilir bir yapı


İlk etapda böyle bir model dosyasını oluşturmak zor olacağından hali hazırda test edilmiş ve kullanılmış model dosyalarının kendi verilerimize göre güncellenip uygulanması öneriliyor.
Her halükarda bu konuda bir şeyler öğrenmemiz gerekiyor. bulabildiğim  açıklamalar şunlar


Veri dosyamızı nasıl vereceğimize gelirsek. Caffe , LMDB, levelDB , HDF5 gibi data veri dosya formatlarından okuma yapabiliyor. Böyle bir imkanınız yoksa  doğrudan görüntü dosyasınıda kendisi okuyup kullanabiliyor. Nerden ne şekilde okunacağını model dosaysında  belirtmeniz gerekiyor.
Mesela MNIST için levelDB formatındaki bir veriyi okutmak için model dosyasında


yazılıyor.  Doğrudan Görüntü dosyasını kullanmak isteseydik. Her satırda Görüntü dosyasının yolu ve adını tutan sonunada ait olduğu sınıfı gösteren bir formatta text dosyası oluşturmamız gerekiyordu



gibi
Sonrasında Model proto dosyasında  bu text dosyayı verileri okumak için kullanmasını bildirirdik
bakınız



gibi. aynı şeyleri test verisi içinde yapmamız gerekiyor. Eğitim test verileri olmaksınızın bizi yanıltabilir. bakınız

Eğitim esansında kullanılacak parametreler teker teker parametre olarak mümkün olduğu gibi yine prototxt formatında bir solver dosyası olarakda vermek mümkün.
mesela yukardaki model dosyası için

# net : Eğitimde kullanılacak model dosyasının adı
net: "alpha_train_text.prototxt"
# test_iter geri besleme öncesi kaç ke ağın ileri besleyeceği.
test_iter: 25

# test_interval: Test verisi ile yapılacak kontrolün aralığı mesela 300 iterasyonda bir
test_interval: 300

# Yapa Sinir ağı parametreleri öğrenme hızı vs...
base_lr: 0.001
momentum: 0.7
weight_decay: 0.0005
# Öğrenme hızı ile ilgili parametreler
lr_policy: "inv"
gamma: 0.0001
power: 0.75
# her 100 iterasyonda durumu gösteriyor.
display: 100
# En çok kaç iterasyona kadar çalışacağı
max_iter: 1500
# arada eğitilmiş model saklanacakmı ve kaç iterasyonda bir
snapshot: 100
snapshot_prefix: "alpha"
# Caffenin çalışma modu CPU yada GPU
solver_mode: GPU
böyle bir solver dosyası kullanılıyor.  yukarda # peşinden gelen açıklma satırları ile açıklamaya çalıştım. YSA parametreleri için YSA üzerine bir şeyler okumanız lazım...
biraz eski bir kaynak ama burdan  aratıp bazı şeyleri öğrenmeniz mümkün
http://www.faqs.org/faqs/ai-faq/neural-nets/

Solver dosyamızı da ayarladıktan sonra şu komutu verip

caffe train -solver lenet_solver.prototxt 

çalışmasını izleyip



sistemin eğitilmesini bekliyoruz. Caffe uzantısı  ".caffemodel" olarak eğittiği modeli kaydeder.

Eğitim Bitti peki biz bu eğitilmiş modeli nasıl kullanacağız. Bu konuda OpenCv yardımımıza koşuyor. OpenCv 3.0 dan itibaren contrib kısmında DNN diye bir modül var. OpenCv kurarken contib modülünü dahil edip derlediyseniz - kitapta derlemeyi anlattım -  kullanabilirsiniz. İlaveten model prototxt dosyasının kullanım için hazırlanmış versiyonu lazım genelde deploy ön adı ile sağlıyorlar. Çünkü normal dosyada veri girişi için dosya kullanılıyor. OpenCv nin sağladığı bu kolaylıkla OpenCv ve bahsettiğimiz DNN modülünü derlediğiniz her sistemde eğitilmiş model dosyası ve deploy protxt dosyası ile çalıştırabilirsiniz.

Bizde yukarda gösterdiğimiz gibi mnist verisi için bir eğitim yaptık ve daha önce OpenCv KNN ile yazdığımız programa DNN ekledik.



KNN ile % 97.6 olan başarı caffe ile yaptığımız bu eğitim ile %99.3 e yükseldi.

Şimdilik yazacaklarımız bu kadar sorularınız olursa bildiğimiz kadarıyla cevaplamaya çalışırız.


Mnist with Deep Neural Network from bluekid on Vimeo.


6 yorum:

Adsız dedi ki...

Merhaba Hocam öncelikle bu konuda yazılarınız için çok teşekkür ederim, derin öğrenme konusunda kendimi geliştirmeye çalışıyorum fakat kaynak bulmak oldukça zor. Küçük bir sorum var yanıtlarsanız çok memnun olurum.

Caffe kurulumunu windows için gerçekleştirdim, amacım öğrenmek için içerisindeki örnekleri çalıştırmak sıfırdan bir eğitim gerçekleştirmek bile değil. examples klasörünü açtığımda bir çok şeyle karşılaşıyorum. Bu örnekleri python veya C++ ile nasıl kullanır/çalıştırırım. Örneğin görüntüler içerisinden kedi, köpek vb. bir şeyi nasıl bulabilirim. OpenCV ile çalışmalar yaptım cascade sınıflandırıcıları ile bunu yapabiliyorum fakat caffe kullanarak bunu nasıl yapabilirim. Sitenizdeki yazıların hepsini okudum fakat kafam karıştı bu konuda beni yönlendirirseniz çok memnun olurum. Şimdiden teşekkür ederim.

Adsız dedi ki...

Merhaba;
Resimleri doğrudan okutmak için isim ardına ait olduğu sınıfı belirtmemiz gerekiyor yazmışsınız Örneğinizde de hemen ismin ardından 4, 20 gibi değişen sayılar var Ait olduğu sınıf dediğiniz tam olarak ne oluyor?

birol kuyumcu dedi ki...

1) Lütfen Yorumlarınızı Adsız olarak bırakmayın
2) İlk adsıza cevap ; Diğer yazılarımızı inceleyin
3) ikinci adsıza cevap ; Yazıdaki örnek bir OCR sayılar da alfabenin hangi harfi olduğunu gösteriyor

akaab dedi ki...

Selam,
Öncelikle teşekkürler güzel bir yazı olmuş.Tek eksik var: without cuda
Nasıl yapabiliriz bunu sizce?

birol kuyumcu dedi ki...

döküman çok eski ana siteye gidip güncel yükleme seçeneklerine bakın

Deniz dedi ki...

Yazı için Çok Teşekkürler eski bile olsa hala veri çok az değerli. Biraz daha uzun ayrıltılı detaylı olsaydı iyi olacaktı. kendi data setimi build yapıp kendi kullanacağım projelerde entegre edicem.Dediğin gibi herşey photon kodu olmuş :D Ben hala c# koştur :D Teşekkürler Emeğin için.