Jeg undersøkte litt litteratur relatert til Full Convolutional Networks og kom over følgende setning ,
Et fullt konvolusjonsnettverk oppnås ved å erstatte de parameterrike fullkoblede lagene i standard CNN-arkitekturer med konvolusjonslag med $ 1 \ ganger 1 $ kjerner.
Jeg har to spørsmål.
-
Hva menes med parameterrikt ? Kalles det parameterrikt fordi de fullt tilkoblede lagene formidler parametere uten noen form for «romlig» reduksjon?
-
Hvordan fungerer $ 1 \ ganger 1 $ kjerner? Betyr ikke «t $ 1 \ ganger 1 $ kjerne at man skyver en enkelt piksel over bildet? Jeg er forvirret over dette.
Svar
Fullstendig konvolusjonsnettverk
A fullt konvolusjonsnettverk (FCN) er et nevralt nettverk som bare utfører konvolusjon (og undersampling eller upsampling). Tilsvarende er et FCN et CNN uten fullt tilkoblede lag.
Convolution neurale nettverk
Det typiske convolution neurale nettverket (CNN) er ikke fullt konvolusjonelt fordi det inneholder ofte fullkoblede lag også (som ikke utfører konvolusjonsoperasjonen), som er parameterrike , i den forstand at de har mange parametere (sammenlignet med deres tilsvarende konvolusjon lag), selv om de fullt tilkoblede lagene også kan sees på som kronglinger med ker nels som dekker hele inngangsregionene , som er hovedideen bak å konvertere en CNN til en FCN. Se denne videoen av Andrew Ng som forklarer hvordan du konverterer et fullt tilkoblet lag til et konvolusjonslag.
Et eksempel på et FCN
Et eksempel på et fullt konvolusjonalt nettverk er U-net (kalt på denne måten på grunn av U-formen, som du kan se fra illustrasjonen nedenfor), som er et kjent nettverk som brukes til semantisk segmentering , dvs. klassifisere piksler i et bilde slik at piksler som tilhører samme klasse (f.eks. en person), er assosiert med samme etikett (dvs. person), også pikselvis ( eller tett) klassifisering.
Semantisk segmentering
Så, i semantisk segmentering, vil du knytte en etikett til hver piksel (eller liten piksel) i inngangsbildet. Her er en mer suggestiv illustrasjon av et nevralt nettverk som utfører semantisk segmentering.
Forekomstssegmentering
Det er også segmenteringsforekomst , hvor du også vil skille forskjellige forekomster av samme klasse (f.eks. vil du skille mellom to personer i samme bilde ved å merke dem forskjellig). Et eksempel på et nevralt nettverk som brukes for eksempel segmentering er maske R-CNN . Blogginnlegget Segmentering: U-Net, Mask R-CNN og Medical Applications (2020) av Rachel Draelos beskriver disse to problemene og nettverk veldig bra.
Her er et eksempel på et bilde der forekomster av samme klasse (dvs. person) er merket annerledes (oransje og blått).
Både semantiske og forekomstssegmenteringer er tette klassifiseringsoppgaver (spesielt faller de i kategorien bildesegmentering ), det vil si at du vil klassifisere hver piksel eller mange små flekker av piksler i et bilde.
$ 1 \ ganger 1 $ konvolusjoner
I U-net-diagrammet ovenfor kan du se at det bare er kronglinger, kopiering og beskjæring, maks- pooling og upsampling. Det er ingen fullt tilkoblede lag.
Så hvordan knytter vi en etikett til hver piksel (eller en liten patch av p ixels) av inngangen? Hvordan utfører vi klassifiseringen av hver piksel (eller oppdatering) uten et endelig fullt koblet lag?
Det er der $ 1 \ ganger 1 $ konvolusjons- og oppsamplingsoperasjoner er nyttige!
Når det gjelder U-net-diagrammet ovenfor (spesifikt den øverste høyre delen av diagrammet, som er illustrert nedenfor for klarhetens skyld), to $ 1 \ ganger 1 \ ganger 64 $ kjerner brukes på inngangsvolumet (ikke bildene!) for å produsere to funksjonskart i størrelse $ 388 \ ganger 388 $ . De brukte to $ 1 \ ganger 1 $ kjerner fordi det var to klasser i eksperimentene deres (celle og ikke-celle). Det nevnte blogginnlegget gir deg også intuisjonen bak dette, så du bør lese det.
Hvis du har prøvd å analysere U-net-diagrammet nøye, vil du legge merke til at utdataene kartlegges har forskjellige romlige (høyde og vekt) dimensjoner enn inngangsbildene, som har dimensjoner $ 572 \ ganger 572 \ ganger 1 $ .
Det er greit fordi vårt generelle mål er å utføre tett klassifisering (dvs. klassifisere lapper av bildet, der lappene bare kan inneholde en piksel ), selv om jeg sa at vi ville ha utført pikselvis klassifisering, så kanskje du forventet at utgangene skulle ha de samme eksakte romlige dimensjonene til inngangene. Vær imidlertid oppmerksom på at du i praksis også kan ha utgangskartene å ha samme romlige dimensjon som inngangene: du ville bare ne redigert for å utføre en annen oppsamplingsoperasjon (dekonvolusjon).
Hvordan fungerer $ 1 \ ganger 1 $ innviklinger?
A $ 1 \ times 1 $ konvolusjon er bare den typiske 2d konvolusjonen, men med en $ 1 \ times1 $ kjerne.
Som du sikkert allerede vet (og hvis du ikke visste dette, nå vet du det), hvis du har en $ g \ ganger g $ kjerne som brukes på en inngang av størrelse $ h \ times w \ times d $ , der $ d $ er dybden på inngangsvolumet (som for eksempel når det gjelder bilder i gråtoner, det er $ 1 $ ), har kjernen faktisk formen $ g \ ganger g \ ganger d $ , dvs. at den tredje dimensjonen til kjernen er lik den tredje dimensjonen av inngangen den brukes på. Dette er alltid tilfelle, bortsett fra 3d-kronglinger, men vi snakker nå om de typiske 2d-kronglingene! Se dette svaret for mer info.
Så i tilfelle vi ønsker å bruke en $ 1 \ ganger 1 $ konvolusjon til en inngang med form $ 388 \ ganger 388 \ ganger 64 $ , der $ 64 $ er dybden på inngangen, så har den faktiske $ 1 \ ganger 1 $ kjerner som vi trenger å bruke, form $ 1 \ ganger 1 \ ganger 64 $ (som jeg sa ovenfor for U-nettet). Måten du reduserer dybden på inngangen med $ 1 \ ganger 1 $ bestemmes av antall $ 1 \ ganger 1 $ kjerner du vil bruke. Dette er nøyaktig det samme som for enhver 2d-konvolusjonsoperasjon med forskjellige kjerner (f.eks. $ 3 \ times 3 $ ).
I tilfelle av U-nett reduseres de romlige dimensjonene til inngangen på samme måte som de romlige dimensjonene til enhver inngang til et CNN reduseres (dvs. 2d-konvolusjon etterfulgt av nedsamplingsoperasjoner). Hovedforskjellen (bortsett fra ikke å bruke fullt tilkoblede lag) mellom U-nettet og andre CNN-er, er at U-nettet utfører samplingsoperasjoner, slik at det kan sees på som en koder (venstre del) etterfulgt av en dekoder (høyre del) .
Kommentarer
- Takk for ditt detaljerte svar, jeg setter stor pris på det!