Python'da bir nesne algılama sistemi oluşturmayı öğretin (kod ve öğrenme materyalleri ile)

Eser sahibi: FAIZANSHAIKH

Çeviri: Yan Xiaoyu

Düzeltme: Zhang Ling

Bu makale hakkında 3200 Word, önerilen okuma 10 dakika.

Bu makale, nesne algılama teknolojisini ve bu alandaki sorunları çözmek için birkaç farklı yöntemi tanıtır ve Python'da kendi nesne algılama sistemimizi nasıl oluşturacağınıza dair derinlemesine araştırma yapmanızı sağlar.

Giriş

Önümüzde bir görüntü gösterildiğinde, beynimiz içinde bulunan nesneleri hemen tanıyacaktır. Öte yandan, makinelerin bu nesneleri tanımak için çok fazla zaman ve eğitim verisi harcamaları gerekir. Ancak son donanım ve derin öğrenme yükseltmeleriyle, bilgisayar görüşü alanı daha kolay ve daha sezgisel hale geldi.

Aşağıdaki örnek resme bakın, sistem görüntüdeki farklı nesneleri inanılmaz bir doğrulukla tanıyabilir:

Nesne algılama teknolojisi, trafikte sürücüsüz araçlara eşlik etmeye, kalabalık yerlerde şiddet davranışlarını tespit etmeye, spor takımlarının keşif raporlarını analiz etmesine ve oluşturmasına yardımcı olan ve üretimin sağlanmasına yardımcı olan, hayatın her kesiminde hızla uygulanmıştır. Süreçteki tüm bağlantılar ve diğer pek çok konu uygun şekilde kontrol edilir. Ve bunlar, nesne algılama teknolojisinin yüzeyinde yapılabilecek şeylerdir!

Bu makalede, nesne algılama teknolojisinin ne olduğunu ve bu alandaki sorunları çözmek için kullanılabilecek birkaç farklı yöntemi anlayacağız ve ardından Python'da kendi nesne algılama sistemimizi nasıl oluşturacağımızı inceleyeceğiz. Bu makalenin sonunda, farklı nesne algılama zorluklarını kendi başınıza karşılamak için yeterli bilgiye sahip olacaksınız!

Not: Bu eğitim, derin öğrenmenin temellerini anladığınızı ve bundan önce basit görüntü işleme sorunlarını çözdüğünüzü varsayar. Henüz yapmadıysanız veya incelemeniz gerekiyorsa, önce aşağıdaki makaleleri okumanızı öneririz:

  • Yapay sinir ağlarıyla başlayan derin öğrenmenin temeli
  • https://www.analyticsvidhya.com/blog/2016/03/introduction-deep-learning-fundamentals-neural-networks/
  • Bilgisayarla Görme için Derin Öğrenme-Evrişimli Sinir Ağlarına Giriş
  • https://www.analyticsvidhya.com/blog/2016/04/deep-learning-computer-vision-introduction-convolution-neural-networks/
  • Eğitim: Sinir ağlarını optimize etmek için Keras'ı kullanma (görüntü tanıma örnek olay incelemesiyle)
  • https://www.analyticsvidhya.com/blog/2016/10/tutorial-optimizing-neural-networks-using-keras-with-image-recognition-case-study/
içindekiler
  • Nesne algılama nedir?
  • Nesne algılama problemini çözmek için farklı yöntemler kullanabiliriz
  • Yöntem 1: Orijinal yol (böl ve yönet)
  • Yöntem 2: Bölüm sayısını artırın
  • Yöntem 3: Yapısal bölme gerçekleştirin
  • Yöntem 4: Verimliliği artırın
  • Yöntem 5: Uçtan uca bir yöntem oluşturmak için özellik seçimi için derin öğrenmeyi kullanın
  • Edinme teknolojisi: Bir nesne algılama modeli oluşturmak için ImageAI kitaplığı nasıl kullanılır
Nesne algılama nedir?

