Movidius Sinirsel Hesaplama Çubuğu, Nöral ağlar ve görüntü tanıma – Ali Rıza Saral

0
2211

Elektronik Yüksek Mühendisi Sayın Ali Rıza Saral ile Intel Movidius Sinirsel Hesaplama Çubuğu – Neural Compute Stick -, Nöral ağlar ve görüntü tanıma üzerine keyifli bir sohbet gerçekleştirdim.

– Merhaba Ali Rıza Bey. Movidius Sinirsel Hesaplama Çubuğu ile ilgili sohbet etmek üzere bir araya geldik ama bu esnada Nöral ağlar ve görüntü tanıma üzerine de konuşacağız. Bize neler söylemek istersiniz?

– Teşekkür ederim. Movidius, ana şirketi İntel’in geliştirdiği bir bilgisayar donanımıdır. Nöral ağ içeren sistemlerde aşırı ısınma ve aşırı akım çekmeyi önlemek amacıyla, daha çok küçük sistemlerde, mesela uçan cisimlerde veya robotlarda aşırı güç kullanımını engellemek için geliştirilmiştir.

– Nöral ağ – Neural networks – nedir?

– Güzel bir soru. Nöral ağ, beynin işleyiş biçimini taklit etmek iddiasında olan bilgi işlem yöntemidir. Nöral ağlarda iki süreç söz konusudur. İlki, Training yani eğitim. Sisteme bilginin öğretilmesi aşaması. Diğeri ise bu bilgiyi öğrenen ağın bir sisteme yerleştirilip bu ağa, belirli bir giriş verildiğinde bu girişe ilişkin çıkış – genelde buna tahmin ‘prediction’ deniyor – oluşturulmasıdır. Daha somut olarak söylersek, ileride de konuşacağımız şekilde, bilgisayar üzerinde ‘image recognition‘ yani görüntü tanıma amaçlı bir nöral ağ ele alalım. Bu nöral ağa, ilk öğrenme döneminde onbinlerce çeşitli görüntü verilir. Bu verilen görüntülerin ne olduğu belirli gruplara göre ayrıştırılır. Görüntü verildiği zaman bu görüntünün ne olduğu da belirtilir sisteme.

– Mesela uçak veya köpek gibi.

– Uçak görüntüsünü verdiğinizde yanında bir girişte uçak olduğunu belirtir. Yani uçak, 1 2 3 4 5 diye bir gruplama yaptıysanız, bunun grubunu belirtirsiniz.

(Bu destekli eğitim ‘Assisted Training‘. Yani siz sisteme öğretiyorsunuz bunun ne olduğunu. İleride bunun da ayrıca bir açıklamasını yapacağız)

Şimdi bunu öğrenen sistem, bir süre sonra daha önce vermiş olduğunuz resimler dışında ilk defa verdiğiniz bir resmi, daha önce vermiş olduğunuz resimlerden edindiği izlenimler ışığında gruplar. Dolayısıyla, diyelim ki bir köpek resmi verdiğinizde, köpeğin, köpek grubuna ait olduğunu belirtir. Tabii son zamanlarda bu destekli eğitim itibardan düştü. Nedeni de şu: çok aşırı sayıda örnek sayısı gerekiyor. Bunun öğretilmesi günler hatta haftalar alabiliyor.

Buradan tekrar Movidius’a dönersek, Movidius’un avantajı eğitim süresini azaltması değil. Eğitimi yapılmış bir GRAPH Network‘ü alıp Movidius üstüne koyuyoruz. Sonra da girişi verip yani mesela bir köpek resmini verip, bu nedir diye soruyoruz. Movidius’ta bize, bu köpektir diyor. Yani Movidius’ta eğtim ‘training’ aşaması yok. Eğitim aşaması daha önce halledilmiş durumda. Movidius’un avantajı, bu eğitimi yapılmış GRAPH’ı işlerken çok az miktarda akım çekmesi ve çok az miktarda ısınması.

– Ve hızlı sanki.

– Hız esas parametre değil. Ama hızlı olduğunu da söyleyebiliriz. Hızlı olmasa bu kadar popülerleşemeyebilirdi.

– Ben biraz cihazdan söz etmek istiyorum. Konuştuğumuz ürün, bilgisayarınızın USB portuna bağladığınız, bir kibrit kutusu kadar bir cihaz.

– İşin güzel yanı, ürünün fiziki olarak küçük olması, bu cihazın uçan insansız hava aracına kolaylıkla yüklenebilmesini getiriyor. Veya küçük bir robotun, mesela diyelim ki kanalizasyon temizliği yapan ya da kontrol eden bir robotun içine kolaylıkla yerleştirilebiliyor.

