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.
02.11.2015 tarihli yazı 38173 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ı
►İlginizi Çekebilir: Matlab ile Görüntü İşleme 1 | ElektrikPort Akademi
İ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:
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
►İlginizi Çekebilir: Sinyal İşleme Nedir ? | ElektrikPort Akademi
► Ş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
►Matlab
►Nvidia
►Recode
►Vlab
►Computervisionblog
YORUMLAR
Aktif etkinlik bulunmamaktadır.
- Dünyanın En Görkemli 10 Güneş Tarlası
- Dünyanın En Büyük 10 Makinesi
- 2020’nin En İyi 10 Kişisel Robotu
- Programlamaya Erken Yaşta Başlayan 7 Ünlü Bilgisayar Programcısı
- Üretimin Geleceğinde Etkili Olacak 10 Beceri
- Olağan Üstü Tasarıma Sahip 5 Köprü
- Dünyanın En İyi Bilim ve Teknoloji Müzeleri
- En İyi 5 Tıbbi Robot
- Dünyanın En Zengin 10 Mühendisi
- Üretim için 6 Fabrikasyon İşlemi
- Enerji Yönetiminde Ölçümün Rolü: Verimliliğe Giden Yol
- HVAC Sistemlerinde Kullanılan EC Fan, Sürücü ve EC+ Fan Teknolojisi
- Su İşleme, Dağıtım ve Atık Su Yönetim Tesislerinde Sürücü Kullanımı
- Röle ve Trafo Merkezi Testlerinin Temelleri | Webinar
- Chint Elektrik Temel DIN Ray Ürünleri Tanıtımı
- Sigma Termik Manyetik Şalterler ile Elektrik Devrelerinde Koruma
- Elektrik Panoları ve Üretim Teknikleri
- Teknik Servis | Megger Türkiye
- Güneş Enerji Santrallerinde Yıldırımdan Korunma ve Topraklama
- Megger Türkiye Ofisi
ANKET