En gelişmiş modeli oluşturmadan önce, önce nesne algılamanın ne olduğunu anlamaya çalışalım. Kendi kendine giden otomobiller için bir yaya algılama sistemi kurmamız gerektiğini varsayalım, otomobil tarafından yakalanan görüntü aşağıdaki şekilde gösterilmektedir. Bu resmi nasıl tarif edersiniz?

Resim, arabanın bir meydana yakın olduğunu ve birkaç kişinin arabamızın önünden karşıya geçtiğini gösteriyor. Trafik işaretlerinin doğru bir şekilde belirlenememesi nedeniyle, bir arabanın yaya algılama sistemi, insanların bunlardan kaçınmak için nerede yürüdüğünü doğru bir şekilde tanımlamalıdır.

Öyleyse araba sistemi mükemmel bir sakınmayı nasıl sağlıyor? Yapabileceği şey, bu insanların etrafında bir sınırlayıcı kutu oluşturmaktır, böylece sistem, insanların görüntüdeki konumuna göre hangi yolu seçeceğine karar verebilir ve herhangi bir kazayı önleyebilir.

Nesne algılama hedefinin iki yönü vardır:

  • Görüntüde bulunan tüm nesneleri ve konumlarını tanımlayın
  • İlgi çekici nesneleri filtreleyin
Nesne algılama problemini çözmenin farklı yolları

Artık sorunun ne olduğunu bildiğimize göre, onu çözmek için hangi yöntem (veya yöntemler) kullanılabilir? Bu bölümde, görüntü nesnelerini algılamak için kullanılabilecek bazı teknikleri tanıtacağız. Önce en kolay yoldan başlayın ve oradan yolumuzu bulun. Aşağıda belirtilen yöntemlere herhangi bir öneriniz veya alternatifiniz varsa, lütfen yorumlar bölümünde bize bildirin!

Yöntem 1: Orijinal yol (böl ve yönet)

En kolay yol, resmi dört bölüme ayırmaktır:

  • Üst sol köşe

  • Sağ üst köşe

  • Sol alt

  • Sağ alt köşe

Şimdi, bir sonraki adım, görüntünün her bir parçasını tanıma için görüntü sınıflandırıcıya geçirmektir. Bu şekilde görüntünün her bir bölümünde yaya olup olmadığının çıktı sonucunu alacağız. Öyleyse, orijinal görüntüdeki alanı işaretleyin. Çıktı şuna benzer:

Bu, başlamak için iyi bir yoldur, ancak daha kesin ve doğru bir sistem arıyoruz. Tüm nesneyi (veya bu durumda kişiyi) tanıması gerekir, çünkü nesnenin yalnızca bazı kısımlarını tanımak feci sonuçlara yol açabilir.

Yöntem 2: Bölüm sayısını artırın

Önceki sistem iyi çalıştı ama onu nasıl geliştirebiliriz? Sisteme girdiğimiz kutu sayısını katlanarak artırarak doğruluğu artırabiliriz. Çıktı şöyle görünmelidir:

Bu yöntemin artıları ve eksileri vardır. Çözümümüz orijinal yöntemden biraz daha iyi görünse de, birçok kutuyu ortadan kaldırıyor ve gerçek sonuç temelde aynı. Bu bir problem ve bu sorunu çözmek için daha organize bir yönteme ihtiyacımız var.

Yöntem 3: İyi yapılandırılmış bölümleri göster

Nesne algılama sistemimizi daha yapılandırılmış bir şekilde oluşturmak için aşağıdaki adımları takip edebiliriz:

Aşama 1: Resmi şekilde gösterildiği gibi 10x10 ızgaralara bölün:

Adım 2: Her bölgenin ağırlık merkezini tanımlayın.

Aşama 3: Her ağırlık merkezi için, aşağıdaki gibi farklı yüksekliklere ve en boy oranlarına sahip 3 alan seçin:

4. Adım: Tahmin sonucunu almak için oluşturulan tüm bu bölgeleri görüntü sınıflandırıcıya geçirin.

