Am analizat unele literatură referitoare la rețele complet convoluționale și am întâlnit următoarea frază ,

O rețea complet convoluțională este realizată prin înlocuirea straturilor complet conectate bogate în parametri din arhitecturile CNN standard cu straturi convoluționale cu $ 1 \ times 1 $ kernels.

Am două întrebări.

  1. Ce se înțelege prin bogat în parametri ? Se numește parametru bogat deoarece straturile complet conectate transmit parametri fără niciun fel de reducere „spațială”?

  2. De asemenea, cum funcționează nucleele $ 1 \ ori 1 $ ? Nu înseamnă „k $ 1 \ times 1 $ kernel pur și simplu că se glisează un singur pixel peste imagine? Sunt confuz cu privire la acest lucru.

Răspuns

Rețele complet convolutive

A rețea de convoluție completă (FCN) este o rețea neuronală care efectuează numai operații de convoluție (și sub-eșantionare sau eșantionare). În mod echivalent, un FCN este un CNN fără straturi complet conectate.

Rețele neuronale de convoluție

Rețeaua tipică de convoluție neuronală (CNN) nu este complet convoluțională deoarece conține adesea și straturi complet conectate (care nu efectuează operația de convoluție), care sunt bogate în parametri , în sensul că au mulți parametri (în comparație cu convoluția lor echivalentă straturi), deși straturile complet conectate pot fi, de asemenea, văzute ca circumvoluții cu ker nels care acoperă întreaga regiune de intrare , care este ideea principală din spatele conversiei unui CNN într-un FCN. Vedeți acest videoclip de Andrew Ng, care explică cum puteți converti un strat complet conectat într-un strat convoluțional.

Un exemplu de FCN

Un exemplu de rețea complet convoluțională este U-net (numit în acest fel datorită formei sale U, pe care o puteți vedea din ilustrația de mai jos), care este o rețea faimoasă care este utilizată pentru semantic segmentare , adică clasificați pixelii unei imagini astfel încât pixelii care aparțin aceleiași clase (de exemplu, o persoană) să fie asociați cu aceeași etichetă (adică persoană), alias pixel-wise ( sau densă) clasificare.

introduceți descrierea imaginii aici

Segmentarea semantică

Deci, în segmentarea semantică, doriți să asociați o etichetă fiecărui pixel (sau un mic patch de pixeli) al imaginii de intrare. Aici, „o ilustrare mai sugestivă a unei rețele neuronale care efectuează segmentare semantică.

introduceți descrierea imaginii aici

Segmentarea instanțelor

Există și segmentarea instanței , unde doriți, de asemenea, să diferențiați instanțe diferite ale aceleiași clase (de exemplu, doriți să distingeți doi oameni din aceeași imagine etichetându-i diferit). Un exemplu de rețea neuronală care este utilizată de exemplu pentru segmentare este masca R-CNN . Postarea pe blog Segmentare: U-Net, Mask R-CNN și Medical Applications (2020) de Rachel Draelos descrie foarte bine aceste două probleme și rețele.

Iată un exemplu de imagine în care instanțe din aceeași clasă (adică persoană) au fost etichetate diferit (portocaliu și albastru).

introduceți descrierea imaginii aici

Atât segmentarea semantică, cât și segmentarea instanțelor sunt sarcini de clasificare dense (în mod specific, acestea cad în categoria segmentarea imaginii ), adică doriți să clasificați fiecare pixel sau multe patch-uri mici de pixeli ale unei imagini.

$ 1 \ times 1 $ convoluții

În diagrama U-net de mai sus, puteți vedea că există doar convoluții, copiere și decupare, max- operațiuni de punere în comun și de eșantionare. Nu există straturi complet conectate.

Deci, cum putem asocia o etichetă fiecărui pixel (sau un mic patch de p ixels) de intrare? Cum efectuăm clasificarea fiecărui pixel (sau patch) fără un strat final complet conectat?

