RandAugment a képosztályozáshoz Keras/TensorFlow PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

RandAugment a képosztályozáshoz Keras/TensorFlow segítségével

Az adatkiegészítés hosszú ideje a „statikus” adatkészletek transzformált változatokkal való helyettesítésének eszközeként szolgált, megerősítve az adatok változatlanságát. Konvolúciós neurális hálózatok (CNN-ek), és általában a bevitel robusztusságához vezet.

Jegyzet: A változatlanság abban rejlik, hogy a modellek vakok lesznek bizonyos pertubációkra a döntéshozatal során. A macska képe továbbra is macska képe, ha tükrözi vagy elforgatja.

Míg az általunk használt formában történő adatbővítés kódolja a hiánya a transzlációs varianciával kapcsolatos ismeretek, amelyek fontosak az objektumok észleléséhez, a szemantikai és példányszegmentációhoz stb. változatlanság Ez gyakran kedvező az osztályozási modellek számára, így az augmentációt gyakrabban és agresszívebben alkalmazzák az osztályozási modellekre.

Az augmentáció típusai

A kibővítés kezdett nagyon egyszerűnek lenni – kis forgatások, vízszintes és függőleges átfordítások, kontraszt- vagy fényerő-ingadozások stb. Az utóbbi években bonyolultabb módszereket dolgoztak ki, mint pl. Kivág (térbeli kiesés fekete négyzeteket véletlenszerűen bevezetve a bemeneti képekbe) és Összekever (képrészletek összekeverése és a címkearányok frissítése), és ezek kombinációja – CutMix. Az újabb kiegészítési módszerek tulajdonképpen a címkéket veszik figyelembe, és az olyan módszerek, mint a CutMix, úgy változtatják meg a címke arányait, hogy egyenlők legyenek az egyes osztályok összekeveredett részei által felvett kép arányaival.

A lehetséges kiegészítések egyre növekvő listája miatt egyesek véletlenszerűen kezdték alkalmazni őket (vagy legalábbis egy részhalmazukat), azzal az elképzeléssel, hogy a véletlenszerű kiegészítések megerősítik a modellek robusztusságát, és az eredeti készletet sokkal nagyobbra cserélik. bemeneti képek tere. Ez az, ahol RandAugment beüt!

KerasCV és RandAugment

KerasCV egy külön csomag, de még mindig a Keras hivatalos kiegészítése, amelyet a Keras csapata fejlesztett ki. Ez azt jelenti, hogy ugyanannyi fényezést és intuitivitást kap, mint a főcsomag, de a szokásos Keras modellekkel és azok rétegeivel is látszólag illeszkedik. Az egyetlen különbség, amit valaha is észrevesz, a hívás keras_cv.layers... helyett keras.layers....

A KerasCV még mindig fejlesztés alatt áll, és már 27 új előfeldolgozási réteget tartalmaz, RandAugment, CutMixés MixUp lévén néhány közülük. Nézzük meg, hogyan néz ki az alkalmazás RandAugment képekhez, és hogyan taníthatunk osztályozót véletlenszerű kiegészítéssel és anélkül.

Először telepítse keras_cv:

$ pip install keras_cv

Jegyzet: A KerasCV működéséhez TensorFlow 2.9 szükséges. Ha még nincs meg, fuss $ pip install -U tensorflow először.

Most importáljunk TensorFlow-t, Keras-t és KerasCV-t a TensorFlow-adatkészletek mellé az Imagenette-hez való könnyű hozzáférés érdekében:

import tensorflow as tf
from tensorflow import keras
import keras_cv
import tensorflow_datasets as tfds

Töltsünk be egy képet és jelenítsük meg eredeti formájában:

import matplotlib.pyplot as plt
import cv2

cat_img = cv2.cvtColor(cv2.imread('cat.jpg'), cv2.COLOR_BGR2RGB)
cat_img = cv2.resize(cat_img, (224, 224))
plt.imshow(cat_img)

Most pedig jelentkezzünk RandAugment többször, és nézze meg az eredményeket:

fig = plt.figure(figsize=(10,10))
for i in range(16):
    ax = fig.add_subplot(4,4,i+1)
    aug_img = keras_cv.layers.RandAugment(value_range=(0, 255))(cat_img)
    
    ax.imshow(aug_img.numpy().astype('int'))

