DEEP LEARNING

Object Detection ve YOLO

YOLO Versions

Naciye Kuru
Academy Team
Published in
10 min readMay 20, 2023

--

Ne büyük bir şans, insanın kendi gibi olanı bulması ! Ademoğlunun evrensel arayışı bu. Varlığı boyunca yerküre üzerinde hiç durmaksızın süren bu arayışına uzayın derinliklerinde de devam etti ve kendisine benzeyen başka varlıkların olup olmadığını araştırmaya başladı. Hatta aramak yetmedi, uzun yıllardır gelip geçenleri gözlemleyip durdu : “Acaba kendisini de onun aradığı gibi arayan, ona benzeyen başka bir varlık daha var mı?” diye… Gözden uzak olanla uğraşmak ve beklemek yüreğe ve akla ağır gelmiş olmalı ki, yeni dönem bilim insanları bu konuda aktif girişimlerde bulunarak işi şansa bırakmayı istemediler.. Kendi gibi olanı bulmanın uzak olasılığına ve düşük ihtimaline bakınca, onu “ yapmaya” karar verdiler… 🙂

İnsanın psikolojik tabanlı en temel dertlerinden biri “ anlaşılmak”. Bu problemi çözmek için öncelikle bilim insanları, ”İnsan nasıl anlar?” sorusunu sormuş ve bunun akabinde “anlaşılmak” için ise insan gibi anlayan ve anlamdıran sistemler yapmaya karar vermişlerdir. Bu amaca ulaşmak ve hedefi gerçekleştirmek adına “anlama ve anlamlandırma sürecine “ odaklanılmıştır. Yani “insanın algılama sürecinin anlaşılması” nihai hedef olmuştur.

İnsan beyninin karmaşık görsel bilgileri işleme yeteneği, yapay sistemlerin de benzer yeteneklere sahip olabileceğinin hayalini kurdurmuştur insanoğluna ve bu istidat bu yolda bir esin kaynağına dönüşmüştür. İnsan beyninin yaptığı gibi görsel bilgileri anlamlandırmak, nesne algılama programlarının geliştirilmesindeki temel motivasyonlardan biri haline gelmiştir.

Tüm bu hedeflerin en büyük yardımcısı matematik olmuş ve kurulan algoritmalar sayesinde bir nesneyi insanın tanıdığı gibi tanımaya başlayan nesne algılayan programlar yazmaya başlamışlardır. En büyük adım ise “You Only Look Once: Unified, Real-Time Object Detection” başlıklı 8 Haziran 2015 de Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi nin yayınladığı makale ile atılmış oldu.

Adına Kısaca YOLO (You Only Look Once) dedikleri “Sadece bir Kere Bak” diyen iddialı bir sloganın kısaltması ile ortaya çıkan bu yaklaşım, daha önceki nesne tespiti yapan sistemlerden farklı olarak, nesneleri uzamsal olarak ayrılmış sınırlayıcı kutularla (bounding boxes) tespit edebiliyor ve durumu bir regresyon problemi etrafında değerlendirerek nesneleri sınıflandırıyor.

Object Detection Nedir

Gelelim burada yapılan nesne algılama yani object detection işlemini ne olduğunu ve nasıl çalıştığını biraz daha anlamaya:

Bu adımda karıştırılmaması gereken 3 ifade var:

Object classification (nesne sınıflama),

Object detection(nesne algılama) ,

Object Identification(nesne tanımlama)

kavramlarına ve aralarındaki farklılıklara.

Bunlar kendi aralarında ikişerli olarak değerlendirmeye alındığında aşağıdaki sonuçlar ortaya çıkıyor.

Object classification ve object detection benzer görünse de aralarında önemli farklılıklar vardır:

Object classification, görüntüdeki nesneleri sınıflandırma işlemidir. Görüntüde hangi nesne sınıfının bulunduğunu belirlemeyi hedefler. Genellikle her görüntüde tek bir nesne bulunur ve sınıflandırılır. Yukarıdaki örnekte olduğu gibi sadece resimde kedi olduğunu belirtmiş durumdadır.

