YoloV7 ile İnsan Yüzü Tespiti

Merhaba! Bugün sizlere bilgisayarlı görü ve yapay zeka teknolojisinin birleşmiş bir ürünü olan YoloV7 ve bu yapay zeka modelini kullanarak nasıl bir insan yüzünün bilgisayar tarafından algılanabileceğini konu edineceğiz.

yolov7-yolo-training-detect-denizhan-şahin






Bilgisayarlı görü uygulamaları ile birlikte herhangi bir kamera görüntüsü ile elde ettiğimiz verilerdeki nesneleri bulabilir, takip edebilir ve daha fazlasını yapabiliriz. Python üzerinde çalışan OpenCV bilgisayarlı görü kütüphanesi ve Meta tarafından geliştirilen yapay zeka kütüphanesi PyTorch ile birlikte çalışan, nesneleri sınıflandırma, takip etme ve özellik çıkarımı yapma gibi algoritmalara sahip YoloV7 kullanmamın en büyük nedeni ise yeni nesil CUDA, cuDNN, PyTorch ve OpenCV desteğinin yanı sıra daha az kaynak tüketimi ve daha iyi performans vermesidir.

İlk önce bir YoloV7 veri seti oluşturmayı öğrenelim. "insan" isimli bir klasör içinde sırası ile train ,test ve val isimli klasörler oluşturalım. Bunu yapmamızın nedeni ise train ile model eğitimi, test ile model eğitiminin test edilmesi ve validation işlemleri için ise test ve val klasörlerini kullanmış olacağız. train ve test isimli klasörlerin içine images ve labels isimli klasörler açalım. Verilerimizin yüzde 60'i train içinde , yüzde 20'si test ve geri kalan yüzde 20'si ise val içinde yer alacaktır. Bu oranları siz isteğe bağlı değiştirebilirsiniz ama train içindeki veri sayısı en az yüzde 60 olmalıdır. train ve test klasörlerinin her birinde bulunan images bizim görsellerimizi, labels ise bu görseller üzerinde istenilen nesnenin işaretlenmiş koordinatları vardır. Kısacası tüm görselleri ve ilgili etiketleri ise belirtilen orana uygun olarak train ve test içindeki bu klasörlere ekleyeceğiz. val ise içinde hem görsel hem de etiket bulunan ve bir alt klasörü bulunmayan, bütün dosyaların bir arada bulunduğu klasördür.

-------------------- Dizin Yapısı
--- insan
--------test
------------images
------------labels
--------train
------------images
------------labels
--------val

Şimdi veri setimizi etiketlemeye başlayalım. Eğer internet üzerinden kolayca etiketleme yapmak istiyorsanız size MakeSense isimli etiketleme sitesini öneririm. Bilgisayarınızda bir etiketleme yapmak istiyorsanız LabelImg öneririm. 
MakeSense isimli siteyi açınız. https://www.makesense.ai/  Burada yer alan "Get Started" butonuna tıklayınız.
yolov7-yolo-training-detect-denizhan-şahin

Görsellerinizi gösterilen alan yükleyiniz(sürükleyin ve bu alana basınız). Daha sonra aktif duruma gelen "Object Detection" butonuna basınız.
                               yolov7-yolo-training-detect-denizhan-şahin
Şimdi etiket türümüzü belirtme zamanı geldi. Ben "insan" isimli tek bir etiket ekledim. Daha sonra "Start Project" isimli butona basınız.
yolov7-yolo-training-detect-denizhan-şahin


Şimdi insan yüzünün yer aldığı yeri mouse ile bir dörtgen şekil içine alalım ve yan tarafta belirtilen "Rect" başlığı altındaki "Select label" 'dan insan etiket ismini seçelim. Daha sonraki fotoğraflarımızı artık insan etiket ismi ile kolayca etiketlemiş olacağız.
yolov7-yolo-training-detect-denizhan-şahin

yolov7-yolo-training-detect-denizhan-şahin

yolov7-yolo-training-detect-denizhan-şahin

En sonunda ise etiket dosyalarını almak için ise "Action" sekmesinde bulunan "Export Annotations" isimli butona tıklayınız. Karşınıza gelecek ekranda ise YOLO ile ilgili formatı seçiniz. Daha sonra "Export" ile birlikte bir ZIP dosyası indirilecektir. Burada yer alan etiket dosyalarını yukarıdaki belirttiğimiz adımlara uygun olarak dağıtınız. Oluşturduğunuz veri setini Google Drive'a yükleyiniz. Daha hızlı olması açısından ben ZIP halinde yükledim.
yolov7-yolo-training-detect-denizhan-şahin

yolov7-yolo-training-detect-denizhan-şahin



İlk önce bir Colab dosyası oluşturunuz, bunun için Google Colabraty sitesine gidiniz. colab.research.google.com

