Çok Bantlı Derin Sinir Ağları ile Yaya Tespiti

Ders döneminin bitmesiyle, akademik çalışmalara yoğulaştığımdan blog yazmaya ara vermiştim. Yüksek lisans çalışmamı bitirip, nihayet yeni bir blog yazısı yazmak için fırsat bulabildim. Bu yazının konusu, Caffe kullanılarak çok bantlı derin sinir ağları ile yaya tespitinin yapılması olacak.

Yazmaya karar verdiğim konular genelde yaparken zorlandığım işler üzerine oluyor. Bunun nedenini ilk blog yazımda anlatmıştım; unutmamak için not etmek. Bu konu da yine zorlandığım, tamamlamak için üç hafta uğraştığım konulardan biri. O yüzden bilgilerim taze iken hatırladığım kadarını kaydetmek istiyorum.

Bu yazının içeriğinde öyle orijinal, inovatif herhangi bir şey yok. Zaten amacım,  Rutgers Üniversitesi’nden Jingjing Liu ‘nun GitHub ‘da paylaştığı multispectral-pedestration-py-faster-rcnn projesinin kurulumunu yapmak ve demosunu çalıştırmaktı. Yazının içeriğinde bundan ötesi yer almıyor. Yani teorik bir içerikten ziyade teknik boyutu yazıyor olacağım.

Sahip Olduğum Kaynaklar

[*] İşletim sistemi: Ubuntu 16.04
[*] GPU: Asus GeForce GTX750 Ti
[*] Python: 2.7.12
[*] Cuda: 8.0
[*] cuDNN: 3.0.8
[*] OpenCV 2.4

CUDA Kurulumu

Caffe, GPU kodlarını derlemek için CUDA’nın nvcc derleyicisine ihtiyaç duyduğundan önce CUDA kurulumunun yapılması gerekiyor. [1] Kuruluma başladığım acemilik dönemlerinde, önce NVIDIA GPU sürücüsünü kurmayı denedim. Ancak bunun gerekli olmadığını, CUDA kurulumunu beklediğim sırada konsol ekranını izlerken farkettim. Çünkü zaten CUDA kurulurken otomatik olarak sürücüyü de kuruyordu. O yüzden hiç NVIDIA ‘nın web sitesinden sürücü indirip kurulumu ile uğraşmadan direkt CUDA kurulabiliyor.

CUDA kurulumu için iki yöntem bulunuyor:

1. Runfile ile Kurulum
2. İşletim Sisteminin Paket Yönetimi ile Kurulum (Package Manager Inst.)

CUDA kurulumunda birçok defa düştüğüm hatalardan biri de sürekli zor olan ilk yöntemi denemekti. Bu yöntemde, NVIDIA sitesinden indirilen runfile dosyasını çalıştırarak kurulum gerçekleştiriliyor. Ancak bu dosya X Server çalışırken hata veriyor. O yüzden önce X Server’i durdurmak gerekiyor. Ardından Ubuntu ile gelen NVIDIA’nın açık kaynak sürücüsü, nouveau ‘yu da durdurmak gerekiyor. Bunlara rağmen yine farklı hatalarla karşılaştığım oluyordu. Hatta bu yöntem birkaç defa format atmama sebep oldu.

İkinci yöntemi keşfedene kadar ilk yöntemle uzun bir süre uğraşmıştım. Bu yöntem diğerine nispeten çok daha kolaydı. Ubuntu’nun paket yönetimi ile 3-5 komut çalıştırarak CUDA’yı ve GPU sürücüsünü kurmuştum.

CUDA kurulumu için yararlandığım kaynak: NVIDIA CUDA Installation Guide For Linux

Yukarıdaki resimde yer alan ilk adım için, aşağıda paylaştığım adresten, işletim sistemine ve mimarisine uygun istenilen versiyondaki CUDA ‘nın .deb uzantılı dosyayı indirmek gerekiyor. Ben, yukarıda bahsettiğim proje için Cuda 8.0 versiyonunu kurdum. Çünkü proje, CUDA 7.0 ve üzeri versiyonlarla stabil çalışıyor. [1] Örnek olması açısından indirdiğim dosyanın adı: cuda-repo-ubuntu1604_8.0.61-1_amd64.deb

https://developer.download.nvidia.com/compute/cuda/repos/

Yukarıdaki adımları gerçekleştirdikten sonra yapılması zorunlu olan birkaç adım kalıyor geriye. Onlar da aşağıdaki resimde yer alıyor.

