• Sonuç bulunamadı

3. GELİŞTİRİLEN ENDÜSTRİYEL KAMERA SİSTEMİ

3.7. Test Sonuçları

3.7.2. GPU Kart Hız Testi

Bölüm başında da belirtildiği üzere GPU kartları üzerinde gerçekleştirilen işlemler, bu kartların paralel işlem yapabilmesinden ötürü oldukça hızlı bir şekilde yapılmaktadır. Bu

112

kartlar bünyesinde barındırdığı 100’den fazla çekirdek ile yoğun matematiksel işlemleri çok kısa sürede yapabilmekte ve bu işlemlerin sonuçlarını hesaplayabilmektedir.

GPU kartları genellikle yoğun veri kümelerinin işlendiği noktalarda kullanılmaktadır. Bunlara verilebilecek en iyi örnekler sırasıyla big data, derin öğrenme, makine öğrenmesi ve gerçek zamanlı bilgisayar görmesi işlemleridir. Gerçekleştirilen bu tez çalışmasında da temel olarak gerçek zamanlı bilgisayar ve makine görmesi işlemleri yapılmaktadır. Bu amaçla opencv kütüphanesi kullanılarak çeşitli görüntü işleme uygulamaları gerçekleştirilmekte ve hedeflenen sonuçlar elde edilmektedir. Yine bölüm başında belirtildiği üzere, gerçekleştirilen bu tez çalışmasında yoğun bir şekilde ana makineye görüntü kareleri gelmektedir. Ayrıca bu görüntü karelerinin kayıpsız bir şekilde işlenebilmesi büyük önem arz etmektedir. Bu sebepten ana işlem biriminin merkezi işlemcisi olan CPU bu noktada yetersiz kalabilmektedir ve bu nedenle GPU kullanımı zaruri hale gelmektedir. GPU kullanımının gerçekleştirilen bu tez çalışması açısından bir diğer önemli noktası ise, bu kartların Nvidia tarafından üretilmesi ve bu firmanın OpenCV kütüphanesine doğrudan destek sağlamasıdır. Başka bir deyişle Nvidia firması hali hazırda CPU için yazılmış olan çeşitli görüntü işleme fonksiyonlarını sürekli olarak GPU üzerinde çalışabilir hale getirmekte ve kullanıcıların hizmetine sunmaktadır. Bu amaçla CPU üzerinde çalışabilecek örnek bir kod parçası Şekil 3.69’da verildiği gibidir.

Şekil 3.69. CPU işlemci için gerçekleştirilen örnek bir OpenCV kod parçası

Şekil 3.69’dan da görülebileceği üzere, kodun ilk satırında sistemde kurulu bulunan OpenCV kütüphanesinin hafızaya yüklenmesi işlemi gerçekleştirilmiştir. Bu kod parçacığının bir sonraki satırında ise OpenCV’de sıklıkla kullanılan bir isim uzayı tanımlaması (cv) yapılmıştır. Bu işlemin ardından main bloğu tanımlaması yapılmış ve

113

“car1080.jpg” görüntü dosyası “imread” komutu kullanılarak “src” isimli değişkene atanmıştır. Kod parçasının bir sonraki aşamasında görüntü yumuşatma işlemlerinden biri olan ve oldukça zaman harcayan bir fonksiyon olan “bilateralFilter” komutu görüntüye uygulanmış ve elde edilen sonuç “dst” isimli değişkene gönderilmiştir. Bu işlemin ardından görüntüye “Canny” fonksiyonu uygulanmış ve görüntünün kenarları çıkarılmıştır. Kod parçasının son aşamasında ise kenarı çıkarılmış olan görüntü “imwrite” komutu kullanılarak “out.png” adlı dosyaya yazılmıştır. Bu kod parçacığına ait giriş ve sonuç görüntülerinin durumu sırasıyla Şekil 3.70-(a) ve (b)’de verildiği gibidir.

(a) Giriş görüntüsü (b) Çıkış görüntüsü

Şekil 3.70. Opencv örnek kod parçacığı çıktısı

Şekil 3.70’dan da görülebileceği üzere giriş olarak alınan renkli araba görüntüsü Şekil 3.69’da verilen kod parçacığı uygulandıktan sonra yumuşatılmış ve kenarları çıkarılmış bir hale gelmiştir. Şekil 3.69’da verilen kod parçacığı OpenCV Kütüphanesi ve C++ programlama dili kullanılarak gerçekleştirilmiştir. Bu aşamada aynı işlem için GPU tabanlı çalışan bir uygulamaya ait örnek kod parçası ise Şekil 3.71’de verildiği gibidir.

