Konvolutsiooni ja tunnuskaartide mänguväljak

vaata, millised visuaalsed mustrid iga tuuma valikul säilivad

Interaktiivse simulatsiooni laadimine...

Ilma polsterduseta kahandab sügav võrk pildi olematuks 🖖

Ilma täidiseta 3×3 tuum sammuga 1 võtab igast servast ühe piksli, nii et tööriista 28×28 sisendist saab 26×26 väljund. Ühe kihi puhul pole sellest lugu, kuid kihtide lisamisel mõju kuhjub: kümne kihi järel jääb alles 8×8 ning neljateistkümne järel ei midagi. Just seepärast kasutatakse "same"-täidist: ühe piksli laiune ääris taastab väljundi sisendiga samasse mõõtu ja võrk võib olla nii sügav kui vaja. Suurem samm mõjub vastupidi, sest mõõtmeid ei lahutata, vaid jagatakse: hägustamine sammuga 2 muudab 28×28 ühe kihiga mõõduks 14×14. Tööriista mõlemad sätted määravad seega, mitu kihti saab arhitektuur kasutada, enne kui pilt otsa saab.

Väike aken, mis libiseb 🖖

Konvolutsioon libistab üle pildi väikest arvude võret, tuuma. Igas peatuspunktis korrutatakse kattuvad väärtused ja liidetakse üheks väljundpiksliks. Tulemuseks on tunnuskaart, mis muutub heledaks seal, kus ilmub tuuma muster. Proovi siin servatuvastuse tuuma: ühtlased alad lähevad tumedaks ja piirid süttivad, sest tuum reageerib muutusele, mitte heledusele endale.

See pole tegelikult konvolutsioon 🖖

Tegevus, mida peaaegu iga CNN nimetab "konvolutsiooniks", on tegelikult ristkorrelatsioon. Tõeline matemaatiline konvolutsioon peegeldab tuuma enne libistamist ülalt-alla ja vasakult-paremale; süvaõppe teegid jätavad selle peegelduse vahele. Kuna võrk õpib kaalud niikuinii ära, õpitaks peegeldatud tuum lihtsalt vastupidi ja annaks identse tulemuse, mistõttu ekslik nimi püsima jäigi. Sümmeetrilise tuuma, näiteks hägustuse puhul, on need kaks eristamatud.

Levinud väärarusaam

Sügavam tunnuskaart ei ole alati "parem". Suur samm või karmid tuumad võivad eemaldada infot, mida hilisemad kihid vajaksid.

Ülesanne täielikult lahendatud

  1. Väljundkaardi suurus 28×28 sisendi ja 3×3 sobel-x tuuma korral 6 sammu

    Kiht: 28×28 sisendkaart, 3×3 Sobeli x-tuum, samm 1, polsterdus sama. Leidke väljundkaardi suurus ja ühe läbimise kulu korrutamistes-liitmistes — seejärel leidke, mitu sellist kihti tuleb ülestikku seada, enne kui üksainus väljundpiksel sõltub pildi igast pikslist.

    1. Polsterdus määrab suuruse, seega lahendame selle kõigepealt. sama asetab kaardi ümber ühe piksli laiuse nullide äärise, millest piisab täpselt selleks, et 3×3 aken asuks nurgapiksli keskel, mitte ei ripuks üle serva. Tuumale vajalik ääris moodustab sellest poole, arvestamata keskosa.

    2. Nihutage akent piki ühte rida. Selle vasak serv algab kohast 0 ja liigub edasi sammu võrra, kuni selle parem serv jõuab polsterdatud rea lõppu, seega väljundpikslite loendamine on postiprobleem: edasiliikumiste arv pluss 1 algusasendi eest. Sammu 1 korral annab ääris tagasi täpselt need 2 veergu, mis tuum ära võtab — mille järgi sama ongi oma nime saanud.

    3. Igaüks 784 väljundpikslitest on 9 sisendväärtuse üks kaalutud summa. Kui liita Sobeli x-kaalud, taanduvad need 0-ks, seega iga aken, mille kõik 9 sisendit on võrdsed, annab tulemuseks täpselt 0 — hoolimata sellest, kui hele see piirkond on. Kaart muutub tumedaks igal pool, kus pilt on ühtlane, ning reageerib vaid seal, kus akna vasak veerg erineb paremast.

    4. Aritmeetiline arve on järgmine: 9 korrutamis-kuhjamistehet väljundpiksli kohta, üks väljundpiksel akna iga asendi kohta. Paneel kuvab selle arvu.

    5. Põnev osa on sügavus. Pärast ühte kihti näeb väljundpiksel 3 sisendpikslit laiuti. Lisage teine kiht ja igaüks neist 3-st oli ise 3-ne aken — kuid naabaknad kattuvad 2 võrra, seega ulatus jõuab 5-ni, mitte 9-ni. Iga järgmine 3×3 sammuga 1 kiht laiendab seda täpselt 2 võrra.

    6. Seadke ulatus katma kõiki 28 veergu ja arvutage sügavus. 13 kihti jõuavad 27-ni ja jäävad ühe veeru võrra lühikeseks; 14. on esimene, mille väljundpiksleid saab mõjutada terve pilt.

    Vastus

    28×28 väljund, 7056 korrutus-liitmistehet kihi kohta ja 14 kihti enne, kui üks piksel näeb kogu pilti. Nüüd arvutage, mida see ulatus maksab. 14 ülestikku asetatud kihti kulutavad 14 × 9 = 126 korrutamis-kuhjamistehet väljundpiksli kohta. Üksainus sama kaugele ulatuv kiht vajaks 29×29 tuuma, 841 tehet väljundpiksli kohta — 6,7 korda rohkem aritmeetikat täpselt sama vaatevälja jaoks. Sügavus annab ulatuse kätte palju odavamalt kui laius, mistõttu arvutinägemise võrgud koosnevad pikkadest 3×3 tuumade virnadest, mitte lühikestest suurte tuumade virnadest.

Allikad (1)
  • Insight block 3 — the operation called convolution is cross-correlation: I. Goodfellow, Y. Bengio and A. Courville, Deep Learning, ch. 9. MIT Press, 2016. ISBN 978-0-262-03561-3 — "many machine learning libraries implement cross-correlation but call it convolution".

Näiteülesanded

  • number sobel-x - Sobel-x tuuma elementide summa on null, mistõttu ühtlane ala jääb mustaks ja nähtavale jäävad ainult vertikaalsed muutused. "Same"-täidis sammuga 1 säilitab väljundi mõõdu 28x28.
  • kujundi servad - Ka servatuuma elementide summa on null: keskel oleva 8 vastas on 8 arvu -1. Seetõttu kaovad ühtlased alad ja alles jäävad ainult piirjooned. Väljundi mõõt säilib: 28x28.
  • hägustamine + samm 2 - Ainus eelseadistus, mis vähendab mõõtmeid jagamise teel: samm 2 muudab 28x28 mõõduks 14x14, nii et alles jääb veerand pikslitest. Hägustustuuma elementide summa on 1, mistõttu heledus säilib ka siis, kui detailid kaovad.
  • teravustamine valid - Ainus eelseadistus, mis vähendab mõõtmeid lahutamise teel: "valid"-täidis muudab 28x28 mõõduks 26x26, võttes igast servast ühe piksli. Teravustustuuma elementide summa on 1, mistõttu ühtlaste alade tase säilib ja servad eristuvad tugevamalt.