OpenCV + derin öğrenme ön eğitim modeli, görüntü tanıma elde etmesi kolay öğretici

Li Lin pyimagesearch'ten derlendi

Yazar Adrian Rosebrock

Qubit Raporu | Genel Hesap QbitAI

OpenCV, 2000 yılında piyasaya sürülen açık kaynaklı bir bilgisayar görme kitaplığıdır. Nesne tanıma, görüntü bölümleme, yüz tanıma ve hareket tanıma gibi çeşitli işlevlere sahiptir.Linux, Windows, Android, Mac OS ve diğer işletim sistemlerinde çalışabilir. Yüksek seviyeli, yüksek verimliliğiyle ünlüdür ve çoklu dil arayüzleri sağlar.

OpenCV'nin son sürümü bize daha iyi derin öğrenme desteği sağladı.OpenCV'de önceden eğitilmiş derin öğrenme modellerini kullanmak çok kolay hale geldi.

Pyimagesearch web sitesi bugün, görüntü tanıma için OpenCV + derin öğrenme ön eğitim modelinin kullanımına ilişkin bir eğitim yayınladı. Kübitler aşağıdaki gibi derlenmiş ve düzenlenmiştir:

Son zamanlarda OpenCV 3.3, derin öğrenme için daha iyi destek sağlayan resmi olarak piyasaya sürüldü (dnn modülü) dnn modülü şu anda Caffe, TensorFlow, Torch ve PyTorch gibi derin öğrenme çerçevelerini desteklemektedir.

Ek olarak, yeni sürümde önceden eğitilmiş derin öğrenme modellerini kullanan API, hem C ++ hem de Python ile uyumludur ve işlem serisini çok basit hale getirir:

  • Modeli sabit diskten yükleyin;

  • Giriş görüntüsünü önceden işleyin;

  • Çıktı sınıflandırmasını elde etmek için görüntüyü ağa girin.

Tabii ki, derin öğrenme modellerini eğitmek için OpenCV'yi kullanamayız ve kullanmamalıyız, ancak bu yeni sürüm, derin öğrenme çerçeveleriyle eğitilmiş modelleri almamıza ve bunları OpenCV'de verimli bir şekilde kullanmamıza izin veriyor.

Bu makale, görüntüleri tanımak için ImageNet üzerinde önceden eğitilmiş derin öğrenme modelinin nasıl kullanılacağını gösterir.

OpenCV 3.3'te derin öğrenme

OpenCV 3.1 sürümünden beri, dnn modülü opencv_contrib kitaplığının bir parçası olmuştur ve 3.3 sürümünde ana depoda bahsedilmiştir.

OpenCV 3.3 ile önceden eğitilmiş derin öğrenme modellerinden faydalanabilir ve bunları sınıflandırıcı olarak kullanabilirsiniz.

OpenCV'nin yeni sürümü aşağıdaki popüler ağ mimarileri ile uyumludur:

  • AlexNet

  • GoogLeNet v1 (Inception-5h olarak da adlandırılır)

  • ResNet-34/50 / ...

  • SqueezeNet v1.1

  • VGG tabanlı FCN

  • ENet

  • VGG tabanlı SSD

  • MobileNet tabanlı SSD

Bu modülün ana katılımcısı olan Rynikov Alexander'ın bu modül için iddialı planları var. Ancak, yazdığı sürüm notları Rusça. İlgileniyorsanız, lütfen Google çevirisiyle okuyun: https://habrahabr.ru/company/intel / blog / 333612 /

Dnn modülünün OpenCV topluluğu üzerinde büyük bir etkisi olacağını düşünüyorum.

Fonksiyonlar ve çerçeveler

OpenCV'de derin öğrenme ön eğitim modelini kullanmak için öncelikle OpenCV 3.3'ü yüklemelisiniz.Kübitlerin kurulum süreci detaylı olarak anlatılmayacaktır ...

Aşağıda kullanacağımız işlevlerden bazıları verilmiştir.

Diskten resimleri dnn olarak yükleyin:

  • cv2.dnn.blobFromImage

  • cv2.dnn.blobFromImages

Modelleri çeşitli çerçevelerden doğrudan dışa aktarmak için "oluştur" yöntemini kullanın:

  • cv2.dnn.createCaffeImporter

  • cv2.dnn.createTensorFlowImporter

  • cv2.dnn.createTorchImporter

Serileştirilmiş modeli doğrudan diskten yüklemek için "okuma" yöntemini kullanın:

  • cv2.dnn.readNetFromCaffe

  • cv2.dnn.readNetFromTensorFlow

  • cv2.dnn.readNetFromTorch

  • cv2.dnn.readhTorchBlob

Modeli diskten yükledikten sonra, görüntülerimizi iletmek ve sınıflandırma sonuçlarını elde etmek için .forward yöntemini kullanabiliriz.

OpenCV ve derin öğrenmeyle görüntüleri sınıflandırın

Ardından, görüntü tanıma için Python, OpenCV ve önceden eğitilmiş bir Caffe modelinin nasıl kullanılacağını öğrenelim.

Aşağıda kullanılan derin öğrenme modeli, ImageNet üzerinde önceden eğitilmiş GoogleLeNet'tir. GoogleLeNet, Szegedy ve diğerleri tarafından yazılan Going Deeper with Convolutions adlı 2014 tarihli makaleden alınmıştır. Ayrıntılar için bkz: https://arxiv.org/abs/1409.4842

Öncelikle yeni bir dosya açın, bunu deep_learning_with_opencv.py olarak adlandırın, ihtiyacımız olan paketi içe aktarmak için aşağıdaki kodu ekleyin:

Ardından komut satırı parametrelerini sökün:

