elektrik port üyelik servisleri elektrik port üyelik servisleri

MATLAB ile
"Derin Öğrenme" Algoritmaları Kullanarak Görüntü İşleme

Deep Learning- Derin Öğrenme, yapay zekâ alanında çığır açmıştır. Derin Öğrenmeyle birlikte makineler ses, görüntü, sinyal, metin gibi verileri kullanarak sınıflandırma, nesne tanıma, ses tanıma ya da dil çevirileri gibi özelleşmiş görevleri en az hatayla yerine getirirler. Son yıllarda sürekli gelişerek görüntü işleme, ses işleme ve robotik gibi alanlara hızla giren Deep Learning’in özelleşmiş bir biçimi olan konvolüsyonel sinir ağları ve GPU(Grafik İşlem Birimi) kullanarak MATLAB’da nasıl nesne tespit ve tanıma sistemi geliştirileceğini öğreneceğiz.



A- A+
02.11.2015 tarihli yazı 8803 kez okunmuştur.
Derin Öğrenme Algoritmalarının Avantajları
 
Derin öğrenme algoritmaları ve GPU teknolojisindeki gelişmelerle birlikte bizler robotik, görüntü işleme, ses ve sinyal işleme gibi alanlarda imkânsız gibi gözüken problemleri rahatlıkla çözebiliriz. Son yıllarda güçlü GPU’lar ve büyük veri setleri sayesinde derin öğrenme algoritmaları derin sinir ağlarını kullanmaktadır. Derin sinir ağları paralel algoritmalardır. Yani aynı anda birden fazla algoritma işlem yapabilir. Bu paralellik derin öğrenme ağlarının ihtiyacı olan işlem süresini azaltmak için binlerce çekirdekten oluşan GPU’lar için bir avantajdır. 
 

 
►İlginizi Çekebilir: Matlab Alternatifi Programlar | 1.Bölüm
 
 
MATLAB ve Derin Öğrenme
 
Makine öğrenme teknikleri ses, görüntü, sinyal gibi verileri kullanarak makinelerin nesne tanıma, görüntü işleme, ses tanıma gibi işlemleri gerçekleştirmesini sağlar.   Klasik makine öğrenme teknikleri hala zorlu görüntü sınıflandırma problemlerini çözmek için kullanılmaktadır. Ne yazık ki bu teknikler görüntüye direkt olarak uygulandıklarında, görüntünün yapısı ve doğal kompozisyonunu önemsemediklerinden istenileni veremezler. Son zamanlarda yeni teknikler bir görüntünün ilginç parçalarını kompakt düşük boyutlu vektörler şeklinde çıkaran çıkarma algoritmaları olarak kullanıldı. Bu teknikler daha sonra geleneksel makine öğrenme algoritmalarıyla birlikte kullanılmaya başlandı.

Derin Konvolüsyonel Sinir Ağları, derin öğrenme algoritmalarının özelleştirilmiş bir biçimidir. Konvolüsyonel sinir ağları geleneksel makine öğrenme tekniklerindeki boşlukları doldurarak problemleri çözme şeklimizi değiştirmiştir. Konvolüsyonel sinir ağları sadece görüntü sınıflandırması yapmak için kullanılmazlar. Bu ağlar; istenileni, manuel özellik çıkarma ihtiyacını ortadan kaldırarak ham görüntüden çıkarırlar. Computer Vision uygulamalarında genellikle görüntü sınıflandırılmasından daha fazlası gerekir.  Nesne tanıma uygulamaları için en son makine görüşü teknikleri ve GPU’ların nasıl verimli kullanılacağı iyi bilinmelidir. 
 
Şimdi Deep Learning konusunu gelişmiş bir GPU programlama ve Computer Vision bilgisi olmadan MATLAB üzerinde en kolay yoldan nasıl uygulayacağımızı bir örnekle açıklamak için bir nesne tespit sistemi tasarlayacağız.  
 
