Kaynak: Büyük Veri Özeti
Bu makale hakkında 2729 Word, önerilen okuma 6 dakika.
Bu makale, popüler derin öğrenme çerçevesini ve bilgisayar görüşü kitaplığını entegre eden ve size kendi hedef tespit uygulamanızı oluşturmayı öğreten ImageAI adlı bir Python kitaplığını tanıtır.
Arka planda özel mesajla "0706" cevabını verin, kod ve model dosyalarını alabilirsiniz.
Hedef tespiti sadece 10 satır kodla gerçekleştirilebilir mi? !
Bu makalenin yazarı ve ekibi, popüler derin öğrenme çerçevesini ve bilgisayarla görme kitaplığını entegre eden ImageAI adlı bir Python kitaplığı oluşturdu. Bu makale size ilk hedef tespit uygulamanızı nasıl oluşturacağınızı öğretecek ve editör, çukura adım atmanıza yardımcı oldu ve test etkili!
İnsansız süpermarketler, yüz tanıma, insansız sürüş ve çeşitli kullanım senaryoları ve vakaları, "hedef tespit" i bilgisayarla görmenin en umut verici yönü haline getiriyor.
Tamamlanması için çok sayıda eğitim verisi ve algoritma gerektiren, uygulaması zor bir teknoloji gibi görünüyor. Aslında, bu makalenin yazarı, on satır kodla hedef algılamayı verimli bir şekilde uygulayabilen Python tabanlı bir işlev kitaplığı geliştirdi.
Tanıdık olmayan okuyucular için, hedef tespitin ne olduğuna ve yazılım geliştiricilerin karşılaştığı zorluklara bir göz atalım.
Hedef tespiti, bir bilgisayar ve yazılım sistemi yardımıyla bir görüntüdeki / sahnedeki hedefleri bulan ve her hedefin kategorisini tanıyan bir teknolojidir. Yüz algılama, araç algılama, yaya sayma, ağ görüntüleri, güvenlik sistemleri ve sürücüsüz arabalar gibi alanlarda yaygın olarak kullanılmaktadır. Bilgisayar teknolojisinin sürekli gelişimi ve yazılım geliştiricilerin aralıksız çabaları ile gelecekteki hedef tespit teknolojisi daha geniş çapta popüler hale gelecektir.
Uygulama ve sistemlerde gelişmiş hedef tespit yöntemlerini kullanmak ve bu yöntemlere dayalı yeni uygulamalar oluşturmak kolay değildir. Erken hedef tespiti, OpenCV (popüler bilgisayar görme kitaplığı) tarafından desteklenenler gibi klasik algoritmalara dayanır. Ancak, bu klasik algoritmaların performansı koşullar nedeniyle sınırlı olacaktır.
2012 yılında, derin öğrenme alanında pek çok atılım yapıldı. Araştırmacılar, R-CNN, Fast-RCNN, Faster-RCNN, RetinaNet gibi bir dizi yeni ve yüksek hassasiyetli hedef tespit algoritması ve yöntemi ve hızlı ve doğru SSD ve YOLO vb. Bu derin öğrenme tabanlı yöntemleri ve algoritmaları kullanmak için (tabii ki derin öğrenme aynı zamanda makine öğrenimine de dayanır), matematik ve derin öğrenme çerçevelerini derinlemesine anlamanız gerekir. Milyonlarca yazılım geliştiricisi, yeni ürünler geliştirmek için hedef tespit teknolojisini entegre etmeye kararlıdır. Ancak derin olmayan öğrenme alanlarındaki programcıların bu teknolojiyi anlaması ve kullanması kolay değildir.
Kendi kendini eğiten bir bilgisayar geliştiricisi olan Moses Olafenwa, bu sorunu birkaç ay önce fark etti ve meslektaşları ile birlikte ImageAI adlı bir Python kitaplığı geliştirdi.
ImageAI, programcıların ve yazılım geliştiricilerin en gelişmiş bilgisayar görme teknolojisini mevcut ve yeni uygulamalarına yalnızca birkaç satır kodla kolayca entegre etmelerine olanak tanır.
ImageAI ile hedef tespiti gerçekleştirmek için sadece aşağıdaki adımlara ihtiyacınız var:
Çalışmaya hazır
Bu test ortamı bir Windows 64-bit sistemdir ve Python sürümü 3.6'dır.
Python 3'ü Python resmi web sitesinden indirip kurun ve pip'i kurun.
İndirme: {link:
https://python.org
https://pip.pypa.io/en/stable/installing/
Aşağıdaki bağımlılıkları pip ile kurun
Pyhthon kurulum dizininde C: \ XXX \ Python \ Python36 \ Scripts gibi Scripts klasörünü bulun, cmd komut penceresini açın ve aşağıdaki kurulum komutlarını sırayla girin.
1. Tensorflow:
pip tensorflow yüklemek
2. Uykulu:
pip install numpy
3. Bilim:
pip yüklemek scipy
4. OpenCV:
pip opencv-python yükle
5. Yastık:
pip yastık takmak
6. Matplotlib:
pip matplotlib yüklemek
7. H5py:
pip h5py yükle
8. Keras:
pip kurulum keras
9. ImageAI:
pip kurulum https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.1/imageai-2.0.1-py3-none-any.whl
Not: ImageAI kurulumu sırasında bir istisna meydana gelirse, önce .whl dosyasını indirip Scripts klasörüne yerleştirebilir ve yüklemek için aşağıdaki komutu kullanabilirsiniz:
pip imageai-2.0.1-py3-none-any.whl yükleyin
Hedef tespiti için RetinaNet model dosyasını indirin:
İndirme: {link:
https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5
Hazırlık çalışması bitti, ilk hedef tespit kodunuzu yazabilirsiniz. Yeni bir Python dosyası oluşturun ve onu adlandırın (FirstDetection.py gibi) ve ardından aşağıdaki kodu bu dosyaya yazın. Daha sonra, RetinaNet model dosyasını, FirstDetection.py'yi ve algılamak istediğiniz görüntüyü aynı yola koyun ve görüntüyü "image.jpg" olarak adlandırın.
FirstDetection.py'deki 10 kod satırı:
imageai.Detection'dan ObjectDetection içe aktarma
işletim sistemini içe aktar
execution_path = os.getcwd ()
detektör = ObjectDetection ()
Detektör.setModelTypeAsRetinaNet ()
Detektör.setModelPath (os.path.join (execution_path, "resnet50_coco_best_v2.0.1.h5"))
detektör.loadModel ()
detections = detektör.detectObjectsFromImage (input_image = os.path.join (execution_path, "image.jpg"), output_image_path = os.path.join (yürütme_path, "imagenew.jpg"))
tespitlerdeki eachObject için:
baskı (eachObject + ":" + eachObject)
Ardından, kodu çalıştırmak için FirstDetection.py'ye çift tıklayın ve bir süre bekleyin, tanıma sonucu konsolda yazdırılacaktır. Sonuçlar konsolda çıktığında, FirstDetection.py'yi içeren klasörde "imagenew.jpg" dosya adıyla yeni kaydedilmiş bir resim bulacaksınız.
Not: Kodu çalıştırırken aşağıdaki istisna oluşursa:
Numpy + MKL bağımlılıklarını kurmanız, ilgili .whl dosyasını indirmeniz ve Scripts klasörüne koymanız ve .whl dosyasını pip ile yüklemeniz gerekir.
İndirme: {link:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
Test sonuçları
Aşağıdaki 2 örnek resme ve test sonrası kaydedilen yeni resimlere bir göz atalım.
Test etmeden önce:
Testten sonra:
Test sonuçları:
kişi: 55.8402955532074
kişi: 53.21805477142334
kişi: 69.25139427185059
kişi: 76.41745209693909
bisiklet: 80.30363917350769
kişi: 83.58567953109741
kişi: 89.06581997871399
kamyon: 63.10953497886658
kişi: 69.82483863830566
kişi: 77.11606621742249
otobüs: 98.00949096679688
kamyon: 84.02870297431946
araba: 71.98476791381836
Test sonuçları:
kişi: 71.10445499420166
kişi: 59.28672552108765
kişi: 59.61582064628601
kişi: 75.86382627487183
motosiklet: 60.1050078868866
otobüs: 99.39600229263306
araba: 74.05484318733215
kişi: 67.31776595115662
kişi: 63.53200078010559
kişi: 78.2265305519104
kişi: 62.880998849868774
kişi: 72.93365597724915
kişi: 60.01397967338562
kişi: 81.05944991111755
motosiklet: 50.591760873794556
motosiklet: 58.719027042388916
kişi: 71.69321775436401
bisiklet: 91.86570048332214
motosiklet: 85.38855314254761
Ek olarak, birkaç fotoğrafı test ettim ve sonuçlar şu şekilde:
Test etmeden önce:
Testten sonra:
Test sonuçları:
araba: 59.04694199562073
araba: 50.62631368637085
araba: 71.59191966056824
araba: 52.60368585586548
kişi: 76.51243805885315
araba: 56.73831105232239
araba: 50.02853870391846
araba: 94.18612122535706
araba: 70.23521065711975
araba: 75.06842017173767
araba: 87.21032738685608
araba: 89.46954607963562
kişi: 73.89532923698425
bisiklet: 90.31689763069153
otobüs: 65.3587281703949
İnekleri tespit edebilir ...
Test sonuçları:
kişi: 55.15214800834656
kişi: 62.79672980308533
kişi: 69.01599168777466
kişi: 67.26776957511902
kişi: 75.51649808883667
kişi: 52.9820442199707
kişi: 67.23594665527344
kişi: 69.77047920227051
kişi: 83.80664587020874
kişi: 61.785924434661865
kişi: 82.354336977005
kişi: 93.08169484138489
inek: 84.69656705856323
Test sonuçları:
kişi: 65.07909297943115
kişi: 65.68368077278137
kişi: 68.6377465724945
kişi: 83.80006551742554
kişi: 85.69389581680298
kişi: 55.40691018104553
kişi: 56.62997364997864
kişi: 58.07020664215088
kişi: 70.90385556221008
kişi: 95.06895542144775
Kod açıklaması
Bu 10 satırlık kodun anlamını açıklayalım.
imageai.Detection'dan ObjectDetection içe aktarma
işletim sistemini içe aktar
execution_path = os.getcwd ()
Yukarıdaki 3 satır kodda, ilk satır ImageAI hedef algılama sınıfını içe aktarır, ikinci satır Python os sınıfını içe aktarır ve üçüncü satır Python dosyasını, RetianNet model dosyasını ve görüntünün bulunduğu klasöre giden yolu kaydetmek için bir değişken tanımlar.
detektör = ObjectDetection ()
Detektör.setModelTypeAsRetinaNet ()
Detektör.setModelPath (os.path.join (execution_path, "resnet50_coco_best_v2.0.1.h5"))
detektör.loadModel ()
detections = detektör.detectObjectsFromImage (input_image = os.path.join (execution_path, "image.jpg"), output_image_path = os.path.join (yürütme_path, "imagenew.jpg"))
Yukarıdaki 5 satır kodda, ilk satır hedef algılama sınıfını tanımlar, ikinci satır model türünü RetinaNet olarak ayarlar, üçüncü satır modelin yolunu RetinaNet model dosyasının yoluna ayarlar, dördüncü satır modeli hedef algılama sınıfına ve beşinci satıra yükler Algılama işlevini çağırın ve giriş görüntüsünün ve çıktı görüntüsünün yolunu ayrıştırın.
tespitlerdeki eachObject için:
baskı (eachObject + ":" + eachObject)
Yukarıdaki iki kod satırında, ilk satır, dedektör.detectObjectsFromImage işlevi tarafından döndürülen tüm sonuçları yineler ve ardından ikinci satır, model tarafından algılanan görüntüdeki her hedefin türünü ve olasılığını yazdırır.
ImageAI ayrıca hedef tespit sürecindeki diğer işlevlerin yapılandırılmasını da destekler. Örneğin, tespit edilen her hedefin görüntülerini ayrı ayrı çıkarın. DetectedObjectsFromImage işlevine basitçe extract_detected_objects = True yazarak, hedef algılama sınıfı görüntü nesnesi kümesi için yeni bir klasör oluşturacak, ardından her görüntüyü çıkaracak, bu klasöre kaydedecek ve her birini kaydetmek için bir dizi döndürecektir. Resmin yolu aşağıdaki gibidir:
algılamalar, extracted_images = dedektör.detectObjectsFromImage (input_image = os.path.join (execution_path, "image.jpg"), output_image_path = os.path.join (execution_path, "imagenew.jpg"), extract_detected_objects = True)
İlk örnek resimden çıkardığımız tespit sonuçları şekilde gösterilmektedir:
Parametre yapılandırması
ImageAI, hedef tespitinin üretim ihtiyaçlarını karşılamak için aşağıdakiler dahil bazı yapılandırılabilir parametreler sağlar:
Minimum Olasılığı Ayarlama (ayarlanabilir minimum olasılık eşiği)
Varsayılan eşik% 50'dir Saptama sonucunun olasılık değeri% 50'den düşükse, saptama sonucu görüntülenmez. Eşiği özel ihtiyaçlarınıza göre değiştirebilirsiniz.
Özel Nesne Algılama (özel nesne algılama)
Sağlanan CustomObject sınıfını kullanarak, test sonuçlarının yalnızca belirli hedef türlerini göstermesini sağlayabilirsiniz.
Algılama Hızları
Algılama hızı, görüntüleri algılamak için gereken süreyi azaltmak için "hızlı", "daha hızlı" ve "en hızlı" olarak ayarlanabilir.
Giriş Türleri
Görüntünün dosya yolunu ayrıştırabilir ve değiştirebilirsiniz Bunlar arasında, Numpy dizileri veya görüntü dosyası akışları girdi türleri olarak kullanılabilir.
Çıkış Türleri
DetectObjectsFromImage işlevinin dönüş sonucunu, bir görüntü dosyası veya Numpy dizisi döndürmek gibi değiştirebilirsiniz.
Ayrıntılı belgeler GitHub'dadır.
GitHub bağlantısı:
https://github.com/OlafenwaMoses/ImageAI
Arka planda özel mesajla "0706" cevabını verin, kod ve model dosyalarını alabilirsiniz.
İlgili raporlar:
https://towardsdatascience.com/object-detection-with-10-lines-of-code-d6cb4d86f606