Object detection ise görüntü içerisinde birden fazla nesnenin varlığını ve konumunu tespit etme işlemidir. Nesneleri bounding boxlar ile lokalize eder ve opsiyonel olarak sınıflandırabilir.

Bu kavramlar arasındaki temel farklar şunlardır:

  1. Object classification tek bir nesneye odaklanır, object detection çok sayıda nesneyi bulmayı hedefler.
  2. Object classification sadece sınıf bilgisini döndürür, object detection nesnenin konumunu da döndürür.
  3. Object classification nesnenin tam olarak nerede olduğunu bulmayı gerektirmez, object detection nesnelerin kesin konumunu bulmaya çalışır.
  4. Object classification görüntünün sadece bir kısmına ihtiyaç duyar, object detection görüntünün bütününe ihtiyaç duyar.
  5. Object classification daha kolay bir problemdir, object detection daha zordur.

Kısacası, object classification sınıflandırma odaklıdır ve tek bir nesneyi tanımlamaya çalışırken object detection ise nesne lokalizasyonu ve opsiyonel olarak sınıflandırmaya dayanır ve çok sayıda nesneyi algılamayı hedefler.

YOLO hem object classification hem de object detection yapabilen çok başarılı bir yöntemdir. Tek geçidi ile hem nesneleri tespit edebilmekte hem de sınıflandırabilmektedir. Bu sayede çok hızlı ve hassas sonuçlar üretebilmektedir. YOLO’nun bu özelliği, onu nesne algılama alanında devrim niteliğinde bir yöntem haline getirmiştir.

Şimdi ise object detection ve ve object identification arasındaki ilişkiye bakalım:

Object detection yukarıda da belirtildiği gibi görüntü içerisinde nesnelerin varlığını ve konumunu tespit ederken bounding boxlar kullanarak nesneleri lokalize eder. Ancak nesnenin kimliğini belirlemez.

Object identification ise algılanan nesnelerin kimliklerini belirleme işleminin ta kendisidir. Object detection ile tespit edilen nesnelere sınıf etiketleri atanması işlemidir. Örneğin kişi, araba, kedi gibi.

Bu iki kavram arasındaki farklılıklar ise kısaca şu şekilde ifade edilebilir:

  1. Object detection sınıflandırma gerektirmez, object identification sınıflandırmaya dayanır.
  2. Object detection nesnenin konumunu döndürür, object identification hem konumu hem de kimliğini döndürür.
  3. Object detection gerçek dünyadaki tüm nesneleri algılamayı hedefler, object identification belirli nesne kategorilerini tanımayı hedefler.
  4. Object detection doğal görüntülerde nesneleri lokalize etmeye odaklanır, object identification hem doğal hem de sınıflandırılmış verilerde çalışabilir.
  5. Object detection nesnenin tam konumunu bulmaya çalışır, object identification nesnenin kaba konumunu bulmaya odaklanır ve daha sonra kimliğini belirler.

Bu nedenle, bir nesne algılama sistemi genellikle önce object detection ile nesneleri tespit eder ve daha sonra bu nesnelere object identification yöntemleri ile kimlik atar. Her iki işlem de nesne algılamanın önemli birer parçasıdır ve birbirlerini tamamlarlar.

YOLO, hem object detection hem de object identification işlemlerini tek bir model ile gerçekleştirebilen çok başarılı bir yöntemdir. Tespit ettiği nesnelere doğrudan sınıf etiketleri atayabilmektedir. Bu özelliği ile süreci çok hızlı ve verimli bir şekilde yapabilmektedir.

Object detection algoritmaları, bir görüntü veya videodaki nesneleri tespit etmek için çeşitli teknikler kullanır. Bu teknikler arasında,

Feature extraction(öznitelik çıkarımı- dimension reduction)

Region proposal networks (RPN-Bölgesel Öneri Ağları),

One-shot learning ( Tek seferli-vuruşlu öğrenme)

Deep Learning (DL-Derin Öğrenme)

yöntemleri yer alır. Bu yöntemleri daha sonra başka bir yazıda kapsamlı olarak ele alalım.

