Yapay zeka uygulamalarının nasıl oluşturulacağını anlamak için bir makale: 10 haftada derin öğrenmeyi öğrenin ve 5.000 ABD doları kazanın

Qubit, Bahar Şenliği'nin ardından ilk tatil gününde herkes için farklı bir hikaye hazırladı. Bu hikayede, ana karakter David Brailovsky (Ah D diyelim) bir bilgisayarla görme yarışmasına katıldı. Bu zorluk, trafik ışıklarını tanımlamak için Convolutional Neural Network'e (CNN) dayalı bir yapay zeka uygulama modeli gerektirir.

Böylece D, 0'dan başlayarak, yavaş yavaş el yordamıyla, derleyerek, hata ayıklayarak, eğiterek ve derin bir öğrenme sistemi ile 10 hafta geçirdi. Ve son oyunda bir anda birincilik ödülünü de kazandı ve 5.000 $ kazandı.

Kahraman, bu bir şekilde karşı saldırı sürecini aynen yazdı. Qubit ayrıca yapay zeka ile ilgilenen arkadaşlarının daha yakından bakacağını umuyor. Merak etmeyin, bu makaleyi anlamak bir yapay zeka uzmanı değil. Çünkü tam metin, teknik gerçekleştirmeye bağlı kalmaktan ziyade bir yapay zeka uygulama modeli oluşturmanın fikirlerine ve yöntemlerine odaklanıyor.

Pratik uygulama açısından bakıldığında, bir AI modeli oluşturmak, sıfırdan kod yazma süreci değildir.

Başlangıçta, benzer işlevlere sahip bazı mevcut modeller seçildi ve ardından mevcut modellerin yeteneklerini orijinal görevden yeni göreve "geçirmek" için ince ayar yapıldı. Ardından verileri eğitim için kullanın ve hangi ayarlamaların işe yarayacağını ve hangi ayarlamaların hiçbir etkisi olmadığını gözlemlemek için eğitim sürecinde farklı ayarlamalar deneyin.

Bu süreçteki önemli bir adım, daha yüksek hassasiyetli çıktı sonuçları elde etmek için birkaç düşük hassasiyetli modeli bir araya getirmektir. Ardından test edin ve daha iyi sonuçlar alın.

Daha önce de belirtildiği gibi, aşağıda belirsiz bir teknik içerik yoktur. Qubit, pratikte problemleri çözmek için yapay zekanın nasıl kullanılacağını anlamaya yardımcı olduğu için bunu önermeyi seçer.

Öyleyse, D'nin söyledikleriyle başlayalım.

- Metin bölme çizgisi -

Derin öğrenmeye dayalı bir trafik ışığı tanıma sınıflandırıcısının bir demosu, sol üst köşe verilen yargı sonucudur

meydan okuma

Yakın zamanda bir şirket tarafından düzenlenen bir bilgisayarla görme yarışması olan trafik ışığı tanıma yarışmasında birinciliği kazandım. Zorluğun amacı, yerleşik kamera tarafından yakalanan görüntüdeki trafik ışığının durumunu belirlemektir.

Herhangi bir görüntüde bir yapay zeka uygulama modeli (sınıflandırıcı) yapılmalıdır: Sahnede trafik ışığı olup olmadığı ve kırmızı veya yeşil olup olmadığı. Ve sadece seyahat yönündeki trafik ışıklarını tanımalıdır.

Yukarıdaki görüntü, tahmin edilmesi gereken üç olası durumdur: trafik ışığı yok, kırmızı trafik ışığı ve yeşil trafik ışığı.

Zorluk, çözümün derin sinir ağlarını kullanan görüntü tanıma alanında çok popüler bir yöntem olan evrişimli bir sinir ağına dayanmasını gerektiriyor. Katılan algoritma modelleri, doğruluk ve model boyutunun iki boyutuna göre puanlanacaktır. Daha küçük modeller daha yüksek puan alır. Ek olarak, kazanmak için gereken minimum doğruluk% 95'tir.