Örnek: Nesne Tespiti ve Tanımlaması
 
Örneğimizde bir videodaki evcil hayvanları tespit edip onları kedi ya da köpek isimleriyle etiketleyeceğiz.
 
Örneği çalıştırmak için MATLAB®, Parallel Computing Toolbox™, Computer Vision System Toolbox™ ve Statistics and Machine Learning Toolbox™ araçlarına ihtiyacımız olacak. Eğer bu araçlara sahip değilseniz www.mathworks.com/trial adresine deneme isteği atabilirsiniz. Örnekte NVIDIA Tesla K40 GPU kullanılmıştır. Sizler de herhangi bir MATLAB sürümü uyumlu CUDA destekli NVIDIA GPU üzerinde çalıştırabilirsiniz.
 
Sistemimize iki aşamalı olarak yaklaşacağız. Birinci aşamada evcil hayvanları videoda tespit etmeye çalışacağız. İkinci aşamada ise tespit edilen hayvanların köpek mi kedi mi olduğunu bulmayı hedefleyeceğiz.
 
 
 
Şekil 1: Evcil hayvan Algılama ve Tanımlama Sistemi Konvolüsyonel Sinir Ağları Sınıflandırıcı Kullanımı

 

 
İlk adım kedi ve köpeklerin görüntülerini sınıflandırmak bir sınıflandırıcı oluşturmaktır.

Bunun için:
 
1) Kedi ve köpeklerin kırpılmış, yeniden boyutlandırılmış, etiketlenmiş büyük miktarda resimlerini toplamanız gerekmektedir fakat bu çok zaman alabilir ya da
2) Çeşitli nesneler üzerinde daha önceden oluşturulmuş bir modeli kullanabilirsiniz ve zaman problemini aşmış olursunuz.

Örnekte bu tarz uygulamaları pratik bir şekilde yapmak için yaygın olarak kullanılan 2. seçenekteki öneri kullanılacaktır. ImageNet veri kümesi üzerinde oluşturulmuş konvolüsyonel sinir ağları sınıflandırıcısı kullanarak örneğe başlayalım.
 
Ayrıca hızlandırılmış alıştırma ve tahmin için NVIDIA cuDNN kütüphanesini kullanan ve MATLAB için konvolüsyonel sinir ağları barındıran MatConvNet kullanacağız.
 
MatConvNet ana sayfasındaki yükleme talimatlarını indirip bilgisayarınıza yükleyin.
 


 
Şekil 2: Cocker Cins Köpek Olarak Önceden Sınıflandırılmış ImageNet Modeli

 

 
► Şimdi kodlarımızın nasıl yazıldığını görelim. 
 

 
Şekil 3: Konvolüsyonel Sinir Ağları Modeli

 
Oluşturulmuş konvolüsyonel sinir ağları modeli nesne sınıflandırılması için harika çalışmaktadır. Konvolüsyonel sinir ağları modeli örnek resmimizin içerisinde cocker cinsi bir köpek olduğunu söyleyebilir. Bu güzel bir başlangıç noktasıdır fakat bizim problemimiz biraz farklıdır. Biz ilk önce görüntüde tespit ettiğimiz evcil hayvanların bir kutu içerisinde gösterilmesini, sonra da bu hayvanların kedi ve ya köpek olduğunu belirtmesini istiyoruz.  
 
Şimdi oluşturulmuş konvolüsyonel sinir ağları modelinden kedi köpek sınıflandırıcısı yapacağız.
 
Kedi Köpek Sınıflandırıcısı Oluşturma
 
Hedefimiz oldukça basittir. Basit bir sınıflandırıcı görevi çözmek için: 
 
Görüntüde kedi ve köpek yoksa bizlere kesinlikle kedi ve köpeğin olmadığını söyleyebilecek bir sınıflandırıcı olsun isteriz. Bunu eğitilmiş bir sınıflandırıcı ve birkaç kedi köpek resmi ile yapabiliriz.
 
