Derin Öğrenme Hakkında Neredeyse Her Şey [4]

Ömer SAVAŞ
SDTR
Published in
5 min readMar 3, 2022

Son Güncelleme: 02/02/2022

Bu seri toplamda 6 yazıdan oluşmaktadır. Şuan 4. yazıyı okuyorsunuz. Diğer içeriklere aşağıdaki linklerden ulaşabilirsiniz.

Özet: Bu yazıda eğitilmiş ağlar, transfer learning örnekleri ve nesne tanıma konularına değinilecektir.

Eğitilmiş Ağlar

Şimdi de örnek olarak daha önceden eğitilmiş VGG16 modelini inceleyelim ve bir tahmin yaptıralım. Model eğitim ağırlıkları ile birlikte yüklenecek. Sonra bir resim verip bunun ne olduğunu tahmin etmesini bekleyeceğiz. Kaynak kod burada.

Aşağıdaki resmin araba olduğunu tahmin etti.

Transfer Learning

VGG16 ‘yı kullanarak tanıma yaptık. Ama VGG16 ‘nın sınırı dahilinde bir tanıma oldu bu. Biz tamamen bağımsız başka sınıfları tanımak için VGG16 ‘yı değiştirip onun şimdiye kadar öğrendiklerini kendimize basamak yapabiliriz. Yukarıda biraz bahsetmiştik. Bunun için VGG16 modelini ağırlıkları ile birlikte alıyoruz. Son bir yada bir kaç katmanı çıkarıp kendi ihtiyacımıza göre katman yada katmanlar ekliyoruz. Bunu yaparken de son katmanın nöron sayısını bizim istediğimiz sınıf kadar belirliyoruz. Böylelikle çok az veri ile artık kendi sınıflarımızı tanıyan bir modelimiz oluyor. Fakat biz örneğimizde son katmanı çıkarmayacağız. Çünkü VGG16 ‘nın çıkış katmanı zaten bizim istediğimizden çok fazla nöron sayısına sahip. Çıkarmayarak son katmanın da öğrenmiş olduğu ağırlıkları değerlendirmiş oluyoruz.

Bir de şu nüans var sadece VGG16 ‘nın katmanları için öğrenmeyi devre dışı bırakıyoruz ağırlıklar hiç güncellenmiyor. Yalnızca bizim eklediğimiz katmanların öğrenmesine izin veriyoruz.

Eğitim seti olarak da keras ‘ın çiçekler data setini kullanacağız. (Yukarıdaki modelin son katmanından da görüleceği üzere 5 tane sınıfa sahip)

Kaynak koda buradan erişebilirsiniz. Böylelikle VGG16 ‘nın nimetlerinden faydalanarak kendi sınıflandırıcımızı oluşturmuş olduk.

Nesne Tanıma

Duruyor muyuz? Tabi ki hayır! Şimdiye kadar yalnızca bir resim verip resmin tamamına dair bir tahmin yaptık. Şimdi biraz daha işi zorlaştıralım. Modele bir resim verelim ve içindeki nesneleri yerleri ile birlikte tahmin etmeye çalışsın. Önce biraz bunun teorik kısmından bahsetmek istiyorum.

Şimdiye kadar ki modellerimiz hep bir resim verip son katmandan bunun sınıfını belirlemek üzerine idi. Artık daha akıllı bir model istiyoruz. Bir resim verelim, içinde ne var ne yok bize konumları ile birlikte bildirsin. Peki bu nasıl olabilir?

Yeni yaklaşımımızda çok az bir fark var. Ben ilk öğrendiğimde, “bunu nasıl daha önce düşünemedim?” diye hayıflanmıştım. Dilim döndüğünce bildiğim modellerden önemli olanları anlatmaya çalışacağım.

Burada da daha önceden eğitilmiş bir faster rcnn modeli ile resim üzerinde nesne bulmaya dair kaynak kod var.

Bonus: Birazdan daha detaylı değineceğim tensorflow object detection api kullanarak istediğiniz tipte istediğiniz modelde eğitilmiş ağırlıkları kullanarak tahmin yaptırabilirsiniz. Burada.

R-CNN

İlk model Region Based CNN yani alan bazlı conv nöral ağ. Bu en ilkel yaklaşım. Özetle ilk olarak resminizi alıyor ve “Selective Search” denilen bir yöntemle nesne olması muhtemel alanları belirliyor. Ardından bu alanların hepsini aynı boyuta çeviriyor (Mesela 64 x 64). Sonra bu boyutlandırılmış resimlerin hepsini conv bir ağdan geçirerek buralardaki nesneleri “Support Vector Machine” denilen bir yöntemle tahmin etmeye çalışıyor. Yani resminizi binlerce parçaya bölüp, aynı boyuta getirip, herbirini daha önce öğrendiğimiz yöntemlere benzer bir şekilde sınıflandırmaya çalışıyor.

Tabi ki eğitim de tahmin de çok uzun sürüyor. Hem alan belirleme hem de belirlenmiş alanların hepsinin conv ağdan geçirilmesi ayrı ayrı uzun sürüyor.

Fast R-CNN

Aklı selim bir abimiz yukarıdaki modele bakıyor ve bir kaç değişiklik yaparak çok daha iyi bir seviyeye getiriyor. Önce tüm resmi conv bir ağdan geçirerek yüksek çözünürlüklü bir özellik haritası çıkarıyor. Yani conv ağdan geçirme işlemini en başa alıyor. Bu sayede binlerce sefer conv ağdan geçirme işlemine gerek kalmıyor. Sonra bu conv ağdan geçirilmiş yüksek çözünürlüklü özellik haritası üzerinde “selective search” ile nesne olması muhtemel alanları tespit ediyor. (Yaklaşık 2000 kadar) Son olarak da bu seçilmiş alanları resize edip dense+softmax katmanından geçiriyor.

Bu diğer modele göre bayağı hızlı ama hala video üzerinde gerçek zamanlı nesne tanıma yapmak için yeterli değil. Çünkü selective search hala çok zaman alıyor.

Faster R-CNN

Bu modelde de selective search çıkarılmış. Nesne olması muhtemel alanları da bir ağ belirliyor. Bu sayede çok hızlı bir şekilde nesne belirleme işlemi yapılabiliyor.

SSD (Single shot multibox detector)

Bu en hızlı model. Ama faster rcnn kadar isabetli değil. Hız yada isabet konusundaki önceliğinize göre hangi modeli kullanacağınıza karar verebilirsiniz. Resmi bir sefer conv ağdan geçiriyor ve modelin tasarımı sayesinde büyük bir tensor elde ediyor. Tahmin değeri 0,5 den büyük olanları da nesne olarak kabul ediyor. Burada bu konuda detaylı bir yazı var.

YOLO (You only look once)

Aldığım eğitimlerin hepsinde SSD, Yolo ‘dan daha başarılı olduğu için yolo ‘yu hiç anlatmıyoruz diyip geçtiler. Ya anlaması çok zor, ya da derin öğrenme pedegojisinde bu bir ritüel :p

Yolo yapı olarak SSD ye çok benziyor. Burada da güzel bir yazı var. Baya detaylı değinmiş. İlgililer okuyabilir.

Mask RCNN

Bu da tanınmış olan nesnenin resim üzerindeki tam alanını belirlemeye yarayan bir model. Bunu yalnızca bir fantezi olarak düşünmeyin. Güzel kullanım alanları var.

--

--