Peki nihai çıktı nedir? Daha kesin ve titiz bir sonuç - aşağıdaki şekle bakın:

Ama onu daha da geliştirebiliriz! Daha iyi sonuçlar üretebilecek başka bir yöntem hakkında bilgi edinmek için okumaya devam edin.

Yöntem 4: Verimliliği artırın

Daha önce gördüğümüz yöntemler büyük ölçüde kabul edilebilir, ancak öncekinden daha verimli bir sistem de kurabiliriz. Ne yapılacağını önerebilir misin? Aklımda bir optimizasyon planı oluşturabilirim. Eğer düşünürsek Yöntem 3 Modeli daha iyi hale getirmek için iki şey yapılabilir:

  • Izgaranın boyutunu artırın: Orijinal 10'u değiştirerek ızgara boyutunu 20'ye yükseltin:

  • Yalnızca 3 alan yerine çeşitli yüksekliklere ve en boy oranlarına sahip daha fazla alan seçin: Burada, her bir ankraj merkezini çevreleyen 9 şekilden oluşan bölgeleri, yani farklı yüksekliklerde 3 kare bölge ve farklı yüksekliklerde 6 dikey ve yatay dikdörtgen bölge seçebiliriz, bu da bize farklı en boy oranlarına sahip bölgeler sağlayacaktır.

Yine, bu da artıları ve eksileri. Bu yöntemler daha detaylı bir seviyeye ulaşmamıza yardımcı olsa da, tüm bölgeleri görüntü sınıflandırma modeline geçirmemiz gerektiğinden, bu bir kez daha hesaplamalı bir patlamaya neden olacaktır.

Yapabileceğimiz, alanların tümünü seçmek yerine seçici olarak seçmektir. Örneğin, seçimin gerçekten sadece arka plan mı yoksa potansiyel olarak bir nesne mi içerdiğini tahmin etmeye çalışan bir ara sınıflandırma modeli oluşturabiliriz, bu da görüntü sınıflandırma modelinin yargılaması gereken alanı katlanarak azaltacaktır.

Başka bir optimizasyon şeması var: "Aynı nesne" tahminlerini azaltın . Yöntem 3'ü gözden geçirelim:

Gördüğünüz gibi, temelde tüm kutular aynı kişiyi öngörüyor ve biz bunlardan herhangi birini seçebiliriz. Bu nedenle, "aynı nesne" etiketli tüm kutulardan bir kişiyi tespit etme olasılığı en yüksek olan kutulardan birini seçmeyi ve bunları tahmin için görüntü sınıflandırma modeline girmeyi düşünebiliriz.

Şu anda, tüm bu optimizasyon şemaları bize oldukça uygun tahmin sonuçları verdi. Kazandığımızdan neredeyse eminiz, ancak neyin eksik olduğunu tahmin edebilir misiniz? Derin öğrenme!

Yöntem 5: Uçtan uca bir yöntem oluşturmak için özellik seçimi için derin öğrenmeyi kullanın

Derin öğrenme, nesne algılama alanında büyük bir potansiyele sahiptir. Sorunlarımızı çözmek için derin öğrenmeyi nerede ve nasıl kullanabileceğimizi önerebilir misiniz? Bazı yöntemleri şu şekilde sıraladım:

  • geçebilir Sinir ağı, boyutluluğu azaltmak için orijinal görüntüyü girer Orijinal görüntünün tüm alanlarını girmek yerine.
  • hala iyi Görüntü bölgelerinin seçimini sınırlamak için sinir ağlarını kullanın .
  • Yapabilmek Güçlendirilmiş derin öğrenme algoritmaları , Tahminin, görüntüdeki nesnenin orijinal sınırlayıcı kutusuna mümkün olduğu kadar yakın olmasını sağlayın; bu, algoritmanın sınırlayıcı kutuyu daha kesin ve hassas bir şekilde tahmin etmesini sağlar.