RandAugment a képosztályozáshoz Keras/TensorFlow PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

A rétegnek van a magnitude argumentum, amely az alapértelmezett 0.5 és módosítható az augmentáció hatásának növelése vagy csökkentése érdekében:

fig = plt.figure(figsize=(10,10))
for i in range(16):
    ax = fig.add_subplot(4,4,i+1)
    aug_img = keras_cv.layers.RandAugment(value_range=(0, 255), magnitude=0.1)(cat_img)
    ax.imshow(aug_img.numpy().astype('int'))

Alacsony értékre állítva, mint pl 0.1 – sokkal kevésbé agresszív növekedést fog látni:

RandAugment a képosztályozáshoz Keras/TensorFlow PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Réteg lévén – használható modelleken belül vagy belül tf.data adathalmazok létrehozása közben. Ez teszi RandAugment elég rugalmas! További érvek a augmentations_per_image és a rate érvek, amelyek együtt működnek.

A 0...augmentations_per_image, a réteg egy véletlenszerű előfeldolgozó réteget ad a folyamathoz, amelyet a képre kell alkalmazni. Az alapértelmezett esetén 3 – három különböző művelettel egészül ki a csővezeték. Ezután egy véletlen szám mintát vesz a folyamatban lévő minden egyes kiegészítéshez – és ha ez kisebb, mint rate (alapértelmezetten kb 0.9) – a kiegészítést alkalmazzák.

Lényegében – 90% a valószínűsége annak, hogy a folyamatban lévő minden egyes (véletlenszerű) kiegészítést alkalmazzák a képen.

Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!

Ez természetesen azt jelenti, hogy nem kell minden növelést alkalmazni, különösen, ha csökkenti a rate. Azt is testreszabhatja, hogy mely műveletek engedélyezettek a RandomAugmentationPipeline réteg, amely RandAugment speciális esete. Egy külön útmutató RandomAugmentationPipeline hamarosan közzétesszük.

Osztályozó képzése RandAugmenttel és anélkül

Az adat-előkészítési/betöltési szempont egyszerűsítése és a fókuszálás RandAugment, használjuk tfds az Imagenette egy részének betöltéséhez:

(train, valid_set, test_set), info = tfds.load("imagenette", 
                                           split=["train[:70%]", "validation", "train[70%:]"],
                                           as_supervised=True, with_info=True)

class_names = info.features["label"].names
n_classes = info.features["label"].num_classes
print(f'Class names: {class_names}') 
print('Num of classes:', n_classes) 

print("Train set size:", len(train)) 
print("Test set size:", len(test_set)) 
print("Valid set size:", len(valid_set)) 

Csak a betanítási adatok egy részét töltöttük be, hogy megkönnyítsük az adatkészlet túlillesztését kevesebb korszakban (gyorsabbá téve ezzel a kísérletünket). Mivel az Imagenette-ben lévő képek különböző méretűek, készítsünk a preprocess() függvény, amely átméretezi őket az adatkészlet leképezéséhez, valamint egy augment() funkció, amely kiegészíti a képeket a tf.data.Dataset:

def preprocess(images, labels):
  return tf.image.resize(images, (224, 224)), tf.one_hot(labels, 10)
  
def augment(images, labels):
  inputs = {"images": images, "labels": labels}
  outputs = keras_cv.layers.RandAugment(value_range=(0, 255))(inputs)
  return outputs['images'], outputs['labels']

Most – egyhangúan kódoltuk a címkéket. Nem feltétlenül kellett, de olyan bővítésekhez, mint pl CutMix ha megzavarja a címkéket és azok arányait, akkor muszáj lesz. Mivel érdemes alkalmazni azokat is RandAugment nagyon jól működik velük robusztus osztályozók létrehozásához – hagyjuk a one-hot kódolást. Ezenkívül RandAugment pontosan emiatt vesz fel egy szótárat a képekkel és címkékkel – egyes kiegészítések, amelyeket hozzáadhat, ténylegesen megváltoztatják a címkéket, ezért ezek kötelezőek. A kibővített képeket és címkéket a outputs szótár könnyen, így ez egy extra, de mégis egyszerű lépés a bővítés során.

Leképezzük a meglévő adatkészleteket, amelyekről visszajöttek tfds a ... val preprocess() funkciót, kötegelni kell őket, és csak az edzéskészletet bővíteni:

valid_set = valid_set.map(preprocess).batch(32).prefetch(tf.data.AUTOTUNE)
train_set = train.map(preprocess).batch(32).prefetch(tf.data.AUTOTUNE)
train_set_aug = train.map(preprocess).map(augment_data, 
                                          num_parallel_calls=tf.data.AUTOTUNE).batch(32).prefetch(tf.data.AUTOTUNE)

Neveljünk hálózatot! keras_cv.models -hoz hasonló beépített hálózatokkal rendelkezik keras.applications. Bár a lista még mindig rövid, idővel bővülni fog, és átveszi a helyét keras.applications. Az API nagyon hasonló, így a kódhordozás meglehetősen egyszerű lesz a legtöbb gyakorló számára:


effnet = keras_cv.models.EfficientNetV2B0(include_rescaling=True, include_top=True, classes=10)
          
effnet.compile(
    loss='categorical_crossentropy',
    optimizer='adam',
    metrics=['accuracy']
)

history = effnet.fit(train_set, epochs=25, validation_data = valid_set)

Alternatív megoldásként használhatja az áramot keras.applications:

effnet = keras.applications.EfficientNetV2B0(weights=None, classes=10)

effnet.compile(
  loss='categorical_crossentropy',
  optimizer='adam',
  metrics=['accuracy']
)

history1 = effnet.fit(train_set, epochs=50, validation_data=valid_set)

Ez egy olyan modellt eredményez, amely nem igazán működik túl jól:

Epoch 1/50
208/208 [==============================] - 60s 238ms/step - loss: 2.7742 - accuracy: 0.2313 - val_loss: 3.2200 - val_accuracy: 0.3085
...
Epoch 50/50
208/208 [==============================] - 48s 229ms/step - loss: 0.0272 - accuracy: 0.9925 - val_loss: 2.0638 - val_accuracy: 0.6887

Most tanítsuk meg ugyanazt a hálózati beállítást a kiterjesztett adatkészleten. Minden köteg külön-külön kibővítve van, így amikor ugyanaz a képköteg (a következő korszakban) jelenik meg, különböző kiegészítések lesznek:

effnet = keras.applications.EfficientNetV2B0(weights=None, classes=10)
effnet.compile(
  loss='categorical_crossentropy',
  optimizer='adam',
  metrics=['accuracy']
)

history2 = effnet.fit(train_set_aug, epochs=50, validation_data = valid_set)
Epoch 1/50
208/208 [==============================] - 141s 630ms/step - loss: 2.9966 - accuracy: 0.1314 - val_loss: 2.7398 - val_accuracy: 0.2395
...
Epoch 50/50
208/208 [==============================] - 125s 603ms/step - loss: 0.7313 - accuracy: 0.7583 - val_loss: 0.6101 - val_accuracy: 0.8143

Sokkal jobb! Miközben továbbra is szeretne más növeléseket alkalmazni, mint pl CutMix és a MixUp, más képzési technikák mellett a hálózat pontosságának maximalizálása érdekében – csak RandAugment jelentősen segített, és összehasonlítható egy hosszabb augmentációs csővezetékkel.

Ha összehasonlítja az edzési görbéket, beleértve az edzést is és a érvényesítési görbéket – csak az derül ki, hogy mennyi RandAugment segít:

RandAugment a képosztályozáshoz Keras/TensorFlow PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

A nem bővített csővezetékben a hálózat túlilleszkedik (a képzési pontosság eléri a plafont), és az érvényesítési pontosság alacsony marad. A bővített csővezetékben a a képzési pontosság az elejétől a végéig alacsonyabb marad, mint az érvényesítési pontosság.

Magasabb képzési veszteség esetén a hálózat sokkal jobban tudatában van a még elkövetett hibáknak, és több frissítést lehet végrehajtani, hogy változatlan legyen az átalakításokhoz. Előbbi nem látja szükségét a frissítésre, míg az utóbbi igen, és megemeli a potenciál plafonját.

Következtetés

KerasCV egy külön csomag, de még mindig a Keras hivatalos kiegészítése, amelyet a Keras csapata fejlesztett ki, és célja, hogy iparágilag erős önéletrajzot vigyen Keras projektjeibe. A KerasCV még mindig fejlesztés alatt áll, és már 27 új előfeldolgozási réteget tartalmaz, RandAugment, CutMixés MixUp lévén néhány közülük.