Evcil hayvanları olan arkadaşlarınızdan kedi veya köpeklerinin resimlerini isteyebilirsiniz. Resimler “cat” ve “dog” klasörleri olarak ayrılmalı ve sonra bu iki klasör oluşturulan “pet_images” klasörüne atılmalıdır. Bu klasör yapısının kullanılmasının avantajı imageSet fonksiyonunun görüntü konum ve etiketlemelerini otomatik olarak 
yönetebilmesidir. Bunların hepsi  aşağıdaki kodlar kullanılarak MATLAB’a yüklenir.
 
 
Şekil 4: Matlaba Yüklemede Kullanılan Kodlar

 
Konvolüsyonel Sinir Ağları Kullanarak Özellik Ayıklama
 
Daha önce de belirttiğimiz gibi konvolüsyonel sinir ağları görüntüden jenerik özellikleri çıkarmayı öğrenebilir. Bu özellikler bizim kedi ve köpek sınıflandırıcımızı oluşturduğu gibi farklı bir sorunu çözmek amacıyla yeni bir sınıflandırıcı eğitmek için de kullanılabilir.  Konvolüsyonel sinir ağları yoğun işlemler içerdiğinden yavaş çalışabilirler. Onlar paralel algoritmalar olduğundan işlemleri hızlandırmak için GPU’lar kullanılabilir. Şimdi eğitilmiş model kullanarak özellik çıkarma işlemi yapan kodları ve CPU, GPU karşılaştırmasını göreceğiz. (Intel Core i7-3770 CPU) ve GPU (NVIDIA Tesla K40 GPU) karşılaştırılması.
 
 
 
Şekil 5: CnnPredict Fonksiyonu MatConvNet’in vl_simplenn Tahmin Fonksiyonu Etrafında Sarıcı Bir Fonksiyondur.
 
 

 
Şekil 6: CPU (sol) ve GPU(sağ) Kullanımı için Yürütme Zamanlarının Karşılaştırılması

 
Görüldüğü gibi GPU kullanımı, performansı önemli ölçüde artırmaktadır.
 


 
Şekil 7: 1128 Görüntünün Özelliklerini Ayıklamak için Gerekli CPU ve GPU Süreleri

 
GPU üzerinde tahmin yapmak için kodlarda yapmamız gereken değişiklik şekilde gösterilmiştir. 
 

 
Şekil 8: GpuArray ve Gather Fonksiyonları MATLAB Workspace Üzerinden GPU’ya Veri Aktarımını Sağlar

 
Parallel Computing Toolbox içerisinde bulunan gpuArray gibi fonksiyonlar, CPU üzerinde oluşturulan algoritmaların minimal kod değişiklikleriyle GPU’ya geçişini sağlar.
 
Konvolüsyonel Sinir Ağları Kullanarak Sınıflandırıcı Oluşturma
 
Önceki adımda özelliklerin ayıklanmasıyla şimdi yüzeysel bir sınıflandırıcı oluşturabiliriz. Çoklu modelleri eğitmek ve karşılaştırmak için “Statistics and Machine Learning Toolbox” da bulunan “Classification Learner” uygulaması kullanılabilir. Sonra direkt fictswm fonksiyonu çağırılarak ayıklanan özellikler kullanılacak ve bir SVM sınıflandırıcı oluşturulacaktır. Ayrıca bir çapraz doğrulama testi uygulanacaktır. Bu doğrulama sınıflandırıcının görünmeyen veriler üzerinde nasıl bir performans sergilediğini gösteren tarafsız bir tahmindir.
 

 
Şekil 9: “svmmdl” Bizim Hayvanları Kedi ve Köpek Olarak Sınıflandırabileceğimiz, Sınıflandırıcımızdır.
 
 
Nesne Tespiti
 
