/YOLO-tunnistus-ohjeet

Tämä repo sisältää ohjeet ja mallin kuinka tehdään tekoälymalli konenäölle kappaleen tunnistusta varten.

Primary LanguagePythonMIT LicenseMIT

Jos löydät virheitä, haluat lisätä jotain tai on jotain kysyttävää voit tehdä pull requestin, tehdä issuen tai lähettää sähköpostia osoitteeseen:

saloranta.jonne[at]gmail.com

Vaatimukset

Vaadittavat ohjelmat

Colab (vaatii Google käyttäjän) Colabia Käytetään mallien opettamiseen ja testaamiseen, jos sinulla ei ole omaa konetta jossa on tarpeeksi tehoa ja CUDA yhteensopiva näytönohjain.

Tässä ohjeessa käytetään Colabia, joten tämä ei sisällä ohjeita sille miten CUDA yms asennetaan/käytetään.

Python Python >=3.8, koska Ultralytics vaatii sen.

Ultralytics Ultralytics on paketti joka sisältää paljon erilaisia koneoppimis malleja. Tässä ohjeessa käytetään YOLOv8 mallia.

Ultralytics HUB (vaatii kirjautumisen) Täältä löytyy ilmaisia malleja, joita voi käyttää.

Ultralytics (ENG.) Täältä löytyy dokumentointia ja ohjeita Ultralyticsin käyttöön.

LabelImg on ohjelma jolla voi luoda kuvista annotaatioita. Annotaatiot ovat tiedostoja, jotka sisältävät tiedot kuvan tunnistettavista objekteista.

Ohjevideo Colabiin (YouTube)

Sisällysluettelo

Sisällysluettelo

Vaatimukset

Kuvat ja niiden käsittely

Pohjan lataaminen

Mallipohjan lataaminen

Lataa mallipohja (suositeltavaa) täältä ja pura se haluamaasi kansioon. Voit myös kloonata sen gitillä.

git clone https://github.com/JonneSaloranta/YOLO-tunnistus-ohjeet.git

Virtuaalinen ympäristö

Virtuaalisen ympäristön ohje

Virtuaalinen ympäristö kannattaa luoda, jotta ei tule ongelmia eri versioiden kanssa. Tässä ohjeessa käytetään Pythonin omaa virtuaalista ympäristöä.

Avaa komentokehote ja siirry kansioon johon haluat luoda virtuaalisen ympäristön.

kuva

cd C:\Users\user\Desktop\malli

Varmista että Python on asennettu ja lisätty ympäristömuuttujiin.

python --version

jos sinulla on python asennettu oikein, voit jatkaa ja luoda virtuaalisen ympäristö komennolla:

python -m venv [kansion nimi]

esim. venv = virtual environment
python -m venv venv

Nyt voit asentaa Ultralyticsin virtuaaliseen ympäristöön.

pip install ultralytics

Kuvat ja niiden käsittely eri variaatioilla

Kuvien ottamisen ohje

Kappaleen tunnistus mallin opetusdatan(kuvien) tulisi sisältää mahdollisimman paljon erilaisia variaatiota esim. valaistus, kuvakulma jne. Opetusdatan kuvien määrä on myös tärkeä tekijä. Mitä enemmän kuvia sitä parempi(useimmiten).

Kuvien ottaminen

  • Erilaiset kuvakulmat
  • Erilaiset valaistukset
  • Erilaiset taustat
  • Erilaiset kameran zoomaukset
  • Erilaiset kameran tarkennukset

Kuvien käsittely

Kuvien käsittelyn ohje

Paras tapa saada mahdollisimman paljon erilaisia realistisia variaatioita kuvista on ottaa niitä itse, tällöin niistä on mahdollisesti helpompi saada hyvää dataa. Suosittelen jättämään seuraavan kuvien käsittely osion väliin, mutta jos haluat käyttää sitä, niin seuraavassa on ohjeet.

Kuvien käsittely on suhteellisen helppoa. Kuvien käsittelyssä on hyvä käyttää erilaisia kuvankäsittelyohjelmia. Esim. GIMP, Photoshop, Paint.net, jne.

Säästän kuitenkin kaikkien aikaa ja hermoja, joten tein lyhyen scriptin Pythonilla, joka käy läpi kaikki kuvat ja muokkaa niitä satunnaisesti omien raja-arvojen mukaan.

Yksi syötetty kuva

Yksi syötetty kuva

50kpl käsiteltyjä kuvia

50kpl käsiteltyjä kuvia

Scripti löytyy täältä: randomize_images.py

num_variations = 5  # Määrittää kuinka monta kuvaa muokattua kuvaa luodaan per alkuperäinen kuva.

# Tämä on varmaan se tärkein parametri. Muitakin voi muokata jos välttämättä haluaa.

# Eri arvoja jotka määrittävät kuinka paljon kuvaa muokataan.

rotation_limit = 180  # Määrittää kuvan maksimi kiertokulman
resize_min = 0.5  # Minimi skaalauskerroin kuvan pienentämiseen
resize_max = 2.0  # Maksimi skaalauskerroin kuvan suurentamiseen
brightness_min = 0.5  # Minimi kirkkauskerroin
brightness_max = 1.5  # Maksimi kirkkauskerroin
contrast_min = -25  # Minimi kontrastikerroin
contrast_max = 25  # Maksiimi kontrastikerroin
saturation_min = 0.5  # Minimi värikylläisyyskerroin
saturation_max = 1.5  # Makismi värikylläisyyskerroin
exposure_min = 0.5  # Minimi valotuskerroin
exposure_max = 1.5  # Maksimi valotuskerroin

Kuvien annotointi

Kuvien annotointi ohje

Kuvien annotointi on tärkeä osa mallin opetusdataa. Annotaatiot ovat tiedostoja, jotka sisältävät tiedot kuvan tunnistettavista objekteista ja niiden sijainnista kuvassa.

Annotaatiot voi luoda monella eri ohjelmalla. Tässä ohjeessa käytetään LabelImg ohjelmaa.

LabelImg Github ja lataa se windowsille 'releases' kohdasta.

kuva

Lataamisen jälkeen pura se haluamaasi kansioon ja avaa kyseisessä kansiossa oleva data kansio ja siellä oleva 'predefined_classes.txt' tiedosto.

kuva

kuva

Jos et löydä kyseistä tiedostoa, voit luoda sen itse. sijaintiin: data/predefined_classes.txt

Tämä tiedosto sisältää kaikki luokat, joita voi käyttää annotoinnissa. Oman tunnistusmallin luomiseen on hyvä aloittaa tyhjästä ja lisätä luokat joita tarvitset. Luokkia voi lisätä myös myöhemmin.

Tässä on predefinied_classes.txt tiedoston sisältö, josta voi ottaa mallia.

dog
person
cat
tv
car
meatballs
marinara sauce
tomato soup
chicken noodle soup
french onion soup
chicken breast
ribs
pulled pork
hamburger
cavity

Kun olet luonut tiedoston, voit avata LabelImg ohjelman ja valita 'Open Dir' ja valita kansion jossa on kuvat joita haluat annotoida.

Kun olet valinnut kansion, voit valita 'Change Save Dir' ja valita kansion johon annotaatio tiedostot tallennetaan. Tämä kansio on hyvä olla sama kuin kuvien kansio.

kuva

Asetuksia, joita pitää/kannattaa muuttaa:

Pakolliset:

  • Vaihda 'PascalVOC' 'Yolo' muotoon.

kuva

Suosittelen:

  • Vaihda 'Auto Save Mode' päälle, jotta annotaatio tiedostot tallentuvat automaattisesti.

kuva

  • Merkitse 'Use Default Label' päälle, jotta voit valita luokan listasta, eikä joka kerta tarvitse kirjoittaa luokkaa itse.

kuva

Kun olet valinnut kansion, voit aloittaa annotoinnin painamalla W-näppäintä ja piirtämällä laatikon objektin ympärille. Kun olet piirtänyt laatikon, voit valita luokan listasta tai kirjoittaa sen itse.

kuva

Pikanäppäimet:

  • w = piirrä laatikko
  • d = seuraava kuva
  • a = edellinen kuva
  • ctrl + s = tallenna annotaatio

Kun olet valinnut luokan, voit tallentaa annotaation painamalla 'Save' nappia. 'Auto Save Mode' ollessa päällä, annotaatio tallentuu automaattisesti, kun vaihdat seuraavaan kuvaan.

