I dette blogindlæg lærer du, hvad Machine Vision er, og hvordan en model kan trænes til at registrere objekter i billeder. Machine Vision eller Computer Vision er et område, hvor man får maskiner til at se og opdage objekter i billeder og videoer med et vist konfidensniveau.

Skærebræt med skåret frugt

Der er mange applikationer til Machine Vision især inden for produktion. Det bruges allerede til forskellige kvalitetsinspektionsopgaver, såsom inspektion af støbning, finde knaster i træ, påvisning af kvaliteten af svejsning, få robotter til at se og interagere med genstande og detektere uønskede genstande på et samlebånd.

For at demonstrere, hvordan machine vision fungerer, og for at kickstarte din fantasi om, hvordan den kan tilføre værdi inden for en industriel ramme, vil vi demonstrere en maskinlæringsmodel, der kan registrere forskellige frugttyper.

Maskinlæring til at sortere frugter

Forestil dig, at du har en industriel frugtfarm, der producerer forskellige typer frugter. Alle frugter indsamles af robotter og opbevares sammen i dit lager. Før emballering af frugten til salg skal den sorteres. Du ønsker at sortere bananer fra pærer fra æbler fra druer og så videre. Men for at komplicere denne opgave er der også forskellige slags bananer, æbler og druer, og du vil også være i stand til at sortere disse. Et eksempel er, at du vil sortere røde bananer i en type emballage og gule bananer i en anden. Det samme gælder hvide kontra røde druer og så videre.

Hvad hvis du ved at bruge et lavt indbygget system og kamera kan skabe en maskine, der er i stand til at udføre denne opgave for dig på en automatiseret måde? En Convolutional Neural Network (CNN) algoritme kan måske gøre tricket for dig.

Convolutional Neural Networks

Convolutional Neural Networks (CNNs) er en type dybe neurale netværk arkitektur som ofte bliver brugt indenfor machine vision. CNN-algoritmen er inspireret af menneskets visuelle cortex og er en veksling mellem stacked convolutional layers og spatial pooling layers. På den måde evalueres og bruges hver pixel i et billede, når man klassificerer, om et givet billede tilhører den ene eller anden klasse.

Machine Vision er den videnskab, der sigter mod at give et computersystem en lignende eller bedre visuel klassificeringsevne end mennesker [1]. CNN’er er en robust type netværk, da billederne kræver minimal forarbejdning, inden træning kan begynde, og har potentiale til at fungere godt på mindre datasæt. Du har brug for billeder af alle de kategorier, du ønsker, at machine vision modellen skal kunne identificere. I vores tilfælde, hvis vi ønsker, at vores model kan skelne bananer fra æbler og vice versa, skal vi introducere modellen til billeder af både æbler og bananer, i forskellige vinkler, forskellige størrelser, forskellige belysning og forskellige former. Det er yderligere vigtigt, at dataene er mærket som enten et æble eller en banan, da convolutional neural network algoritmen er en superviseret lærings metode. Labeling af dataene betyder, at du skal navngive hvert billede som enten et æble eller en banan, eller oprette en mappe med alle æbler i, det samme gælder for bananer, druer og så videre.

Dermed er du supervisor for træningssessionen, når du træner en maskinlæringsmodel.

Introduktion til datasættet

Det givende datasæt er fra Kaggle og indeholder billeder fra 101 forskellige typer frugter. I alt har vi n = 69.905 billeder, hvoraf 52.262 bruges til træning, og 17.540 billeder bruges til test [2]. Også forskellige sorter af f.eks. æbler og bananer er mærket forskellige, så vores model antages at være i stand til at forudsige, om æblet er af sorten Crimson Snow, Golden, Golden-Red, Granny Smith, Red og Red Delicious. Bare for at visualisere noget af den kompleksitet, vi har at gøre med, er nedenfor et billede af to forskellige typer bananer. Kan du se forskellen mellem disse bananer? Den ene er en normal banan, mens den anden er af sorten Banana Lady Finger. Selv det er svært for mennesker at identificere, når de visualiseres fra disse vinkler.

Banan af varianten Baby Lady Fingers

Lady Finger Banan

Banana

Almindelig Banan

Før vi starter træning og test af modellen, skal billederne forarbejdes. Vi omskalerer RGB-kanaler på billederne fra 0-255 til værdier mellem 0-1, da dette er lettere for modellen at behandle, og ligeledes reducere sandsynligheden for at få problemer med vanishing gradient, og er hurtigere at træne.

Forarbejde af billederne
1
2
3
4
5
6
train_datagen = ImageDataGenerator(rescale=1/255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1/255)

Både shear_range og zoom_range er indstillet til at tilfældigt ændre vinklen og zoomen på billederne mellem 0 og 0.2. Fordi billederne er taget i næsten perfekte forhold og vores sorteringsmaskine kan se frugterne forskelligt, manipuleres træningsdata tilfældigt for at forhindre overfitting og for at gøre dem mere som produktionsforhold. ImageDataGenerator gør alt dette automatisk, hvilket giver en mere robust model med lidt indsats.

Vi designer derefter vores Convolutional Neural Network:

Convolutional Neural Network arkitektur
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(100, 100, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(units=128, activation='relu', use_bias=True))
model.add(Dense(units=101, activation='softmax'))

Det sidste lag har 101 neuroner, en for hver klasse af frugter, og bruger aktiveringsfunktionen softmax, der producerer et konfidensniveau svarende til sandsynligheder, hvor det summerer op til 1.

I vores machine vision model får vi en træningsnøjagtighed på 98,39% og et loss på 0,0495. Derudover får vi en testnøjagtighed på 98,39% og et loss på 0,0590.

Tensorflow Lite

Den sidste ting, vi gør, er at konvertere vores model til en Tensorflow Lite-version, så den kan distribueres på en indlejret enhed som Google Coral Dev Board, og køre i produktion:

Tensorflow Lite
1
2
3
4
5
from tensorflow.lite import TFLiteConvereter

converter = TFLiteConverter.from_keras_model_file("model.h5")
tflite_model = converter.convert()
open("model.tflite", "wb").write(tflite_model)

For dem af os, der ikke er frugtfarmere

Nu har vi vist, hvordan frugter kan sorteres ved hjælp af maskinlæring. Vi er ikke frugt farmere, og chancerne for, at du er frugt farmer, er også usandsynlig. Men vi har gode nyheder, da der er forskellige applikationer til machine vision i industrielle omgivelser. Eksempler kan være at sortere papirkurven, detektere, om råmaterialer er velegnede til yderligere forarbejdning, kvalitetskontrol af færdige produkter og påvisning af uønskede genstande på samlebåndet. CNN’er kan bruges til at automatisere operationer og kvalitetskontrol i dit samlebånd.

// Rasmus Steiniche, CEO @ neurospace

Referencer

[1] Khan et al (2018) A Guide to Convolutional Neural Networks for Computer Vision. Morgan & Claypool

[2] Horea Muresan, Mihai Oltean, Fruit recognition from images using deep learning, Acta Univ. Sapientiae, Informatica Vol. 10, Issue 1, pp. 26-42, 2018.

Credit for dataset: Horea Muresan, Mihai Oltean, Fruit recognition from images using deep learning, Acta Univ. Sapientiae, Informatica Vol. 10, Issue 1, pp. 26-42, 2018.