Organizatör, eğitim verisi olarak 18.659 etiketli görsel sağladı. Her görüntü yukarıdaki üç kategoriden biri olarak işaretlenmiştir (trafik ışığı yok / kırmızı trafik ışığı / yeşil trafik ışığı).

Yazılım ve donanım

Modeli eğitmek için Caffe derin öğrenme çerçevesini (bir dizi araç takımı olarak anlaşılabilir) kullanıyorum. Bunun ana nedeni, Caffe'de çeşitli önceden eğitilmiş modellerin olmasıdır.

Sonuçları analiz etme, veri keşfetme ve özel betikleme çalışmalarında Python, NumPy ve Jupyter Notebook kullandım.

Modeli eğitmek için Amazon'un GPU örneğini (g2.2xlarge) de kullandım. Nihai maliyet 263 ABD dolarıdır. Modeli eğitmek ve çalıştırmak için kullanılan kod ve dosyalar GitHub'dadır.

Nihai sınıflandırıcı

Son sınıflandırıcı, sponsorun test setinde% 94.955 doğruluk elde etti ve model boyutu 7,84 MB idi. Karşılaştırma için, GoogLeNet'in model boyutu 41 MB ve VGG-16'nın model boyutu 528 MB'dir.

Organizatör,% 94.955'i% 95 olarak kabul etmeyi cömertçe kabul etti ve minimum koşulu geçmeme izin verdi.

Daha yüksek doğruluk arayışına birçok deneme yanılma eşlik eder. Bazılarının arkasındaki mantığı biliyorum, bazıları sadece "şans eseri şans". Modelde geliştirmeye çalıştığım, bazıları düzeltilmiş ve bazıları düzeltilmemiş bazı şeylerden bahsedeceğim.

Bitmiş kısım

Transfer öğrenimi

GoogLeNet mimarisiyle ImageNet görüntü veritabanı üzerinde önceden eğitilmiş bir model olan bir modelde ince ayar yapmaya çalışarak başladım. Yakında, bu almamı sağlıyor > % 90 doğruluk!

Ancak organizatör, meydan okumanın resmi sayfasında GoogLeNet modelinde ince ayar yapılarak% 93 doğruluk elde edilmesi gerektiğini belirtti. Bende neyin yanlış gittiğini bilmiyorum.

SqueezeNet

SqueezeNet: AlexNet (görüntü sınıflandırma modeli) doğruluğuna sahiptir, ancak parametreler 50 kat daha azdır ve model boyutu 0,5 MB'den küçüktür.

Rekabet küçük model çözümlerin kullanımını ödüllendirdiğinden, mümkün olduğunca az parametreye sahip kompakt bir ağ modeli aramaya karar verdim ve bu yine de iyi sonuçlar üretebilir. Ancak en son yayımlanan ağlar çok derindir ve birçok parametresi vardır.

SqueezeNet çok iyi bir seçim gibi görünüyor.Ayrıca, Caffe'nin Model Hayvanat Bahçesi'nden kolayca erişilebilen (cep telefonundaki bir uygulama mağazasına benzer) ImageNet üzerinde eğitilmiş önceden eğitilmiş bir modeli var.

SqueezeNet ağ mimarisi

Ağ şu şekilde kompakt tutulur:

Temelde 1x1 evrişim filtresi kullanın, 3x3'e yardımcı olun

3x3 ile filtrelenen giriş kanallarının sayısını azaltın

Daha detaylı bilgi için Lab41'in blogunu okumanızı tavsiye ederim.

Öğrenme oranında bazı gidiş-dönüş ayarlamalarından sonra, eğitim öncesi modelde ince ayar yapabildim ve sıfırdan eğitebildim ve doğruluk% 92'ye ulaşmayı başardı! Çok havalı!

Resmi döndür

Resimlerin çoğu yukarıda gösterildiği gibi yataydır, ancak yaklaşık% 2,4'ü dikeydir ve birçok farklı yön vardır. Aşağıdaki gibi.

Bunlar veri setinin büyük bir bölümünü oluşturmasa da, modelimizin de onları doğru bir şekilde sınıflandırabileceğini umuyoruz.

