Ja, underrubriken är korrekt, FPN är en mycket enkel metod som kan användas med nästan alla modeller för att förbättra resultaten. Vi kommer snart att hoppa in på de tekniska detaljerna i dokumentet, men för den här bloggen finns det några förutsättningar. Du bör ha en uppfattning på hög nivå om följande Fast RCNN, Faster RCNN, anchor boxes, kunskap om SSD kommer att vara till nytta. Jag har bloggar för alla dessa artiklar som du kan kolla in (länkar i slutet av den här bloggen). FPN är relativt enklare om man förstår alla förutsättningar väl.
Bildpyramider (flera bilder i flera skalor) används ofta vid förutsägelser för att förbättra resultaten. Men att beräkna resultat med hjälp av moderna djupinlärningsarkitekturer är ofta en dyr process både när det gäller beräkning och tid.
FPN bygger på att utnyttja den inneboende pyramidala hierarkin i flera skalor hos deep CNN. Det motsvarar skillnaden mellan RCNN och Fast RCNN, RCNN är en regionbaserad objektdetektor där vi först hittar ROI:s med hjälp av en algoritm som selektiv sökning och sedan beskär dessa ROI:s (cirka 2 000) från bilden och matar in dem i CNN för att få resultat. I Fast RCNNN delas CNN:s inledande lager med hela bilden och beskärningen av ROI:s görs med hjälp av den extraherade funktionskartan, vilket sparar mycket tid. När det gäller FPN bygger forskningen på att utnyttja den interna flerskalenaturen, och bildpyramiden genomförs på något sätt internt i arkitekturen och delar de flesta delar av nätverket. Vi kommer att hoppa in i de tekniska detaljerna nu.
CNN bygger på den hierarkiska strukturen där upplösningen av funktionskartan minskas efter varje lager, men den semantik som fångas upp av varje djupare lager är starkare än det föregående lagret. De semantiskt starkare funktionerna är rumsligt grövre på grund av nedprovningen. FPN skapar en arkitektur där de semantiskt starkare funktionerna slås samman med funktionerna från tidigare skikt (som underprovtas färre gånger och därmed har mer exakt lokaliseringsinformation).
Arkitekturen består av två vägar:
- Bottom-up pathway (Normal feed-forward CNN)
- Top-down pathway (New architecture used for merging features)
- Det är en normal feed-forward CNN-arkitektur. I artikeln använde författarna Resnet-arkitekturen för utvärdering av prestanda. Vi kommer först att benämna lagren som C2, C3, C4 och C5 som är Conv 2, 3, 4 och 5 lager i Resnet-arkitekturen. Storleken på funktionskartan efter tillämpning av C2 är bildstorlek/4 och denna rumsliga dimension nedskalas med en faktor 2 efter varje lager.
Top-down pathway (Right pyramid in the above image)
I denna pathway slås djupare funktioner samman med lägre funktioner med hjälp av laterala anslutningar. Eftersom antalet kanaler för lagren i den nedre och övre vägen inte är detsamma tillämpas först en 1*1-faltning för att få ett fast antal kanaler för varje lager (denna dimension behålls 256 i dokumentet). Den rumsliga storleken skiljer sig också åt, så vi uppsamlar (2x) de djupare funktionerna så att den rumsliga storleken på denna funktion matchar en funktionskarta med högre upplösning för det föregående lagret i den nedåtgående banan. Nu är dimensionerna för två funktionskartor samma och de slås samman genom elementvis addition.
Vi kan förstå detta med ett exempel. Låt oss säga att vår bildstorlek är 512*512. Storleken på funktionskartan efter varje konvolutionslager (C2, C3, C4, C5) kommer att vara . Antalet kanaler i varje lager är . Nu tillämpar vi en 1*1-falsning (med utgångsantalet kanaler = 256) på utgångarna från C2, C3, C4, C5 för att få ett lika stort antal kanaler. Vi kallar dessa mellanliggande funktioner med samma antal utgångskanaler för S2, S3, S4, S5 som motsvarar C2, C3, C4, C5. S5 upsamplas nu till 32*32 och slås samman med S4 med hjälp av elementvis addition. Nu kommer denna utgång att uppgraderas till 64*64 och slås samman med S3 och så vidare. Vi kallar utdata från detta steg för T2, T3, T4, T5.
För att minska effekten av aliasing på grund av upsampling tillämpas en 3*3-falsning på T2, T3, T4, T5 för att få våra slutliga funktionskartor P2, P3, P4, P5 som motsvarar C2, C3, C4, C5. Dessa funktioner används för att generera slutliga klassificerings- och regressionsresultat (bbox). Parametrarna för huvudet kan delas och ett separat huvud ger ingen extra nytta.
Det var allt i teorin om FPN. Men vi ska se hur FPN kan implementeras för Faster RCNN och Fast RCNN.
FPN för Faster RCNN
Faster RCNN använder regionförslagsnätverk. RPN används för att generera förslag till avgränsande boxar och dessa förslag används senare för att generera slutliga förutsägelser. RPN är ett litet nätverk som implementeras över de extraherade funktionerna i det sista lagret (C5). En 3*3-faltning tillämpas på denna extraherade funktion följt av två liknande 1*1-faltningslager (ett för klassificering och ett för regression).
RPN anpassas här genom att helt enkelt ersätta en enkelskalig funktionskarta med FPN. FPN tillämpas nu alltså för P2-P5 och inte enbart för C5. För träning av RPN används ankarrutor med flera skalor. Men eftersom den multipla skalan nu är inneboende i den extraherade funktionen är det inte nödvändigt att ha ankarrutor med multipla skalor på någon av nivåerna. I stället tilldelas varje nivå en ankarruta med en enda skala. Storleken på de ankarrutor som används i artikeln är {32², 64², 128², 256², 512²} för {P2, P3, P4, P5, P6}. P6 införs här så att en stor ankarbox kan användas. P6 är en delprovtagning från P5 med steg 2. Förankringslådor med bildförhållandena {1:1, 1:2, 2:1} används.
Dessa förankringslådor matchas med jordartslådor och modellen tränas från början till slut.
FPN för snabb RCNN
Implementeringen av FPN i snabb RCNN är mycket enkel. Fast RCNN använder tekniker för regionförslag, t.ex. selektiv sökning, för att generera ROI och använder ROI-pooling på funktionskartan i en enda skala för att få slutresultatet. Genom att tillämpa FPN kommer vi att få flera funktionskartor med olika skalor och vi behöver en strategi för att tilldela en given ROI till funktionskartan (nu har vi flera funktionskartor, vilken funktionskarta ska användas för en given ROI?).
Den använda funktionskartan beräknas med hjälp av:
Här är 224 träningsstorlek för bilden i imagenet-dataset (resnet som används behålls på imagenet). k0 är funktionskartan till vilken ROI av storlek 224 tilldelas, w och h är ROI:s bredd och höjd. Huvudet har gemensamma parametrar för varje funktionskarta.