17 Mart 2018 Cumartesi

Dlib Kütüphanesinin Ubuntu 16.04'e Kurulumu ve Qt ile Kullanılması

Dlib Kütüphanesinin Ubuntu 16.04'e Kurulumu ve Qt ile Kullanılması

Dlib yapay öğrenme - makine öğrenmesi (machine learning) algoritmalarını içeren C++ kütüphanesidir ve günlük hayatımızda karşılaştığımız problemleri çözmek için kullanabileceğimiz kompleks yazılımlar geliştirebileceğimiz bir araçtır. Dlib C++ programlama dili ile kullanılan bir araç olmasının yanında Python programlama dili ile de kullanılabilmektedir. Python ile kullanmak için kurulumunuzu ona göre yapmanız gerekmektedir. Bu yazımda C++ dili için kurulum yapılacaktır ilerleyen günlerde Python dili için kurulumun nasıl yapıldığını anlatmayı planlıyorum. Aşağıdaki adımları takip ederek Ubuntu 16.04 işletim sisteminize Dlib kurulumunu yapabilir ve Qt ile uygulama geliştirebilirsiniz. Dlib kütüphanesinin Windows sistemi için kurulumunu buradan takip edebilirsiniz. 

Adım 1: Dlib kütüphanesinin en son yayınlanan versiyonunun sitesinden indirilir (Bu yazıda 19.9 versiyonu indirildi).



Adım 2: İndirilen sıkıştırılmış dosya çıkarılır.




Adım 3: dlib-19.9 klasörü içerisine "build" adında boş bir klasör oluşturulur.




Adım 4: Kurulum için cmake-gui'den faydalanacağız. Eğer cmake-gui kurulu değilse aşağıdaki kodu çalıştırarak cmake-gui'nin kurulumunu gerçekleştirebilirsiniz.


sudo apt install cmake-gui

cmake-gui açılır ve "source code" kısmında dlib-19.9 klasörü içerisinde yer alan "dlib" klasörü seçilir. "build" kısmında ise dlib-19.9 klasörü içerisinde oluşturduğumuz boş klasör seçilir. Derleme bu klasör içerisine gerçekleştirilecektir. Daha sonra aşağıda yer alan "Configure" tuşuna basınız ve açılan pencerede varsayılan (default) yerel derleyicilerin derlemede kullanılmasını seçiniz.




Konfigürasyon bittiğinde aşağıdaki ekran görüntüsündeki gibi bir uyarı alabilirsiniz.



Bu uyarıda BLAS kütüphanesinin sisteminizde yüklü bulunmadığı ve eğer bu kütüphaneyi yüklerseniz kodunuzun daha hızlı çalışacağı uyarısı verilmiş. Bende bu uyarıyı dikkate alarak aşağıdaki kod parçasını çalıştırdım ve sistemime BLAS kütüphanesini kurdum.


sudo apt-get install libopenblas-dev liblapack-dev



Bu ekranda verilen bir diğer uyarı ise CUDA yüklü bulunmadığı uyarısıdır. CUDA yükleyerek algoritmalarınızı GPU üzerinde çalıştırabilirsiniz. Özellikle derin öğrenme uygulamalarında algoritmaların GPU üzerinde çalıştırılması hız açısından çok avantajlı olmaktadır. CUDA kurulumu daha sonra anlatılacaktır. Şimdilik CUDA olmadan kurulumumuzu gerçekleştireceğiz.

Adım 5: Daha sonra cmake-gui'de yer alan "Generate" tuşuna basınız. 



Adım 6: Son aşamada "build" klasörü içerisinde aşağıdaki kod parçası çalıştırılarak derlemenin/kurulumun tamamlanması beklenir.


sudo make install