Maalesef jpeg görüntüsündeki yönü belirten EXIF verisi yok. İlk başta, gökyüzünü tanımak ve görüntüyü buna göre çevirmek için bazı buluşsal yöntemler yapmayı düşündüm, ama o kadar basit görünmüyordu.

Sonra resmi sabit bir açıya göre dönecek şekilde değiştirdim. İlk başta ağı rasgele 0 °, 90 °, 180 °, 270 ° döndürmek için eğitmeye çalıştım. Bu pek gelişmedi. Ancak, her bir görüntüyü dört kez döndürerek elde edilen tahminlerin ortalamasını aldığımda gelişme ortaya çıktı!

% 92 % 92.6.

Açıklığa kavuşturmak gerekirse: yukarıda bahsedilen "tahmin ortalamasını", 4 görüntü değişikliğinde her bir sınıf tarafından üretilen modelin olasılığının ortalamasını kastediyorum.

Yüksek hızda budama

Eğitim sırasında, SqueezeNet ağı ilk önce varsayılan olarak giriş görüntüsünde rastgele budama gerçekleştirir ve bunu ben değiştirmedim. Bu tür veri artışı, ağı daha iyi genelleştirir.

Benzer şekilde, tahminler oluştururken, girdi görüntüsünde biraz kırpma yaptım ve sonuçların ortalamasını aldım. 5 süs kullanıyorum: 4 köşe ve bir merkez. Bu görevi gerçekleştirmek için ücretsiz Caffe kodu mevcuttur.

% 92 % 92,46

Görüntüleri döndürmek ve aşırı örnekleme kırpma çok küçük iyileştirmeler getiriyor.

Daha düşük öğrenme oranına sahip ek eğitim

Tüm modeller belirli bir noktadan sonra fazla geçmeye başlar. Bunu fark ettim çünkü doğrulama seti kaybının belirli bir noktada artmaya başladığını gördüm.

40000 yinelemeden sonra doğrulama kaybı artmaya başladı

Bu noktada eğitimi durdurdum çünkü model artık genelleştirilemeyebilir. Bu, öğrenme oranının sıfıra düşecek zamanı olmadığı anlamına gelir. Eğitim sürecine devam etmeye çalıştım ve model aşırı yüklenmeye başlayınca öğrenme oranını 10 kat düşürdüm. Bu muhtemelen doğruluğu% 0-0,5 oranında artırır.

Daha fazla eğitim verisi

İlk önce verileri 3 gruba ayırdım: eğitim seti (% 64), doğrulama seti (% 16) ve test seti (% 20). Birkaç gün sonra, verilerin% 36'sından vazgeçmenin çok fazla olabileceğini düşündüm. Eğitim ve doğrulama setlerini birleştirdim ve sonuçlarımı kontrol etmek için test setini kullandım.

Bir modeli yeniden eğittim, "görüntü döndürme" ve "düşük oranlı ek eğitim" ekledim ve aşağıdaki iyileştirmeleri aldım:

% 92,6 % 93,5

Eğitim verilerindeki hataları yeniden etiketleme

Doğrulama setindeki sınıflandırıcının hatasını analiz ederken, bazı hataların çok yüksek bir güvene sahip olduğunu fark ettim. Başka bir deyişle, model bunun bir şey olduğunu (yeşil ışık gibi) belirlerken, eğitim verileri bunun tersini gösterir (kırmızı ışık gibi).

Yukarıdaki şekilde en sağdaki sütunun oldukça yüksek olduğuna dikkat edin. Bu, bir çok hata olduğu anlamına gelir. > % 95 güven seviyesi. Bu koşulları dikkatlice incelerken, bu yaygın hataların eğitimli modelden değil, eğitim setinin temel gerçeğinden kaynaklandığını gördüm.

Bu hataları eğitim setinde düzeltmeye karar verdim. Modeli karıştıran ve genellemeyi zorlaştıran bu hatalar olmalıdır. Nihai test setinde temel gerçekte hatalar olsa bile, daha genelleştirilmiş bir modelin tüm görüntülerde daha yüksek doğruluk elde etme olasılığı daha yüksektir.