Ayrıca burada da belirtelim ki object detection algoritmaları, sınıflandırma (classification) ve lokalizasyon (localization) işlemlerini bir arada gerçekleştirir. Sınıflandırma işlemi, bir nesnenin hangi sınıfa (örneğin, araba, insan, köpek) ait olduğunu belirlerken, lokalizasyon işlemi, nesnenin tam olarak nerede olduğunu belirler.Bu işlem, bilgisayar görüşü (computer vision) ve makine öğrenimi (machine learning) tekniklerinin birleşiminden oluşur.

Object detection alanındaki gelişim tarihsel olarak şu şekilde özetlenebilir:

  • 1950'ler: İlk nesne algılama çalışmaları başlar. Teknoloji yetersiz olduğu için sınırlı başarı sağlanır.
  • 1960'lar: Bilgisayarların gelişmesiyle algısal bilgi işlem alanında çalışmalar artar. Nesne algılamada şekil temelli yaklaşımlar ortaya çıkar.
  • 1970'ler: Görüntü işleme tekniklerinin gelişmesi ile nesne tespiti için ilk otomatik yöntemler önerilir. Kenar algılama ve eşleştirmeye dayanır.
  • 1980'ler: Gelişmiş görüntü işleme, şekil analizi ve makine öğrenmesi teknikleri nesne algılamayı geliştirir. İlk nesne tanıma sistemleri ortaya çıkar.
  • 1990'lar: Derin öğrenme yöntemlerinin keşfiyle büyük verilerden nesne algılamada önemli başarılar elde edilir. Destek vektör makineleri, sinir ağları kullanılmaya başlanır.

2000'ler: Konvolüsyonel sinir ağlarının nesne algılamada kullanımı devrim niteliğindedir. 2012'de AlexNet ile büyük veriler ve GPU kullanımı yaygınlaşır.

2012 — : Faster RCNN, SSD gibi konvolüsyonel sinir ağı tabanlı objekt algılama modelleri nesne algılamada çığır açar. Yüksek doğruluk ve hız elde edilir.

2015 — : Derin öğrenmede mimari gelişmeleri, büyük veri kümeleri ve hesaplama gücü artışı sayesinde nesne algılama doğruluğu insan seviyesine ulaşır. Yeni uygulamalar geliştirilir.

Nesne algılama, bilgisayarla görme alanında en zor problemlerden biri olarak uzun yıllar boyunca araştırmacıların ilgisini çekmiştir. 2000'li yıllarda derin öğrenme ve konvolüsyonel sinir ağlarının kullanımıyla da büyük gelişmeler kaydedilmiştir.

YOLO öncesinde yaygın olarak kullanılan geleneksel nesne algılama yöntemlerinin başlıcaları şunlardır:

  • R-CNN (Regions with CNN features): Bölgeleri CNN özellikleriyle temsil eden bir yöntem. Nesne algılamada ilk defa derin öğrenme kullanan yöntemlerden biriydi. Yavaş eğitim ve test sürelerine sahipti.
  • Fast R-CNN: R-CNN’i geliştiren ve hızlandıran bir yöntem. RoI havuzlama katmanı ekleyerek daha hızlı çalışmasını sağladı.
  • Faster R-CNN: Fast R-CNN üzerine RoI tespiti için bölge önerme ağlarını ekleyerek daha da hızlandıran bir yöntem. YOLO öncesinde en popüler yöntemdi.
  • SSD (Single Shot MultiBox Detector): Tek seferde birçok kutucuk üreterek nesne algılamayı gerçekleştiren hızlı bir yöntem. Ancak doğruluğu YOLO kadar yüksek değildi.
  • OverFeat: Özellik haritalama tekniğini kullanan bir nesne algılama yöntemi. Oldukça başarılı sonuçlar elde etmişti ancak çok fazla hesaplama gücü gerektiriyordu.

Bu yöntemler, nesne algılamada büyük gelişmeler sağlamış olsa da, çoğunlukla yavaş, karmaşık ve doğrulukları sınırlıydı.

