Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Haaste: CNN:n Rakentaminen | Konvoluutioneuroverkot
Konenäön Perusteet
course content

Kurssisisältö

Konenäön Perusteet

Konenäön Perusteet

1. Johdatus Tietokonenäköön
2. Kuvankäsittely OpenCV:llä
3. Konvoluutioneuroverkot
4. Esineentunnistus
5. Edistyneiden Aiheiden Yleiskatsaus

book
Haaste: CNN:n Rakentaminen

Konvoluutiohermoverkot (CNN:t) ovat laajasti käytössä kuvien luokittelussa niiden kyvyn vuoksi erotella hierarkkisia piirteitä. Tässä tehtävässä toteutat ja koulutat VGG-tyyppisen CNN:n käyttäen TensorFlow'ta ja Kerasia CIFAR-10-aineistolla. Aineisto koostuu 60 000 kuvasta (32×32×3), jotka kuuluvat 10 eri luokkaan, kuten lentokoneet, autot, linnut, kissat ja muita.

Tämä projekti ohjaa sinua aineiston lataamisessa, kuvien esikäsittelyssä, CNN-mallin määrittelyssä, sen kouluttamisessa ja suorituskyvyn arvioinnissa.

1. Datan esikäsittely CNN:lle

Ennen CNN:n kouluttamista datan esikäsittely on olennainen vaihe paremman suorituskyvyn ja nopeamman konvergenssin varmistamiseksi. Yleisiä esikäsittelymenetelmiä ovat:

  • Normalisointi: tässä menetelmässä kuvien pikseliarvot skaalataan väliltä 0–255 välille 0–1. Tämä toteutetaan usein muodossa x_train / 255.0, x_test / 255.0;

  • One-hot-koodaus: luokat muunnetaan usein one-hot-koodatuiksi vektoreiksi luokittelutehtävissä. Tämä tehdään tyypillisesti keras.utils.to_categorical-funktiolla, joka muuntaa kokonaislukuluokat (esim. 0, 1, 2, jne.) one-hot-koodatuksi vektoriksi, kuten [1, 0, 0, 0]4-luokan luokittelutehtävässä.

2. CNN-arkkitehtuurin rakentaminen

CNN-arkkitehtuuri koostuu useista kerroksista, jotka suorittavat erilaisia tehtäviä piirteiden erotteluun ja ennusteiden tekemiseen. Voit toteuttaa keskeiset CNN-kerrokset seuraavasti:

Konvoluutiokerros (Conv2D)

Huom

input_shape-parametri tulee määrittää vain syötetason kohdalla.

Pooling-kerros (MaxPooling2D)

Tasoituskerros (Flatten Layer)

Tiheä kerros

Huomio

Lopullisessa tiheässä kerroksessa yksiköiden määrä on yhtä suuri kuin luokkien määrä, ja siinä käytetään softmax-aktivointifunktiota tuottamaan todennäköisyysjakauma luokkien välillä.

3. Mallin kokoaminen

Arkkitehtuurin määrittelyn jälkeen malli täytyy koota. Tässä vaiheessa määritellään tappiollinen funktio, optimointialgoritmi ja metriikat, jotka ohjaavat mallia koulutuksen aikana. Seuraavia menetelmiä käytetään yleisesti konvoluutiohermoverkoissa:

Optimointialgoritmi (Adam)

Optimointialgoritmi säätää mallin painoja minimoidakseen tappiollisen funktion. Adam-optimointialgoritmi on suosittu tehokkuutensa ja kyvynsä mukauttaa oppimisnopeutta koulutuksen aikana ansiosta.

Häviöfunktio (Kategorinen ristiinentropia)

Moniluokkaluokittelussa käytetään tyypillisesti kategorista ristiinentropiaa häviöfunktiona. Tämä voidaan toteuttaa seuraavasti:

Mittarit

Mallin suorituskykyä seurataan luokittelutehtävien mittareilla, kuten tarkkuus, precision, recall jne. Nämä voidaan määritellä seuraavasti:

Kokoaminen

4. Mallin kouluttaminen

