Articles

# 021 CNN Object Localization

Object Localization

Object detection är ett av de områden av datorseende som exploderar och det fungerar så mycket bättre än bara ett par år sedan. För att bygga upp objektdetektering lär vi oss först om objektlokalisering. Låt oss börja med att definiera vad det betyder.

vi har redan sagt att bildklassificeringsuppgiften är att titta på en bild och säga att det finns en bil eller inte. Klassificering med lokalisering innebär inte bara att vi måste märka ett objekt som en bil utan också att sätta en avgränsningslåda eller rita en rektangel runt bilens position i bilden. I termen klassificering med lokaliseringsproblem hänvisar lokalisering till att ta reda på var på bilden är bilen vi har upptäckt.

vi lär oss om detekteringsproblemet där det kan finnas flera objekt i bilden och vi måste upptäcka dem alla och lokalisera dem alla. Om vi gör detta för en autonom körprogram kan vi behöva upptäcka inte bara andra bilar utan kanske andra fotgängare och motorcyklar eller till och med andra föremål. Klassificeringen och klassificeringen med lokaliseringsproblem har vanligtvis ett stort objekt mitt i bilden som vi försöker känna igen eller känna igen och lokalisera. I motsats till detektionsproblemet kan det finnas flera objekt, och i själva verket kanske till och med flera objekt av olika kategorier inom en enda bild. Ideerna vi lär oss om bildklassificering kommer att vara användbara för klassificering med lokalisering och sedan kommer de ideer vi lär oss för lokalisering att vara användbara för detektering.

vad är lokalisering och upptäckt ?

Bildklassificering med lokalisering, objektlokalisering

Bildklassificering (vänster); klassificering med lokalisering (centrum); detektering av flera objekt (höger)

låt oss börja med att prata om klassificering med lokalisering. Vi är redan bekanta med bildklassificeringsproblemet där vi kan mata in en bild i en \(convnet \) med flera lager, och detta resulterar i en vektor av funktioner som matas till kanske en \(softmax \) enhet som matar ut den förutsagda klassen.

Convolutional neurala nätverk med en softmax utgång

a \(convnet \) med en \(softmax \) utgång

om vi bygger en självkörande bil, kanske våra objektkategorier är en fotgängare, en bil, en motorcykel och en bakgrund (det betyder inget av ovanstående). Så om det inte finns någon fotgängare, ingen bil, ingen motorcykel så kan vi ha en utgångsbakgrund. Det här är våra fyra klasser, så vi behöver en \ (softmax\) med \ (4\) möjliga utgångar.

vad sägs om om vi vill lokalisera bilen i bilden också ? För att göra det kan vi ändra vårt neurala nätverk för att ha några fler utgångsenheter som matar ut en avgränsningslåda. I synnerhet kan vi ha neurala nätverksutgången \(4 \) fler siffror, och dessa siffror kommer att vara \(b_x\), \(b_y\), \(b_h\), \(b_w \). Dessa \ (4\) siffror parametrerar avgränsningsrutan för det upptäckta objektet.

CNN som matar ut positionen för en avgränsningsbox

Convolutional neural network som matar ut positionen för en avgränsningsbox

klassificering med lokalisering

här används notationen att bildens övre vänstra punkt är \((0,0) \), nedre högra är \((1,1) \).

Bounding box på bil,, objektlokalisering

Bounding box och det är Koordinater

ange bounding box den röda rektangeln kräver att du anger mittpunkten, så det är punkten \(b_x \), \(b_y \) samt höjden som skulle vara \(b_h\), liksom bredden \(b_w \) för denna bounding box. Om vår träningsuppsättning inte bara innehåller objektklassetiketten, som vårt neurala nätverk försöker förutsäga här uppe, men det innehåller också \ (4\) ytterligare nummer som ger avgränsningsrutan, kan vi använda övervakad inlärning för att göra våra algoritmutgångar inte bara en klassetikett, men också \ (4\) parametrarna för att berätta var är avgränsningsrutan för objektet vi upptäckte. I det här exemplet kan \(b_x \) vara ungefär \(0.5 \) eftersom det är ungefär halvvägs till höger om bilden, \(b_y \) kan vara ungefär \(0.7 \) eftersom det är ungefär \(70\) % av vägen ner till bilden, kan \(b_h\) vara ungefär \(0.3\) eftersom höjden på den röda fyrkanten är ungefär \(30\) % av bildens totala höjd och \(b_w\) kan vara ungefär \(0.4\) eftersom bredden på den röda rutan är ungefär \(0.4\) av hela bildens totala bredd.

definiera måletiketten \(y \)

låt oss formalisera detta lite mer när det gäller hur vi definierar måletiketten \(Y \) för detta som en övervakad inlärningsuppgift. Låt oss definiera måletiketten \(Y \). Det kommer att bli en vektor där den första komponenten \(p_c \) kommer att visa finns det ett objekt. Om objektet är en fotgängare, en bil eller en motorcykel, kommer \(p_c \) att vara lika med 1, och om det är bakgrundsklassen (om det inte är något av objekten vi upptäcker ), kommer \(p_c \) att vara \(0 \). Vi kan tänka \(p_c \) står för sannolikheten att det finns ett objekt, sannolikheten att en av klasserna vi försöker upptäcka finns där, något annat än bakgrundsklassen.