8. satır ap = argparse.ArgumentParser (), parametre ayrıştırıcısını oluşturmak için kullanılır ve aşağıdaki kod, 4 komut satırı parametresi oluşturmak için kullanılır:

  • - Görüntü: giriş görüntüsünün yolu;

  • Prototxt: prototxt için Caffe dağıtım yolu

  • Model: ağ ağırlıkları vb. Gibi önceden eğitilmiş Caffe modeli;

  • Etiketler: Eşzamanlı kümeler gibi ImageNet etiketlerinin yolu.

Parametreleri oluşturduktan sonra, onları ayrıştırır ve daha sonra kullanmak üzere bir değişken args içinde saklarız.

Ardından, giriş görüntüsünü ve etiketi yükleyin:

Satır 20, görüntüyü diskten yükler ve 23. ve 24. satırlar bu etiketleri yükler:

Etiketleri bitirdikten sonra dnn modülüne bir göz atalım:

Yukarıdaki kodda yer alan yorumlara dikkat edin, bilinen bir blob şekli oluşturmak için giriş görüntüsünü normalleştirmek üzere ortalama çıkarma işlemi gerçekleştirmek için cv2.dnn.blobFromImage kullanırız.

Ardından modelimizi diskten yükleyin:

Cv2.dnn.readNetFromCaffe'yi, önceden eğitilmiş modelin yanı sıra Caffe model tanımı prototxt dosyasını yüklemek için kullanıyoruz.

Daha sonra, sinir ağında ileri yayılımı tamamlamak için girdi olarak blob kullanıyoruz:

Lütfen dikkat: Bir CNN eğitmiyoruz, ancak önceden eğitilmiş bir model kullanıyoruz, bu nedenle, geri yayınlama olmadan sonucu almak için yalnızca blobu ağdan geçirmemiz gerekiyor.

Son olarak, giriş resmi için en yüksek sıralamaya sahip 5 tahmin sonucunu çıkaralım:

En iyi 5 sonucu seçmek için NumPy'yi kullanabilir ve ardından bunları gösterebiliriz:

Sınıflandırma sonucu

OpenCV'de Python kodu ile derin öğrenme görüntü tanımayı uyguladık. Şimdi denemek için birkaç fotoğraf çekebilirsiniz.

Terminalinizi açın ve aşağıdaki komutu yürütün:

Bu sonucu alacak:

OpenCV ve GoogleLeNet, Beagle'ı doğru bir şekilde tanıdı, ilk sıralamanın sonucu doğrudur ve aşağıdaki 4 sonuç da oldukça ilişkilidir.

Sonucu almak için bu algoritmayı CPU üzerinde çalıştırmak yalnızca bir saniyeden az sürer.

Bir parça daha:

Sonuçlar aşağıdaki gibidir:

Tekrar gel:

Sonuç hala iyi:

Son örnek:

Ayrıca iyi tanınan:

İlgili Bağlantılar

Orijinal eğitim:

İlgili kod:

E-postayı almak için orijinal metnin altına doldurun veya elde etmek için QbitAI diyalog arayüzünde "OpenCV" ye yanıt verin.

- Bitiş -

Samimi işe alım

Qubit, editörleri / muhabirleri işe alıyor ve merkezi Pekin, Zhongguancun'da bulunuyor. Yetenekli ve hevesli öğrencilerin bize katılmasını dört gözle bekliyoruz! Ayrıntılar için, lütfen QbitAI diyalog arayüzünde "işe alım" kelimesiyle yanıt verin.

Qubit QbitAI

' ' Yapay zeka teknolojisi ve ürünlerindeki yeni eğilimleri takip edin

"Shuangyi" nin 100,000 yuan içinde test sürüşü için bu iki arabayı sürmek zorunda mısınız?
önceki
Bu sezonun en iyi 5 savunma noktası muhafızı, 3'ü Spurs'tan ve biri savunmada on milyon sözleşme alacak!
Sonraki
Futbol Federasyonu'nun dört büyük başlığı piyasaya sürülmek üzere ve Çin Süper Ligi'nin devleri lanetlenecek! Dalian Yifang bir numara mı görüyor?
League of Legends S8 final programı onaylandı! 24 takım Güney Kore ile savaşacak, LPL konusunda iyimser misiniz?
Rockets 4 iyi şeydir! 3 rakibin generalleri kırmasını garantiledi, iki takım Warriors'ı ilk 2 rauntta ezdi ve şehir karı aldı
GAC Trumpchi, Çin'e açık gözleriyle Pekin Otomobil Fuarı'nda uluslararası tarzını sergiliyor
Minglue Data Wu Minghui: Yapay zekayı ticarileştirmenin özü, kullanıcıların makine hatalarını makul bir şekilde kabul etmelerine izin vermektir
Dört büyük şapka müzakerenin sonucu mu? Li Yuyi: 2 milyara oy veriyorsunuz ve ben 300 milyona oy veriyorum, birlikte nasıl oynayabilirim?
Japonya'nın en tuhaf Dota 2 yarışması hala yapılıyor! Ödüle istiridyenin yanı sıra sığır eti de eklendi
5 oyun 112 + 50! Ezici Dongqiqi dehası "iki çift kral", gösteri nihayet günümüze geldi!
Yidian Bilgileri Otomobil Kalitesi IP Kuluçka Planını Yayınladı
Bırakma, Shenhua'ya izin verme! 25 yılın en güçlü 8 iç yardımını sayarsak, mavi ordu zirveye ne zaman dönecek?
Kördü, ancak bir Activision atış oyununda 7.600 öldürmeyi tamamladı!
Kazanan yasanın analizi! Bu 3 sıralama şampiyonluğu asla kazanmadı, bu yüzden Rockets 3. olarak öldü!
To Top