Adım 7: Dlib kütüphanesinin derleme işlemi başarı ile bitmiştir. Bu adımda Qt ile kullanılması anlatılacaktır. Qt'nin Ubuntu 16.04'e kurulumu için bu yazımı takip edebilirsiniz. Sisteminize Qt kurulumu yaptıktan sonra Qt Creator açılır ve yeni proje oluşturulduktan sonra proje dosyasına (.pro uzantılı dosya) dlib kütüphanesinin derlendiği klasörün yolu aşağıdaki gibi tanımlanır. Artık projelerinizde Dlib kütüphanesini kullanabilirsiniz. İlk projenizi bu yazımı takip ederek gerçekleştirebilirsiniz.



  

16 Mart 2018 Cuma

Ubuntu 16.04'e Qt Kurulumu

Ubuntu 16.04'e Qt Kurulumu


Çalışmalarımda Qt bütünleşik geliştirme ortamını (ide, integrated development environment) kullanmamın 2 sebebi var :

1. Açık kaynak kodlu olması
2. Cross-platform yani birden çok platformda (işletim sisteminde) kullanılabiliyor olması

Eğer ticari amaçla kullanılıyorsa ticari lisans (Commercial licensing) alınması gerekir, evde hobi amaçlı yazılım geliştirme yapıyorsanız lisanslama sorunu yoktur. Bende OpenCV, Dlib gibi görüntü işleme kütüphanelerini Qt ile kullanmayı tercih ediyorum. Böylece hem windows işletim sisteminde hem de Linux işletim sisteminde uygulama geliştirebiliyorum. Ayrıca Qt ile Grafiksel Kullanıcı Arayüzü (GUI, Graphical User Interface) geliştirmek çok kolay. Yapmış olduğunuz uygulamaları GUI üzerinde kullanıcıya sunmak istiyorsanız Qt tam olarak aradığınız yazılım geliştirme ortamı diyebilirim. OpenCV kütüphanesi kullanılarak geliştirilen ölçüm yazılımı için Qt ile hazırlanan arayüzü örnek proje olarak inceleyebilirsiniz. Qt'de GUI geliştirirken başlıca bilinmesi gereken Signal-Slot yapısı vardır, eğer bu yapının nasıl çalıştığını ve kullanıldığını anlarsanız Qt'nin kullanım kolaylığının farkına varacaksınız. 

Qt'yi Ubuntu 16.04 işletim sistemine kurmak için aşağıdaki adımları takip edebilirsiniz.

Adım 1. Qt'nin, işletim sisteminize uygun ve offline versiyonunu sitesinden indiriniz.



Adım 2. İndirilen kurulum dosyası çalıştırılır.
(./qt-opensource-linux-x64-5.10.1run)




Adım 3. Qt hesabına giriş bölümü atlanabilir.




Adım 4. Qt'nin kurulacağı klasörü seçiniz.


Adım 5. Bir sonraki aşamada ihtiyacınız olan Qt araçlarını ve paketlerini seçmeniz gerekmektedir.


Adım 6. Lisans anlaşmasını kabul ediniz.



Adım 7. Kurulumu başlatın.



Adım 8. Kurulum başarıyla tamamlanmıştır.






12 Mart 2018 Pazartesi

Dlib - imglab Installation and Application

Dlib - imglab Installation and Application (Image Annotation Tool)

imglab is a simple graphical tool for annotating images with object bounding boxes and optionally their part locations. Generally, you use it when you want to train an object detector (e.g. a face detector) since it allows you to easily create the needed training dataset [1].

Step 1. Download the lastest version of Dlib library




Step 2. Extract the downloaded folder.


Step 3. Create 'build' folder under Downloads/dlib-xx.x/tools/imglab/ 



Step 4. Open terminal.


Step 5. Write "cmake .." command


Step 6. Write "cmake --build . --config Release" command


Step 7. Compilation is completed.


Step 8. Create xml file to annotate images using images which are located under dlib-xx.x/examples/faces/ folder



Step 9. Click twice to check annotations of created mydataset.xml file


Step 10. Open created mydataset.xml file to manually label images using imglab tool.



Step 11. You can label ROI (region of interest) holding the shift key


Step 12. Do NOT forget to save your annotations after finished them.  


Step 13. Click twice to check finished annotations of created mydataset.xml file



Finally, you can watch my video.



