Derin öğrenme tabanlı bilgisayarla görme modellerindeki son gelişmelerle, nesne tespiti uygulamaları hiç olmadığı kadar kolay geliştiriliyor. Önemli performans artışlarının yanı sıra, bu teknikler büyük ölçekli görsel veri kümelerinden yararlanarak büyük veri kümelerine duyulan ihtiyacı da azaltıyor. Ayrıca, uçtan uca tüm hatlara odaklanan güncel yaklaşımlarla performans ciddi şekilde iyileşti ve gerçek zamanlı kullanım senaryoları mümkün hale geldi.
Farklı görüntü sınıflandırma mimarilerine ilişkin yazdığım blog yazısına benzer şekilde, iki nesne tespiti mimarisini ele alacağım. Tensorflow Detection API’de hâlihazırda bulunan SSD ve Faster RCNN’i tartışacağım.
Önce nesne tespitindeki bazı temel kavramları gözden geçirecek, ardından bunların SSD ve Faster RCNN’de nasıl uygulandığını göstereceğim.
Görüntü Sınıflandırma ve Nesne Tespiti
İnsanlar sık sık görüntü sınıflandırma ile nesne tespitini karıştırır. Genel olarak, bir görüntüyü belli bir kategoriye sınıflandırmak istiyorsanız görüntü sınıflandırma kullanırsınız. Öte yandan, amacınız bir görüntüdeki nesnelerin konumunu belirlemek ve örneğin bir nesnenin kaç örneğinin bulunduğunu saymak ise nesne tespiti kullanabilirsiniz.
Sınıflandırma ile nesne tespiti arasındaki farkın görselleştirilmesi.
Yine de bu iki senaryo arasında bir miktar örtüşme vardır. Bir görüntüyü belirli bir kategoriye sınıflandırmak istediğinizde, sınıflandırma için gereken nesne ya da ayırt edici özellikler, tüm görüntüye oranla fazla küçük kalabilir. Böyle bir durumda, nesnenin tam konumu veya sayılarıyla ilgilenmeseniz bile nesne tespiti, görüntü sınıflandırmaya kıyasla daha iyi performans sağlayabilir.
Diyelim ki devre kartlarını kontrol edip kusurlu veya düzgün olarak etiketlemeniz gerekiyor. Esasen bir sınıflandırma problemi olsa da kusurlar, bir görüntü sınıflandırma modeliyle fark edilmeyecek kadar küçük olabilir. Bir nesne tespiti veri kümesi oluşturmak daha fazla zaman alır; ancak büyük olasılıkla daha iyi bir modelle sonuçlanır.
Kusurlu bir IC kartına örnek.
Bir görüntü sınıflandırma modelinde, tam görüntünün özniteliklerini (geleneksel ya da derin öğrenme yöntemleriyle) çıkarırsınız. Bu öznitelikler, görüntünün bir tür özetidir. Nesne tespitinde ise bunu görüntünün daha ince taneli, bölgesel düzeyinde yaparsınız. İlkinde sınıflandırma sinyalini kaybedebilirsiniz; ikincisinde ise sinyal, kullanım amacına daha uygun biçimde korunabilir.
Veri gereksinimleri
Özel bir model eğitmek için etiketli veriye ihtiyaç vardır. Nesne tespiti bağlamında etiketli veri; karşılık gelen sınırlayıcı kutu koordinatları ve etiketleri olan görüntülerdir. Yani sol alt ve sağ üst (x,y) koordinatları + sınıf.
Görüntüdeki köpekler için normalize sınırlayıcı kutu koordinatları örn. [0.1, 0.44, 0.34, 0.56] ve [0.72, 0.57, 0.87, 0.77]
Sık sorulan bir soru şudur: X probleminde nesne tespiti yapmak için kaç fotoğrafa ihtiyacım var? Bunun yerine, modelin hangi senaryolarda devreye alınacağını doğru anlamak daha önemlidir. Her sınıf için çok sayıda (örneğin, > 100 ve potansiyel olarak >1000) temsil edici görüntünün olması kritik önemdedir. Burada temsil edici demek, modelin kullanılacağı senaryo aralığıyla uyumlu olmaları demektir. Bir otomobilde çalışacak trafik işareti tespit modeli geliştiriyorsanız, uygun bağlamlarda farklı hava, ışık ve kamera koşullarında çekilmiş görüntüler kullanmanız gerekir. Nesne tespiti modelleri sihirli değildir, hatta epeyce yalındır. Modelin genel kalıpları öğrenmesi için yeterli veri yoksa üretimde iyi performans göstermez.
Soldaki görüntü net ve tespiti kolay olsa da, nihayetinde kullanım durumunu daha iyi yansıtan verilerle eğitim yapılmalıdır.
Genel Nesne Tespiti Çerçevesi
Tipik olarak, bir nesne tespiti çerçevesinde üç adım bulunur.
Önce, ilgi bölgeleri veya bölge önerileri üretmek için bir model ya da algoritma kullanılır. Bu bölge önerileri, tüm görüntüyü kapsayan geniş bir sınırlayıcı kutu kümesidir (yani bir nesne konumlandırma bileşeni).
İkinci adımda, her bir sınırlayıcı kutu için görsel öznitelikler çıkarılır, değerlendirilir ve görsel özniteliklere dayanarak önerilerde hangi nesnelerin bulunup bulunmadığı ve hangileri olduğu belirlenir (yani bir nesne sınıflandırma bileşeni).
Son işleme adımında, çakışan kutular tek bir sınırlayıcı kutuda birleştirilir (yani maksimum olmayan bastırma).
Bölge Önerileri
Bölge önerileri üretmek için birkaç farklı yaklaşım vardır. Başlangıçta, nesne önerileri üretmek için ‘seçmeli arama’ algoritması kullanılıyordu. Lillie Weng bu algoritmayı blog yazısında ayrıntılı biçimde açıklar. Kısaca, seçmeli arama; pikselleri gruplayıp, oluşturulan kümelere dayanarak öneriler üretmeye çalışan kümeleme tabanlı bir yaklaşımdır.
Bir görüntüye uygulanmış seçmeli arama örneği. SS algoritmasındaki bir eşik, daha fazla ya da daha az öneri üretecek şekilde ayarlanabilir.
Diğer yaklaşımlar, bölgeleri üretmek için görüntüden çıkarılan daha karmaşık görsel öznitelikleri kullanır (örneğin, bir derin öğrenme modelinden elde edilen özniteliklere dayalı olarak) ya da bölge üretimine kaba kuvvet yaklaşımı benimser. Bu kaba kuvvet yaklaşımları, çeşitli oran ve ölçeklerde görüntüye uygulanan bir kayan pencereye benzer. Bu bölgeler, görüntü öznitelikleri dikkate alınmadan otomatik olarak üretilir.
Kayan pencere yaklaşımına bir örnek. Her bir sınırlayıcı kutu, ilgi bölgesi (ROI) olarak kullanılacaktır.
Bölge önerisi üretiminde önemli bir denge, bölge sayısı ile hesaplama karmaşıklığı arasındadır. Ne kadar çok bölge üretirseniz, nesneyi bulma olasılığınız o kadar artar. Öte yandan, tüm olası önerileri tükenene kadar üretirseniz, örneğin nesne algılayıcıyı gerçek zamanlı çalıştırmak mümkün olmaz. Bazı durumlarda, ROI sayısını azaltmak için probleme özgü bilgiler kullanılabilir. Örneğin, yayaların en-boy oranı tipik olarak yaklaşık 1.5’tir; dolayısıyla 0.25 oranında ROI’ler üretmek faydalı değildir.
Öznitelik Çıkarma
Öznitelik çıkarmanın amacı, değişken boyutlu bir görüntüyü sabit bir görsel öznitelik kümesine indirgemektir. Görüntü sınıflandırma modelleri genellikle güçlü görsel öznitelik çıkarma yöntemleriyle oluşturulur. İster geleneksel bilgisayarla görme yaklaşımlarına (örneğin filtre tabanlı yöntemler, histogram yöntemleri vb.) ister derin öğrenme yöntemlerine dayansınlar, hepsinin amacı aynıdır: giriş görüntüsünden eldeki görevi temsil eden öznitelikleri çıkarmak ve bu öznitelikleri kullanarak görüntünün sınıfını belirlemek. Nesne tespiti çerçevelerinde, genellikle önceden eğitilmiş görüntü sınıflandırma modelleri görsel öznitelik çıkarmak için kullanılır; çünkü bunlar genelleme açısından oldukça başarılıdır. Örneğin, MS CoCo veri kümesi üzerinde eğitilmiş bir model, oldukça genel öznitelikler çıkarabilir. Ancak modeli iyileştirmek için farklı yaklaşımlarla denemeler yapmak önerilir. Transfer öğrenimi üzerine blog yazım, farklı transfer öğrenimi türleri ile bunların avantaj ve dezavantajları arasında net bir ayrım sunar.
Maksimum Olmayan Bastırma
Maksimum olmayan bastırmanın genel fikri, bir karedeki tespit sayısını, gerçekte var olan nesne sayısına indirmektir. Karedeki nesne oldukça büyükse ve 2000’den fazla nesne önerisi üretilmişse, bunların bazılarının birbirleriyle ve nesnenin kendisiyle önemli ölçüde çakışması muhtemeldir. NMS hakkında daha fazla bilgi edinmek için Coursera’daki bu videoyu izleyin. NMS teknikleri, farklı tespit çerçeveleri arasında genellikle standarttır; ancak senaryoya bağlı olarak hiperparametre ayarı gerektirebilecek önemli bir adımdır.
Nesne tanıma görevlerinde en yaygın kullanılan değerlendirme ölçütü, ‘ortalama ortalama duyarlılık’ anlamına gelen ‘mAP’tir. 0 ile 100 arasında bir değerdir ve genellikle daha yüksek değerler daha iyidir; ancak sınıflandırmadaki doğruluk ölçütünden farklıdır.
Her sınırlayıcı kutunun bir skoru vardır (kutunun bir nesne içerme olasılığı). Tahminlere dayanarak, skor eşiği değiştirilerek her sınıf için bir duyarlılık-hatırlama eğrisi (PR eğrisi) hesaplanır. Ortalama duyarlılık (AP), PR eğrisinin altındaki alandır. Önce her sınıf için AP hesaplanır, ardından farklı sınıflar üzerinde ortalaması alınır. Nihai sonuç mAP’tir.
Bir tespitin, yer gerçeği kutusuyla belirli bir eşiğin (genellikle 0,5) üzerinde ‘kesişim bölü birlik’e (IoU ya da örtüşme) sahip olması durumunda doğru pozitif sayıldığını unutmayın. mAP yerine genellikle kullanılan IoU’yu belirtmek için [email protected] veya [email protected] kullanırız.
IoU tanımının bir görselleştirmesi.
Tensorflow Detection API
Tensorflow Detection API, yukarıda bahsedilen birçok fikri tek bir pakette bir araya getirerek Tensorflow arka ucunu kullanarak farklı yapılandırmalar üzerinde hızlıca yineleme yapmanızı sağlar. API ile nesne tespiti modelini yapılandırma dosyaları kullanarak tanımlarsınız ve gerekli tüm unsurları bir araya getirmek Tensorflow Detection API’nin sorumluluğundadır.
Protos
Desteklenen farklı bileşenlerin neler olduğunu daha iyi anlamak için işlev tanımlarını içeren ‘protos klasörüne’ göz atın. Özellikle, bir modeli ince ayar yaparken train, eval, ssd, faster_rcnn ve preprocessing protoları önemlidir.
SSD (Single Shot Multibox Detector)
Genel Bakış
SSD mimarisi 2016’da Google araştırmacıları tarafından yayımlandı. Bölge önerileri ile öznitelik çıkarmayı birleştiren tek bir derin sinir ağı kullanarak nesne tespiti modeli sunar.
Farklı en-boy oranları ve ölçekler üzerinde bir dizi varsayılan kutu kullanılır ve bunlar öznitelik haritalarına uygulanır. Bu öznitelik haritaları, bir görüntünün bir görüntü sınıflandırma ağından geçirilmesiyle hesaplandığından, sınırlayıcı kutular için öznitelikler tek adımda çıkarılabilir. Varsayılan sınırlayıcı kutuların her birinde her nesne kategorisi için skorlar üretilir. Yer gerçeği kutularına daha iyi uymak için her kutu için düzeltme ötelemeleri hesaplanır.
Evrimsel ağdaki farklı öznitelik haritaları farklı reseptif alanlara karşılık gelir ve farklı ölçeklerdeki nesneleri doğal olarak ele almak için kullanılır. Tüm hesaplama tek bir ağda kapsüllendiğinden oldukça yüksek hesaplama hızlarına ulaşılır (örneğin, 300 × 300 giriş için 59 FPS).
Kullanım
Kullanım için SSD’ye ilişkin farklı örnek yapılandırma dosyalarını inceleyeceğiz. SSD mimarisinden yararlanırken önemli olan birkaç parametre vardır; bunları tek tek ele alacağız.
İlk olarak, farklı sınıflandırma ağlarının farklı güçlü ve zayıf yönleri vardır (genel bir bakış için bu blog yazısına bakın). Örneğin Inceptionv3 ağı, farklı ölçeklerde nesneleri iyi tespit edecek şekilde eğitilmiştir; ResNet mimarisi ise genel olarak çok yüksek doğruluk elde eder. Öte yandan Mobilenet, gereken hesaplama kaynaklarını en aza indirmek üzere eğitilmiştir. ImageNet’teki öznitelik çıkarma ağının performansı, parametre sayısı ve eğitildiği orijinal veri kümesi; performans/hız dengesi için iyi bir göstergedir. Öznitelik çıkarıcı ‘feature_extractor’ bölümünde tanımlanır.
İkinci olarak, varsayılan kutular ve en-boy oranlarına ilişkin ayarlar belirgindir. Problem türüne bağlı olarak, etiketli verideki sınırlayıcı kutuların çeşitli en-boy oranları ve ölçeklerini analiz etmek faydalıdır. En-boy oranlarını ve ölçekleri ayarlamak, ağın gereksiz hesaplamalar yapmamasını sağlar. Bunları ‘ssd_anchor_generator’ bölümünde ince ayar yapabilirsiniz. Daha fazla ölçek ve en-boy oranı eklemenin daha iyi performansa yol açacağını, ancak genellikle azalan getirilerle birlikte geldiğini unutmayın.
Üçüncü olarak, modeli eğitirken ‘data_augmentation_options’ ve ‘image_resizer’ bölümlerinde görüntü boyutunu ve veri artırma seçeneklerini ayarlamak önemlidir. Daha büyük görüntü boyutu daha iyi performans sağlar; çünkü küçük nesneler genellikle tespit edilmesi zor olur; ancak önemli bir hesaplama maliyeti doğurur. Veri artırma, özellikle eğitim verisinde bulunmayabilecek ölçeklerde bile nesneleri tespit edebilmek için SSD bağlamında önemlidir.
Son olarak, ‘train_config’i ayarlamak, öğrenme oranlarını ve yığın boyutlarını belirlemek aşırı uyumu azaltmak için önemlidir ve elinizdeki veri kümesinin boyutuna büyük ölçüde bağlıdır.
Faster R-CNN
Genel Bakış
Faster R-CNN, Microsoft’taki araştırmacılar tarafından geliştirildi. Çok aşamalı bir yaklaşıma dayanan R-CNN’in üzerine inşa edilmiştir. R-CNN, bölge önerilerini belirlemek için Seçmeli Arama kullanır, bunları bir sınıflandırma ağından geçirir ve ardından farklı bölgeleri sınıflandırmak için bir SVM kullanırdı.
R-CNN mimarisine genel bakış. NMS aşaması gösterilmemiştir.
SSD’ye benzer şekilde Faster R-CNN de uçtan uca bir yaklaşımdır. Varsayılan sınırlayıcı kutular kullanmak yerine, Faster R-CNN sabit bir bölge kümesi üretmek için bir Bölge Öneri Ağı’na (RPN) sahiptir. RPN, görüntü sınıflandırma ağının evrişimsel özniteliklerini kullanarak neredeyse maliyetsiz bölge önerileri sağlar. RPN, her konumda nesne sınırlarını ve nesne olasılık skorlarını tahmin eden tamamen evrişimsel bir ağ olarak uygulanır.
Faster-RCNN’e genel bakış
RPN’in SSD ağıyla benzer bir kurulumda olduğunu unutmayın (yani sınırlayıcı kutuları yoktan var etmez). RPN, öznitelik haritaları üzerinde kayan pencerelerle çalışır. Her kayan pencere konumunda veya ankorda, çeşitli ölçek ve en-boy oranlarında bir dizi öneri hesaplanır. SSD’ye benzer şekilde, RPN’in çıktısı, ankarlara dayalı ‘ayarlanmış’ sınırlayıcı kutulardır.
Farklı bileşenler tek bir düzende birleştirilir ve uçtan uca ya da çoklu aşamalarda (kararlılığı artırmak için) eğitilir. RPN’in bir başka yorumu da ağın ‘dikkatini’ ilginç bölgelere yönlendirmesidir.
Kullanım
Faster R-CNN’in kullanım ayrıntılarının çoğu SSD ile benzerdir. Ham mAP açısından, Faster R-CNN genellikle SSD’yi geride bırakır; ancak önemli ölçüde daha fazla hesaplama gücü gerektirir.
Fast-RCNN algılayıcı için önemli bir bölüm, RPN tarafından oluşturulan ankırların tanımlandığı ‘first_stage_anchor_generator’dır. Bu bölümdeki adımlar, kayan pencerenin adımlarını tanımlar. Özellikle küçük nesneleri tespit etmeye çalışırken (adım çok büyükse onları kaçırabilirsiniz) buna dikkat edin.
Faster-RCNN makalesinin yazarları kapsamlı veri artırma kullanmamış olsa da, daha küçük veri kümeleriyle çalışırken yine de kullanılması tavsiye edilir.
Sonuç
Burada değinmediğim başka nesne tespiti mimarileri de var. Özellikle gerçek zamanlı uygulamalara bakıldığında, Yolov2 sıklıkla önemli bir mimari olarak anılır (SSD’ye epey benzer). Tensorflow Detection API’ye eklendiğinde bu blog yazısını güncelleyeceğim.
Herhangi bir sorunuz varsa yorumlarda memnuniyetle okurum. Blog yazılarımdan haberdar olmak isterseniz beni Medium’da veya Twitter’da takip edin!
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Derin öğrenme tabanlı bilgisayarla görme modellerindeki son gelişmelerle, nesne tespiti uygulamaları hiç olmadığı kadar kolay geliştiriliyor. Önemli performans artışlarının yanı sıra, bu teknikler büyük ölçekli görsel veri kümelerinden yararlanarak büyük veri kümelerine duyulan ihtiyacı da azaltıyor. Ayrıca, uçtan uca tüm hatlara odaklanan güncel yaklaşımlarla performans ciddi şekilde iyileşti ve gerçek zamanlı kullanım senaryoları mümkün hale geldi.
Farklı görüntü sınıflandırma mimarilerine ilişkin yazdığım blog yazısına benzer şekilde, iki nesne tespiti mimarisini ele alacağım. Tensorflow Detection API’de hâlihazırda bulunan SSD ve Faster RCNN’i tartışacağım.
Önce nesne tespitindeki bazı temel kavramları gözden geçirecek, ardından bunların SSD ve Faster RCNN’de nasıl uygulandığını göstereceğim.
Görüntü Sınıflandırma ve Nesne Tespiti
İnsanlar sık sık görüntü sınıflandırma ile nesne tespitini karıştırır. Genel olarak, bir görüntüyü belli bir kategoriye sınıflandırmak istiyorsanız görüntü sınıflandırma kullanırsınız. Öte yandan, amacınız bir görüntüdeki nesnelerin konumunu belirlemek ve örneğin bir nesnenin kaç örneğinin bulunduğunu saymak ise nesne tespiti kullanabilirsiniz.
Yine de bu iki senaryo arasında bir miktar örtüşme vardır. Bir görüntüyü belirli bir kategoriye sınıflandırmak istediğinizde, sınıflandırma için gereken nesne ya da ayırt edici özellikler, tüm görüntüye oranla fazla küçük kalabilir. Böyle bir durumda, nesnenin tam konumu veya sayılarıyla ilgilenmeseniz bile nesne tespiti, görüntü sınıflandırmaya kıyasla daha iyi performans sağlayabilir.
Diyelim ki devre kartlarını kontrol edip kusurlu veya düzgün olarak etiketlemeniz gerekiyor. Esasen bir sınıflandırma problemi olsa da kusurlar, bir görüntü sınıflandırma modeliyle fark edilmeyecek kadar küçük olabilir. Bir nesne tespiti veri kümesi oluşturmak daha fazla zaman alır; ancak büyük olasılıkla daha iyi bir modelle sonuçlanır.
Bir görüntü sınıflandırma modelinde, tam görüntünün özniteliklerini (geleneksel ya da derin öğrenme yöntemleriyle) çıkarırsınız. Bu öznitelikler, görüntünün bir tür özetidir. Nesne tespitinde ise bunu görüntünün daha ince taneli, bölgesel düzeyinde yaparsınız. İlkinde sınıflandırma sinyalini kaybedebilirsiniz; ikincisinde ise sinyal, kullanım amacına daha uygun biçimde korunabilir.
Veri gereksinimleri
Özel bir model eğitmek için etiketli veriye ihtiyaç vardır. Nesne tespiti bağlamında etiketli veri; karşılık gelen sınırlayıcı kutu koordinatları ve etiketleri olan görüntülerdir. Yani sol alt ve sağ üst (x,y) koordinatları + sınıf.
Sık sorulan bir soru şudur: X probleminde nesne tespiti yapmak için kaç fotoğrafa ihtiyacım var? Bunun yerine, modelin hangi senaryolarda devreye alınacağını doğru anlamak daha önemlidir. Her sınıf için çok sayıda (örneğin, > 100 ve potansiyel olarak >1000) temsil edici görüntünün olması kritik önemdedir. Burada temsil edici demek, modelin kullanılacağı senaryo aralığıyla uyumlu olmaları demektir. Bir otomobilde çalışacak trafik işareti tespit modeli geliştiriyorsanız, uygun bağlamlarda farklı hava, ışık ve kamera koşullarında çekilmiş görüntüler kullanmanız gerekir. Nesne tespiti modelleri sihirli değildir, hatta epeyce yalındır. Modelin genel kalıpları öğrenmesi için yeterli veri yoksa üretimde iyi performans göstermez.
Genel Nesne Tespiti Çerçevesi
Tipik olarak, bir nesne tespiti çerçevesinde üç adım bulunur.
Bölge Önerileri
Bölge önerileri üretmek için birkaç farklı yaklaşım vardır. Başlangıçta, nesne önerileri üretmek için ‘seçmeli arama’ algoritması kullanılıyordu. Lillie Weng bu algoritmayı blog yazısında ayrıntılı biçimde açıklar. Kısaca, seçmeli arama; pikselleri gruplayıp, oluşturulan kümelere dayanarak öneriler üretmeye çalışan kümeleme tabanlı bir yaklaşımdır.
Diğer yaklaşımlar, bölgeleri üretmek için görüntüden çıkarılan daha karmaşık görsel öznitelikleri kullanır (örneğin, bir derin öğrenme modelinden elde edilen özniteliklere dayalı olarak) ya da bölge üretimine kaba kuvvet yaklaşımı benimser. Bu kaba kuvvet yaklaşımları, çeşitli oran ve ölçeklerde görüntüye uygulanan bir kayan pencereye benzer. Bu bölgeler, görüntü öznitelikleri dikkate alınmadan otomatik olarak üretilir.
Bölge önerisi üretiminde önemli bir denge, bölge sayısı ile hesaplama karmaşıklığı arasındadır. Ne kadar çok bölge üretirseniz, nesneyi bulma olasılığınız o kadar artar. Öte yandan, tüm olası önerileri tükenene kadar üretirseniz, örneğin nesne algılayıcıyı gerçek zamanlı çalıştırmak mümkün olmaz. Bazı durumlarda, ROI sayısını azaltmak için probleme özgü bilgiler kullanılabilir. Örneğin, yayaların en-boy oranı tipik olarak yaklaşık 1.5’tir; dolayısıyla 0.25 oranında ROI’ler üretmek faydalı değildir.
Öznitelik Çıkarma
Öznitelik çıkarmanın amacı, değişken boyutlu bir görüntüyü sabit bir görsel öznitelik kümesine indirgemektir. Görüntü sınıflandırma modelleri genellikle güçlü görsel öznitelik çıkarma yöntemleriyle oluşturulur. İster geleneksel bilgisayarla görme yaklaşımlarına (örneğin filtre tabanlı yöntemler, histogram yöntemleri vb.) ister derin öğrenme yöntemlerine dayansınlar, hepsinin amacı aynıdır: giriş görüntüsünden eldeki görevi temsil eden öznitelikleri çıkarmak ve bu öznitelikleri kullanarak görüntünün sınıfını belirlemek. Nesne tespiti çerçevelerinde, genellikle önceden eğitilmiş görüntü sınıflandırma modelleri görsel öznitelik çıkarmak için kullanılır; çünkü bunlar genelleme açısından oldukça başarılıdır. Örneğin, MS CoCo veri kümesi üzerinde eğitilmiş bir model, oldukça genel öznitelikler çıkarabilir. Ancak modeli iyileştirmek için farklı yaklaşımlarla denemeler yapmak önerilir. Transfer öğrenimi üzerine blog yazım, farklı transfer öğrenimi türleri ile bunların avantaj ve dezavantajları arasında net bir ayrım sunar.
Maksimum Olmayan Bastırma
Maksimum olmayan bastırmanın genel fikri, bir karedeki tespit sayısını, gerçekte var olan nesne sayısına indirmektir. Karedeki nesne oldukça büyükse ve 2000’den fazla nesne önerisi üretilmişse, bunların bazılarının birbirleriyle ve nesnenin kendisiyle önemli ölçüde çakışması muhtemeldir. NMS hakkında daha fazla bilgi edinmek için Coursera’daki bu videoyu izleyin. NMS teknikleri, farklı tespit çerçeveleri arasında genellikle standarttır; ancak senaryoya bağlı olarak hiperparametre ayarı gerektirebilecek önemli bir adımdır.
Değerlendirme ölçütü
Nesne tanıma görevlerinde en yaygın kullanılan değerlendirme ölçütü, ‘ortalama ortalama duyarlılık’ anlamına gelen ‘mAP’tir. 0 ile 100 arasında bir değerdir ve genellikle daha yüksek değerler daha iyidir; ancak sınıflandırmadaki doğruluk ölçütünden farklıdır.
Her sınırlayıcı kutunun bir skoru vardır (kutunun bir nesne içerme olasılığı). Tahminlere dayanarak, skor eşiği değiştirilerek her sınıf için bir duyarlılık-hatırlama eğrisi (PR eğrisi) hesaplanır. Ortalama duyarlılık (AP), PR eğrisinin altındaki alandır. Önce her sınıf için AP hesaplanır, ardından farklı sınıflar üzerinde ortalaması alınır. Nihai sonuç mAP’tir.
Bir tespitin, yer gerçeği kutusuyla belirli bir eşiğin (genellikle 0,5) üzerinde ‘kesişim bölü birlik’e (IoU ya da örtüşme) sahip olması durumunda doğru pozitif sayıldığını unutmayın. mAP yerine genellikle kullanılan IoU’yu belirtmek için [email protected] veya [email protected] kullanırız.
Tensorflow Detection API
Tensorflow Detection API, yukarıda bahsedilen birçok fikri tek bir pakette bir araya getirerek Tensorflow arka ucunu kullanarak farklı yapılandırmalar üzerinde hızlıca yineleme yapmanızı sağlar. API ile nesne tespiti modelini yapılandırma dosyaları kullanarak tanımlarsınız ve gerekli tüm unsurları bir araya getirmek Tensorflow Detection API’nin sorumluluğundadır.
Protos
Desteklenen farklı bileşenlerin neler olduğunu daha iyi anlamak için işlev tanımlarını içeren ‘protos klasörüne’ göz atın. Özellikle, bir modeli ince ayar yaparken train, eval, ssd, faster_rcnn ve preprocessing protoları önemlidir.
SSD (Single Shot Multibox Detector)
Genel Bakış
SSD mimarisi 2016’da Google araştırmacıları tarafından yayımlandı. Bölge önerileri ile öznitelik çıkarmayı birleştiren tek bir derin sinir ağı kullanarak nesne tespiti modeli sunar.
Farklı en-boy oranları ve ölçekler üzerinde bir dizi varsayılan kutu kullanılır ve bunlar öznitelik haritalarına uygulanır. Bu öznitelik haritaları, bir görüntünün bir görüntü sınıflandırma ağından geçirilmesiyle hesaplandığından, sınırlayıcı kutular için öznitelikler tek adımda çıkarılabilir. Varsayılan sınırlayıcı kutuların her birinde her nesne kategorisi için skorlar üretilir. Yer gerçeği kutularına daha iyi uymak için her kutu için düzeltme ötelemeleri hesaplanır.
Evrimsel ağdaki farklı öznitelik haritaları farklı reseptif alanlara karşılık gelir ve farklı ölçeklerdeki nesneleri doğal olarak ele almak için kullanılır. Tüm hesaplama tek bir ağda kapsüllendiğinden oldukça yüksek hesaplama hızlarına ulaşılır (örneğin, 300 × 300 giriş için 59 FPS).
Kullanım
Kullanım için SSD’ye ilişkin farklı örnek yapılandırma dosyalarını inceleyeceğiz. SSD mimarisinden yararlanırken önemli olan birkaç parametre vardır; bunları tek tek ele alacağız.
İlk olarak, farklı sınıflandırma ağlarının farklı güçlü ve zayıf yönleri vardır (genel bir bakış için bu blog yazısına bakın). Örneğin Inceptionv3 ağı, farklı ölçeklerde nesneleri iyi tespit edecek şekilde eğitilmiştir; ResNet mimarisi ise genel olarak çok yüksek doğruluk elde eder. Öte yandan Mobilenet, gereken hesaplama kaynaklarını en aza indirmek üzere eğitilmiştir. ImageNet’teki öznitelik çıkarma ağının performansı, parametre sayısı ve eğitildiği orijinal veri kümesi; performans/hız dengesi için iyi bir göstergedir. Öznitelik çıkarıcı ‘feature_extractor’ bölümünde tanımlanır.
İkinci olarak, varsayılan kutular ve en-boy oranlarına ilişkin ayarlar belirgindir. Problem türüne bağlı olarak, etiketli verideki sınırlayıcı kutuların çeşitli en-boy oranları ve ölçeklerini analiz etmek faydalıdır. En-boy oranlarını ve ölçekleri ayarlamak, ağın gereksiz hesaplamalar yapmamasını sağlar. Bunları ‘ssd_anchor_generator’ bölümünde ince ayar yapabilirsiniz. Daha fazla ölçek ve en-boy oranı eklemenin daha iyi performansa yol açacağını, ancak genellikle azalan getirilerle birlikte geldiğini unutmayın.
Üçüncü olarak, modeli eğitirken ‘data_augmentation_options’ ve ‘image_resizer’ bölümlerinde görüntü boyutunu ve veri artırma seçeneklerini ayarlamak önemlidir. Daha büyük görüntü boyutu daha iyi performans sağlar; çünkü küçük nesneler genellikle tespit edilmesi zor olur; ancak önemli bir hesaplama maliyeti doğurur. Veri artırma, özellikle eğitim verisinde bulunmayabilecek ölçeklerde bile nesneleri tespit edebilmek için SSD bağlamında önemlidir.
Son olarak, ‘train_config’i ayarlamak, öğrenme oranlarını ve yığın boyutlarını belirlemek aşırı uyumu azaltmak için önemlidir ve elinizdeki veri kümesinin boyutuna büyük ölçüde bağlıdır.
Faster R-CNN
Genel Bakış
Faster R-CNN, Microsoft’taki araştırmacılar tarafından geliştirildi. Çok aşamalı bir yaklaşıma dayanan R-CNN’in üzerine inşa edilmiştir. R-CNN, bölge önerilerini belirlemek için Seçmeli Arama kullanır, bunları bir sınıflandırma ağından geçirir ve ardından farklı bölgeleri sınıflandırmak için bir SVM kullanırdı.
SSD’ye benzer şekilde Faster R-CNN de uçtan uca bir yaklaşımdır. Varsayılan sınırlayıcı kutular kullanmak yerine, Faster R-CNN sabit bir bölge kümesi üretmek için bir Bölge Öneri Ağı’na (RPN) sahiptir. RPN, görüntü sınıflandırma ağının evrişimsel özniteliklerini kullanarak neredeyse maliyetsiz bölge önerileri sağlar. RPN, her konumda nesne sınırlarını ve nesne olasılık skorlarını tahmin eden tamamen evrişimsel bir ağ olarak uygulanır.
RPN’in SSD ağıyla benzer bir kurulumda olduğunu unutmayın (yani sınırlayıcı kutuları yoktan var etmez). RPN, öznitelik haritaları üzerinde kayan pencerelerle çalışır. Her kayan pencere konumunda veya ankorda, çeşitli ölçek ve en-boy oranlarında bir dizi öneri hesaplanır. SSD’ye benzer şekilde, RPN’in çıktısı, ankarlara dayalı ‘ayarlanmış’ sınırlayıcı kutulardır.
Farklı bileşenler tek bir düzende birleştirilir ve uçtan uca ya da çoklu aşamalarda (kararlılığı artırmak için) eğitilir. RPN’in bir başka yorumu da ağın ‘dikkatini’ ilginç bölgelere yönlendirmesidir.
Kullanım
Faster R-CNN’in kullanım ayrıntılarının çoğu SSD ile benzerdir. Ham mAP açısından, Faster R-CNN genellikle SSD’yi geride bırakır; ancak önemli ölçüde daha fazla hesaplama gücü gerektirir.
Fast-RCNN algılayıcı için önemli bir bölüm, RPN tarafından oluşturulan ankırların tanımlandığı ‘first_stage_anchor_generator’dır. Bu bölümdeki adımlar, kayan pencerenin adımlarını tanımlar. Özellikle küçük nesneleri tespit etmeye çalışırken (adım çok büyükse onları kaçırabilirsiniz) buna dikkat edin.
Faster-RCNN makalesinin yazarları kapsamlı veri artırma kullanmamış olsa da, daha küçük veri kümeleriyle çalışırken yine de kullanılması tavsiye edilir.
Sonuç
Burada değinmediğim başka nesne tespiti mimarileri de var. Özellikle gerçek zamanlı uygulamalara bakıldığında, Yolov2 sıklıkla önemli bir mimari olarak anılır (SSD’ye epey benzer). Tensorflow Detection API’ye eklendiğinde bu blog yazısını güncelleyeceğim.
Herhangi bir sorunuz varsa yorumlarda memnuniyetle okurum. Blog yazılarımdan haberdar olmak isterseniz beni Medium’da veya Twitter’da takip edin!