Ebben a rövid útmutatóban megvizsgáltuk, hogyan használhatja RandAugment hogy számos véletlenszerű transzformációt alkalmazzon az alkalmazott transzformációk adott listájából, és milyen könnyen beépíthető bármely Keras képzési folyamatba.

Továbblépve – Gyakorlati mélytanulás a számítógépes látáshoz

Érdeklődő természete arra készteti, hogy tovább menjen? Javasoljuk, hogy tekintse meg nálunk Tanfolyam: „Practical Deep Learning for Computer Vision with Python”.

RandAugment a képosztályozáshoz Keras/TensorFlow PlatoBlockchain adatintelligenciával. Függőleges keresés. Ai.

Újabb számítógépes látás tanfolyam?

Nem végezzük az MNIST számjegyek osztályozását vagy az MNIST divatot. Régen kiszolgálták a részüket. Túl sok tanulási erőforrás összpontosít az alapvető adatkészletekre és alapvető architektúrákra, mielőtt a fejlett feketedoboz-architektúrákra hagyná a teljesítmény terhét.

Mi arra szeretnénk koncentrálni demisztifikáció, gyakorlatiasság, megértés, intuíció és a valódi projektek. Tanulni akar hogyan tudsz változtatni? Elvezetjük Önt az agyunk képfeldolgozási módjától a mellrák kutatási szintű mélytanulási osztályozójának megírásáig a mély tanulási hálózatokig, amelyek „hallucinálnak”, gyakorlati munkán keresztül megtanítjuk az alapelveket és az elméletet, felkészítve a know-how és eszközök ahhoz, hogy szakértővé váljon a mélytanulás alkalmazásában a számítógépes látás megoldásában.

Mi van benne?

  • A látás első alapelvei és hogyan lehet a számítógépeket „látni” tanítani
  • A számítógépes látás különböző feladatai és alkalmazásai
  • A szakma eszközei, amelyek megkönnyítik a munkáját
  • Adatkészletek keresése, létrehozása és felhasználása számítógépes látáshoz
  • A konvolúciós neurális hálózatok elmélete és alkalmazása
  • Tartományeltolódás, együttes előfordulás és egyéb torzítások kezelése az adatkészletekben
  • Transzfer Tanulás és mások képzési idejének és számítási erőforrásainak felhasználása az Ön javára
  • Korszerű emlőrák osztályozó felépítése és betanítása
  • Hogyan alkalmazzunk egy egészséges adag szkepticizmust a mainstream ötletekhez, és hogyan értsük meg a széles körben elfogadott technikák következményeit
  • A ConvNet „koncepcióterének” megjelenítése t-SNE és PCA segítségével
  • Esettanulmányok arról, hogy a vállalatok hogyan használják a számítógépes látástechnikákat a jobb eredmények elérése érdekében
  • Megfelelő modellértékelés, látens tér vizualizáció és a modell figyelmének azonosítása
  • Domainkutatás végzése, saját adatkészletek feldolgozása és modelltesztek létrehozása
  • Élvonalbeli architektúrák, az ötletek fejlődése, mi teszi őket egyedivé és hogyan valósítsuk meg őket
  • KerasCV – WIP-könyvtár a legkorszerűbb csővezetékek és modellek létrehozásához
  • Hogyan elemezze és olvassa el a dolgozatokat, és saját maga hajtsa végre azokat
  • Modellek kiválasztása az alkalmazástól függően
  • Végpontok közötti gépi tanulási folyamat létrehozása
  • Tájkép és intuíció a tárgyfelismeréshez a gyorsabb R-CNN-ekkel, RetinaNetekkel, SSD-kkel és YOLO-val
  • Példány és szemantikai szegmentáció
  • Valós idejű objektumfelismerés a YOLOv5 segítségével
  • YOLOv5 objektumdetektorok képzése
  • Transzformátorokkal való munkavégzés KerasNLP-vel (ipari erősségű WIP-könyvtár)
  • Transformers integrálása ConvNetekkel a képek feliratainak létrehozásához
  • Deepdream
  • Deep Learning modell optimalizálása számítógépes látáshoz

Időbélyeg:

Még több Stackabus