References

8 Mart 2018 Perşembe

Derin Öğrenme (Deep Learning) için Sistem Önerisi - PC Toplama - Donanım Tavsiyesi

Derin Öğrenme (Deep Learning) için Sistem Önerisi - PC Toplama - Donanım Tavsiyesi 


Son yıllarda yapay zekâ konusunun popülerliği giderek artmaktadır ve hayatımıza birçok yapay zeka uygulamaları çoktan girmeye başlamıştır. Derin öğrenme algoritmalarıyla yüz tanıma, nesne tanıma gibi yıllardır çalışılan alanlarda elde edilen yüksek başarım araştırmacıları bu alana yönlendirmiştir. Bu alanda elde edilen başarının arkasında donanım alanında yaşanan gelişmeler yatmaktadır. Bu sebeple Derin Öğrenme çalışmalarını yapabilmekiçin güçlü bir donanıma ihtiyacınız vardır. Eğer güçlü bir donanıma sahip değilseniz belirli bir ücret ödeyerek bulut üzerinde bu çalışmaları yapma imkânı sunan platformlar (https://aws.amazon.com/machine-learning/amis/) mevcuttur. Benim gibi kendime ait bir sistem kurmak istiyorum diyorsanız bu yazıyı sizler için yazıyorum. Öncelikle belirtmeliyim ki donanım konusunda çok bilgili birisi değilim sadece yakın zamanda Derin Öğrenme çalışmalarını yapabilmek için kendime bir bilgisayar topladım ve bu konuda yardımı olabileceğini düşünerek elde ettiğim bilgileri paylaşmak istedim. Bilgisayar toplarken bazı sitelerin bilgisayar toplama sihirbazı şeklinde anılan yazılımlarından yararlandım bu yazılımlar sayesinde birbiriyle uyumlu parçaları seçmeniz kolaylaşacaktır. Bu yazılımlara ulaşmak için google’a “PC toplama” anahtar kelimesi yazarak ulaşabilirsiniz. Benim faydalandığım yazılımlar aşağıdaki linklerde yer almaktadır.





İşlemci (CPU) seçimi

                                              

Bilgisayarımızı toplamaya işlemci seçerek başlıyoruz. Bazı sitelerde Derin Öğrenme çalışmaları yapılacak bir sistem için algoritmaların ekran kartı (GPU) üzerinde çalıştığından dolayı işlemcinin özelliklerinin kısıtlı tutularak bütçede çok fazla yer ayrılmaması gerektiği tavsiye edilmektedir. Ancak derin öğrenme çalışmaları GPU üzerinde çalıştırılsa da CPU üzerinde şu işlemler yapılmaktadır :


  • Kod içerisinde yer alan değişkenlerin yazılması ve okunması işlemi
  • Fonksiyon çağrıları gibi talimatları yürütme işlemi
  • GPU üzerinde fonksiyon çağrılarının başlatılma işlemi
  • Verilerden küçük veri toplulukları (mini-batches) oluşturulma işlemi
  • GPU’ya transfer işleminin başlatılması

Bu konuda daha detaylı bilgiye (http://timdettmers.com/2015/03/09/deep-learning-hardware-guide/)’den ulaşabilirsiniz. Hem bu sebeple hem de bilgisayarı sadece Derin Öğrenme çalışmaları için değil başka çalışmalar için de kullanacağımdan dolayı ben iyi bir CPU seçmeye karar verdim. İşlemci araştırmasında karşımıza Intel ve AMD markalı işlemciler çıkmaktadır. Daha önce AMD işlemcisi kullanmadığımdan ve Intel’in daha yaygın bir işlemci markası olması sebebiyle işlemcimi Intel markasından seçmeye karar verdim. Daha sonra 6. Nesil Sky Lake, 7. Nesil Kaby Lake ve son olarak 8. Nesil Coffee Lake işlemciler mevcut. Ben seçimimi 8. Nesil işlemciden yana i7 8700k modelinden yana kullandım. Özelliklerini aşağıdaki tablodan görebilirsiniz.
                                

İşlemci Soket Tipi
Soket 1151 - 8. Nesil
İşlemci Numarası
8700K
İşlemci Sayısı
6 Çekirdek
İşlemci Teknolojisi
Intel Core i7
İşlemci Hızı
3.7 GHz Turbo ile 4.7 GHz
İşlemci Ön Bellek (Cache)
12 MB
İşlemci Markası
Intel
Hız aşırtma (Overclock)
Var
Veri yolu hızı
2666 MHz
Max. Güç Tüketimi
95W

Anakart seçimi
                                
Anakart seçimi yaparken öncelikle işlemci ile uyumlu olmasına dikkat etmemiz gerekiyor. Intel i7 8700k modelinde LGA 1151 soket yapısı bulunmaktadır ve bunu Z370 yonga setli anakart modelleri desteklemektedir. Anakart olarak karşımıza ASUS, MSI, GIGABYTE ve ASROCK markaları çıkmaktadır ve her markanın çok sayıda Z370 anakart ürünleri vardır. Öncelikle uzun yıllar MSI marka bilgisayar kullandığım ve hiçbir sorunla karşılaşmadığım için hem de son yıllarda piyasada oyun bilgisayarları konusunda birçok kişinin beğenisini kazanması sebebiyle anakartı MSI marka almaya karar verdim. Anakart bilgisayarın kalbi olduğu için dikkat edilmesi gereken çok fazla detay var. Ben aşağıda yer alan özelliklerin var olup olmadığına göre bütçeyi de göz önünde bulundurarak MSI Z370 GAMING M5 marka ve modelindeki anakarta karar verdim.
  • Desteklediği ekran kartı sayısı
  • RAM tipi
  • USB 3.1 yuva sayısı
  • HDMI desteği
  • M2 SSD yuvası

MSI Z370 GAMING M5 anakartın özelliklerini aşağıdaki tabloda bulabilirsiniz.

Yapı
ATX
DirectX 12
Var
CrossFire
Var
İşlemci Soket Tipi
Soket 1151 - 8. Nesil
MB Chipseti
Intel® Z370
MB PCI Sayısı
6
MB Ram Slot sayısı
4
Max Ram Desteği
64 GB
RAM tipi
DDR4
RAM Frekans Hızı
4000 MHZ
Ethernet
Var
6 x USB 2.0
Var
Display Port
Var
Clear CMOS button
Var
SPDIF Çıkışı (optik)
Var
PS/2 (Klavye/fare yuvası)
Var
8 Kanal (7.1) Ses Çıkışı
Var
HDMI
Var
8 x USB 3.1
Var
6 x Audio Jak
Var
PCI Express 3.0
Var
m.2 Sata
Var
RAID
Var
SATA III
Var
U.2 SSD
Var

Güç Kaynağı (PSU) seçimi
                                 
Normalde bilgisayar toplarken parça seçimi işlemci > anakart > bellek > ekran kartı şeklinde olur ancak ben bu sıralamayı bozuyorum. Bu sıralamayı bozmamın sebebi zamanla geliştirilecek bir sistem kurmak istemem. Aslında amacım aklımda olan sistemi ilk seferde kuramadığım için bilgisayarın değişime elverişli olmayan parçalarını ileri seviyede alarak sonrasında sistemin diğer parçalarını geliştirmek ya da eklemeler yapmak. Ekran kartlarını, RAM’leri ekleyip çıkarmak, değiştirmek, çoğaltmak mümkün ancak aynı işlemleri işlemci ve anakart için yapmak kolay değil. İşlemci ve anakart seçiminden sonra 2-3 ekran kartını desteklemesi için Güç Kaynağı (PSU) seçimine geçiş yaptım. Öğrendiğim kadarıyla 1000W-1050W’lık PSU 2 ekran kartlı sistem için öneriliyor. Ben ilerde 3. Bir ekran kartı takabileceğimi düşünerek 1200W’lık bir PSU seçiminde bulundum. Burada tabiki de yapılması gereken aldığınız ekran kartlarının güç tüketimlerini göz önünde bulundurarak bir seçim yapmak ancak ben sonrasında eklemeler yapacağım bir sisteme uygun bir seçim yapmaya çalıştım. PSU seçiminde ihtiyaç belirlendikten sonra dikkat edilmesi gereken ikinci husus verimlilik. Bu konuda da en iyisi 80+ platinum özellikli bir güç kaynağı. Yapmış olduğum seçim COOL MASTER V1200 80PLUS PLATINUM 1200W MODÜLER GÜÇ KAYNAĞI oldu.  

Bellek (RAM) seçimi
                                 
Bellek seçiminde de yine karşımıza çok sayıda marka model çıkmaktadır. Bu seçenekleri azaltmak ve bütçeye göre uygun bir seçim yapmak için öncelikle anakartımın DDR4 tipinde olması sebebiyle DDR4 tipinde bir bellek seçtim. Corsair markasına duyduğum güvenden dolayı marka olarak Corsair markasını seçtim ve seçenekler azaldı. Anakartımın RAM slot sayısı 4 ve çift kanal mimarisine sahip. Çift kanal mimarisinden yararlanabilmek için minimum 2 RAM takılması gerektiğini öğrendim ve 2 RAM’li seçeneklere yöneldim. Son kriterim ise bütçe oldu. RAM’leri daha sonra yükseltme imkanı olduğundan ilk aşamada 2x8 16 GB’lık bir RAM almaya karar verdim. Bütçeyi göz önünde bulundurarak CORSAIR 16GB (2x8GB) VENGEANCE LED Kırmızı DDR4 3000Mhz CL15 Dual Kit Ram marka ve modelindeki RAM’leri aldım. Özelliklerini aşağıdaki tabloda bulabilirsiniz. Siz daha yüksek kapasiteli daha yüksek frekans hızına sahip RAM’ler seçebilirsiniz. Seçimleriniz tamamıyla bütçeyle alakalı.  

Gecikme Süresi
CL15
RAM Kapasitesi
16 GB (2x8GB)
RAM Tipi
DDR4
RAM Frekans Hızı
3000 MHz

Ekran Kartı (GPU) seçimi
                                 
Derin Öğrenme çalışmaları için en önemli kısım ekran kartı seçimi. Burada da almak istediğiniz ekran kartı ile bütçeniz arasında bir seçim yapmanız gerekiyor. Nvidia son olarak TITAN V modelini tanıttı ve ücreti 2999$. Bütçe kısıtınız yoksa Derin Öğrenme çalışmaları için alınması gereken ekran kartı diyebiliriz. Ekran kartı seçiminde bütçeyle birlikte Derin Öğrenmeyi kullanarak neler yapmanız gerektiği konusu da önemli. Çok büyük çapta bir şey yapmayı planlamıyorsanız ve daha ucuz bir ekran kartıyla halledilebilecek şeyler peşindeyseniz o zaman TITAN V almak mantıksız olur. GPU seçimi için bulmuş olduğum bir yazıdan (http://timdettmers.com/2017/04/09/which-gpu-for-deep-learning/) alıntı yapacağım bence çok güzel özetlenmiş. Seçiminizi buna göre yapabilirsiniz.

  • Best GPU overall (by a small margin): Titan Xp
  • Cost efficient but expensive: GTX 1080 Ti, GTX 1070, GTX 1080
  • Cost efficient and cheap:  GTX 1060 (6GB)
  • I work with data sets > 250GB: GTX Titan X (Maxwell), NVIDIA Titan X Pascal, or NVIDIA Titan Xp
  • I have little money: GTX 1060 (6GB)
  • I have almost no money: GTX 1050 Ti (4GB)
  • I do Kaggle: GTX 1060 (6GB) for any “normal” competition, or GTX 1080 Ti for “deep learning competitions”
  • I am a competitive computer vision researcher: NVIDIA Titan Xp; do not upgrade from existing Titan X (Pascal or Maxwell)
  • I am a researcher: GTX 1080 Ti. In some cases, like natural language processing, a GTX 1070 or GTX 1080 might also be a solid choice — check the memory requirements of your current models
  • I want to build a GPU clusterThis is really complicated, you can get some ideas here
  • I started deep learning and I am serious about it: Start with a GTX 1060 (6GB). Depending of what area you choose next (startup, Kaggle, research, applied deep learning) sell your GTX 1060 and buy something more appropriate
  • I want to try deep learning, but I am not serious about it: GTX 1050 Ti (4 or 2GB)



Alıntıyı yaptığım yazıda birden fazla GPU kullanımının özellikle aynı anda birden fazla algoritmayı çalıştırma ya da aynı algoritmayı farklı parametrelerle çalıştırmak için zaman açısından büyük avantaj oluşturduğu belirtilmiş. Birden fazla GPU kullanma isteğim, bütçem ve ihtiyaçlarım doğrultusunda MSI NVIDIA GeForce GTX 1080 almaya karar verdim.

İşlemci (CPU) soğutucu seçimi
                                 
Soğutucu olarak sıvı soğutmalı ve fanlı olmak üzere 2 çeşit çıkmaktadır. Sıvı soğutmalı sistemler diğerlerine göre pahalıdır. İlk aşamada işlemci soğutucusuna çok para vermek istemediğimden işlemcime uygun olarak Intel İşlemci Fanı LGA 1151 BXTS15A marka ve modelindeki işlemci soğutucusunu aldım.

Hard disk seçimi
                                             
Hard diski aşağıda belirtilen özelliklerde Seagate Barracuda 3.5" 3TB Sata 3.0 64MB Cache 7200Rpm marka ve modelindeki ürünü seçtim. Burada da seçim size ve bütçenize kalmış durumda.

Disk Kapasitesi
3 TB
Ön Bellek
64 MB
SATA 3.0
Var
HDD Dönüş Hızı
7200 Rpm
Boyut
3.5 inch

SSD seçimi
                       
SSD seçiminde disk kapasitesini belirlerken beni kısıtlayan yine bütçe oldu ve 250 GB kapasiteli bir SSD almaya karar verdim. Dikkat etmem gereken ikinci nokta ise SSD’nin M2 özelliği oldu. Almış olduğum anakart M2 özelliğini destekliyor ve kablo bağlantısı olmadan SSD direk anakartın ilgili yuvasına takılıyor. Ayrıca anakartın M2 Shield özelliği sayesinde ısınmayla birlikte SSD’nin performansının düşmesi engelleniyor. Seçmiş olduğum SSD Samsung 250GB 960 EVO M.2 oldu. Özelliklerini aşağıdaki tabloda bulabilirsiniz.

  
 

       
M2 özelliği olmayan SSD

Kasa seçimi
                                            
Kasa seçiminde anakartın ATX yapısında olması, soğutmanın düzgün yapılabilmesi ve zamanla kasa içerisine yeni parçalar eklenme ihtimalini düşünerek Full Tower yapısında bir kasa almaya karar verdim. PSU’yu ayrı olarak aldığım için alacağım kasanın PSU’suz olması gerekmektedir. Burada seçimimi yaparken görselliğe, kasanın kullanışlı olmasına, soğutma problemi olmamasına ve markasına dikkat ederek Corsair Graphite 760T Siyah Full-Tower Pencereli Kasa aldım. Biraz pahalı bir seçim oldu benzer özelliklerde daha uygun fiyata bir kasa seçimi yapılabilir. Bu size ve bütçenize kalmış. Monitör seçimini de size bırakıyorum. Yazının başında dediğim gibi donanım konusunda çok bilgili değilim, sadece kendi yaptığım araştırmalar sonucunda elde ettiğim tecrübelerimi ve seçim yaparken nelere dikkat ettiğimi yazdım. Çok daha detaylı, teknik bilgiye dayalı seçim yapmak sizin bilginize ve tecrübelerinize göre değişkenlik gösterebilir. Umarım faydalı bir yazı olmuştur.