Daha sonra sırası ile "Çalışma Zamanı" için GPU seçiniz. Daha sonra Google Drive bağlantısı kurmak için aşağıdaki komutu çalıştırınız.

from google.colab import drive
drive.mount('/content/drive')

Daha sonra Google Drive'a yüklediğimiz ZIP dosyaımızı ilgili dizine açalım. Ben ZIP dosyamı insan_veri_seti isimli bir klasöre yüklemiştim. ZIP açmak için aşağıdaki kodu çalıştırınız.

!unzip /content/drive/MyDrive/insan_veri_seti/insan.zip -d /content/drive/MyDrive/insan_veri_seti/

Daha sonra YoloV7 kaynak dosyalarımızı kuralım.

!git clone https://github.com/WongKinYiu/yolov7

Daha sonra kullanacağımız referans model dosyamızı indirelim.

!wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt

Daha sonra ise ilk önce yolov7 klasörü içinde bazı değişiklikler yapacağız. İlk önce yolov7 içinde bulunan cfg klasörü altında bulunan training klasörü içindeki yolov7.yaml dosyasını açalım ve aşağıdaki gibi sadece ikinci satırı güncelleyelim.

nc: 80 ibaresini nc : 1 olarak değiştirelim.
yolov7-yolo-training-detect-denizhan-şahin
Daha sonra yolov7 klasörü içindeki data klasörü içinde bulunan coco.yaml dosyasını güncelleyelim. 7, 8, 9. satırları Google Drive'da yer alan klasörlerimizin yolları ile güncelleyelim. 
12. satırda bulunan nc: 80 ifadesini nc: 1 olarka değiştiriniz.  
#classes names altında bulunan ve  names: ['...' , '...'....] olarak birden fazla olan bu değeri 15.satırdan itibaren dosya sonuna kadar siliniz. Daha sonra 15. satır  için aşağıdaki ifadeyi yazınız.
names: ['insan']
yolov7-yolo-training-detect-denizhan-şahin

Google Colabraty sadece belli bir süre kullanma izni vermektedir. Model için oluşturulan dosyaları otomatik olarak Google Drive'a yüklemek için yolov7 klasörü içinde bulunan train.py dosyasını güncelleyelim. 47. satıra aşağıdaki kodu yazınız.
wdir = save_dir / '/content/drive/MyDrive/insan_veri_seti/weights/'

Google Colabraty içinde bazı durumlarda "git tag" isimli hata alınabilmektedir. Bunun için yolov7 klasörü içinde bulunan utils içindeki google_utils.py içindeki 31. satırı yorum satırı yaparak  kapatabilirsiniz.

Şimdi ise artık model eğitimini başlatalım. Bu kod içinde yer alan batch-size her bir adımda kullanılacak fotoğraf sayısını belirtir. Ayrıca epoch ise yapılacak işlem sayısını belirtir. Bu sayıları isteğe bağlı değiştirebilirsiniz.
!python3 /content/yolov7/train.py --device 0 --batch-size 8 --epochs 800 --data /content/yolov7/data/coco.yaml --hyp /content/yolov7/data/hyp.scratch.p5.yaml --img 640 640 --cfg /content/yolov7/cfg/training/yolov7.yaml --weights /content/yolov7.pt --name yolov7
yolov7-yolo-training-detect-denizhan-şahin

yolov7-yolo-training-detect-denizhan-şahin

yolov7-yolo-training-detect-denizhan-şahin



Eğer Google Colabraty istenmeyen bir durum ile kapanırsa yukarıdaki adımları tekrar ettikten sonra bize verilmiş olan last.pt model dosyası ile kaldığımız yerden devam edebiliriz.

!python3 /content/yolov7/train.py --device 0 --batch-size 8 --epochs 800 --data /content/yolov7/data/coco.yaml --hyp /content/yolov7/data/hyp.scratch.p5.yaml --img 640 640 --cfg /content/yolov7/cfg/training/yolov7.yaml --weights /content/drive/MyDrive/insan_veri_seti/weights/last.pt --name yolov7 --resume

Eğer elde ettiğiniz bir model dosyası ile detect(tespit yapmak isterseniz) için aşağıdaki kodu çalıştırabilirsiniz. --source /yol/dosya_adi için hem görsel hem de video içerikler kullanılmış olur, detect işlemi sonrası elde edilen dosyalar Google Colabraty'de yer alan Dosyalar sekmesi içindeki runs klasörü içinde yer almaktadır.

!python3 /content/yolov7/detect.py --weights /content/drive/MyDrive/insan_veri_seti/weights/best_300.pt --conf 0.25 --img-size 640 --source /content/drive/MyDrive/deneme/deneme.avi

Yorum Gönder

Yorum yaptığınız için teşekkürler :)

Daha yeni Daha eski