Yukarıdaki resimde cuda-7.5 yazan yerleri kurduğum versiyon cuda-8.0 ile değiştirdim. İşletim sistemim 64 bitlik mimariye sahip olduğu için ilk iki komutu çalıştırdım. ve CUDA kurulumu böylece tamamlanmış oldu.

cuDNN Kurulumu

En iyi performansı alabilmek için Caffe cuDNN ile hızlandırılıyor. Bu nedenle ikinci aşama olarak cuDNN kuruluyor [1]. Bu tarz kurulumları yaparken kurulum klavuzlarını okuyarak ilerlemek gerçekten büyük kolaylık sağlıyor. Burada, cuDNN kurulumu için yararlandığımız kaynak: cuDNN Installation Guide.

Yukarıdaki resimde belirttiğim kaynağın, “Tar Dosyası ile Kurulum” başlığı altında yer alan adımları uyguladım. İkinci adımı uygulayabilmek için bir .tgz dosyası indirmem gerekiyordu. Çalıştırmak istediğim projenin en stabil çalıştığı  cuDNN versiyonu 3.0 olduğundan, bu versiyonun .tgz uzantılı kurulum dosyasını, aşağıda adresini paylaştığım NVIDIA cuDNN arşivinden indirip diğer adımları uyguladım.

https://developer.nvidia.com/rdp/cudnn-archive

Dikkat! Son adımda dikkat edilmesi gereken bir durumu da belirteyim; yukarıdaki komutları PDF ‘ten hızla kopyalayıp terminale yapıştırırken, son adımın son satırı farklı bir komutmuş gibi geliyor. Ancak dikkatli bakıldığında öyle olmadığı anlaşılıyor. Son iki satırı tek satır haline getirip bir komut olarak yapıştırmak gerekiyor. Yani şöyle;

sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib/libcudnn*

Dikkat edilmesi gereken diğer bir konudan da bahsedeyim. Cuda kurulduğunda /usr/local/cuda dizini ve yanında bir de /usr/local/cuda-8.0 dizini oluşturuluyor. Yukarıdaki komutlarla ilk dizine cuDNN dosyalarını atarak kurulumu yapmış oluyoruz. Oysa kullandığımız proje ayarlarında Cuda dizinini /usr/local/cuda-8.0 olarak ayarlayacağımız için aynı komutları cuda-8.0 için de çalıştırmak gerekiyor. Yani şöyle;

sudo cp cuda/lib64/libcudnn* /usr/local/cuda-8.0/lib64
sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-8.0/lib64
sudo chmod a+r /usr/local/cuda-8.0/include/cudnn.h /usr/local/cuda-8.0/lib64/libcudnn*

Bu adımları da gerçekleştirdikten sonra cuDNN kurulumu da tamamlanmış oldu.

Proje ve Caffe Dosyalarının  İndirilmesi

Çalıştırmayı istediğim projenin kendi içinde Caffe dosyalarının geldiğini öğrenene kadar Caffe’yi bağımsız olarak kendi sitesinden indirip kurmaya çalışıyordum. Ancak derleme aşamasında sürekli hata alıyordum. Sonrasında bu uğraşımdan vazgeçip, proje dosyaları içinde gelen Caffe dosyaları ile derlemeyi gerçekleştirdim. Bu nedenle derlemeye geçmeden önce proje dosyalarını aşağıdaki komutla işletim sisteminde uygun bir yere çekelim.

git clone --recursive https://github.com/denny1108/multispectral-pedestrian-py-faster-rcnn.git

Dikkat! Yukarıdaki komutta --recursive parametresi yazılmadığı takdirde Caffe dosyaları gelmeyecektir. Basit bir klon işlemi diye düşünüp bu hataya düştüğüm için yazıyorum.

Caffe Kurulumu

Caffe kurulumu için işletim sisteminde bazı bağımlı paketlerin kurulması gerekiyor. Bunun dışında, kurulumda işletim sistemine göre değişen durumlar  söz konusu, bunlar da kaynaklar altında linkini paylaştığım “Ubuntu 16.04 or 15.10 Installation Guide” başlıklı sayfadan incelenebilir [2]. Aşağıdaki komutlarla birlikte, Python 2.7, OpenCV 2.4 ve Caffe için gerekli olan diğer gereksinimler kurulmuş oluyor.