Tüm bu çalışmalar sonrasında 2016 yılında,YOLO bir araştırma projesi olarak iki bilgisayar mühendisi olan Joseph Redmon ve Ali Farhadi tarafından geliştirilmiştir. Joseph Redmon, Washington Üniversitesi Bilgisayar Bilimi bölümünde doktora öğrencisiyken, Ali Farhadi ise Redmon’un doktora danışmanıydı. İkili, “You Only Look Once: Unified, Real-Time Object Detection” adlı bir makale yayınladı ve bu makalede tanıttıkları YOLO algoritması, gerçek zamanlı nesne tespiti konusunda büyük bir çığır açtı. Daha sonra, YOLO algoritması birçok araştırmacı tarafından kullanılmaya başlandı ve popüler hale geldi.

YOLO yukarıda bahsedilen yöntemlere göre çok daha hızlı, daha doğru ve daha basit bir mimariye sahiptir.

YOLO geleneksel yöntemleri geride bırakarak, nesne algılamayı gerçek zamanlı uygulamalara taşımış ve sadece akademik değil ticari alanda da başarılı olmuştur. Geleneksel yöntemlerin açtığı yolu izleyerek derin öğrenme tekniklerini kullanmış ve performansı bir adım öteye taşımıştır.

YOLO’nun en büyük avantajı, sadece tek bir ağ geçidi kullanarak nesne tespiti yapmasıdır. Bu sayede gerçek zamanlı nesne algılama uygulamalarında kullanılabilmektedir. Bu kadar hızlı çalışmasındaki ana etken de budur.

YOLO’nun ana fikri, görüntüyü SxS grid’e bölerek, her grid hücresinde birden fazla nesne olabileceğini varsaymaktır. Her grid hücresinde, o hücre içindeki nesnelerin sınıfı (kişi, araba, köpek vb.) ve konum bilgileri (merkez noktası ve genişlik-yükseklik) tahmin edilir.

YOLO’nun bazı versiyonları:

  • YOLO (You Only Look Once), popüler bir nesne tespiti ve görüntü segmentasyonu modelidir ve Joseph Redmon ile Ali Farhadi tarafından Washington Üniversitesi’nde geliştirilmiştir. 2015 yılında piyasaya sürülen YOLO, yüksek hızı ve doğruluğuyla hızla popülerlik kazanmıştır.İlk versiyon olarak COCO(Common Objects in Context) veri setinde 63.4% doğruluk elde etmiştir.

NOT: COCO (Common Objects in Context), bilgisayarla görme ve nesne algılama alanında yaygın olarak kullanılan bir veri setidir. COCO veri seti, çeşitli nesne kategorilerinde 200,000'den fazla etiketli, yüksek çözünürlüklü görüntüler içermektedir. Bu görüntülerdeki nesneler, geniş bir nesne çeşitliliği ve farklı bağlamlarda yer almaktadır.COCO veri seti, nesne algılama, nesne tanıma, konumlandırma ve segmentasyon gibi görevlerde model eğitimi ve değerlendirmesi için kullanılır. Her görüntüde birden fazla nesne bulunabilir ve her nesnenin sınıf etiketi, konum bilgisi ve diğer öznitelikler COCO veri setinde mevcuttur.