709 resmi manuel olarak işaretledim ve modellerimden birinde hata oluştu. Bu, 709 görüntünün 337'sindeki temel gerçeği değiştirdi. Bu manuel çalışma bir saat sürdü ve ayrıca verimliliği artırmak için python komut dosyaları kullandım.

Yukarıdakiler, modelin yeniden etiketlenmesi ve yeniden eğitilmesinin sonucudur. Daha iyi görünüyor!

Bu modelin asansörü:

% 93,5 % 94,1

Kombinasyon modeli

Birkaç modeli birlikte kullanmak ve sonuçlarının ortalamasını almak da doğruluğu artırır. Eğitim sürecinde, bütüne dahil olan modellerde farklı türlerde değişiklikler yaptım. Sıfırdan eğitilmiş bir modeli (kendi doğruluğu düşük olsa bile) ince ayarlanmış bir ön işleme modeliyle birlikte kullanarak, önemli ölçüde iyileştirilmiş sonuçlar elde ettik. Belki de bu şekilde daha fazla özellik öğrenildi.

Sonunda, 3 modeli% 94.1,% 94.2 ve% 92.9 doğrulukla birleştirdik ve birleşik doğruluk% 94.8.

Bitmemiş kısım

Yapacak çok şey var! Umarım bu fikirlerden bazıları başka yerlerde yararlıdır.

Aşırı uyumla mücadele

Aşırı uyumla başa çıkmaya çalışırken, hiçbiri önemli iyileştirmeler sağlamayan birkaç şey denedim:

Ağdaki kayıp oranını artırın

Daha fazla veri geliştirme (rastgele kaydırma, yakınlaştırma, eğme)

Daha fazla eğitim verisi dağıtın: 80/20 yerine 90/10 ayırma kullanın

Veri kümesini dengeleyin

Veri seti çok dengeli değil:

Görüntülerin% 19'u trafik ışığı olmadan işaretlenmiştir

% 53 kırmızı ışık

% 28 yeşil ışık

Veri setini daha az yaygın olan yüksek hızda örnekleme sınıflarıyla dengelemeye çalıştım, ancak herhangi bir gelişme bulamadım.

Gündüzü ve geceyi ayırt edin

Benim sezgim, trafik ışıklarını tanımlamanın gündüz ve gece çok farklı olmasıdır. Sanırım bu modeli daha basit iki soruya bölerek yardımcı olabilirim.

Ortalama piksel yoğunluğunu gözlemleyerek, görüntüyü gece ve gündüz olarak bölmek oldukça kolaydır:

Çok doğal bir görüntü ayrımı görebilirsiniz, düşük ortalama gece çekilen karanlık görüntü ve gün içinde alınan parlak görüntüdür.

Hiçbiri sonuçları iyileştirmeyen iki yöntem denedim:

Gündüz ve gece görüntüleri için iki ayrı model eğitin

Ağı 3 yerine 6 kategoriyi tahmin edecek şekilde eğitin; yöntem aynı zamanda bunun gündüz mü gece mi olduğunu tahmin etmektir.

SqueezeNet'in daha iyi bir çeşidini kullanın

İki geliştirilmiş SqueezeNet varyantı ile biraz denedim. Kalan bağlantıların ilk kullanımı ve yoğun seyrek yoğun eğitimle ikinci eğitim (makalede daha fazla ayrıntı). Bunun faydası yok.

Trafik ışığı konumlandırma

Balina tanıma yarışmasını nasıl kazandıklarıyla ilgili deepsense.io'da bir makale okuduktan sonra, önce görüntüdeki trafik ışığının konumunu tanıyan ve ardından küçük bir alandaki trafik ışığının durumunu tanıyan bir yer belirleyici eğitmeye çalıştım.

Slotla birlikte yaklaşık 2000 resim ekleyerek birkaç saat geçirdim. Bir modeli eğitmeye çalışırken, muhtemelen yeterli etiket verisi olmadığı için çok hızlı bir şekilde uyuyor. Belki daha fazla görüntüye açıklama ekleyebilirsem, bu yöntem uygulanabilir.