sudo apt-get update
sudo apt-get install -y build-essential cmake git pkg-config
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install -y libatlas-base-dev 
sudo apt-get install -y --no-install-recommends libboost-all-dev
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install -y python-pip
sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy
sudo apt-get install -y libopencv-dev
lIbhdf5 Hatası

Sil baştan aldığım kurulumların çoğunda HDF5 kütüphanesi ile ilgili bir hata alıyordum. Bunun nedeni gerekli dosyaların gerekli yerde olmamasından kaynaklanıyordu. Bu durum işletim sistemine göre değişkenlik gösterebiliyor [2]. Ubuntu 16.04 için, sorun, aşağıdaki komutları çalıştırarak giderilebilir.

cd /usr/lib/x86_64-linux-gnu
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so 
Cython Modüllerinin Derlenmesi

Projenin çalışabilmesi için Cython modüllerinin de derlenmesi gerekiyor. İndirilen projenin, ana dizininde yer alan /lib klasöründe make komutu çalıştırılarak Cython modülleri derlenebilir.

Caffe Derlemesi için Gerekli Konfigürasyonlar

Derlemeyi başlatmadan önce, bazı konfigürasyonların yapılması gerekiyor [1]. Konfigürasyonlar özelleştirilebildiği için burada kendi kaynaklarım için özelleştirdiğim konfigürasyonları anlatacağım. Farklı bir durum söz konusu ise yine kaynaklar bölümünde yer alan “Caffe Fast rCNN Installation” kaynağı incelenebilir.

Proje dosyalarında /caffe-fast-rcnn adında bir dizin yer alıyor. Bu dizinde yer alan Makefile.config, Makefile ve CMakeLists.txt dosyalarında duruma göre bazı değişiklikler yapmak gerekiyor. Aşağıda bizim kullandığımız söz konusu üç dosyayının da linki mevcut, indirip referans alınabilir. O yüzden konfigürasyonları uzun uzadıya yazma ihtiyacı duymuyorum.

Makefile.config dosyası için tıkla!
Makefile dosyası için tıkla!
CMakeLists.txt dosyası için tıkla!

Yukarıdaki dosyalarda ilgili değişiklikleri yaptıktan sonra /caffe-fast-rcnn/python dizininde aşağıdaki komut çalıştırılarak Caffe’nin python bağımlılıkları kurulur.

for req in $(cat requirements.txt); do pip install $req; done
Caffe ve pycaffe’nin Derlenmesi

Bağımlılıklar yüklenip yukarıdaki konfigürasyonlar tamamlandıktan sonra /caffe-fast-rcnn dizinindeyken aşağıdaki komut çalıştırılarak derleme işlemi gerçekleştirilir.

make -j8 && make pycaffe
No module named caffe Hatası

Kurulumlar tamamlandıktan sonra PYTHONPATH değişkeni geçici olarak tanımlanmışsa bu hata alınabilir. Kalıcı olarak çözmek için ~/.bashrc dosyasına aşağıdaki satırda ilgili yerler değiştirilerek eklenmeli.

export PYTHONPATH=/path/to/caffe-master/python:$PYTHONPATH
No Module Named _CAFFE Hatası

Yukarıdaki çözümün aynısı diyebiliriz, eklediğimiz satır şöyle güncellenmeli;

export PYTHONPATH=/path/to/caffe-master/python:/path/to/caffe-master/python/caffe:$PYTHONPATH

Modellerin Yüklenmesi ve Demo

Buraya kadar hatasız bir şekilde gelebilmek bir hayli zaman almıştı. Artık burdan sonrası projenin çalıştırılması. Demo’yu çalıştırmak için bazı veriseti dosyalarının belli konumlara indirilmesi gerekiyor. Burada sadece Kaist Color verisetinin örneğini anlatacağım. Diğerleri referans alınarak ya da projenin kendi sayfasına bakarak yapılabilir.

Kaist Color yaya veri seti şuradan  indirilerek proje dizininde yer alan /models/kaist/VGG16/ dizinine atılır ve demoyu çalıştırmak için ana dizinde aşağıdaki komut çalıştırılır.

sh ./run_demo.sh kaist-rgb

 

Ve sonuç:

 

Kaynaklar

1. Caffe Fast rCNN Installation, https://github.com/rbgirshick/caffe-fast rcnn/blob/master/docs/installation.md

2. Ubuntu 16.04 or 15.10 Installation Guide, https://github.com/BVLC/caffe/wiki/Ubuntu-16.04-or-15.10-Installation-Guide

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir