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.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...
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
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 %
Ş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.