114

Şekil 3.71’den de görülebileceği üzere yeşil renk ile belirtilen kod parçaları CPU için yazılan kod parçacığına eklenmiş mevcut kod parçacığının GPU üzerinde çalışabilir hale gelmesine yardımcı olmuştur. Bu amaçla öncelikli olarak sisteme OpenCV’nin GPU kütüphanesi eklenmiştir. Diğer kısımlar aynı olmasına rağmen, GPU kodlamasında görüntünün doğrudan GPU kartına yüklenmesi işlemi mevcut bulunmamaktadır. Bu sebepten daha öncesinde “src” değişkenine yüklenen görüntü verisi “d_src” isimli GpuMat değişkenine okunmuştur. Bu işlemin ardından bilateralFilter ve Canny fonksiyonlarının başına “gpu” ön eki getirilmiş ve bu fonksiyonların GPU kart üzerinde çalışabilmesi sağlanmıştır. Nihai olarak GPU üzerinde işlenen görüntü tekrar normal CPU üzerinde çalışan “dst” değişkenine geri okunmuş ve hafızaya görüntü olarak kaydedilmiştir.

CUDA genel amaçlı GPU hesaplamalarında grafik işlemcisinin çekirdeklerinin kullanılmasını sağlayan ve paralel işlem yapabilmeye olanak tanıyan bir mimaridir. Temel olarak C programlama dilini kullanan bu mimari ile GPU programlama işlemi gerçekleştirilebilmektedir. Ayrıca bu mimarinin sağladığı bir diğer avantaj ise herhangi bir GPU kart yükseltmesinde kod değişikliğine gerek kalmadan, mevcut kodun yeni bir kart üzerinde çalışabilmesine imkan vermesidir. Bu sayede yeni yükseltmelerde kod içerisinde herhangi bir güncelleme işlemine gerek kalmadan performans artışı sağlanabilmektedir. Bu durumu sağlayan en önemli faktör ise tüm bu geliştirmelerin Nvidia firması tarafından gerçekleştirilmesidir. CPU ve GPU için ayrı ayrı hazırlanan aynı kod parçasının zamansal yönden performansına ait bir karşılaştırma Şekil 3.72’de verildiği gibidir.

115

Şekil 3.72’den de görülebileceği üzere bilateralFilter komutu CPU üzerinde 2521 ms zaman tüketirken GPU kart üzerinde aynı komut 187 ms tüketmektedir. Tüm kod parçacığındaki zamansal gelişim göz önüne alındığında sistemin performansı yaklaşık 12 kat artmaktadır. Bu kadar basit bir örnekte bile önemli avantajlar sağlayan GPU kartının gerçek zamanlı uygulamalardaki performansı oldukça fazla olmaktadır. Bu amaçla görüntü işleme konularında sıklıkla karşılaşılan ve gerçek zamanlı olarak düşünüldüğünde oldukça zaman tüketen bazı uygulama ve fonksiyonların CPU ve GPU karşılaştırması Şekil 3.73’de verildiği gibidir.

30x

7x

8x

6x

12x

CPU GPU

H

ızl

an

m

a

Temel Görüntü İşleme Sanal

Gerçeklik Yaya Tespiti

Viola-Jones Algoritması

SURF Anahtar Noktalar

Şekil 3.73. CPU ve GPU performans testi

Şekilden de görülebileceği üzere yoğun hesaplama getiren fonksiyonların GPU kartlar üzerinde yürütülmesi oldukça avantajlı olmaktadır. Ayrıca Nvidia firmasının her geçen gün mevcut fonksiyonları arttırması ve GPU üzerinde çalışabilir hale getirmesi bu alandaki ilgiyi her geçen gün arttırmaktadır. Günümüzdeki yoğun veri işleme durumu da göz önüne alındığında özellikle gerçek zamanlı uygulamalarda GPU kullanımı neredeyse bir zorunluluk haline gelmiş ve gerçekleştirilen bu tez çalışmasında da geliştirilen görüntü işleme ve örüntü tanıma algoritmaları GPU kartlar üzerinde çalışabilir hale getirilmiştir.

Benzer Belgeler