YOLO ile Sivil Halk, Dost Asker ve Düşman Asker Tanınması Uygulaması
Önceki yazımızda YOLO mimarisinden ve çeşitlerinden bahsetmiştik. Bu yazımızda YOLO mimarisini kullanarak sivil halk, dost asker ve düşman asker ayrımını yapan bir uygulama geliştireceğiz.
Önce kendimiz bir veri seti oluşturmak için Google üzerinden çeşitli resimler indirerek öğretmek istediğimiz nesne ile ilgili veri seti oluşturuyoruz. Elimizde ne kadar çok veri bulunursa doğruluk payımız o kadar artar. Bu uygulamada 50 adet dost asker resmi seçiyoruz.
İnsanlardan oluşan çeşitli türlerdeki resimleri indirip, labelImg adlı uygulamada etiketleme yaptım. Şimdi labelImg’i nasıl çalıştıracağımızı ve etiketlemeyi nasıl yapacağımıza geçelim.
Ardından LabelImg uygulamasını indiriyoruz. Labellmg görüntüleri grafik olarak etiketlemek için ücretsiz, açık kaynak kodlu bir uygulamadır.
Labellmg indirildikten sonra dosyaların içindeki YOLO uygulamasını açıyoruz. Ardından bu aşamada görsellerimizin yer aldığı veri seti dosyasını ekliyoruz.
Labellmg açıldıktan sonra Open Dire tıklayalım. Sonra görüntülerin bulunduğu klasörü seçiyoruz. Ardından “Kaydetme dizinini değiştire tıklıyoruz. Son olarak, YOLO ayarlarını kullandığımızdan emin oluyoruz.
Artık görüntüleri etiketlemeye hazırız. Öncelikle “Create RectBox”a tıklıyoruz. Ardından nesnemizin bulunduğu alanı seçelim. Nesnemizin adını içeren etiketi ekliyoruz. İsimlendirip kaydediyoruz.Bu işlemi veri setinde sahip olduğumuz tüm imajlar için yapacağız.
Bu işlemin sonunda her resmin yanında txt halini görmeliyiz. Görüntü veri kümeniz artık hazır.
Dosyanın içinde şöyle görünecek:
15 0.392578 0.504395 0.566406 0.791992
Ardından tüm resimleri .txt halinden zip formatına getiriyoruz.
Görüntü veri setini eğitmek için google colab tarafından sunulan ücretsiz sunucuyu kullanıyoruz .
Google colab, google tarafından sunulan, python komut dosyalarını çalıştırabileceğiniz ve makine öğrenimi kitaplıklarını kullanabileceğiniz ücretsiz bir hizmettir.
Veri Seti Eğitilmesi
Görüntü veri setini eğitmek için google colab sunucusunu kullanıyoruz. Öncelikle google drive hesabımızda yeni bir klasör oluşturuyoruz. Ardından zip dosyamızı boş klasörün içine gönderiyoruz.
Google Colab hesabına Google Drive hesabımızı ile girmemiz gerekiyor. Bu kısımda GPU’yu etkinleştirmemiz gerekiyor. Bu yüzden “Düzenle” ye tıklayın
Ardından “GPU” seçip kaydet diyoruz.
Artık Colab’ı sürücümüze bağlamaya hazırız.
“google.colam içe aktarma sürücüsünden” yazdığı hücreyi çalıştırın ve ardından görünen bağlantıya tıklayın.
Bu bağlantı, google sürücünüze erişim izni vermek içindir. Girdikten sonra, Google sürücü dosyası Akışına izin vermenizi ister. “İzin Ver”e tıklayın. Ardından çıkan kodu kopyalayın.
Kodu not defterine yapıştırın ve “Enter” tuşuna basın.
Dost ,düşman asker ve sivil tanıma uygulamamızı tamamlamak için düşman düşman ve siviller için de veri seti oluşturmamız gerekiyor bu yüzden aynı işlemleri tekrarlıyoruz.
Aynı işlemleri tekrarladığımızda veriler eğitime hazır hale geliyor.
Aşşağıdaki komut tüm hücreleri çalıştırmayı sağlıyor. Kod otomatik olarak darknet’i kuracak, yapılandırmayı yapacak ve eğitimi çalıştıracaktır.
Modelimiz doğru ise aşşağıdakine benzer bir çıktı almamız gerekiyor.
Oluşan Modeli Test Etmek
Kullanacağımız dosya yolov3_training_last.weights.’dır. Açtıktan sonra
Darknet, her 1000 yinelemede bir modelin yedeğini aldığından, “yolov3_training__1000.weights”, “yolov3_training_2000.weights” vb. gibi diğer dosyaların da sürücünüze kaydedildiğini görebilirsiniz.Modelinizi OpenCV ile Python kullanarak test edebiliriz.
Google Drive’dan yolov3_training_last.weights dosyasının indirilmesi ve yolo_object_detection.py ve yolov3_testing.cfg ile aynı klasöre yerleştirmeniz gerekir.
11. satırdaki “yolo_object_detection.py” dosyasında, nesnenizin adıyla hangi nesnenin tespit edilmesini istiyorsak onu açalım.Ve 14. satırda, test edebilmeniz için, nesnenizin bulunduğu görüntüleri içeren bir klasörün yolunu koymalısınız.
# Load Yolo
net = cv2.dnn.readNet("yolov3_training_last.weights", "yolov3_testing.cfg")
# Name custom object
classes = ["düşmanasker"]
# Images path
images_path = glob.glob(r"D:\Pysource\Youtube205) Train Yolo google cloud\dataset\*.jpg")
Şimdi de elde ettiğimiz sonuçlara bakalım. Öncelikle düşman askerinin ardından da bir sivilin tespitini yapalım.
Genellikle, gpu’ya erişiminiz olan 12 saatin tamamı en az 3 saat sürer. Aynı işlemi dost asker için de gerçekleştirebiliriz.
Bu öğretici optimize edilmiştir ve özel sınıflar için çalışır. Daha fazla sınıf için özel bir nesne algılamaya ihtiyacımız olabilir. Eğitim seti ve oluşturduğumuz verideki örnek sayısını arttırırsak daha doğru ve istikrarlı çalışan bir algoritma oluşturabiliriz.
Şimdilik burada bu yazıyı bitiriyoruz. Sonraki yazılarda görüşmek üzere…