- Úvod
- Obsah
- Použití CNN ke klasifikaci ručně psaných číslic na datové sadě MNIST
- Identifikace obrázků z datové sady CIFAR-10 pomocí CNN
- Tady je vidět, co jsem v modelu změnil:
- Kategorizace obrázků sítě ImageNet pomocí CNN
- O datové sadě ImageNet
- Tady přichází na řadu datová sada Imagenette společnosti Fast.ai
- Stáhněte si datovou sadu Imagenette
- Načítání obrázků pomocí ImageDataGenerator
- Stavba základního modelu CNN pro klasifikaci obrázků
- Použití transferového učení (VGG16) ke zlepšení přesnosti
- Načítání vah modelu VGG16
- Generování funkcí z VGG16
- Kam dál?
Úvod
Konvoluční neuronové sítě (CNN) – koncept, který stojí za nedávnými průlomy a vývojem v oblasti hlubokého učení.
Konvoluční neuronové sítě prolomily hranice a vystoupily na trůn, aby se staly nejmodernější technikou počítačového vidění. Mezi různými typy neuronových sítí (mezi další patří rekurentní neuronové sítě (RNN), sítě s dlouhou krátkodobou pamětí (LSTM), umělé neuronové sítě (ANN) atd. jsou CNN snadno nejpopulárnější.
Tyto modely konvolučních neuronových sítí jsou v prostoru obrazových dat všudypřítomné. Fenomenálně dobře fungují v úlohách počítačového vidění, jako je klasifikace obrazu, detekce objektů, rozpoznávání obrazu atd.
Takže – kde si můžete procvičit své dovednosti s CNN? Tak to jste na správném místě!
Existují různé datové sady, které můžete využít pro aplikaci konvolučních neuronových sítí. Zde jsou tři populární datové sady:
- MNIST
- CIFAR-10
- ImageNet
V tomto článku budeme vytvářet modely klasifikace obrázků pomocí CNN na každé z těchto datových sad. To je pravda! Budeme zkoumat MNSIT, CIFAR-10 a ImageNet, abychom prakticky pochopili, jak CNN fungují pro úlohu klasifikace obrázků.
V tomto bezplatném kurzu se můžete dozvědět vše o konvolučních neuronových sítích(CNN): Konvoluční neuronové sítě (CNN) od nuly
Mou inspirací pro napsání tohoto článku je pomoci komunitě aplikovat teoretické znalosti praktickým způsobem. To je velmi důležité cvičení, protože vám nejen pomůže vybudovat si hlubší pochopení základního konceptu, ale také vás naučí praktickým detailům, které se můžete naučit pouze prostřednictvím implementace konceptu.
Pokud jste ve světě neuronových sítí, CNN, klasifikace obrazu nováčci, doporučuji projít tyto vynikající podrobné výukové programy:
- Úvod do neuronových sítí (bezplatný kurz!)
- Demystifikace matematiky v pozadí konvolučních neuronových sítí (CNN)
- Sestavte svůj první model klasifikace obrazu za pouhých 10 minut
A pokud se chcete naučit počítačové vidění a hluboké učení do hloubky, měli byste se podívat na naše oblíbené kurzy:
- Počítačové vidění s využitím hlubokého učení
- Certifikovaný program AI & ML Blackbelt+
Obsah
- Využití CNN ke klasifikaci rukopisu-psaných číslic na datasetu MNIST
- Identifikace obrázků z datasetu CIFAR-10 pomocí CNNs
- Kategorizace obrázků datasetu ImageNet pomocí CNNs
- Kam dál?
Poznámka: V tomto článku budu pro demonstraci klasifikace obrázků pomocí CNN používat Keras. Keras je vynikající framework, který se můžete naučit, když začínáte s hlubokým učením.
Použití CNN ke klasifikaci ručně psaných číslic na datové sadě MNIST
MNIST (Modifikovaný národní institut pro standardy a technologie) je známá datová sada používaná v počítačovém vidění, kterou vytvořil Yann Le Cun et. al. Skládá se z obrázků, které představují ručně psané číslice (0-9), rozdělené do trénovací sady 50 000 obrázků a testovací sady 10 000 obrázků, kde každý obrázek má šířku a výšku 28 x 28 pixelů.
Tato datová sada se často používá k procvičování jakéhokoli algoritmu vytvořeného pro klasifikaci obrázků, protože datová sada je poměrně snadno ovladatelná. Proto doporučuji, aby to byl váš první dataset, pokud v této oblasti teprve začínáte.
MNIST je standardně dodáván s Kerasem a můžete jednoduše načíst trénovací a testovací soubory pomocí několika řádků kódu:
Tady je tvar X (rysy) a y (cíl) pro trénovací a validační data:
X_train shape (60000, 28, 28) y_train shape (60000,) X_test shape (10000, 28, 28) y_test shape (10000,)
Předtím, než budeme trénovat model CNN, sestavíme pro tento dataset základní plně propojenou neuronovou síť. Základní kroky pro sestavení modelu klasifikace obrazu pomocí neuronové sítě jsou následující:
- Zploštíme rozměry vstupního obrázku na 1D (šířka pixelů x výška pixelů)
- Normalizujeme hodnoty pixelů obrázku (vydělíme 255)
- Jedno-Hot zakódujte kategoriální sloupec
- Sestavte architekturu modelu (sekvenční) s hustými vrstvami
- Trénujte model a provádějte předpovědi
Takto můžete sestavit model neuronové sítě pro MNIST. Pro lepší pochopení jsem příslušné části kódu okomentoval:
Po spuštění výše uvedeného kódu byste si uvědomili, že snadno dosáhneme dobré validační přesnosti kolem 97 %.
Upravme výše uvedený kód tak, abychom vytvořili model CNN.
Jednou z hlavních výhod použití CNN oproti NN je, že nemusíte vstupní obrázky zplošťovat na 1D, protože jsou schopny pracovat s obrazovými daty ve 2D. To pomáhá zachovat „prostorové“ vlastnosti obrázků.
Tady je celý kód modelu CNN:
Přestože naše maximální přesnost validace pomocí jednoduchého modelu neuronové sítě byla přibližně 97 %, model CNN je schopen dosáhnout více než 98 % s jedinou konvoluční vrstvou!
Můžete pokračovat a přidat další vrstvy Conv2D a také si pohrát s hyperparametry modelu CNN.
Identifikace obrázků z datové sady CIFAR-10 pomocí CNN
MNIST je datová sada pro začátečníky v oblasti počítačového vidění. Pomocí modelu CNN lze snadno získat více než 90 % bodů při validaci. Ale co když už nejste začátečníci a potřebujete něco náročného, abyste mohli využít své koncepty?“
Tady přichází na řadu datová sada CIFAR-10!“
Takto popisují datovou sadu vývojáři stojící za CIFAR (Canadian Institute For Advanced Research):
Datová sada CIFAR-10 se skládá z 60 000 barevných obrázků 32 x 32 v 10 třídách, přičemž každá třída obsahuje 6 000 obrázků. K dispozici je 50 000 trénovacích obrázků a 10 000 testovacích obrázků.
Důležité body, které odlišují tuto datovou sadu od MNIST, jsou následující:
- Obrázky v CIFAR-10 jsou barevné ve srovnání s černobílou texturou MNIST
- Každý obrázek má rozměry 32 x 32 pixelů
- 50 000 trénovacích obrázků a 10 000 testovacích obrázků
Nov, tyto snímky jsou pořízeny za různých světelných podmínek a pod různými úhly, a protože se jedná o barevné snímky, uvidíte, že existuje mnoho rozdílů v samotné barvě podobných objektů (například barva vody v oceánu). Pokud použijete jednoduchou architekturu CNN, kterou jsme viděli v příkladu MNIST výše, získáte nízkou přesnost validace kolem 60 %.
To je hlavní důvod, proč doporučuji CIFAR-10 jako dobrou datovou sadu pro procvičení dovedností ladění hyperparametrů pro CNN. Dobré je, že stejně jako MNIST je i CIFAR-10 snadno dostupný v Kerasu.
Datovou sadu můžete jednoduše načíst pomocí následujícího kódu:
from keras.datasets import cifar10# loading the dataset (X_train, y_train), (X_test, y_test) = cifar10.load_data()
Tady je návod, jak můžete pro CIFAR-10 vytvořit slušný (kolem 78-80 % na validaci) model CNN. Všimněte si, jak byly aktualizovány hodnoty tvaru z (28, 28, 1) na (32, 32, 3) podle velikosti obrázků:
Tady je vidět, co jsem v modelu změnil:
- Zvýšil jsem počet vrstev Conv2D, abychom vytvořili hlubší model
- Zvýšil jsem počet filtrů, abychom se naučili více rysů
- Přidal jsem Dropout pro regularizaci
- Přidal jsem více hustých vrstev
Přesnost trénování a validace napříč epochami:
Tento výkon můžete snadno zastínit vyladěním výše uvedeného modelu. Jakmile zvládnete model CIFAR-10, je v Kerasu k dispozici také model CIFAR-100, který můžete použít pro další procvičování. Protože má 100 tříd, nebude to snadný úkol!“
Kategorizace obrázků sítě ImageNet pomocí CNN
Teď, když jste zvládli MNIST a CIFAR-10, posuňme tento problém o stupeň výš. Zde se podíváme na slavnou datovou sadu ImageNet.
ImageNet je hlavní databáze, která stojí za soutěží ImageNet Large Scale Recognition Challenge (ILSVRC). Jedná se o něco jako olympiádu počítačového vidění. Je to soutěž, která poprvé zpopularizovala CNN, a každý rok v ní soutěží nejlepší výzkumné týmy napříč průmyslovými odvětvími a akademickou obcí se svými nejlepšími algoritmy v úlohách počítačového vidění.
O datové sadě ImageNet
Datová sada ImageNet obsahuje více než 14 milionů obrázků, ručně označených ve 20 000 kategoriích.
Na rozdíl od datových sad MNIST a CIFAR-10, o kterých jsme již hovořili, mají obrázky v síti ImageNet slušné rozlišení (224 x 224), a právě to pro nás představuje výzvu: 14 milionů obrázků, každý o rozměrech 224 x 224 pixelů. Zpracování datové sady této velikosti vyžaduje velký výpočetní výkon z hlediska CPU, GPU a RAM.
Nevýhoda – to může být pro běžný notebook příliš mnoho. Jaké je tedy alternativní řešení? Jak může nadšenec pracovat s datovou sadou ImageNet?
Tady přichází na řadu datová sada Imagenette společnosti Fast.ai
Imagenette je datová sada, která je extrahována z velké sbírky obrázků ImageNet. Důvodem vydání Imagenette je to, že výzkumníci a studenti mohou cvičit na obrázcích na úrovni ImageNet, aniž by potřebovali tolik výpočetních prostředků.
Slovy samotného Jeremyho Howarda:
„Imagenette jsem (tedy Jeremy Howard) vytvořil hlavně proto, že jsem chtěl malou datovou sadu pro vidění, kterou bych mohl použít k rychlému zjištění, zda by mé nápady na algoritmy mohly mít šanci fungovat. Obvykle nemají, ale jejich testování na Imagenetu mi trvá opravdu dlouho, než to zjistím, zejména proto, že mě zajímají algoritmy, které si na konci tréninku vedou obzvlášť dobře.“
Myslím si ale, že to může být užitečný dataset i pro ostatní.“
A to je to, co budeme také používat k procvičování!“
Stáhněte si datovou sadu Imagenette
Tady je návod, jak můžete datovou sadu načíst (příkazy pro terminál):
$ wget https://s3.amazonaws.com/fast-ai-imageclas/imagenette2.tgz$ tar -xf imagenette2.tgz
Po stažení datové sady si všimnete, že má dvě složky – „train“ a „val“. Ty obsahují trénovací, respektive validační sadu. Uvnitř každé složky jsou samostatné složky pro jednotlivé třídy. Zde je mapování tříd:
Tyto třídy mají stejné ID v původní datové sadě ImageNet. Každá ze tříd má přibližně 1000 obrázků, takže celkově jde o vyváženou datovou sadu.
Načítání obrázků pomocí ImageDataGenerator
Keras má tuto užitečnou funkci pro načítání velkých obrázků (jako máme zde) bez maximálního vytížení paměti RAM tím, že to provádí v malých dávkách. ImageDataGenerator v kombinaci s fit_generator poskytuje tuto funkcionalitu:
Generátor ImageDataGenerator sám odvozuje označení tříd a počet tříd z názvů složek.
Stavba základního modelu CNN pro klasifikaci obrázků
Stavíme základní model CNN pro naši datovou sadu Imagenette (pro účely klasifikace obrázků):
Pokud porovnáme validační přesnost výše uvedeného modelu, zjistíte, že i když se jedná o hlubší architekturu, než jakou jsme využívali doposud, jsme schopni dosáhnout validační přesnosti pouze kolem 40-50 %.
Důvodů může být mnoho, například náš model není dostatečně komplexní na to, aby se naučil základní vzory obrázků, nebo jsou možná trénovací data příliš malá na to, aby se dala přesně zobecnit napříč třídami.
Krok vpřed – transferové učení.
Použití transferového učení (VGG16) ke zlepšení přesnosti
VGG16 je architektura CNN, která se v soutěži ImageNet Challenge 2014 umístila na prvním místě. Navrhla ji skupina Visual Graphics Group v Oxfordu a má celkem 16 vrstev, z toho 13 samotných konvolučních vrstev. Načteme předtrénované váhy tohoto modelu, abychom mohli využít užitečné funkce, které se tento model naučil pro naši úlohu.
Načítání vah modelu VGG16
from keras.applications import VGG16# include top should be False to remove the softmax layerpretrained_model = VGG16(include_top=False, weights='imagenet')pretrained_model.summary()
Generování funkcí z VGG16
Vybereme užitečné funkce, které již VGG16 zná z obrázků naší datové sady:
from keras.utils import to_categorical# extract train and val featuresvgg_features_train = pretrained_model.predict(train)vgg_features_val = pretrained_model.predict(val)
# OHE target columntrain_target = to_categorical(train.labels)val_target = to_categorical(val.labels)
Všimněte si, jak rychle začne váš model konvergovat. Za pouhých 10 epoch dosáhnete přesnosti validace přes 94 %. Není to úžasné?“
V případě, že jste zvládli datovou sadu Imagenette, společnost fastai vydala také dvě varianty, které obsahují třídy, které budete obtížně klasifikovat:
- Imagewoof:
- Image网 („wang“): 10 tříd psích plemen, obtížnější problém na klasifikaci
- : Kombinace datových sad Imagenette a Imagewoof a několika triků, které z ní dělají obtížnější problém
Kam dál?
Kromě datových sad, které jsme uvedli výše, můžete pro tvorbu algoritmů počítačového vidění použít také níže uvedené datové sady. Ve skutečnosti to považujte za výzvu. Dokážete použít své znalosti CNN k překonání srovnávacího skóre na těchto datových sadách?
- Fashion MNIST – datová sada oděvů a oblečení podobná MNIST. Místo číslic je na obrázcích zobrazen typ oblečení (tričko, kalhoty, taška atd.)
- Caltech 101 – Další náročná datová sada, kterou jsem našel pro klasifikaci obrázků
Také doporučuji, abyste předtím, než se pustíte do transfer learningu, zkusili vylepšit své základní modely CNN. Můžete se poučit z architektur VGG16, ZFNet atd. a získat určitá vodítka pro ladění hyperparametrů a můžete použít stejný ImageDataGenerator pro rozšíření obrázků a zvětšení datové sady.
Tento článek si můžete přečíst také na naší mobilní APLIKACI.