Veri Bilimi Araç Seti: Hedef tespiti için YOLO ile el ele

Makine öğrenimi alanındaki en sıcak araştırma yönlerinden biri olan bilgisayarla görme ile ilgili teknolojiler her zaman dikkat çekmiştir. Bunların arasında hedef tespiti, bilgisayarla görme alanında sık karşılaşılan sorunlardan biridir Algılama kalitesi ile algoritmanın hızının nasıl dengeleneceği çok önemlidir. Bu konu ile ilgili olarak, bilgisayarla görme mühendisi ve VirtusLab'ın kurucusu Piotr Skalski, kendi deneyimini yayınladı ve en sevdiği bilgisayarla görme algoritması YOLO hakkında pratik bilgiler paylaştı. Aşağıdaki tam metnidir.

Önsöz

YOLO, en sevdiğim bilgisayarla görme algoritmalarımdan biridir.Uzun zamandır bunun için özel olarak bir blog yazısı yazmayı planlıyorum. Ancak YOLO'nun arkasındaki çalışma prensibini detaylı bir şekilde anlatan başka bir makale olmasını istemiyorum İnternette teorik bilgisini çok iyi anlatan çok sayıda makale var. Ek olarak, bu mimariye dair anlayışınızı derinleştirmek istiyorsanız, doğrudan kaynak koddan bilgi almak ve kaynak dosyayı (https://arxiv.org/abs/1506.02640) okumak da iyi bir fikirdir.

YouTube-8M veri kümesine dayalı basketbol sahası oyuncusu hareket algılama

Bu sefer, nispeten düşük bir maliyetle ve seçtiğiniz herhangi bir nesneyi algılayabilen daha az güçlü bir makine ile hızlı bir şekilde hedef tespit modelinin nasıl oluşturulacağını göstereceğim. Fikirlerinizi işyerinde hızlı bir şekilde test etmeniz gerekiyorsa veya projenizi evde oluşturmak için kısa bir zamanınız varsa, bu harika bir yoldur. Geçen yıl, bu tür birkaç deney yapma fırsatım oldu ve bu makalede sunulan tüm görselleştirme sonuçları bu projelerden.

Not: Bu sefer ağırlıklı olarak açık kaynak kitaplıkları ve araçları kullanacağız, bu nedenle web sitemizdeki kodlama miktarı minimum düzeyde olacaktır. Bununla birlikte, sizi YOLO'yu kullanmaya teşvik etmek ve projeniz için bir başlangıç noktası sağlamak için önceden eğitilmiş modelimi ve tüm yapılandırma dosyalarını ve test veri setlerini indirmenize izin veren bir komut dosyası da sağlıyorum. Her zamanki gibi, GitHub'ımda her şeyi bulacaksınız: https://github.com/SkalskiP/ILearnDeepLearning.py/tree/master/02_data_science_toolkit/02_yolo_object_detection.

YOLO

YOLO'nun ne olduğunu bilmeyenler endişelenmeyin ve hiçbir yerde bilgi aramayın! Şimdi neden bahsettiğimi kısaca açıklayacağım.

YOLO, gerçek zamanlı bir hedef tespit algoritmasıdır ve sağlanan tespitin kalitesini ve hızını dengeleyen ilk algoritmadır. Genellikle, bu türün en güçlü modelleri evrişimli sinir ağlarına dayanır ve bu sefer bir istisna değildir. Sözde "nesne algılama modeli", onu yalnızca belirli bir fotoğraftaki nesneleri bulmak için değil, aynı zamanda konumlarını ve miktarlarını belirtmek için de kullanabileceğimizi kastediyoruz. Diğer şeylerin yanı sıra, bu model robotik ve otomotiv endüstrilerinde uygulamalara sahiptir, bu nedenle algılama hızı kritiktir. 2015'ten bu yana, algoritma, TinyYOLO gibi mobil cihazlar için tasarlanmış değişkenlerin yanı sıra üç yinelemeden geçti. Mobil versiyonun doğruluğu sınırlıdır, ancak hesaplama gereksinimleri de daha düşüktür ve daha hızlı çalışır.