Artık, her bir sorunu çözmek için farklı sinir ağlarını eğitmek yerine, tüm sorunları tek başına çözmeye çalışmak için tek bir derin sinir ağı modeli kullanabiliriz. Bunun avantajı, sinir ağının Her küçük bileşen, sinir ağının diğer bölümlerini optimize etmeye yardımcı olacaktır , Böylece tüm derin modeli birlikte eğitmek için birlikte çalışabiliriz.

Şimdiye kadar gördüğümüz tüm yöntemlerden çıktımız aşağıdaki şekle biraz benzer şekilde en iyi performansı sağlayabilir. Bir sonraki bölümde Python kullanarak nasıl oluşturulacağını göreceğiz.

Edinim teknolojisi: ImageAI kitaplığı nasıl kullanılır Bir nesne algılama modeli oluşturun

Artık nesne algılamanın ne olduğunu ve bu sorunu çözmenin en iyi yolunu bildiğimize göre, kendi nesne algılama sistemimizi oluşturalım! Kullanmak üzere olduğumuz şey, bilgisayarla görme görevlerindeki en gelişmiş makine öğrenimi algoritmalarını destekleyen bir python kitaplığı olan ImageAI kitaplığıdır.

Tahminleri elde etmek için nesne algılama modelini çalıştırmak çok basittir. Tahminler oluşturmak için karmaşık kurulum komut dosyalarıyla veya hatta GPU'larla başlamamıza gerek yok! Yöntem 5'te görülen çıktı sonuçlarını almak için bu ImageAI kitaplığını kullanacağız. Bu bölümden en fazla bilgiyi almanıza yardımcı olabileceğinden, aşağıdaki kodu kendi makinenize girmeniz şiddetle tavsiye edilir.

Bir nesne algılama modeli oluşturmadan önce sistemi kurmanız gerektiğini lütfen unutmayın. Anaconda'yı yerel sisteme kurduktan sonra aşağıdaki adımları gerçekleştirmeye başlayabilirsiniz.

Aşama 1: Anaconda ortamı oluşturmak için python 3.6 sürümünü kullanın.

conda create -nretinanet python = 3.6 anaconda

Adım 2: Ortamı etkinleştirin ve gerekli yazılım paketlerini kurun.

kaynak activateretinanetconda installtensorflow uyuşuk scipy opencv yastık matplotlib h5py keras

Aşama 3: ImageAI kitaplığını kurun

pip kurulum https://github.com/OlafenwaMoses /ImageAI/releases/download/2.0.1/imageai-2.0.1-py3-none-any.whl

4. Adım: Tahmini elde etmek için gereken önceden eğitilmiş modeli indirin. Model RetinaNet'e (gelecekteki bir makalenin konusu) dayanmaktadır. RetinaNet önceden eğitilmiş modeli indirmek için bağlantıyı ziyaret edin:

https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5

Adım 5: İndirilen dosyayı mevcut çalışma klasörüne kopyalayın.

6. Adım: Aşağıdaki bağlantıdan resmi indirin ve image.png adını verin:

https://s3-ap-south-1.amazonaws.com/av-blog-media/wp-content/uploads/2018/06/I1_2009_09_08_drive_0012_001351-768x223.png

7. Adım: Jupyter not defterini açın (terminalde jupyter not defteri yazın) ve aşağıdaki kodu çalıştırın:

imageai.Detection'dan import ObjectDetectionimport os execution_path = os.getcwd () dedektör = ObjectDetection () detector.setModelTypeAsRetinaNet () detector.setModelPath (os.path.join (execution_path, "resnet50_coco_best_v2.0.1.h5")) dedektör.loadModel custom_objects = detektör.CustomObjects (kişi = True, car = False) detections = detektör.detectCustomObjectsFromImage (input_image = os.path.join (execution_path, "image.png"), output_image_path = os.path.join (yürütme_yolu, "resim_new. png "), custom_objects = custom_objects, minimum_percentage_probability = 65) algılamalardaki eachObject için: print (eachObject +": "+ eachObject) print (" -------------------- ------------ ")