vår Vektor \(y \) skulle vara som följer:

$$ y=\begin{bmatrix} p_{c}\\ b_{y}\\b_{h}\\b_{w}\\c_{1}\\c_{2}\\c_{3}\end{bmatrix} $$

nästa, om det finns ett objekt vill vi mata ut\(b_x\), \(b_y\), \(b_h\) och \(B_W\), avgränsningsrutan för objektet vi upptäckte. Och slutligen, om det finns ett objekt, så om \(p_c =1\), vill vi också mata ut \(C1\), \(C2 \) och \(C3 \) som berättar är det \(class1\), \(klass 2 \) eller \(klass 3\), med andra ord är det en fotgängare, en bil eller en motorcykel. Vi antar att vår bild bara har ett objekt och det mesta av dessa objekt visas på bilden i denna klassificering med lokaliseringsproblem. Låt oss gå igenom ett par exempel.

om \(x \) är en träningsuppsättningsbild, kommer \(y \) att ha den första komponenten \(p_c =1\) eftersom det finns ett objekt, då \(b_x\), \(b_y\), \(b_h\) och \(b_w \) anger avgränsningsrutan. Så, vår etikettutbildningssats vi behöver avgränsningslådor i etiketterna.

och då är det äntligen en bil, så det är \(klass 2 \). \(C_1 = 0 \) eftersom det inte är en fotgängare, \(C_2=1 \) eftersom det är en bil, \(C_3=0 \) eftersom det inte är en motorcykel. Bland \(C_1,C_2, C_3 \) bör högst en av dem vara lika med \(1 \).

$ $ y= \ begin{bmatrix}1\ \ b_{x}\ \ b_{y} \ \ b_{h} \ \ b_{w}\\0\\1\\0 \end{bmatrix} $ $

vad händer om det inte finns något objekt i bilden? I det här fallet \(p_c=0 \) och resten av elementen i denna vektor kan vara vilket tal som helst, för om det inte finns något objekt i den här bilden bryr vi oss inte om vilken avgränsningsruta av neurala nätverksutgångar samt vilken av de tre objekten \(C_1,C_2,C_3 \) det tänker på detta.

$$ y= \ börja{bmatrix}0\\?\\?\\?\\?\\?\\?\\? \ end{bmatrix} $$

bilbild (vänster) - naturbild(höger)

exempel på bilder i en träningsuppsättning

givet en uppsättning märkta träningsexempel så här konstruerar vi det: \(x\) inmatningsbilden samt \(y\) klassetiketten både bilder där det finns ett objekt och för bilder där det inte finns något objekt, och uppsättningen av dessa definierar sedan vår träningsuppsättning.

förlustfunktion

slutligen låt oss beskriva förlustfunktionen vi använder för att träna det neurala nätverket. Marksanningsetiketten var \(y \), och neurala nätverk matar ut några \(\hat{y} \) Vad ska förlustbiet.

$ $ L \ vänster (\hat{y}, y \ höger ) = \ vänster (\hat{y}_{1} – y_{1} \ Höger )^{2}+\vänster (\hat{y} _ {2} – y_{2} \Höger )^{2}+ … + \ vänster (\hat{y}_{8} – y_{8} \höger )^{2}, y_{1}=1 $$

$$ L \ vänster (\hat{y},y \höger) = \vänster (\hat{y}_{1}-y_{1} \ Höger )^{2}, y_{1}=0 $$

Lägg märke till att \(y \) här har \(8 \) komponenter(den första raden av förlustfunktion), så det går från summan av kvadraterna för skillnaden mellan elementen, och det är förlusten om \(y_1 =1 \). Det är fallet där det finns ett objekt so \(y_1 \) = \(p_c\). Så, om det finns ett objekt i bilden, kan förlusten vara summan av kvadrater över alla olika element.

det andra fallet är if \(y_1 =0.\ ) Det är om detta \(p_c=0\), i så fall kan förlusten bara vara \(\hat{y_1}\) minus \(y_1\) kvadrerad eftersom i det andra fallet är resten av komponenterna inte viktiga. Allt vi bryr oss om är hur exakt det neurala nätverket matar ut \(p_c \) i så fall.

bara en sammanfattning…

om \(y_1=1 \), då kan vi använda kvadratfelet för att bestraffa kvadrat avvikelse från prediktorn än de faktiska utgångarna för alla åtta komponenter, medan om \(y_1 =0\) bryr vi oss inte om återstående sju värden. Allt vi bryr oss om är hur exakt vårt neurala nätverk uppskattar \(y_1 \) vilket är lika med \(p_c \). Precis som en sidokomment för er som vill veta alla detaljer. Vi har använt squared-felet bara för att förenkla beskrivningen här, i praktiken kan vi förmodligen använda en sannolikhetsförlust för \(C1 \enspace ,C2 \enspace ,C3\enspace \) till \(softmax\) – utgången, men vid beräkning av loos kommer squared-felet att fungera bra.

Lämna ett svar

Din e-postadress kommer inte publiceras.