veri seti

Derin öğrenme gibi, bir model oluşturmanın ilk adımı bir veri seti hazırlamaktır. Denetimli öğrenme, etiketli örneklere bakmak ve verilerdeki açık olmayan kalıpları keşfetmektir. Bir veri seti oluşturmanın oldukça sıkıcı bir iş olduğunu kabul etmeliyim, bu yüzden satranç veri setimi indirmenize ve YOLO'nun bu örnekte nasıl çalıştığını görmenize izin veren bir komut dosyası hazırladım.

Ancak kendi veri setlerini oluşturmak isteyenler zorluklarla karşılaşıyor. Bu hedefe ulaşmak için, bir dizi görüntü toplamamız ve eşleşen etiket dosyaları oluşturmamız gerekiyor. Resim, tanımak istediğimiz nesneleri içermeli ve veri setindeki tüm nesnelerin sınıflarının dağılımı benzer olmalıdır. Gördüğünüz gibi ilk projem olan Basketbol Dedektörü'nde oyun videosundaki kareyi kullandım.

Basketbol veri kümesinin resim örnekleri

Etiket dosyası görüntüyle aynı ada sahip olmalı, ancak açıkça farklı bir uzantıya sahip olmalı ve paralel bir dizinde olmalıdır. En iyi veri yapısı aşağıda gösterilmiştir. Görüntülere ve etiket dizinlerine ek olarak, algılamayı planladığımız nesne sınıflarının adlarını tanımlayan class_names.txt dosyasını da hazırlamalıyız. Bu dosyanın her satırı bir kategoriyi temsil eder ve boşluksuz bir veya daha fazla kelime içermelidir.

işaret

