Projemizi anaconda prompt üzerinden yapacağız. Adımları yavaş ve anlaşılır bir şekilde takip edebilirsiniz.
-
Anaconda prompt uygulamamızı açalım ve bir sanal ortam oluşturalım. conda create -n yolov8_custom python=3.9
-
Oluşturduğumuz sanal ortamı aktive etmemiz gerekiyor.
-
Veri setimizi oluşturacağız o yüzden eğitim yapmak istediğimiz resimleri indirmemiz veya toplamamız gerekiyor.Bunun için ben resim indirme aracı kullanıyorum. prompt ekranına geliyoruz ve pip install simple_image _download==0.4 yazıp çalıştırıyoruz. (0.4) sürümünü ise diğer sürümleri çalışmadığı için kullanmak durumundayız.
-
Bilgisayar masaüstümüze (v8_custom) isimli boş bir klasör oluşturuyoruz. (download_images.py) ismi ile kod bölümünün için de paylaşmış olduğum dosyayı oluşturmuş olduğumuz boş klasörün içine kopyalıyoruz. Bu dosyayı herhangi bir metin düzenleme uygulaması ile açıp ne indirmek istiyorsanız "keywords" başlığının yanına yazabilirsiniz. Ben modelime kedileri eğitmek istediğim için ingilizce olarak "cat" yazdım.
7)Prompt ekranımıza gelip " cd (v8_custom dosyamızın uzantısını buraya yazıyoruz) " yazıp çalıştırıyoruz. Örnek olarak eğer ben terminalime " cd C:\Users\User\Desktop\v8_tutorial " yazarsam terminalim belirtmiş olduğum dosya yolunda işlem yapacaktır.
-
Terminale geliyoruz ve " python download_images.py " yazıp çalıştırıyoruz. Bu komutumuz ile birlikte resimlerimiz indirilmeye başlanacaktır. İndirme süresi kendi internet hızınıza ve indirmek istediğiniz resim sayısına göre değişkenlik gösterebilir.
-
İndirme işlemi tamamlanınca simple_images adında bir klasör oluşacaktır ve indirdiğiniz resimler bu klasör içinde bulunacaktır. Bu klasörün ismini " images " olarak değiştiriniz. v8_custom klasörümüzün şuan böyle görünmesi gerekli :
-
Şimdi resim etiketleme işlemi için bir başka kütüphanemiz olan labelImg kütüphanesini indireceğiz. İndirmek için terminale " pip install labelImg " yazıyoruz ve çalıştırıyoruz. İndirme tamamlandıktan sonra " labelImg " yazalım ve çalıştıralım. Açılan ekranımız ise
-
Ekranın sol üstündeki File kısmında kullanacağımız olan (open dir) yani etikelenecek olan resimlerin bulunduğu klasörü seçmemiz istenir. Bir diğer kullanacağımız seçenek ise (save dir) bu ise etiketlenmiş resimleri nereye kaydetmek istediğinizi sorar. Nereye kaydetmek istiyorsanız o klasörü seçiniz.
-
Biz ise bu kaydetmek istediğimiz klasörü v8_custom içine (labels) isimli bir klasör oluşturmakla başlayalım. Klasörü oluşturduktan sonra etiketleme işlemine başlayabiliriz. İlk olarak (open dir) seçeneği ile etiketlecenek resimlerin bulunduğu (images) dosyamızı seçiyoruz. Ardından kaydetmek istediğimiz dosyayı yani (labels) klasörünü seçiyoruz. Ekranımıza ilk resmimiz geldiyse devam edelim.
-
Ekranın solundaki seçeneklerde biz yolo ile eğitim yapacağımız için yolo'nun seçilmiş olması gerekli. Eğer seçili değilse üzerine tıklayarak yolo'yu seçiniz.
-
Artık etiketlemeye gelmiş bulunmaktayız solunda bulunan " create rectbox " seçeneğini seçelim ve neyi etiteklemek istiyorsanız farenin sol tuşuna basılı tutarak etiketleme işlemini yapınız.
-
İşlemi yaptıktan sonra size etiketin hangi isimle(tag) kaydedileceğini soracaktır. Oraya ise (kısa ve tek bir kelime ile yazmanızı tavsiye ederim, mesela araba lastiği değilde sadece lastik olarak yazabilirseniz ileride olaşabilicek sorunları azaltabilirsiniz) etiketinizi ismini yazıp tamam butonuna tıklayın.
-
Etiketin ve tagın kaydedilmesi lazım bunun için ise ekranın sol kısmında bulunan save(kaydet) butonuna tıklayınız. Diğer resimlerini etiketlemek için ise ekranın sol kısmında bulunan next butonuna basarak aynı işlemleri diğer etiketlenecek olan resimlerinize uygulayabilirsiniz.
-
Evet buraya kadar etiketleme işlemini anlattım. Buradan sonra eğitim(train) aşamasını anlatacağım.
(v8_custom) klasörümüze (train) ve (val) adında iki farklı klasör oluşturalım.
-
(val) klasörü içine (images) ve (labels) adında iki farklı klasör oluşturalım.
-
(v8_custom\images) klasörünün içinde yer alan resimlerin son 8 tanesini kesip (val\images) klasörü içine yapıştırıyoruz. Aynı işlemi (labels) ler içinde yapınız.
-
(v8_custom\labels) klasöründen " classes.txt " kesip (v8_custom) içine yapıştırın.
-
(v8_custom) klasöründeki (images) ve (labels) klasörlerini (train) klasörünün içine atınız. Şuan ise klasörümüz bu şekilde görünmeli :
Evet an itibari ile veri setimizi oluşturmuş bulunmaktayız.
-
(v8_custom) klasörümüze kod kısmında paylaşmış olduğum " data_custom.yaml " dosyasını kopyalayınız.
-
Bu dosya eğitim aşamasında kullanılmak üzere eğitimin hangi klasörler üzerinden yapılacağını belirtmek için hazırlanmıştır.
-
Şimdi prompt terminalimize gelelim ve " pip install ultralytics " yazıp çalıştıralım. Ultralytics YOLOv8 ile eğitim yapmamız için gerekli tüm kütüphaneleri indirecektir.
-
Terminal ekranında indirilen kütüphanelere bakarsak eğer pytorch kütüphanesinin CPU versiyonun indirdiğini görebiliriz. Eğer biz işlemlerimizi GPU üzerinde yapmak istersek https://pytorch.org/get-started/locally/ adresinden bilgisayrımıza ve CUDA versiyonuna göre seçenekleri seçtikten sonra alt ekranda oluşan kodu kendi terminalimizde " pip3 --upgrade " komutu ile birlikte çalıştırarak Pytorch kütüphanesinin GPU versiyonunu indireceğiz. Örnek olarak : ve
-
Az önce yaptığımız işlem bilgisayarımızda CUDA çekirdekli bir ekran kartımız varsa onu kullanabilmemiz için pythorch'un CUDA(GPU) versiyonunu kurmamıza yardım etti.
-
Sıra eğitim yapmak istediğimiz YOLO-V8 modelinin seçmeye geldi. https://github.com/ultralytics/ultralytics adresinden resimde görmüş olduğunuz modellerden isteğiniz, keyfiniz, yapmak istediğiniz işlem veya işlem değerlerine göre size uygun olan modeli seçiniz. Kararınızı verdikten sonra mesela YOLOv8m modelini kullanacağız ozaman bunu terminalde " yolov8m.pt " olarak belirtmeliyiz.
-
Eğitim aşamasını başlatmak için terminalimize ekranda görülen kodları yazmamız yeterlidir. Detaylar bariz olup görselde de anlatılmıştır.
-
Modelimizi eğitme aşaması bu kadardı umarım her şey yolundadır . Bir sonraki adımımız eğittiğimiz modelimizi bir fotoğraf ve video üzerinden test etmek.
-
(v8_custom\runs\detect\train\weights) klasörü içindeki (best.pt) dosyasını ana klasörümüz (v8_custom) içine kopyalayalım ve ismini " yolov8m_custom " olarak değiştirelim. Buradaki best.pt dosyamız bizim eğitilmiş olan modelimizdir. Fotoğraf ve videolarımızı artık bu eğitilmiş modelimiz üzerinde işleyeceğiz.
-
(val\images) klasöründen herhangi bir resmi kopyalayıp ana klasörümüz olan (v8_custom) klasörüne yapıştıralım ve ismini " 1.jpg " veya " 1.jpeg " olarak değiştirelim. Aynı uygulamayı video üzerinden yapmak istersenizde video dosyasını ana klasöre attıktan sonrada yapabilirsiniz. İsim opsiyoneldir istediğiniz ismi verebilirsiniz ben sadece kolay bir isim seçmekten yanayım.
-
Terminalimize resimde görülen kodları yazdıktan sonra eğitilen yolo v8 modeli nesne tespiti yapmaya başlayacaktır.
-
İşlenmiş görüntülerin çıktıları tespit sonrasında oluşacak olan (runs) klasöründe toplanacaktır. Bu klasördeki çıktılar sayesinde modelinizin nasıl görüntü işlediğini kontrol edebilirsiniz.
-
Modelinizi canlı olarak web kameranızda kullanmak istiyorsanız " source=0 " yazmalısınız.
-
Evet değerli okuyucularım, yolo v8 ile fotoğraf ve video işleme eğitiminin sonuna gelmiş bulunmaktayız. Umarım bir sorun ile karşılaşmamışsınızdır. Eğer bir hata ile karşılaşmışsanız bilin ki yeni bir tecrübe edineceksiniz. Bu bakış açısıyla yaklaşırsanız sorunu daha rahat anlar ve daha rahat müdahalede bulununursunuz. Sorunlar bizi geliştiren şeylerdir. Gerek kod yazarken gerekse hayatımızda çeşitli sorunlarla karşılaşıyor olabiliriz. Bu sorunlara çözüm aramak kimi zaman kısa kimi zaman uzun vakitlerimizi alsada o sorunu çözmek için verdiğimiz uğraş ve çaba ileride meydana gelebilecek diğer sorunlara karşı alacağımız bakış açımızı ve tavrımızı olumlu yönde değiştirecektir. Bu perspektiften olaylara yaklaşırsak çözülemez dediğimiz olaylar bir başka olayın çözüm anahtarı olabilir. Bu yaklaşım hayatta bize kontrolü sağlar. Unutmayın, zaman her şeyin ilacıdır. Sağlıcakla kalın.
-
KOLAY GELSİN ...
https://docs.ultralytics.com https://docs.ultralytics.com/usage/cfg/ https://docs.ultralytics.com/modes/ https://github.com/ultralytics/ultralytics