COCO veri seti, yüksek kalitede etiketlenmiş görüntüler içerdiği için nesne algılamadaki algoritmaların performansını değerlendirmek için yaygın olarak tercih edilen bir veri kaynağıdır. Aynı zamanda, çeşitli nesne türleri ve karmaşık sahneler içeren zorlu bir veri seti olduğu için yeni nesne algılama yöntemlerinin geliştirilmesinde de kullanılmaktadır. COCO veri seti, açık kaynaklı bir inisiyatif olarak oluşturulmuş ve sürekli olarak güncellenmekte ve genişletilmektedir.

  • YOLOv2, 2016 yılında piyasaya sürülmüş ve orijinal modeli, toplu normalizasyon, çapa kutuları ve boyut kümelendirmesi gibi özelliklerle geliştirmiştir. Batch Normalization ve yeni ağ mimarisi ile doğruluğu 67.5%’e çıkarmıştır.
  • YOLOv3, 2018 yılında piyasaya sürülen ve daha verimli bir temel ağ, çoklu çapa ve uzaysal piramit havuzu gibi özelliklerle modelin performansını daha da artırarak doğruluğu 66.9%’a kadar çıkarmıştır.
  • YOLOv4, 2020 yılında piyasaya sürülmüş ve Mozaik veri artırma, yeni bir çapa-özgür tespit başı ve yeni bir kayıp fonksiyonu gibi yenilikleri tanıtmıştır.YOLOv3'e göre %10 daha hızlı ve %3 daha doğru sonuç vermektedir.
  • YOLOv5, modelin performansını daha da geliştirmiş ve hiperparametre optimizasyonu, entegre deney takibi ve popüler dışa aktarma formatlarına otomatik dışa aktarma gibi yeni özellikler eklemiştir.
  • YOLOv6, Meituan tarafından 2022 yılında açık kaynak olarak yayınlanmış olup birçok otomatik teslimat robotunda kullanılmaktadır.
  • YOLOv7, COCO keypoints veri kümesinde poz tahmini gibi ek görevleri eklemiştir.
  • YOLOv8, Ultralytics tarafından geliştirilen en son YOLO versiyonudur. Son teknolojiye uygun bir model olarak YOLOv8, önceki versiyonların başarısını temel alarak geliştirilmiş, gelişmiş performans, esneklik ve verimlilik için yeni özellikler ve iyileştirmeler sunmaktadır. YOLOv8, tespit, segmentasyon, poz tahmini, takip ve sınıflandırma gibi geniş bir görüntü yapay zeka görevlerini destekler. Bu çok yönlülük, kullanıcıların YOLOv8'in yeteneklerini çeşitli uygulama ve alanlarda kullanmasını sağlar.
  • YOLO-NAS (2023), ortalama hassasiyet ve çıkarım gecikmesi açısından hem YOLOv6 hem de YOLOv8 modellerini geride bırakan yeni bir gerçek zamanlı en gelişmiş nesne tespit modelidir.

https://learnopencv.com/wp-content/uploads/2023/05/yolo-nas_detections_cat.mp4

Evet, YOLO algoritması ilk olarak akademik bir çalışma olarak ortaya çıktı, ancak daha sonra ticari olarak da ilgi gördü. Özellikle YOLOv3 ve sonrası sürümleri, birçok şirket tarafından benimsendi ve uygulamalarda kullanıldı.

Örneğin:

  • Nvidia, daha hızlı çalışması için YOLO modellerini GPU’larda uyguladı ve optimize etti. Kendi araç setlerinde YOLO kullanımını destekliyorlar.
  • Microsoft, Azure ürünlerinde gerçek zamanlı nesne algılama ve takip için YOLO kullandı.
  • Intel, Movidius Neural Compute Stick gibi ürünlerinde YOLO’yu destekledi.
  • Fotokite, insansız hava araçlarında gerçek zamanlı nesne algılamak için YOLO kullanan bir şirkettir.
  • Nesnelerin etiketlenmesini kolaylaştırmak için etiketleme araçları geliştiren birçok şirket YOLO modellerini desteklemekte ve müşterilerine sunmaktadır.

Uygulamalarda ve ürünlerde gerçek zamanlı nesne algılamayı uygulamak isteyen birçok küçük ölçekli şirket de YOLO kullanmaktadır.

Kısacası YOLO, akademik bir başlangıçtan sonra hem büyük teknoloji şirketleri hem de küçük girişimler tarafından benimsenen, ticari uygulamalarda kullanılan popüler bir nesne algılama yöntemi haline geldi. YOLO’nun bu derece başarılı olması, açık kaynaklı ve herkes tarafından erişilebilir olması sayesindedir.

Aşağıdaki linklerde YOLO versiyonlarının notebook sayfalarına ulaşabilir ve kodları inceleyebilirsiniz:

YOLOv2: https://github.com/longcw/yolo2-pytorch

YOLOv3: https://github.com/ultralytics/yolov3

https://github.com/AlexeyAB/darknet

YOLOv4 : https://github.com/AlexeyAB/darknet

YOLOv5 : https://github.com/ultralytics/yolov5

YOLOv6: https://github.com/meituan/YOLOv6

YOLOv7: https://github.com/WongKinYiu/yolov7

YOLOv8:https://github.com/ultralytics/ultralytics

YOLO-NAS: https://github.com/Deci-AI/super-gradients/blob/master/documentation/source/YoloNASQuickstart.md

--

--