Ne yazık ki, YOLO, çoğu ücretsiz etiketleme aracı tarafından desteklenmeyen belirli bir etiket formatı gerektirir. Etiketleri VOC XML, VGG JSON veya diğer yaygın olarak kullanılan formatlardan ayrıştırma ihtiyacını ortadan kaldırmak için, makeense.ai'yi (https://www.makesense.ai/) kullanacağız, işte GitHub'da geliştirdiğim ücretsiz bir açık kaynak projesi. (Https://github.com/SkalskiP/make-sense). Düzenleyici yalnızca YOLO formatına doğrudan dışa aktarmayı desteklemekle kalmaz, aynı zamanda sezgiseldir, yüklenmesi gerekmez ve bir tarayıcıda çalışabilir. Ek olarak, etiketleme işinizi hızlandırmak için tasarlanmış birden fazla işlevi destekler. Yapay zeka tarafından desteklenen markalama sürecini görüntülemek için MakeSense'i kullanabilirsiniz.

AI, makeense.ai ile işaretlemeyi destekler

Çalışma tamamlandıktan sonra, .txt dosyasını içeren bir .zip dosyası indirebiliriz. Bu dosyaların her biri işaretli bir resme karşılık gelir ve fotoğrafta görünen nesneleri açıklar. Dosyalardan birini açarsak, her satırın class_idx x_center y_center width height türünde olduğunu bulacağız. Class_idx, class_names.txt dosyasında belirtilen etiketin dizinini temsil eder (sayma 0'dan başlar). Kalan parametreler, tek bir nesneyi çevreleyen sınırlayıcı kutuyu tanımlar ve 0 ile 1 arasında değerler alabilir. Neyse ki, çoğu zaman bu ayrıntılar üzerinde düşünmemize gerek yok çünkü editör her şeyi bizim için halledecek. YOLO formatındaki etiket örnekleri aşağıda gösterilmiştir.

Çevre ayarı

YOLO başlangıçta Darknet adlı küçük bir derin öğrenme çerçevesinde yazılmıştır. O zamandan beri, çoğu iki çok popüler Python platformu kullanan birçok uygulama oluşturuldu: Keras ve PyTorch. Mevcut tüm çözümler arasında özellikle sevdiğim bir tane var (https://github.com/ultralytics/yolov3). Eğitim ve algılama için üst düzey bir API sağlar, ancak aynı zamanda birçok kullanışlı özelliğe sahiptir. Kullanırken, tüm çalışmalarımız bir veri seti hazırlamak ve birkaç yapılandırma dosyası oluşturmaktan ibarettir ve ardından işin geri kalanı kütüphaneye teslim edilir.

Ortam ayarı da çok basittir - birkaç komut çalıştırmaya indirgenebilir, bu komutları aşağıda bulabilirsiniz (bilgisayarınızda Python ve Git'in kurulu olduğunu varsayarak). Yukarıda gösterilen yapıyı elde etmek için proje dizininden komutları çalıştırmak en iyisidir. Ortamın Docker aracılığıyla da oluşturulabileceğini belirtmekte fayda var (bu özellikle Windows kullanıcıları için yararlıdır). Bu konuyla ilgili daha fazla talimatı burada bulabilirsiniz (https://github.com/ultralytics/yolov3/wiki/Docker-Quickstart).

# Çerçeveyi klonla

git klon https://github.com/ultralytics/yolov3.git

# Çerçeve kataloğuna girin

cd ./yolov3

# Python ortamını kurun

pip install -U -r gereksinimleri.txt

Yapılandırma

Önceki paragrafta bahsedildiği gibi, şimdi tek yapmamız gereken birkaç yapılandırma dosyası oluşturmaktır. Eğitim seti ve test setinin yerini, nesne sınıflarının adlarını tanımlar ve kullanılan sinir ağı için mimari yönergeler sağlarlar.

Satranç veri setinin açıklamalı referans görüntüsü

Öncelikle, veri setini bir eğitim seti ve bir test setine bölmemiz gerekiyor. Bunu yapmak için iki .txt dosyası kullanıyoruz, her biri veri kümesindeki belirli bir görüntünün yolunu içeriyor. Çalışmayı hızlandırmak için bu dosyaları bizim için otomatik olarak oluşturacak bir Python betiği hazırladım. Yalnızca veri setinin konumunu belirtmeniz ve eğitim seti ile test seti arasındaki bölünme yüzdesini tanımlamanız gerekir. Train.txt / test.txt dosyasının parçası aşağıda gösterilmiştir.

./dataset/images/image_1.png

./dataset/images/image_2.png

./dataset/images/image_3.png

...

.data, sağlamamız gereken son dosyadır. İçerik-satranç detektörünü tartışmak için sonraki projenin örneğini kullanalım. Bu örnekte, tanımlamak istediğim 12 benzersiz nesne sınıfım var. Ardından, hangi fotoğrafların eğitim setine ait olduğunu ve hangi fotoğrafların test setine ait olduğunu tanımlayan dosyanın konumunu ve son olarak daha önce tartışılan etiket adı ile dosyanın konumunu veriyoruz. Her şeyin düzgün çalışması için chess.data, chess_train.txt, chess_test.txt ve chess.names dosyaları project / yolov3 / data dizinine taşınmalıdır.

sınıflar = 12

train =. / data / chess_train.txt

geçerli =. / data / chess_test.txt

isimler =. / data / chess.names

Eğitim

Artık eğitime başlamaya hazırız. Daha önce de belirtildiği gibi, kullandığımız kütüphane yüksek seviyeli bir API'ye sahiptir, bu nedenle işlemi başlatmak için terminaldeki bir komut ve birkaç parametre yeterlidir. Ancak, aşağıda nihai başarı şansımızı büyük ölçüde artıran birkaç şey var.

python3 train.py

--data ./data/project.data

--cfg ./cfg/project.cfg

--weights ./weights/yolov3.pt

Birincisi, transfer öğrenimini uygulayabiliriz, eğitime sıfırdan başlamak zorunda değiliz. Kendi ağımızın öğrenme süresini kısaltmak için farklı veri setlerinde eğitilmiş modellerin ağırlıklarını kullanabiliriz. Modelimiz temel şekil bilgisini kullanabilir ve bu bilgiyi tanımak istediğimiz yeni nesne türlerine bağlamaya odaklanabilir. İkinci olarak, kütüphane veri geliştirme gerçekleştirir, böylece sağladığımız fotoğraflara dayalı olarak yeni örnekler oluşturur. Bu nedenle, sadece küçük bir veri kümemiz olsa bile - birkaç yüz resim, modelimizi eğitebiliriz. Kullandığımız kütüphane ayrıca bize geliştirme sonucunda oluşturulan bir görüntünün bir örneğini sunar. Basketbol dedektörümün eğitimi sırasında oluşturulan örneği aşağıda görebilirsiniz.

Eğitim seti verilerinin gelişmiş görselleştirmesi

Algıla

Nihayet mutlu an burada! Modeli yaratma çalışmalarımız meyvesini verdi ve artık onu herhangi bir fotoğrafta aradığımızı bulmak için kullanabiliriz. Benzer şekilde, bu çok basit bir iştir, tamamlamak için terminalde basit bir komut kullanabiliriz. Yürütmeden sonra, tahmin edilen sonucu çıktı dizininde bulacağız. Özellikle proje sunumlarında faydalı olan çektiğimiz videolar üzerinde gerçek zamanlı tahminler de yapabileceğimizi belirtmekte fayda var.

python3 Detection.py

--data ./data/project.data

--cfg ./cfg/project.cfg

--weights ./weights/best.py

--source ./data/sample

TinyYOLO'ya dayalı satranç tespiti

sonuç olarak

Yukarıdaki içeriğin tamamını tamamladıysanız, tebrikler! Bu makaleyi okumaya zaman ayırdığınız için çok teşekkür ederim. Umarım kendi özel YOLO modelinizi eğitmenin zor olmadığını kanıtlayabilirim ve önerilerim gelecekteki deneyleriniz için yardımcı olacaktır.

aracılığıyla: https://towardsdatascience.com/chess-rolls-or-basketball-lets-create-a-custom-object-detection-model-ef53028eac7d

Lei Feng Ağı Lei Feng Ağı Lei Feng Ağı

Savaş "salgını" nın ön cephesi kırmızı ruhu sürdürüyor ve Chaozhou "kırmızı köy" partisi ve kütlesi barışı ortaklaşa koruyor
önceki
Sorumlu ve cepheyi savunan astronotlar Wuhan için tezahürat yapıyor
Sonraki
Entegrasyon ve yeniden yapılanma yoluyla Geely ve Volvo en güçlü otomobil grubunu oluşturabilir mi?
Salgın ve yoğun kar bloğunun sürekli uygulandığı anda, Kunming Orta Halk Mahkemesi bir teşekkür mektubu gönderdi.
Yeni koroner pnömonisi olan bir askeri doktordan bir mektup, haydi.
Yeni taç virüs aşısı 18 ay içinde tamamlanabilir; Zhong Nanshan 24 güne kadar inkübasyon süresiyle yanıt verdi; Samsung Galaxy S20 serisi 5G cep telefonlarını piyasaya sürdü | Lei Feng Morning Post
"Salgın" ile mücadelede Shenzhen halkı : "Floresan Sarı" ve "Melek Beyaz" salgınla yan yana savaşırken
Kabinden dışarı! Wuchang Fangcang barınak hastanesinden ilk hasta grubu taburcu edildiWuhan doğrudan saldırısı
Makinelerin Kralı burada! Samsung Galaxy S20 serisi çıktı ama en şaşırtıcı olanı 4G telefon
Lu Weibing "namluyu" tüm Huawei'ye doğrultdu
Çin merkez binasını 1,15 milyar yuan'a satan LG'ye ne oldu?
Microsoft, tarihteki en büyük NLG modelini yayınladı: Transformer mimarisine dayalı, 17 milyar parametre desteği
AI performansı 480 kat artırıldı! Arm, Cortex-M platformu için ilk mikro sinir ağı işlemcisini yayınladı
Atlas Derin sis örtülü, Yangcheng'de düşük görünürlük
To Top