Nyt kun olemme tutustuneet LabelImg ohjelmaan, voimme aloittaa oikeasti kuvien annotoinnin, joka on tärkein ja aikaa vievin osa mallin luomisessa.

LabelImg:n luomat annotaatio tiedostot ovat txt tiedostoja, jotka sisältävät tiedot kuvan tunnistettavista objekteista. Tiedostot luodaan automaattisesti kun tallennat annotaation.

classes.txt tiedosto sisältää kaikki luokat, joita käytetään annotaatio tiedostoissa ja niiden järjestys on tärkeä. classes.txt tiedosto on samanlainen kuin predefined_classes.txt tiedosto, mutta se sisältää vain käytetyt luokat.

Tässä on esimerkki annotaatio tiedostosta:

0 0.494280 0.481580 0.216689 0.154176

Tiedosto sisältää 5 arvoa, jotka ovat luokka, x1, y1, x2, y2

  • luokka on luokka johon objekti kuuluu.
  • x1 on annotaation vasemman yläkulman x koordinaatti.
  • y1 on annotaation vasemman yläkulman y koordinaatti.
  • x2 on annotaation oikean alakulman x koordinaatti.
  • y2 on annotaation oikean alakulman y koordinaatti.

kuva

Colab projektin luominen

Ohjeet
  1. Avaa Google Drive ja luo uusi kansio, johon tallennat kaikki tiedostot.

kuva

  1. Avaa kansio ja luo uusi Jupiter Notebook painamalla oikealla hiiren näppäimellä ja valitsemalla 'Lisää' ja 'Google Colaboratory'. Tämä luo uuden Jupiter Notebook tiedoston, jonka pitäisi avautua uuteen välilehteen. Voit nimeätä tiedoston haluamallasi nimellä, kunhan se on .ipynb muodossa.

kuva

kuva

  1. Nyt pitää muokata asetuksia siten, että saadaan GPU(näytönohjain) käyttöön CPU(prosessorin) sijaan. Valitse 'Muokkaa' ja 'Työkirjan asetukset'. Sieltä vaihda CPU -> T4 GPU:ksi.

kuva

Tässä paina 'OK' ja 'Tallenna'.

kuva

  1. Nyt voidaan tarkistaa onko GPU käytössä. Paina '+ Koodi' ja kirjoita seuraava koodi kenttään ja aja se painamalla 'Play' nappia.
!nvidia-smi

Jos kaikki on mennyt oikein, pitäisi näkyä jotain tällaista.

kuva

  1. Seuraavaksi lisätään seuraavat koodit samalla tavalla kuin äskeinenkin.

Tällä asennetaan Ultralytics paketti.

!pip install ultralytics

Tällä otetaan Ultralytics paketti käyttöön.

from ultralytics import YOLO

ja lopuksi tällä opetetaan malli.

!yolo task=detect mode=train model=yolov8n.pt data=../content/drive/MyDrive/AI/Dataset/malli/dataset.yaml epochs=200 imgsz=640

Tässä sinun tulee muokata data= kohdassa oleva polku oikeaksi katso Google Driven yhdistäminen projektiin ja epochs= kohdassa oleva luku haluamaksesi. Epochs tarkoittaa kuinka monta kertaa malli käy läpi kaikki kuvat. Mitä enemmän epochseja, sitä parempi mallista tulee, mutta se vie enemmän aikaa.

Google Driven yhdistäminen Colabiin

Ohjeet
  1. Paina kansio kuvaketta.

kuva

  1. Paina 'Ota käyttöön Drive' nappia.

kuva

  1. Anna Colabille lupa käyttää Google Drivea.

kuva

  1. Tämän jälkeen pitäisi tulla 'drive' kansio näkyviin.

kuva

Tässä tapauksessa Google Driveen luomani kansio on nimeltään 'yolomalli'. nyt voit käyttää sitä polkuna Colabissa.

  1. Nyt meidän tarvitsee vielä ladata opetus data kansioineen Google Driveen. Voit joko tuoda kansiot itse tai käyttää tämän repon valmista mallipohjaa. Kansion nimi on 'Dataset' ja se sisältää kaikki tarvittavat tiedostot mallin opettamiseen.