Şimdi neden bu akım ve ısınma konusunu dile getiriyorum. Çünkü nöral ağ kullanılırken şimdiye kadar yaygın olan bir biçim, grafik işlemcileri bu amaç için kullanmaktı. Yalnız sorun, bu işlemciler çok ısınıyor. Ayrıca bu işlemcilerin fiziki boyutları küçük bir uçucu cisme koyabileceğiniz kadar küçük değil.

Daha önce destekli eğitim konusunda bir parantez açmıştık. Tekrar oraya geri dönelim.
Son zamanlarda gittikçe artan bir eğilim, desteksiz eğitim ‘non-assisted training‘. Yani siz veriyi veriyorsunuz. Sistem kendi kendine öğreniyor. Daha önce vermemiş olduğunuz bir veriyi verseniz dahi, sistem doğru olarak nesneyi belirliyor.

– Bunları önceden bilmese de.

– Önceden tanışmamış, görmemiş olsa bile. Bunlara otomatik kodlama sistemleri ‘auto encoding systems’ deniyor. Bunların içinde otomatik tercüme ‘translators‘ sistemleri de var. Bunlar özellikle son zamanlarda, mesela milyonlarca cümleyi veriyorlar, – burada detaya girmek istemiyorum fakat ilgili makaleleri internette bulmak mümkün – bunlar otomatik kodlama ‘auto encoder‘ aşamasından geçiriliyor. Daha sonra gitmek istediğiniz dil aşamasında bir işlem yapılıyor. Ardından tercüme edilmesi gereken giriş cümlesini verdiğinizde diğer taraftan tercümesi çıkıyor.

Tabii şimdi burada çıkıyormuş demek lazım. Bu sistemlerde bir şeyin farkında olmak lazım. Bunlar olasılıklara dayanan sistemler. Dolayısıyla %80 , %85 başarı elde edildiğinde şapkalar havalara uçuyor. Bu önemli bir olay.

– Kısaca tanıtmak istesem, görüntü tanımlama sisteminin cebimize girmiş şekli diyebilir miyiz?

– Gerçekten öyle. Çünkü çok pratik. Tabii şöyle bir şey var. Nöral ağlarda önemli olan bir faktör, GRAPH büyüklüğü, örnekleme büyüklüğü ‘Graph size‘.

Çok az bilgiyi, büyük bir örnekleme aldığınızda, bu rasyonel bir sonuç çıkarmayabiliyor. Örnekleme büyüklüğünün, giriş verisine göre optimal olması gerekiyor.

Biraz da teknik bilgilere gelirsek; Movidius’la NCSDK veriliyor. Ben NCSDK sürüm 2’yi kullandım. İkinci sürümde örneklerin hepsi hazır graphlar kullanıyor. Neden? Çünkü bu bağlantı ağırlıklarının ‘tensor flow‘ optimal bir noktaya getirilmesi yani eğitim işlemi çok zaman alıyor.

Dolayısıyla Movidius’un yaklaşımı şu: Mesela bu görüntü tanıma işlemi için Google’ın yapmış olduğu bir graph kullanıyorum.

Burada şöyle bir soru gelebilir akla; onlar nasıl yapmışlar bu kadar uzun süren işlemleri. Amerika’da belirli bir yarışma düzenlenmiş, kim görüntü tanımayı en yüksek olasılıkla yapacak. Dikkatinizi çekerim, ‘en yüksek olasılıkla‘ deniyor, ‘kim yapacak’ demiyor? Yani orada yine bir %80 %90 veya çok çok iyi %95 gibi bir olasılık var.

– Movidius ile çalışacak kişilere önerilerinizi alabilir miyiz?

– Movidius, esasen Ubuntu sistemi ile çalışmak üzere geliştirilmiş. Fakat Microsoft Windows içinde de Microsoft Visual Studio içinde böyle bir imkan da var. Windows üstünde çalışacaklar için şunu tavsiye ediyorlar: eğer Windows host makinede çalışmak istiyorsanız, VMbox kullanın, onun içine Ubuntu kurun, ona da NCAppZoo denen örnekleri koyuyorsunuz. Yani, NCSDK 2 ve onun içine NCAppZoo. NCAppZoo’nun içindeki örneklerin hepsi hazır graphlar. Şunu da belirtmek lazım. Keras denilen katmanlar ‘layer‘ var. Nöral ağlarda katmanların kolaylıkla oluşturulmasını sağlayan bir araç.