Sınıflandırıcıyı zor durumlarda eğitin

% 97'den daha az güvenilir sınıflandırıcıya sahip verileri seçerek, "daha zor" resimlerin% 30'unu atladım. Sonra sınıflandırıcıyı sadece bu resimleri kullanarak eğitmeye çalıştım. İyileşme yok.

Farklı optimizasyon algoritmaları

Öğrenme oranını doğrusal olarak azaltan, ancak herhangi bir gelişme görmeyen SGD'nin yerine Caffe'nin Adam yerleşim sürecini kısaca kullandım.

Portföye daha fazla model ekleyin

Kombine yöntem etkili olduğu için ölçeği ikiye katlamaya çalıştım. Farklı modeller oluşturmak için farklı parametreleri değiştirmeye ve bunları kombinasyona eklemeye çalışıyorum: ilk tohum, bırakma oranı, farklı eğitim verileri (farklı gruplama yöntemleri), eğitim sırasında farklı kontrol noktaları. Bunların hiçbiri önemli iyileştirmeler sağlamadı.

Son sınıflandırıcı ayrıntıları

Sınıflandırıcım nihayet ayrı ayrı eğitilmiş üç ağdan oluşuyor. Her sınıfın olasılığını verirler ve çıktı olarak ağırlıklı ortalama kullanılır. Her üç ağ da SqueezeNet'e dayanmaktadır, ancak her biri farklı eğitimlerden geçmiştir.

Model # 1-yüksek hızda örnekleme ile önceden eğitilmiş bir ağ

Eğitim, yeniden etiketlenen eğitim setine dayanır (kesinlik hatalarını düzelttikten sonra). Bu ince ayarlı model, ImageNet üzerinde önceden eğitilmiş bir SqueezeNet modeline dayanmaktadır.

Eğitim sırasında veri geliştirme:

Rastgele yatay aynalama

Ağa göndermeden önce 227 × 227 yamayı rastgele kırpın

Test sırasında her bir görüntü için 10 farklı varyant tahmini yapılır ve ardından hesaplanan ortalama nihai tahmin olarak alınır. 10 farklı varyant tahmini şunlardır:

227 × 227 boyutunda 5 mahsul: dört köşenin her biri için bir kez ve resmin ortasında bir kez

Her bir kırpma için yatay bir ayna görüntüsü oluşturulur

Doğrulama setinde model doğruluğu:% 94,21

Model boyutu: ~ 2.6 MB

Model No. 2-Dönme değişmezliğini artır

Görüntü döndürmenin eklenmesi dışında 1 numaralı modele çok benzer. Eğitim süresi boyunca, görüntü rastgele 90 °, 180 °, 270 ° döndürülür veya hiç döndürülmez. Test sırasında 1 numaralı modelde açıklanan 10 varyantın her biri 90 °, 180 ° ve 270 ° döndürülerek üç varyant üretti. Modelimiz tarafından toplam 40 değişken sınıflandırılır ve birlikte ortalaması alınır.

Doğrulama setinde model doğruluğu:% 94,1

Model boyutu: ~ 2.6 MB

Sıfırdan Model 3 eğitimi

Bu modelde ince ayar yapılmamış, ancak sıfırdan eğitilmiştir. Doğruluğu düşük olsa da eğitim setinden farklı özellikler öğrenmiştir. Bu, bir kombinasyon halinde kullanıldığında faydalı olabilir.

Eğitim ve test sırasında veri artırma, Model Bir ile aynıdır: yansıtma ve kırpma.

Doğrulama setinin model doğruluğu:% 92.92

Model boyutu: ~ 2.6 MB

Modeli bir araya getirin

Her model, görüntünün üç sınıfa ait olma olasılığını temsil eden üç değer çıkarır. Aşağıdaki ağırlıklarla çıktılarının ortalamasını aldık:

Model Bir: 0.28

İki numaralı model: 0.49

Model No.3: 0.23

Olası değerler üzerinde bir ızgara araması yaparak ve doğrulama setinde test ederek ağırlığın değerini buldum. Doğrulama setine biraz fazla uyuyor olabilirler, ancak çok fazla olmayabilir çünkü bu çok basit bir işlemdir.