Resimler ve video karelerinin kendilerine özgü karakteristikleri vardır. Köpek tespit edilmesi gereken bir karede, köpeğe ek olarak bir ağaç ya da hareket eden başka bir canlı olabilir. Önceki adımda yaptığımız gibi bir görüntü sınıflandırıcı; tespit edilmesi gereken nesneyi (köpek ya da kedi) resmin ilgili yerinden bulup kırpabilirsek, sınıflandırma işini yapacaktır.  Nesne tespit süreci nesnenin bulunma aşamasından oluşmaktadır.
 
Bu örnekte nesne tespiti için Optical Flow olarak adlandırılan ve video karelerinin aralarındaki piksellerin hareketlerinden yararlanan teknik kullanılmıştır.

Şekil 10’da bir video karesi kaplanmış hareket vektörleri ile birlikte gösterilmiştir.
 

 
Şekil 10: Hareket Vektörleriyle Birlikte Bir Video Karesi (sol) ve Hareket Vektörlerinin Boyutu(sağ)

 
Tespit sürecinde ikinci adım hareket eden pikselleri ayırmaktır. Daha sonra ikili değerdeki (binary) görüntüde kamera hareketlerinden doğan gürültüleri yok etmek için görüntü bileşenlerinin analizini yapan Image Region Analyzer uygulaması kullanılır. Tespit programının çıkışı örnekte “findpet” olarak adlandıracağımız bir MATLAB fonksiyonu olacaktır ve bu program evcil hayvanın görüntü karesinin tam olarak neresinde olduğunu bulacaktır.
 
Parçaların Bağlanması
 
Örnekte tüm süreç boyunca Derin Öğrenme algoritmalarıyla bir evcil hayvan tanımlama ve tespit etme programı yapabilmek için gerekli parçalar elde edilmiştir.

Özetle:
 
1) Evcil hayvan konumunun görüntüde saptanması
2) Konvolüsyonel sinir ağları kullanarak görüntü özelliklerinin ayıklanması ve tespit edilen nesnenin çıkarılması
3) SVM sınıflandırıcı ile sınıflandırma işlemleri yapılmıştır.
 

 
Şekil 11: Tüm Bu Parçaların Birleştirilmesiyle Oluşturulan Evcil Hayvan Algılama ve Tanımlama Sistemini Gösterir.

 
Bilgisayar ortamında üretilen uygulamaların gerçek dünyada akıcı ve sorunsuz bir şekilde çalışabilmesi için, üretilen uygulamalar düşük hata oranında yüksek performansla çalışmalı ve son kullanıcı için yararlı ve anlaşılır olması açısından sade olmalılardır.  Derin Öğrenme tekniklerindeki gelişim, görüntü işleme gibi çıktılarında yüksek doğruluk oranı ve düşük hata payı olması gereken uygulamalarda çıtayı yükseltti ama performans maliyetleri üretici ve kullanıcı açısından oldukça yüksekti. GPU teknolojisindeki gelişim, uygulamaları oluşturma ve onlardan çıktı alma sürelerine ivme kazandırdı ve performans maliyeti boşluğunu kapattı.  
 
MATLAB, Derin Öğrenme ile birlikte daha erişilebilir bir bilgisayar görüşü yarattı. Kolay kullanımlı uygulama kombinasyonu ve programlama ortamı, standart bilgisayar görüşü ve makine bilgi algoritmaları kütüphaneleri, CUDA özellikli GPU’lar için sıkı desteği MATLAB’ı bilgisayar vizyonu çözümleri, tasarımları ve prototiplemeleri için ideal platform haline getirdi.


Yazar: Hakan KAHRAMAN
 
Kaynak:

►Matlab
►Nvidia
►Recode
►Vlab
►Computervisionblog
Hakan KAHRAMAN Hakan KAHRAMAN Yazar Hakkında Tüm yazıları Mesaj gönder Yazdır



ANKET
Endüstri 4.0 için En Hazır Sektör Hangisidir

Sonuçlar