11) Lokalisera föremål

I lektionerna 11,12 och 13 ska vi fortsätta med bildigenkänning både för bild och video.

Video är ju bara en serie av bilder som behandlas en och en. Så video är inte så speciellt.

I föregående lektioner byggde vi en app imagecp för enkel bildigenkänning. Appen kan bara bestämma klassen på ett föremål i bilden.

I de här lektionerna tittar vi på en teknik där flera föremål i bilden kan bestämmas både var föremålen finns och klassen på föremålen.

Appen objectcp kan klassificera flera föremål per bild.

Appen kan alltså ge flera klasser som svar till exempel både Katt och Hund.

Objectcp kan också lokalisera föremålen i bilden och markera med en rektangel runt varje föremål.

Objectcp använder en helt annan modell än imagecp och det är ju självklart eftersom modellen ska ge andra resultat.

Videon överst på sidan är en liten demo av objectcp.


Vad händer om vi ger bilden med två hundar till den enkla bildigenkännings-appen imagecp? Imagecp ger bara ett svar men är något osäker...


Om vi beskär bilden något blir imagecp mera säker på vilken hundras det är.


Objectcp ger som svar två objekt. Båda är hund. Modellen kan inte skilja på hundraser.

Vår modell för ‘object detection’

Objectcp använder en förtränad COCO-SSD modell. Det är ett CNN för object detection.

Modellen är tränad på COCO (Common Objects in Context). COCO innehåller mer än 200,000 bilder men bara 80 klasser.

Ett MobileNet är basen för nätverket.

SSD (Single Shot Detector) är ett CNN som ger både klass och läge av objekten (föremålen) i bilden. Bilden passerar bara en gång genom nätverket. Därav namnet “single shot”.

SSD är mycket snabbt och kan användas i mobiler.

Förenklat så består hela nätverket av en bas (MobileNet), extra lager för ’object detection’ (SSD) och ett NMS-lager (Non-Maximum Suppression).

NMS tar bort överlappande boxar och behåller bara en box (den bästa) för varje objekt.

Olika dataset

Både imagecp och objectcp använder varianter av MobileNet som grundmodell. Modellerna kan förstås inte vara helt lika eftersom antalet klasser är olika (1000 för imagecp, 80 för objectcp).

Det som gör att modellerna (och apparna) är olika beror förstås också på vilka dataset de är tränade med. Dataset ImageNet (för imagecp) är bäst på djur och då speciellt hundar. Dataset COCO (för objectcp) är bäst på stadsmiljöer och trafik.

Liknande modeller men olika dataset för träning kan ge modeller med mycket olika egenskaper.

objectcp: 'Bounding Boxes'

Javascript-konsolen visar utskrifter från objectcp.

Bbox ger koordinaterna för två punkter (nedre vänstra hörnet och högra övre hörnet) som behövs för att rita en rektangel.

Score är ett mått på hur säker modellen är på klassificeringen.

Ramverk och modell

Det AI-ramverk som används i appen är som vanligt TensorFlow.js.

Modellen med tillhörande mjukvara beskrivs på https://github.com/tensorflow/tfjs-models/tree/master/coco-ssd

Koden

Du kan kopiera in bilder till objectcp på samma sätt som till imagecp. Koden blir därför ganska lika.

Index.html

index.js


1) När användaren trycker på knappen Klassificera så körs funktionen predict()
2) När användaren har klistrat in så körs funktionen pastedImage()
3) Knappen Klassificera (predict) går inte att trycka på innan modellen är laddad. Knappen är ’disabled’. Blir ’enabled’ i funktionen loadModel().


4) Resultatet av klassificeringen läggs i fältet results.
5) Det går inte att rita rektangeln för föremålets läge direkt på bilden. Rektangeln ritas i stället på en rityta (canvas) som är lika stor som bilden. Bilden har också kopierats in på canvas. Bara en av bild eller canvas är synliga. Här görs canvas synlig medan bilden görs osynlig.


6) Funktionen pastedImage() anropas när användare har klistrat in bilden. Funktionen plockar upp bilden och uppdaterar den synliga bilden med den inklistrade bilden. Lite krånglig kod.
7) När den inklistrade bilden har sparats som bild görs canvas osynligt och bilden synlig.

Summering

I den här lektionen om Object Detection har vi sett hur en app kan både bestämma läge och klass för föremålen i en bild.

En modell baserad på COCO/SSD användes där COCO är det dataset som modellen är tränad på.

Object detection används i självkörande bilar.

I nästa lektion ska vi titta på en större app som använder object detection på en ”trafik-video”.

<< Bakåt Framåt >>