Bu, nesnenin sınırlayıcı kutusunu içeren image_new.png adlı değiştirilmiş bir görüntü dosyası oluşturacaktır.

8. Adım: Bir görüntüyü yazdırmanız gerekiyorsa, lütfen aşağıdaki kodu kullanın:

IPython.display'den import ImageImage ("image_new.png")

Tebrikler! Yaya algılama için kendi nesne algılama modelinizi oluşturdunuz. Bu harika!

Sonuç

Bu makalede, nesne algılamanın ne olduğunu ve bir nesne algılama modeli oluşturma fikrini öğrendik.Ayrıca bir yaya algılama modeli oluşturmak için ImageAI kütüphanesini nasıl kullanacağımızı da öğrendik.

Koda ince ayar yaparak, kendi nesne algılama zorluklarınızı çözmek için modeli kolayca dönüştürebilirsiniz. Özellikle sosyal açıdan böyle bir sorunu çözmek için yukarıdaki yöntemleri kullandıysanız, lütfen aşağıdaki yorumlarda bize bildirin!

Orjinal başlık:

Python'da Sıfırdan Nesne Algılama Modelini Anlama ve Oluşturma

Orijinal bağlantı:

https://www.analyticsvidhya.com/blog/2018/06/understanding-building-object-detection-model-python/

Çevirmen Profili

Xiaoyu Yan, Pekin Ormancılık Üniversitesi'nden lisans derecesi ile mezun oldu ve yakında Güney Kaliforniya Üniversitesi'nde Uygulamalı Biyoistatistik ve Epidemiyoloji Yüksek Lisansı için eğitim görecek. Biyoteknoloji yolunda sıkı çalışmaya devam edin, verileri sevin ve geleceği dört gözle bekleyin.

Tsinghua-Qingdao Veri Bilimi Enstitüsü'nün resmi WeChat kamu platformunu takip edin " THU Veri Pastası "Ve kız kardeş numarası" Veri Pastası THU "Daha fazla ders avantajı ve kaliteli içerik elde edin.

Hizmeti derinleştirin, 58.com emlak komisyoncusu altın arayıcılarının "göndericisi" olacak
önceki
Kaynaklar | "Derin Pekiştirmeli Öğrenme" el yazması artık açık!
Sonraki
Özel | Üst düzey özellikler oluşturmak için büyük ölçekli denetimsiz veriler nasıl kullanılır?
İtalya Shenzhou Uluslararası Kayak Okulu, tanınmış kuzey kayak merkezleriyle bağlantılı olarak kayak eğitimi etkinlikleri düzenledi.
Wang Dalei çok güçlü! Geçen yıl, Tianjin'deki asistler kesinlikle düzdü ve şimdi aynı rakiplerle karşı karşıya geliyorlar ve sonra onları gönderiyorlar!
Bu büyük İtalyan markası Çin'e hakaret mi ediyor? "Yemek çubuklarıyla kalkmama" izin verdin, "kalkıp sikilmene" izin veriyorum!
Özel | Tongji Özel, AI Finansmanı Hakkında Konuşun! (Şangay)
GIF-Luneng çılgın! 7 dakikada 3 gol atan Tianjin Tianhai takımı çöktü!
Özel Google Colab'da Keras kullanarak derin sinir ağlarında ince ayar yapmayı öğretir
Güzel bir kızın bekar olup olmadığı nasıl anlaşılır? (Bir kız yapmanın ilk adımı)
Yifan Ay Yeni Yılı 31 Bing Anne: Yılbaşı gecesi bu çocuklar gönüllü hizmetlere geliyor
Münhasır Veriler, tamamen farklı insan-makine çalışma mekanizmaları altında işbirliği içinde nasıl işlenebilir?
Dazhou Dazhu polisi bir kumarhaneye girdi ve 18 şüpheliyi engelledi
Optik devi Carl Zeiss, Google Glass'ın lanetini kırma sözü vererek yeni akıllı gözlüklerin lansmanını şok etti
To Top