CNN:n kouluttaminen sisältää syötteen antamisen verkolle, tappion laskemisen ja painojen päivittämisen takaisinkytkennän avulla. Koulutusprosessia ohjaavat seuraavat keskeiset menetelmät:

  • Mallin sovittaminen: fit()-metodia käytetään mallin kouluttamiseen. Tämä metodi ottaa syötteenä koulutusdatan, epochien määrän ja eräkoon. Lisäksi siinä on valinnainen validointijako, jonka avulla arvioidaan mallin suorituskykyä koulutuksen aikana näkemättömällä datalla:

  • Eräkoko ja epochit: eräkoko määrittää kuinka monta näytettä käsitellään ennen mallin painojen päivittämistä, ja epochien määrä viittaa siihen, kuinka monta kertaa koko aineisto syötetään mallin läpi.

5. Arviointi

Luokitteluraportti

sklearn.metrics.classification_report() vertaa todellisia ja ennustettuja arvoja testiaineistosta. Se sisältää precision-, recall- ja F1-arvot jokaiselle luokalle. Menetelmät vaativat kuitenkin vain luokkatunnisteet, joten muista muuntaa ne takaisin vektoreista ([0,0,1,0] -> 2):

Arviointi

Kun malli on koulutettu, sitä arvioidaan testiaineistolla sen yleistämiskyvyn mittaamiseksi. Arviointi tuottaa metriikoita, jotka mainittiin .compile()-metodissa. Arviointi suoritetaan käyttämällä .evaluate():

Sekamatrisi

Lisätietojen saamiseksi mallin suorituskyvystä voidaan visualisoida sekamatrisi, joka näyttää oikeat positiiviset, väärät positiiviset, oikeat negatiiviset ja väärät negatiiviset ennusteet jokaiselle luokalle. Sekamatrisi voidaan laskea TensorFlow'n avulla:

Tämä matriisi voidaan visualisoida lämpökarttojen avulla, jolloin nähdään, kuinka hyvin malli suoriutuu kussakin luokassa:

1. Lataa ja esikäsittele aineisto

  • Tuo CIFAR-10-aineisto Kerasista;

  • Normalisoi pikseliarvot välille [0,1] paremman konvergenssin saavuttamiseksi;

  • Muunna luokkien tunnisteet one-hot encoded -muotoon kategorista luokittelua varten.

2. Määrittele CNN-malli

Toteuta VGG-tyyppinen CNN-arkkitehtuuri seuraavilla keskeisillä kerroksilla: VGG like architecture

Konvoluutiokerrokset:

  • Ytimen koko: 3×3;

  • Aktivointifunktio: ReLU;

  • Täydennys: 'same'.

Pooling-kerrokset:

  • Pooling-tyyppi: max pooling;

  • Pooling-koko: 2×2.

Dropout-kerrokset (Ylisuorittamisen estämiseksi satunnaisesti poistetaan neuroneita käytöstä):

  • Dropout-prosentti: 25%.

Flatten-kerros – muuntaa 2D-piirrekuvat 1D-vektoriksi luokittelua varten.

Täysin yhdistetyt kerrokset – tiheät kerrokset lopullista luokittelua varten, relu- tai softmax-lähtökerroksella.

Käännä malli käyttäen:

  • Adam optimizer (tehokkaaseen oppimiseen);

  • Categorical cross-entropy -häviöfunktio (moniluokkaluokitteluun);

  • Accuracy metric suorituskyvyn mittaamiseen (luokat ovat tasapainossa, ja voit lisätä muita mittareita tarpeen mukaan).

3. Kouluta malli

  • Määrittele epochs ja batch_size -parametrit koulutukseen (esim. epochs=20, batch_size=64);

  • Määrittele validation_split -parametri, joka määrittää kuinka suuri osa koulutusaineistosta käytetään validointiin mallin suorituskyvyn seuraamiseksi tuntemattomilla kuvilla;

  • Tallenna koulutushistoria, jotta voit visualisoida tarkkuuden ja häviön kehityksen.

4. Arvioi ja visualisoi tulokset

  • Testaa malli CIFAR-10 testiaineistolla ja tulosta tarkkuus;

  • Piirrä koulutushäviö vs. validointihäviö ylisuorittamisen tarkistamiseksi;

  • Piirrä koulutustarkkuus vs. validointitarkkuus oppimisen etenemisen varmistamiseksi.

COLAB CNN -PROJEKTI

question-icon

Syötä avaimen osat (Sait ne projektin suorituksen jälkeen)

1.  2.  3.  4.  5.
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 7

Kysy tekoälyä

expand
ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

course content

Kurssisisältö

Konenäön Perusteet

Konenäön Perusteet

1. Johdatus Tietokonenäköön
2. Kuvankäsittely OpenCV:llä
3. Konvoluutioneuroverkot
4. Esineentunnistus
5. Edistyneiden Aiheiden Yleiskatsaus

book
Haaste: CNN:n Rakentaminen

Konvoluutiohermoverkot (CNN:t) ovat laajasti käytössä kuvien luokittelussa niiden kyvyn vuoksi erotella hierarkkisia piirteitä. Tässä tehtävässä toteutat ja koulutat VGG-tyyppisen CNN:n käyttäen TensorFlow'ta ja Kerasia CIFAR-10-aineistolla. Aineisto koostuu 60 000 kuvasta (32×32×3), jotka kuuluvat 10 eri luokkaan, kuten lentokoneet, autot, linnut, kissat ja muita.

Tämä projekti ohjaa sinua aineiston lataamisessa, kuvien esikäsittelyssä, CNN-mallin määrittelyssä, sen kouluttamisessa ja suorituskyvyn arvioinnissa.

1. Datan esikäsittely CNN:lle

Ennen CNN:n kouluttamista datan esikäsittely on olennainen vaihe paremman suorituskyvyn ja nopeamman konvergenssin varmistamiseksi. Yleisiä esikäsittelymenetelmiä ovat:

  • Normalisointi: tässä menetelmässä kuvien pikseliarvot skaalataan väliltä 0–255 välille 0–1. Tämä toteutetaan usein muodossa x_train / 255.0, x_test / 255.0;

  • One-hot-koodaus: luokat muunnetaan usein one-hot-koodatuiksi vektoreiksi luokittelutehtävissä. Tämä tehdään tyypillisesti keras.utils.to_categorical-funktiolla, joka muuntaa kokonaislukuluokat (esim. 0, 1, 2, jne.) one-hot-koodatuksi vektoriksi, kuten [1, 0, 0, 0]4-luokan luokittelutehtävässä.

2. CNN-arkkitehtuurin rakentaminen

CNN-arkkitehtuuri koostuu useista kerroksista, jotka suorittavat erilaisia tehtäviä piirteiden erotteluun ja ennusteiden tekemiseen. Voit toteuttaa keskeiset CNN-kerrokset seuraavasti:

Konvoluutiokerros (Conv2D)

Huom

input_shape-parametri tulee määrittää vain syötetason kohdalla.

Pooling-kerros (MaxPooling2D)

Tasoituskerros (Flatten Layer)

Tiheä kerros

Huomio

Lopullisessa tiheässä kerroksessa yksiköiden määrä on yhtä suuri kuin luokkien määrä, ja siinä käytetään softmax-aktivointifunktiota tuottamaan todennäköisyysjakauma luokkien välillä.

3. Mallin kokoaminen

Arkkitehtuurin määrittelyn jälkeen malli täytyy koota. Tässä vaiheessa määritellään tappiollinen funktio, optimointialgoritmi ja metriikat, jotka ohjaavat mallia koulutuksen aikana. Seuraavia menetelmiä käytetään yleisesti konvoluutiohermoverkoissa:

Optimointialgoritmi (Adam)

Optimointialgoritmi säätää mallin painoja minimoidakseen tappiollisen funktion. Adam-optimointialgoritmi on suosittu tehokkuutensa ja kyvynsä mukauttaa oppimisnopeutta koulutuksen aikana ansiosta.

Häviöfunktio (Kategorinen ristiinentropia)

Moniluokkaluokittelussa käytetään tyypillisesti kategorista ristiinentropiaa häviöfunktiona. Tämä voidaan toteuttaa seuraavasti:

Mittarit

Mallin suorituskykyä seurataan luokittelutehtävien mittareilla, kuten tarkkuus, precision, recall jne. Nämä voidaan määritellä seuraavasti:

Kokoaminen

4. Mallin kouluttaminen

CNN:n kouluttaminen sisältää syötteen antamisen verkolle, tappion laskemisen ja painojen päivittämisen takaisinkytkennän avulla. Koulutusprosessia ohjaavat seuraavat keskeiset menetelmät:

  • Mallin sovittaminen: fit()-metodia käytetään mallin kouluttamiseen. Tämä metodi ottaa syötteenä koulutusdatan, epochien määrän ja eräkoon. Lisäksi siinä on valinnainen validointijako, jonka avulla arvioidaan mallin suorituskykyä koulutuksen aikana näkemättömällä datalla:

  • Eräkoko ja epochit: eräkoko määrittää kuinka monta näytettä käsitellään ennen mallin painojen päivittämistä, ja epochien määrä viittaa siihen, kuinka monta kertaa koko aineisto syötetään mallin läpi.

5. Arviointi

Luokitteluraportti

sklearn.metrics.classification_report() vertaa todellisia ja ennustettuja arvoja testiaineistosta. Se sisältää precision-, recall- ja F1-arvot jokaiselle luokalle. Menetelmät vaativat kuitenkin vain luokkatunnisteet, joten muista muuntaa ne takaisin vektoreista ([0,0,1,0] -> 2):

Arviointi

Kun malli on koulutettu, sitä arvioidaan testiaineistolla sen yleistämiskyvyn mittaamiseksi. Arviointi tuottaa metriikoita, jotka mainittiin .compile()-metodissa. Arviointi suoritetaan käyttämällä .evaluate():

Sekamatrisi

Lisätietojen saamiseksi mallin suorituskyvystä voidaan visualisoida sekamatrisi, joka näyttää oikeat positiiviset, väärät positiiviset, oikeat negatiiviset ja väärät negatiiviset ennusteet jokaiselle luokalle. Sekamatrisi voidaan laskea TensorFlow'n avulla:

Tämä matriisi voidaan visualisoida lämpökarttojen avulla, jolloin nähdään, kuinka hyvin malli suoriutuu kussakin luokassa:

1. Lataa ja esikäsittele aineisto

  • Tuo CIFAR-10-aineisto Kerasista;

  • Normalisoi pikseliarvot välille [0,1] paremman konvergenssin saavuttamiseksi;

  • Muunna luokkien tunnisteet one-hot encoded -muotoon kategorista luokittelua varten.

2. Määrittele CNN-malli

Toteuta VGG-tyyppinen CNN-arkkitehtuuri seuraavilla keskeisillä kerroksilla: VGG like architecture

Konvoluutiokerrokset:

  • Ytimen koko: 3×3;

  • Aktivointifunktio: ReLU;

  • Täydennys: 'same'.

Pooling-kerrokset:

  • Pooling-tyyppi: max pooling;

  • Pooling-koko: 2×2.

Dropout-kerrokset (Ylisuorittamisen estämiseksi satunnaisesti poistetaan neuroneita käytöstä):

  • Dropout-prosentti: 25%.

Flatten-kerros – muuntaa 2D-piirrekuvat 1D-vektoriksi luokittelua varten.

Täysin yhdistetyt kerrokset – tiheät kerrokset lopullista luokittelua varten, relu- tai softmax-lähtökerroksella.

Käännä malli käyttäen:

  • Adam optimizer (tehokkaaseen oppimiseen);

  • Categorical cross-entropy -häviöfunktio (moniluokkaluokitteluun);

  • Accuracy metric suorituskyvyn mittaamiseen (luokat ovat tasapainossa, ja voit lisätä muita mittareita tarpeen mukaan).

3. Kouluta malli

  • Määrittele epochs ja batch_size -parametrit koulutukseen (esim. epochs=20, batch_size=64);

  • Määrittele validation_split -parametri, joka määrittää kuinka suuri osa koulutusaineistosta käytetään validointiin mallin suorituskyvyn seuraamiseksi tuntemattomilla kuvilla;

  • Tallenna koulutushistoria, jotta voit visualisoida tarkkuuden ja häviön kehityksen.

4. Arvioi ja visualisoi tulokset

  • Testaa malli CIFAR-10 testiaineistolla ja tulosta tarkkuus;

  • Piirrä koulutushäviö vs. validointihäviö ylisuorittamisen tarkistamiseksi;

  • Piirrä koulutustarkkuus vs. validointitarkkuus oppimisen etenemisen varmistamiseksi.

COLAB CNN -PROJEKTI

question-icon

Syötä avaimen osat (Sait ne projektin suorituksen jälkeen)

1.  2.  3.  4.  5.
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 7
Pahoittelemme, että jotain meni pieleen. Mitä tapahtui?
some-alt