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
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.
Sisällysluettelo
Pohjan 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
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.
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
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).
- Erilaiset kuvakulmat
- Erilaiset valaistukset
- Erilaiset taustat
- Erilaiset kameran zoomaukset
- Erilaiset kameran tarkennukset
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
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 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.
Lataamisen jälkeen pura se haluamaasi kansioon ja avaa kyseisessä kansiossa oleva data kansio ja siellä oleva 'predefined_classes.txt' tiedosto.
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.
Asetuksia, joita pitää/kannattaa muuttaa:
Pakolliset:
- Vaihda 'PascalVOC' 'Yolo' muotoon.
Suosittelen:
- Vaihda 'Auto Save Mode' päälle, jotta annotaatio tiedostot tallentuvat automaattisesti.
- Merkitse 'Use Default Label' päälle, jotta voit valita luokan listasta, eikä joka kerta tarvitse kirjoittaa luokkaa itse.
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.
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.
Ohjeet
- Avaa Google Drive ja luo uusi kansio, johon tallennat kaikki tiedostot.
- 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.
- 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.
Tässä paina 'OK' ja 'Tallenna'.
- 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.
- 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.
Ohjeet
- Paina kansio kuvaketta.
- Paina 'Ota käyttöön Drive' nappia.
- Anna Colabille lupa käyttää Google Drivea.
- Tämän jälkeen pitäisi tulla 'drive' kansio näkyviin.
Tässä tapauksessa Google Driveen luomani kansio on nimeltään 'yolomalli'. nyt voit käyttää sitä polkuna Colabissa.
- 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.
Ohjeet
- Varmista että Google Drive kansion polku on vastaavanlainen.
Google Drive
└── oma-kansio
└── Dataset
└── oman-mallin-nimi
├── test
├── train
├── valid
└── dataset.yaml
-
Voit jakaa kuvat ja annotaatiot siten, että 90-80% on train kansiossa ja 10-20% valid kansiossa
-
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.
-
Varmista että valid kansio sisältää kuvat ja niiden annotaatiot. Kuvien ja annotaatioiden nimien pitää olla samat.
-
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
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'.
Colabin konsolissa pitäisi näkyä jotain tällaista.
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
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.
val_batch.jpg tiedostot sisältää kuvan, jossa on mallin tunnistamat objektit ja niiden luokat.
"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.