Tiedostojen lataaminen ja toiminnan varmistaminen

Ohjeet
  1. Varmista että Google Drive kansion polku on vastaavanlainen.
Google Drive
└── oma-kansio
    └── Dataset
        └── oman-mallin-nimi
            ├── test
            ├── train
            ├── valid
            └── dataset.yaml
  1. Voit jakaa kuvat ja annotaatiot siten, että 90-80% on train kansiossa ja 10-20% valid kansiossa

  2. Varmista, että train kansio sisältää kuvat, niiden annotaatiot sekä classes.txt. Kuvien ja annotaatioiden nimien pitää olla samat. Katso myös, että dataset.yaml tiedosto on oikein ja oikeassa kansiossa.

path: ../drive/MyDrive/oma-kansio/Dataset/oman-mallin-nimi
train: ../train/
val: ../valid/
test: ../test/

nc: 1 # varmista, että luokkien määrä on oikein
names: ["kissa"] # varmista, että luokkien nimet ovat oikein ja samassa järjestyksessä kuin classes.txt tiedostossa. Se löytyy train kansiosta.
  1. Varmista että valid kansio sisältää kuvat ja niiden annotaatiot. Kuvien ja annotaatioiden nimien pitää olla samat.

  2. Varmista että Colabin koodit ja polut ovat oikein.

!yolo task=detect mode=train model=yolov8n.pt data=../content/drive/MyDrive/oma-kansio/Dataset/oma-malli/dataset.yaml epochs=200 imgsz=640

Tekoälymallin opettaminen(vihdoin)

Ohjeet

Nyt kun kaikki on valmista, voimme opettaa mallin. Tämä voi kestää jonkin aikaa, riippuen kuinka monta kuvaa on ja kuinka monta epochia käytetään.

Voit aloittaa mallin opettamise painamalla 'Suorituspalvelu' nappia ja sieltä 'Suorita kaikki'. tai voit myös painaa 'Ctrl + F9'.

kuva

Colabin konsolissa pitäisi näkyä jotain tällaista.

kuva

Nyt vain odotetaan, että malli on opettanut tarpeeksi ja voimme testata sitä. Opettamasi mallin löydät täältä. train-kansion numero kasvaa joka kerta kun opetat mallia. Kansiossa oleva best.pt tiedosto on paras malli, jota voit käyttää.

Laita best.pt tiedosto samaan kansioon kuin webcam_detect.py tiedosto ja käynnistä se pythonilla. Se käyttää tietokoneeseen kytkettyä webkameraa ja tunnistaa kuvassa olevat objektit.

runs
└── detect
    └── train
        └── weights
            └── best.pt

kuva

Tekoälymallin tilastojen tulkinta

Ohjeet

Tässä esimerkki mallissa opetin mallin tunnistamaan rajakytkimiä. Malli tunnistaa rajakytkimet hyvin, mutta se tunnistaa myös muita objekteja, joita ei pitäisi tunnistaa. Tämä johtuu siitä, että malli ei ole opettanut tarpeeksi. Tässä mallissa käytin vain 36 kuvaa, joten se ei ole tarpeeksi.

Huomasin myös että malli toimii paremmin jos pidän rajakytkintä kädessäni eli se "oppi tunnistamaan" jos kytkintä pidetään kädessä. Tämä johtuu siitä, että malli ei ole opettanut tarpeeksi ja tarpeeksi monipuolisilla kuvilla. Kaikki kuvat oli otettu rajakytkin kädessä.

train_batch.jpg tiedostot sisältää kuvan, jossa on mallin tunnistamat objektit ja niiden luokat.

kuva

val_batch.jpg tiedostot sisältää kuvan, jossa on mallin tunnistamat objektit ja niiden luokat.

kuva

"Tärkeimpiä" tilastoja ovat:

  • mAP50 - Tämä kertoo miten hyvin malli tunnistaa kappaleeet yli 50% varmuudella.
  • mAP50-95 - Tämä kertoo miten hyvin malli tunnistaa kappaleeet 50-95% varmuudella.

Kuvaa katsottaessa voidaan huomata, että malli tunnistaa rajakytkimet yli 60% varmuudella jo 20 epochin jälkeen.

kuva