Doğrulama setinin model doğruluğu:% 94.83

Model boyutu: ~ 7,84 MB

Nexar test setinde doğruluk:% 94,955

Model hatası örneği

Palmiye ağacındaki parlamanın neden olduğu yeşil noktalar, modelin yanlışlıkla bunun yeşil bir ışık sinyali olduğuna karar vermesine neden oldu.

Model, düz kırmızı ışığı yeşil ışık olarak değerlendirir. Birden fazla trafik ışığı olan bu tür bir kavşak biraz yanıltıcıdır.

Resmin sağ tarafında yeşil ışık var ancak model trafik ışığı olmadığına inanıyor.

Sonuç

Gerçek bir vakada ilk kez derin öğrenmeyi uyguluyorum! Sonuçlardan çok memnunum. Bu süreçte çok şey öğrendim. Gelecekte sizinle daha fazla iletişim kurma fırsatım var ~

Yapay zeka ve son teknoloji hakkında daha fazla bilgi için lütfen Qubit'in resmi hesabını takip edin (arama: qubit veya QbitAI), asistanla iletişim kurmak için resmi hesabı takip edin, kişisel tanıtım yapın, mesleği veya araştırma alanını ve yönünü açıklayın, asistan sizi çekecek Hararetli tartışmaya.

Bu makaleye ek olarak, yapay zeka öğrenmeyle ilgili başka bir makale bugün kamuya açık hesapta yayınlandı:

Hileler: Derin öğrenmeyi oynamak için ucuz donanım nasıl kullanılır, 1.000 ABD dolarından daha ucuza mal olur

Böyle iyi bir şey var mı? DNF oyuncusu, resmi fırçalamak için küçük bir sayı getirdi, ancak kazara değerinde 3000'den fazla öğe aldı
önceki
Timberwolves Rose'a layık değildir ve onları tekrar kullanılmamaktan daha ürpertici yapan şey takım arkadaşlarının kayıtsızlığıdır!
Sonraki
Şeytanın bedeni 48.000'dir ve gök cismi birincilik ödülünü kazanır! Süper Lig'in 24. turundaki koltuk sayısı: Luneng dördüncü
40 derece yüksek sıcaklıkta "kendi kendine fren" sistemi mükemmeldir ve arazi yolu bir inç kısa ve bir inç güçlüdür
Fortnite ve LOL arasında beş benzerlik! PlayerUnknown's Battlegrounds, 5 aydan fazla bir süredir haksızlık edilmedi
Wu Jingui'nin hayatı çok zor! Başkanın +00 toplantısından sonra genç utancını gizler mi? R&F koçu başarısızlığın en büyük nedenini ortaya koyuyor
Maç başına ortalama 8 sayı attı, ligi değiştiremezdi ama ligdeki hiçbir Rocket değişmezdi!
Yurtdışı için en iyi seçim 2017 Audi A3 Quattro giriş seviyesi lüks sedan
Tianmei sonunda bir şeyi doğru anladı: Kralların Glory ve kaybeden MVP yıldızları kaybetmeyecek ve artık domuz takım arkadaşlarından korkmayacak mı?
Guizhou Hengfeng küme düşme hileleri: standında "Dantel pantolon"! Skorcu kahraman, kazanmanın gerçek nedenini ortaya koyuyor
4 büyük lüks tedavi selamlıyor, test tanrısı temel maaşı almaya istekli, herkesin temel maaşa katılmak istemesine şaşmamalı
Wu Mochou ve Xiao Jiujiu, oyun tutkunu oyunun üçüncü yıldönümünde ortaya çıktılar Güzelliğini ortadan kaldıran ünlü spikerler izlenebilir mi?
Kasım ayında Chongqing'in plakaları maviden yeşile değişti, Bogo, bu arabaların satışlarının kırmızıdan sıcağa değiştiğine inanıyor.
Sıralamaların en altından korkmayın, iyi bir haber, Rockets'ın karşı koyacağını ve Batı Konferansı'nda dram olacağını gösteriyor!
To Top