Acolo este $ 1 \ ori 1 $ operațiile de convoluție și eșantionare sunt utile!

În cazul diagramei U-net de mai sus (în mod specific, partea din dreapta sus a diagramei, care este ilustrată mai jos pentru claritate), două $ 1 \ ori 1 \ ori 64 $ kernelurile sunt aplicate volumului de intrare (nu imaginilor!)) pentru a produce hărți de caracteristici două de dimensiuni 388 $ \ 388 $ . Au folosit două nuclee $ 1 \ times 1 $ deoarece au existat două clase în experimentele lor (celulă și non-celulă). Postarea de blog menționată vă oferă, de asemenea, intuiția din spatele acestui lucru, așa că ar trebui să o citiți.

introduceți descrierea imaginii aici

Dacă ați încercat să analizați cu atenție diagrama U-net, veți observa că hărțile de ieșire au dimensiuni spațiale (înălțime și greutate) diferite decât imaginile de intrare, care au dimensiuni 572 $ \ ori 572 \ ori 1 $ .

Asta este bine, deoarece obiectivul nostru general este să realizăm clasificare densă (adică clasificați patch-urile imaginii, unde patch-urile pot conține doar un pixel ), deși am spus că am fi efectuat o clasificare în funcție de pixel, așa că poate vă așteptați ca ieșirile să aibă aceleași dimensiuni spațiale exacte ale intrărilor. Cu toate acestea, rețineți că, în practică, ați putea avea și hărțile de ieșire pentru a avea aceeași dimensiune spațială ca intrările: ar fi doar ne pentru a efectua o operațiune diferită de eșantionare (deconvoluție).

Cum funcționează $ 1 \ times 1 $ convoluții?

A $ 1 \ times 1 $ convoluția este doar tipica convoluție 2d, dar cu un $ 1 \ times1 $ kernel.

După cum probabil știți deja (și dacă nu știați acest lucru, acum îl știți), dacă aveți un $ g \ times g $ kernel care se aplică unei intrări de dimensiune $ h \ times w \ times d $ , unde $ d $ este adâncimea volumului de intrare (care, de exemplu, în cazul imaginilor în tonuri de gri, este $ 1 $ ), nucleul are de fapt forma $ g \ times g \ times d $ , adică a treia dimensiune a nucleului este egală cu a treia dimensiune a intrării la care este aplicat. Acesta este întotdeauna cazul, cu excepția circumvoluțiilor 3D, dar acum vorbim despre tipicele circumvoluții 2d! Consultați acest răspuns pentru mai multe informații.

Deci, în cazul în care dorim să aplicăm un $ 1 \ times 1 $ convoluție către o intrare de formă 388 $ \ times 388 \ times 64 $ , unde 64 $ $ este adâncimea intrării, apoi nucleele reale $ 1 \ times 1 $ pe care va trebui să le folosim au formă $ 1 \ ori de 1 \ ori 64 $ (așa cum am spus mai sus pentru U-net). Modul în care reduceți adâncimea de intrare cu $ 1 \ times 1 $ este determinat de numărul de $ 1 \ times 1 $ nuclee pe care doriți să le utilizați. Acesta este exact același lucru ca și pentru orice operațiune de convoluție 2d cu nuclee diferite (de exemplu $ 3 \ times 3 $ ).

În cazul U-net, dimensiunile spațiale ale intrării sunt reduse în același mod în care dimensiunile spațiale ale oricărei intrări către o CNN sunt reduse (adică convoluție 2d urmată de operații de eșantionare descendentă). Principala diferență (în afară de faptul că nu se utilizează straturi complet conectate) între rețeaua U și alte CNN este că rețeaua U efectuează operații de eșantionare, deci poate fi văzută ca un codificator (partea stângă) urmată de un decodor (partea dreaptă) .

Comentarii

  • Vă mulțumim pentru răspunsul dvs. detaliat, chiar îl apreciez!

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *