Convolutie

Convolutie is een wiskundige bewerking die de integraal van het product van 2 functies (signalen) doet, waarbij één van de signalen wordt omgedraaid. Hieronder worden bijvoorbeeld 2 signalen f(t) en g(t) geconvolueerd.

De primaire activiteit is dus het omdraaien van het teken g op een vlak vlak (180 graden), en op dat moment het omdraaien van g over f, waarbij elk van de kwaliteiten van het teken wordt vergroot en geaggregeerd.

Het verzoek om het bord in te vullen maakt geen verschil voor het eindproduct, dus conv(a,b)==conv(b,a)

Denk er in dit geval aan dat het blauwe teken f(τ) ons infosignaal is en g(t) ons bit, de term onderdeel wordt gebruikt wanneer je convoluties gebruikt om signalen te kanaliseren.

Uitgangssignaal grootte 1D

In het geval van 1D-convolutie wordt de outputgrootte op deze manier berekend:

outputSize=(InputSize-KernelSize)+1

Toepassing van convoluties

Mensen gebruiken convolutie op het gebied van signaalverwerking voor de volgende gebruikssituaties:

Filtersignalen (1D audio, 2D beeldverwerking)

Controleer hoeveel een signaal is gecorreleerd met een ander signaal.

Zoek patronen in signalen

Eenvoudig voorbeeld in matlab en python (numpy)

Daaronder draaien we twee signalen x = (0,1,2,3,4) met w = (1,-1,2).

Met de hand doen

Om het idee van de complexiteit beter te zien, moeten we het bovenstaande model met de hand doen. In wezen zullen we 2 tekens (x,b) convolueren. Het belangrijkste is om W op een vlak vlak te draaien (of 180 graden naar links te draaien).

Zie dat op de podia 3,4,5 het omgedraaide venster volledig in het infosignaal zit. Die uitkomsten worden ‘substantiële’ convoluties genoemd. De situaties waarin het geflipte venster niet volledig binnen het informatievenster (X) is, kunnen we beschouwen als nul, of vaststellen wat denkbaar is om te bepalen, bijvoorbeeld op fase 1 dupliceren we 1 voor nul, en de rest wordt in principe genegeerd.

Inputvulling

Om de grootte van het convolutieresultaat gelijk te houden aan de informatie, en om een impact die ronde convolutie wordt genoemd te omzeilen, dempen we het bord met nullen.

Waar je de nullen zet, hangt af van wat je moet doen, d.w.z.: op de 1D case kun je ze aan elk uiteinde linken, maar op 2D wordt ze meestal recht om het eerste teken gezet.

Op matlab kunt u met het commando ‘padarray’ de invoer opvullen:

>> x

x(:,:,1) =

 1 1 0 2 0

 2 2 2 2 1

 0 0      0 2 1

 2 2 2 2 1

 2 0 2      2 1

x(:,:,2) =

 2 1 0 0 0

 0 2 0 1 0

 1 0 1 2 0

 1 2 0 2 1

 1 2 1 2 2

x(:,:,3) =

 2 1 1 2 2

 1 1      1 0 0

 2 0 1 0 2

 0 2 0 2 1

 0 0 2 1 0

>> padarray(x,[1 1])

ans(:,:,1) =

 0 0      0 0 0 0 0    

 0 1 1 0 2 0 0

 0 2 2 2 2 1 0

 0 0 0 0 2 1 0

 0 2 2 2 2 1 0

 0 2 0 2 2 1 0

 0 0      0 0 0 0 0    

ans(:,:,2) =

 0 0      0 0 0 0 0    

 0 2 1 0 0      0 0    

 0 0 2 0 1 0 0

 0 1 0 1 2 0 0

 0 1 2 0 2 1 0

 0 1 2 1 2 2 0

 0 0      0 0 0 0 0    

ans(:,:,3) =

 0 0      0 0 0 0 0    

 0 2 1 1 2 2 0

 0 1 1 1 0 0 0    

 0 2 0 1 0 2 0

 0 0 2 0 2 1 0

 0 0 0 2 1 0 0

 0 0      0 0 0 0 0    

Convolutie omzetten naar rekengrafiek

Om onvolledige dochterondernemingen van elke hub bron van informatie en parameters vast te stellen, is het eenvoudiger om de activiteit te wijzigen in een rekenschema. Hier verander ik de afgelopen 1D-convolutie, maar deze is ook te bereiken in 2D-convolutie.

Hier zal onze grafiek worden gemaakt op de substantiële situaties waarin de omgedraaide kernel(gewichten) volledig worden ingebed in ons informatievenster.

Hier wordt onze grafiek gemaakt op de geldige gevallen waarin de omgedraaide kernel(gewichten) volledig worden ingevoegd in ons invoervenster.

We gaan deze grafiek later gebruiken om de hoeken van de informatiebronnen (x) en ladingen (w) van de convolutielaag af te leiden.