MXNet Yazarı / Amazon Baş Bilimcisi Li Mu
Yazar: MXNet yazar / yönetmen bilim adamı Li Mu Amazon
Xin Zhiyuan Rehberi Derin öğrenme, bilgisayarla görme ve doğal dil işleme gibi birçok alanın hızlı gelişimini destekler. Günümüzün yapay zeka patlaması ve yetenek sıkıntısında, derin öğrenmede uzmanlaşmak, yapay zeka araştırma ve uygulama alanına girmek için önemli bir beceri haline geldi. Amazon'dan bir baş bilim insanı olan Li Mu, klasik bilgisayar vizyonu-görüntü sınıflandırması sorununu örnek alacak ve herkese 0'dan 1'e kadar derin bir sinir ağı modeli oluşturmayı öğretecek. Yeni başlayanların karşılaştığı birçok soru için, modeller için hızlı bir şekilde iyi sonuçlar elde etmek için yaygın bir yöntem olan geçiş öğrenimi de dahil olmak üzere ortam ayarları, veri işleme, model eğitimi ve efekt ayarlamadan eksiksiz bir giriş ve kod gösterimi sağlar. Herkesin panoramik ve temel bir anlayışa sahip olmasına izin verin.
Derin öğrenme çağında, ağın derinleşmesi, eğitim veri setinin boyutuna her zamankinden daha fazla bağımlılık yaratıyor. Akademide daha başarılı olan büyük ölçekli veri kümeleri genellikle temel genel bilişsel problemler etrafında döner ve günlük beden algısına sahip uygulama senaryolarından uzaktır. Moda, insanların günlük yaşamıyla yakından ilgilidir, ancak sektördeki büyük miktarda içerik hala manuel düzenlemeye dayanmaktadır. Yapay zeka teknolojisini tanıtarak verimliliği artırmak ve makinelerin modayı tanımasına izin vermek ilginç ve faydalı bir konu olacak.
Kısa bir süre önce, Alibaba Image Hemei ekibi ve Hong Kong Politeknik Üniversitesi Tekstil ve Giyim Bölümü, 2018 FashionAI Global Challenge'ı ortaklaşa düzenledi. Yarışmada açılan FashionAI veri seti, gıda, giyim, barınma ve ulaşımda ilk büyük ölçekli yüksek kaliteli büyük ölçekli yüksek kaliteli "giyim" oldu. veri kümesi. Veri seti, sekiz farklı kostümün görüntü verilerini içerir.Yarışmacıların görevlerinden biri, resimlerdeki kostümlerin nitelikleri hakkında doğru kararlar vermek için bir algoritma tasarlamaktır. Örneğin, etek resimleri altı özelliğe ayrılmıştır: görünmez, kısa etek, orta etek, üç çeyrek etek, dokuz noktalı etek ve uzun etek. Bunu klasik bir görüntü sınıflandırma problemi olarak görebilir ve evrişimli sinir ağları yoluyla çözebiliriz.
FashionAI veri setinde kullanılan görüntü verilerinin tümü, gerçek sahnelerde modellerin uygulanmasında karşılaşılan zorlukları tasvir eden e-ticaretin gerçek sahnelerinden gelir. FashoinAI veri setinde eğitilen model, giyimdeki profesyonel tasarım öğelerinin belirlenmesine yardımcı olmak için gelecekte hem akademik araştırma değerine hem de pratik uygulamaya sahiptir. Bilgisayarla görme araştırmacıları için iyi bir seçimdir.
Bu makale kullanacak MXNet Yöntemi açıklayın. MXNet, kurulumu ve kullanımı kolay açık kaynaklı bir derin öğrenme aracıdır.Herkesin hızlı bir şekilde sinir ağları kurmasına ve verimli eğitim yapmasına olanak tanıyan bir python arayüzü gluon sağlar. Daha sonra, gloon kullanarak basit ve etkili bir evrişimli sinir ağı algoritmasını sıfırdan nasıl tasarlayacağınızı göstermek için yarışmadaki etek görevini örnek olarak alacağız.
Sistem yapılandırması
Derin öğrenme eğitimi için, eğitimi hızlandırmak için GPU kullanmak önemlidir. Bu yarışmadaki veri miktarı çok fazla olmasa da, yalnızca CPU hesaplamalarının kullanılması bir model eğitiminin birkaç gün sürmesine neden olabilir! Bu nedenle, eğitim için en az bir GPU kullanmanızı öneririz. GPU'su olmayanlar için aşağıdaki iki seçeneğe başvurabilirsiniz:
Bütçenize ve ihtiyaçlarınıza göre bir GPU (gençler için ilk) ile başlayın. Herkesin satın alması için bir GPU satın alma rehberi yazdık.
Bu yarışma için Amazon Cloud GPU sunucusunu kiraladık. Kendi bulut sunucunuzu yapılandırmanıza yardımcı olacak bir AWS çalıştırma eğitimi yazdık.
Donanımı ve sistemi yapılandırdıktan sonra, kodumuzu GPU donanımına gerçekten bağlamak için Nvidia tarafından sağlanan CUDA ve CUDNN'yi kurmamız gerekiyor. Bu parçanın montajı nispeten kolaydır, bu bölümdeki talimatlara başvurabilirsiniz.
Amazon bulut sunucusunu kullanmayı seçerseniz, sistem görüntüsünü seçerken Derin Öğrenme AMI'sini seçmenizi öneririz. Bu görüntü, GPU eğitimiyle ilgili ortamları (CUDA, CUDNN) zaten yapılandırmıştır ve başka bir yapılandırma gerekmez.
MXNet'i kurun
Ortamı yapılandırdıktan sonra MXNet'i kurabiliriz. MXNet'i kurmanın birçok yolu vardır.Python için GPU sürümünü bir Linux sistemine yüklemek istiyorsanız, yalnızca şunları yapmanız gerekir:
Bu kadar. Sistemde CUDA8.0 yüklüyse, kodu ilgili mxnet-cu80 ile değiştirebilirsiniz. Bazı öğrenciler başka dil arayüzlerini veya işletim sistemlerini kullanmak veya kaynak koddan kendi başlarına derlemek isterlerse, kendi durumlarına uygun kurulum adımlarını resmi kurulum talimatlarında bulabilirler. Bir sonraki öğreticide, biz MXNet'in python arayüzü gluon'u kullanın Herkesi bu yarışmaya başlamak için yönlendirin.
Veri toplama
Öncelikle mevcut dizinde yeni bir veri klasörü oluşturuyoruz ve ardından ısınma veri setini, eğitim veri setini ve test veri setini resmi web sitesinden verilere indirip açıyoruz. Yarışmanın verileri yarışmanın resmi web sitesinden elde edilebilir, ancak öğrencilerin Tianchi hesabına giriş yapmaları ve indirmeden önce yarışmaya katılmak için kaydolmaları gerekir. Üç ana veri seti vardır:
fashionAI_attributes_train_20180222.tar, sekiz görev için etiketli eğitim görüntülerini içeren ana eğitim verileridir. Bu eğitimde, sadece etek görevini bir gösteri olarak kullanıyoruz.
fashionAI_attributes_test_a_20180222.tar, sekiz görev için etiketlenmemiş eğitim resimlerini içeren tahmin verileridir.Amacımız, modeli eğittikten sonra bu verilerle ilgili sınıflandırma tahminleri vermektir.
warm_up_train_20180201.tar eğitim verisine önemli bir tamamlayıcı olan eğitim seti ile kopyalanmayan etek eğitim seti resimlerini içeren ısınma verisidir. Daha fazla ilerlemeden önce, lütfen mevcut dizin yapısının aşağıdaki gibi olduğundan emin olun:
Önlemler:
İndirilen veriler, sıkıştırmadan önce ve sonra yaklaşık 8G sabit disk alanı kaplayacaktır.Aşağıdaki veri sıralamasında, verileri daha uygun bir dizin yapısına kopyalayacağız, bu nedenle lütfen yeterli sabit disk alanı ayırın.
Görüntü veri seti genellikle çok büyük olduğu için, gluon tüm görüntüleri tek seferde belleğe okumaz, bunun yerine eğitim süreci boyunca sabit diskteki görüntü dosyalarını sürekli olarak okur. Nitelikli öğrencilerden, veri okuma darboğazını önlemek ve eğitim hızını büyük ölçüde artırmak için resimleri SSD sabit diskinde saklamaları istenir.
Öncelikle, sıralanan tüm veriler için bir dizin olarak data altında yeni bir train_valid dizini oluşturuyoruz.
Etek verilerini seçmemizin nedenlerinden biri, hem ısınma verilerinin hem de eğitim verilerinin eğitim resimlerini sağlaması, böylece daha bol eğitim kaynağına sahip olabilmemizdir. Aşağıda, işaretli dosyaları ısınma verileri ve eğitim verilerinden ayrı ayrı seçeceğiz:
Her resmin yolunu ve etiketini okuyun
Bu resmi, etiketine göre data / train_valid dizininin altındaki ilgili kategori dizinine yerleştirin
Verilerin ilk% 90'ını eğitim için ve verilerin son% 10'unu doğrulama için kullanın
İlk adım, eğitim görüntüsünün yolunu ve etiketini okumaktır.
Okunan verileri kontrol edelim. Görüntü_yolu, yol ve görüntünün karşılık gelen etiketinden oluşmalıdır; burada etiket birkaç n ve bir y'den oluşan bir dizedir ve y harfinin göründüğü konum, görüntünün karşılık gelen türüdür.
Bu resimdeki eteğin uzun bir etek olduğu görülebilmektedir.Resmi açıklamaya göre işarete uygun olduğu görülmektedir. Ardından eğitim seti ve test seti katalogları ile 6 etek kategorisine karşılık gelen alt katalogları hazırladık.
Çalıştırdıktan sonra dizin yapısı aşağıdaki gibidir:
Diğer giysi türlerini işlemek için, yalnızca görev değişkenini ilgili giysi türünün adı olarak belirtmeniz gerekir. Son olarak resimleri kendi dizinlerine kopyalıyoruz. Burada eğitim setinin ve test setinin eşit olmayan bölünmesini önlemek için resimlerin sırasını kasıtlı olarak rastgele bozduğumuza dikkat edilmelidir.
Veriler hazır olduktan sonra algoritmayı tasarlamaya başlayabiliriz.
Kıyafet tanıma, bilgisayarla görmede klasik bir problem olarak görülebilir: görüntü sınıflandırması. Tipik bir örnek, yarışmacıların 1.000 kategoriye ait 14 milyondan fazla görüntü için algoritmalar tasarlamak ve bunları doğru bir şekilde sınıflandırmak zorunda olduğu ImageNet veri kümesi ve ILSVRC yarışmasıdır. Giysi öznitelik ayrımcılığı yarışmasında, farklı niteliklere sahip giysilerin farklı kategorilere ait olduğunu düşünebiliriz, böylece katılmak için ImageNet'teki kazanan algoritmaya başvurabiliriz.
Ön aşamada, organizatör eğitim için her giysi türü için yaklaşık 10.000 resim sağladı.Bu miktardaki veri, sıfırdan harika bir derin öğrenme modeli yetiştirmemiz için yeterli değil. Böylece, ImageNet veri setinde eğitilmiş bir modelden başlayarak transfer öğrenme fikrini ödünç alabilir ve bunu "giysiler hakkında daha fazla bilgi sahibi" bir modele dönüştürebiliriz. Aşağıdaki şekilde gösterildiği gibi, soldaki ImageNet veri setinde eğitilen ağdır ve sağdaki ise rekabet etmek üzere olduğumuz ağdır. İki ağın ana yapısı aynıdır, bu nedenle ana ağ ağırlıklarını kopyalayabiliriz. Çıktı katmanındaki iki ağın sınıflandırma sayısı ve anlamları farklı olduğundan, çıktı katmanını yeniden tanımlamamız ve rastgele başlatmamız gerekir.
ImageNet veri setinde, herkes esas olarak evrişimli sinir ağlarını kullanıyor ve son birkaç yılda birçok farklı ağ mimarisi de ortaya çıktı. Gluon resmi olarak birçok farklı önceden eğitilmiş evrişimli sinir ağı modeli sunar.Bu yarışmada, eğitim için başlangıç noktası olarak daha iyi resnet50_v2 modelini seçiyoruz. Transfer öğrenmeye daha ayrıntılı bir giriş için, lütfen gluo Çince eğitiminde İnce ayar: İnce ayar yaparak aktarım öğrenimi bölümüne bakın.
Öncelikle kullanılması gereken ortamı hazırlıyoruz.
Aşağıda önceden eğitilmiş resnet50_v2 modelini bir cümleyle içe aktarabiliriz. Modeli ilk kez içe aktarıyorsanız, kodun önceden eğitilmiş modeli indirmesi biraz zaman alacaktır.
ImageNet üzerinde eğitilen modelin çıktısı 1000 boyuttur, yeni bir resnet50_v2 ağı tanımlamamız gerekir, burada
Çıktı katmanından önceki ağırlıklar önceden eğitilmiştir
Çıktı 6 boyutludur ve çıktı katmanının ağırlıkları rastgele başlatılır
Bundan sonra, belirli makine ortamına göre ağı CPU veya GPU'ya kaydetmeyi seçebiliriz.
Yukarıdaki kodun son satırına gluonun temel özelliklerinden biri olan hibridize diyoruz.Emperatif programlama ile oluşturulan model, yürütme sırasında işlemlerin çoğunu sembolik uygulamaya dönüştürebilir, bu da bir yandan geliştirme verimliliğini artırır. , Aynı zamanda çalışma hızını sağlarken. Hibridize etmeye yönelik daha ayrıntılı bir giriş için lütfen gluo Çince eğitimindeki Hibritleştirme: Daha Hızlı ve Daha İyi Taşıma bölümüne bakın.
Sonra birkaç yardımcı fonksiyon tanımlıyoruz, bunlar
Resmi sonuç değerlendirme standardı olan AveragePrecision'ı hesaplayın.
Eğitim seti ve doğrulama setinin görüntü büyütme işlevi.
İşlev, her eğitim turundan sonra test setinde değerlendirilir
Görüntü büyütmeye daha ayrıntılı bir giriş için lütfen Çince eğitimdeki görüntü büyütme bölümüne bakın.
Aşağıda bazı eğitim parametreleri tanımlıyoruz. Geçiş öğreniminde, genellikle tüm ağın parametrelerinin büyük ölçüde değiştirilmesine gerek olmadığını, yalnızca eğitim verilerinde ince ayar yapılması gerektiğini düşündüğümüzü unutmayın, bu nedenle öğrenme oranımız 0,001 gibi nispeten küçük bir değere ayarlanır.
Gösteriyi kolaylaştırmak için, süreci göstermek için yalnızca iki tur eğitim döngüsü gerçekleştiriyoruz.
Sonra verileri okuyabiliriz. Önceki sıralamadan sonra, veriler gluon.data arayüzü ile okunabilir.
Aşağıda, ağın optimizasyon algoritmasını ve kayıp fonksiyonunu tanımlıyoruz. Bu yarışmada rastgele gradyan inişi seçerek daha iyi sonuçlar elde edebiliriz. Sınıflandırma problemleri genellikle çapraz entropiyi bir kayıp fonksiyonu olarak kullanır.Ayrıca, mAP göstergesine ek olarak modelin doğruluğunu da önemsiyoruz.
Artık her şey hazır olduğuna göre eğitime başlayabiliriz! Yine hızlı bir gösteri için sadece iki döngü yapıyoruz. Daha iyi bir eğitim etkisi elde etmek için lütfen çağları uzatmayı unutmayın.
Eğitim bitti, etki ne olacak? Test setinin birkaç resmini doğrudan çekebilir ve tahmin edilen türün doğru olup olmadığını görmek için bunları insan gözleriyle karşılaştırabiliriz.
Gördüğünüz gibi, sadece iki tur eğitim olmasına rağmen, modelimiz gösterilen birkaç resim üzerinde doğru tahminlerde bulunmuştur.
Şimdiye kadar, veri sıralamadan tahmine kadar örnek kodu gösterdik. Buradan başlayabilir, kodu sürekli geliştirebilir ve daha iyi sonuçlara doğru ilerleyebilirsiniz. Ayrıca FashoinAI veri kümesini indirmeniz ve bu makalede öğrenilen becerileri doğrudan kullanmanız önerilir. Aşağıda geliştirilebilecek bazı talimatlar veriyoruz, onlarla başlayabilirsiniz:
1. Ayar parametreleri Öğrenme oranı, parti boyutu, eğitim döngüsü sayısı vb.
Parametreler karşılıklı etkiye sahiptir. Örneğin, daha küçük bir öğrenme oranı daha fazla döngü anlamına gelebilir.
Doğrulama setindeki sonuçlara göre parametrelerin seçilmesi önerilir.
Farklı verilerin en iyi parametreleri farklı olabilir, her görev için karşılık gelen en iyi parametreleri seçmeniz önerilir.
2. Model seçin .
ResNet modeline ek olarak gluon, resmi belgelerde ImageNet'teki performanslarına göre seçilebilen diğer birçok popüler evrişimli sinir ağı modeli de sağlar.
Sınırlı bilgi işlem kaynakları olması durumunda, daha az bellek kullanan ve daha hızlı hesaplama hızına sahip bir model seçmeyi düşünebilirsiniz.
3 . Daha kapsamlı resim büyütme
Eğitim sırasında daha fazla görüntü işleme eklemeyi düşünebilirsiniz. İmage.CreateAugmenter işlevinin birçok başka parametresi vardır, efektleri ayrı ayrı deneyebilirsiniz.
Tahmin ederken, tahmin edilen resmin farklı ekinlerini / ince ayarlarını yapın ve ayrı ayrı tahmin edin ve son olarak, daha sağlam bir sonuç elde etmek için nihai yanıt olarak ortalama tahmini değeri kullanın.
Referans bağlantısı:
GPU satın alma kılavuzu
AWS operasyon öğreticisi
CUDA kurulumu
MXNet kurulumu
Rekabet verilerini alın https://tianchi.aliyun.com/m.html#/competition/231649
İnce ayar öğreticisi
Hibritleştirme: daha hızlı ve daha iyi taşıma
Görüntü büyütme
Topluluğa katıl
Xinzhiyuan AI teknolojisi + endüstri topluluğunun işe alımında, AI teknolojisi + endüstri uygulamasına ilgi duyan öğrenciler, gruba katılmak için küçük bir WeChat hesabı ekleyebilir: aiera2015_1; incelemeyi geçtikten sonra gruba katılmaya davet edeceğiz. Topluluğa katıldıktan sonra grubu değiştirdiğinizden emin olun Açıklamalar (isim-şirket-pozisyon; profesyonel grup incelemesi katıdır, lütfen anlayın).