Keras’tan flow’a geçiş yapabiliyorsunuz. Flow’dan da graph oluşturabiliyorsunuz. Şimdi sorun şurda; oluşturacağınız katmanların büyüklükleri ve sayısını bir Google gibi yapmanız mümkün değil.

– Sonsuz bir kapasitemiz yok.

– Yani bu bu işi yapmak isteyen kişiler için söylemek istiyorum: ‘Öyle Movidius’u alırım, bununla büyük bir sistem oluştururum’. O mümkün değil. Movidius’un graph size’ının maksimum 300 Megabyte civarında olduğu belirtiliyor.

– Teoride verilen sınır bu, 300 Megabayte graph size.

– Nodeların büyüklüğü ise 200 Megabyte civarında.

Yani bu çok büyük bir sistem değil. Daha çok, bu teknolojiye sahip bir güç, bunu ticarileştirmeye çalışıyor. Faydalı da olabilir. Ona bir şey demiyorum. Ticarileşmede bizim açımızdan şu anda kullanılabilecek en güzel şekil, robot veya uçucu cisim.

– Daha önceki sohbetlerimizden biliyorum, Raspberry Pi’ye bağlanabiliyor demiştik. Küçücük bir cihaz o da. Movidius’da çok az enerji kullandığı için küçücük bir batarya ile bir sürü iş yapabiliyor herhalde değil mi?

– Doğrudur. Bunu da yapmanın yolu, sizin de bahsettiğiniz gibi Raspberry Pi kullanmak.
Raspberry Pi’de Ubuntu kullanabiliyorlar. Hiçbir problem olduğunu zannetmiyorum çok rahat olduğunu tahmin ediyorum.

Benim karşılaştığım ufak tefek pürüzler daha çok Windows host altında VMbox altında Ubuntu ve onun içinde de NCSDK sürüm 2 kullanmak. Buradaki zorluğun bir nedeni de şu: Movidius NCSDK 2, Ubuntu’nun 16.4 sürümü için geliştirilmiş. Fakat daha sonra Ubuntu ilerleyerek 16.8’e sürüme çıkmış. 16.4’ü uzun dönemli sürüm olarak hala açık tutuyor. Şimdi sorun şurda çıkıyor. Siz 16’4’te sistemi kuruyorsunuz, SDK’yi koyuyorsunuz. Sürekli olarak önünüze güncelleme yapayım mı diye soru geliyor. Eğer bunlardan birine evet derseniz NCSDK 2’nin tanımlanmamış olduğu bir sürüm seviyesine çıkıyorsunuz. Dolayısıyla sistem çalışmaz hale geliyor.

– O zaman ben buradan hemen belirteyim. Söz edilen platformda güncellemelere evet demeyin.

– Bunun basit bir çözümü de var yalnız, sınırlandırılmış ortam oluşturarak kullanabilirsiniz ancak iş büyümeye ve karmaşıklaşmaya başlıyor o zaman. Sadece Ubuntu üzerinde çalışırlarsa daha iyi olabilir. Sürüm sorunu Ubuntu makinede da çıkabilir. O zaman söz ettiğim sınırlandırılmış ortam oluşturarak kullanabilirler. NCSDK’in Ubuntu’nun 16.4 sürümü ile sınırlandırılmış olması bir pürüz çıkartıyor.

– Şimdi toparlayacağım. Kibrit kutusu kadar bir cihazdan konuşuyoruz. Bilgisayarın, Raspberry Pi’nin veya buna benzer bir cihazın USB portundan takılıyor. Hazır bir takım kütüphaneleri kullanarak verdiğimiz bir fotoğrafın, görselin veya videonun ne olduğunu, yüksek olasılıklarla tespit etmeye çalışıyor. Nöral ağlara girmek isteyen veya görüntü tanıma sistemlerinde ilerlemek isteyenler için son derece pratik, ekonomik bir cihazdan konuşuyoruz. Ekleyeceğiniz bir şey var mı?

Ekonomik olduğuna katılıyorum. Pratik olduğuna da katılıyorum açıkçası. Çünkü evinizde masanızın üstünde bir nöral ağ kuruyorsunuz. Yani bu arka bahçede keşif yapmak isteyen gençler için ideal.

– Teşekkür ederim bilgiler için.

– Ben teşekkür ederim.

Sinan Oymacı

Sohbetin videosunu ve detayları https://youtu.be/7RRWGLcfO4A adresinden izleyebilirsiniz.

YORUM YAPIN

Please enter your comment!
Please enter your name here