рд╕рдВрд╡рд╛рджреА рдкрд░рдд: рд╢рдореВрдПрд▓ рд╡рд┐рдиреЛрдЧреНрд░рд╛рдж рдХреА рд╡рд┐рдзрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддреЗрдЬреА рд╕реЗ рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк

рдкрд░рд┐рдЪрдп


рдпрд╣ рд▓реЗрдЦ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рд╣реИред
рд╕реАрдиреЗрдЯ рд╕реАрдкреАрдпреВ рдкрд░ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдерд╛ред рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕ рд╡рд╛рд▓реЗ рдпреЗ рддрд░реАрдХреЗ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЕрдзрд┐рдХрддрдо рдХреЗ 80% рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдареАрдХ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдФрд░ рдХрд╣рд╛рдВ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ! рдРрд╕реЗ рдЧрдгрд┐рддреАрдп рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЗрди рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╡рд┐рдиреЛрдЧреНрд░рд╛рдж рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдХрдиреНрд╡рд░реНрдЬрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдоред

рдЫрд╡рд┐

рд╢рдореВрдПрд▓ рд╡рд┐рдиреЛрдЧреНрд░реИрдб 1936.01.04 - 2019.03.25 - рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЗрдЬрд╝рд░рд╛рдЗрд▓реА рдФрд░ рдЕрдореЗрд░рд┐рдХреА рдХрдВрдкреНрдпреВрдЯрд░ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ, рддреЗрдЬ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди, рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдФрд░ рдлреВрд░рд┐рдпрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ред

рдереЛрдбрд╝рд╛ рд╕рд╛ рдЧрдгрд┐рдд


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд╢реАрди рд╕реАрдЦрдиреЗ рдореЗрдВ, рдПрдХ рд╡рд░реНрдЧ рдХреЛрд░ рдХреЗ рд╕рд╛рде рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ рдПрдХ-рдЖрдпрд╛рдореА рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдХрд╛рд░ рдХреА рдПрдХ рдЗрдирдкреБрдЯ-рдЖрдпрд╛рдореА рдЫрд╡рд┐ рд╣реИ 1 times4 :

d = \ start {bmatrix} d_0 & d_1 & d_2 & d_3 \ end {bmatrix} ^,

d = \ start {bmatrix} d_0 & d_1 & d_2 & d_3 \ end {bmatrix} ^,


рдФрд░ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдЖрдХрд╛рд░ 1 рдЯрд╛рдЗрдореНрд╕3рдЯрд╛рдЗрдореНрд╕ :

g = \ start {bmatrix} g_0 & g_1 & g_2 \ end {bmatrix} ^ T,

g = \ start {bmatrix} g_0 & g_1 & g_2 \ end {bmatrix} ^ T,


рддрдм рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:

F(2,3)= startbmatrixd0g0+d1g1+d2g2d1g0+d2g1+d3g2 endbmatrixред

ред


рдЗрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд░реВрдк рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛:

F (2,3) = \ start {bmatrix} d_0 & d_1 & d_2 \\ d_1 & d_2 & d_3 \ end {bmatrix} \ start {bmatrix} g_0 \\ g_1\ g_2 \ end {bmatrix} = \ start {bmatrix} d_0 g_0 + d_1 g_1 + d_2 g_2 \\ d_1 g_0 + d_2 g_1 + d_3 g_2 \ end {bmatrix} = \ _ рд╢реБрд░реВ {bmatrix} m_1 + m_3 \\ m_2 - m_3 - m_4 \ end {bmatrix}}ред (рез)

F (2,3) = \ start {bmatrix} d_0 & d_1 & d_2 \\ d_1 & d_2 & d_3 \ end {bmatrix} \ start {bmatrix} g_0 \\ g_1\ g_2 \ end {bmatrix} = \ start {bmatrix} d_0 g_0 + d_1 g_1 + d_2 g_2 \\ d_1 g_0 + d_2 g_1 + d_3 g_2 \ end {bmatrix} = \ _ рд╢реБрд░реВ {bmatrix} m_1 + m_3 \\ m_2 - m_3 - m_4 \ end {bmatrix}}ред (рез)


рдЬрд╣рд╛рдВ рд╕рдВрдХреЗрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

m1=(d0тИТd2)g0,m2=(d1+d2) fracg0+g1+g22,m3=(d2тИТd1) fracg0тИТg1+g22,m4=(d1тИТd3)g2ред

ред


рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреБрдЫ рд╣рдж рддрдХ рдмреЗрдХрд╛рд░ рджрд┐рдЦрддрд╛ рд╣реИ - рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рднрд╛рд╡  fracg0+g1+g22 рдФрд░  fracg0тИТg1+g22 рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдХреЗрд╡рд▓ 4 рдЧреБрдгрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдореВрд▓ рд╕реВрддреНрд░ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ 6 рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ (1):

F(2,3)=AT[(Gg) odot(BTd)],(2)


рдЬрд╣рд╛рдБ  odot рддрддреНрд╡-рд╡рд╛рд░ рдЧреБрдгрди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдХреЗрддрди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

B ^ T = \ start {bmatrix} 1 & 0 & -1 & 0 \\ 0 & 1 & 1 & 0 \\ 0 & -1 рдФрд░ 1 & 0 \\ 0 & 1 & 0 & 1 & -1 \ рдЕрдВрдд { bmatrix}, (3) \\ G = \ start {bmatrix} 1 & 0 & 0 \\ \ frac {1} {2} & \ frac {1} {2} & \ frac {1} {2} \\ \ frac {1} {2} & - \ frac {1} {2} & \ frac {1} {2} \\ 0 & 0 & 1 \ рдЕрдВрдд {bmatrix}, (4) \\ A ^ T = \ {bmatrix} 1 рдФрд░ 1 & 1 & 0 \\ 0 & 1 & -1 & -1 \ рдЕрдВрдд {bmatrix} рд╢реБрд░реВ рдХрд░реЗрдВред (рел)

B ^ T = \ start {bmatrix} 1 & 0 & -1 & 0 \\ 0 & 1 & 1 & 0 \\ 0 & -1 рдФрд░ 1 & 0 \\ 0 & 1 & 0 & 1 & -1 \ рдЕрдВрдд { bmatrix}, (3) \\ G = \ start {bmatrix} 1 & 0 & 0 \\ \ frac {1} {2} & \ frac {1} {2} & \ frac {1} {2} \\ \ frac {1} {2} & - \ frac {1} {2} & \ frac {1} {2} \\ 0 & 0 & 1 \ рдЕрдВрдд {bmatrix}, (4) \\ A ^ T = \ {bmatrix} 1 рдФрд░ 1 & 1 & 0 \\ 0 & 1 & -1 & -1 \ рдЕрдВрдд {bmatrix} рд╢реБрд░реВ рдХрд░реЗрдВред (рел)


рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (2) рдХреЛ рджреЛ-рдЖрдпрд╛рдореА рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

F(2 times2,3 times3)=AT bigg[[GgGT] odot[BTdB] bigg]A.(6)


рдХреЗ рд▓рд┐рдП рдЧреБрдгрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ F(2 times2,3 times3) рд╕реЗ рд╣рдЯрдирд╛ 2 times2 times3 times3=36 рдХреЛ 4 times4=16 ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ  frac3616=$2.2 рдмрд╛рд░ред рдпрджрд┐ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдо, рдЫрд╡рд┐ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧрдгрдирд╛ рдХреА рдмрдЬрд╛рдп, рд╣рдо рдЖрдХрд╛рд░ рдХреЗ рдПрдХ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗред 2 times2 :
рдЫрд╡рд┐
рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЦрд┐рдбрд╝рдХреА рдХреЗ рд╕рд╛рде рд╕рдЬрд╛ рдХреЗ рд▓рд┐рдП r рдЧреБрдирд╛sрдЧреБрдирд╛ рдФрд░ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ m nn рдЖрд╡рд╢реНрдпрдХ рдЧреБрдгрди рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдЧреА

рдЧрд┐рдирддреА=(m+rтИТ1) n(n+sтИТ1),(()

рдЧрд┐рдирддреА


рдФрд░ рд▓рд╛рдн рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

k= fracm рдЯрд╛рдЗрдореНрд╕n рдЯрд╛рдЗрдореНрд╕r рдЯрд╛рдЗрдореНрд╕s(m+rтИТ1) рдЯрд╛рдЗрдореНрд╕(n+sтИТ1)ред(8)

рдЯрд╛рдЗрдореНрд╕рдЯрд╛рдЗрдореНрд╕рдЯрд╛рдЗрдореНрд╕рдЯрд╛рдЗрдореНрд╕ред


рд╕реАрдорд╛ рдореЗрдВ, рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдПрдордПрдо рдФрд░ рдПрдирдПрди рдХрд┐рд╕реА рднреА рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд┐рдВрджреБ рд╕реЗ рдЧреБрдгрд╛ рдХрд╛ рдХреЗрд╡рд▓ 1 рдСрдкрд░реЗрд╢рди рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ! рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╕реЗ рдЗрдирдкреБрдЯ рдУрд╡рд░рд╣реЗрдб рдореЗрдВ рддреЗрдЬреА рд╕реЗ рд╡реГрджреНрдзрд┐ рд╣реЛрддреА рд╣реИ BTdB рдФрд░ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдПрдЯреА[...]рдПрдХрдПрдЯреАрдПрдХ рдЫрд╡рд┐рдпрд╛рдВ, рдЗрд╕рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рд╕реЗ рдмрдбрд╝рд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ 4 times4 ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрджрд╛рд╣рд░рдг


рд╡рд┐рдиреЛрдЧреНрд░рд╛рдж рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ - рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк 3 times3 рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП 2 times2 ред рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рдФрд░ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рднреА рдорд╛рдиреЗрдВрдЧреЗ рдХрд┐ рдЗрдирдкреБрдЯ рдЫрд╡рд┐ рдХрд╛ рдХреЛрдИ рдкреИрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдЖрдХрд╛рд░ 2 рдХреЗ рдЧреБрдгрдХ рд╣реИрдВред

рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрдирд╡рд▓реНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

float relu(float value) { return value > 0 ? return value : 0; } void gemm_nn(int M, int N, int K, float alpha, const float * A, int lda, float beta, const float * B, int ldb, float * C, int ldc) { for (int i = 0; i < M; ++i) for (int j = 0; j < N; ++j) { C[i*ldc + j] = beta; for (int k = 0; k < K; ++k) C[i*ldc + j] += alpha * A[i*lda + k] * B[k*ldb + j]; } } void im2col(const float * src, int srcC, int srcH, int srcW, int kernelY, int kernelX, float * buf) { int dstH = srcH - kernelY + 1; int dstW = srcW - kernelX + 1; for (int sc = 0; sc < srcC; ++sc) for (int ky = 0; ky < kernelY; ++ky) for (int kx = 0; kx < kernelX; ++kx) for (int dy = 0; dy < dstH; ++dy) for (int dx = 0; dx < dstW; ++dx) *buf++ = src[((b * srcC + sc)*srcH + dy + ky)*srcW + dx + kx]; } void convolution(const float * src, int batch, int srcC, int srcH, int srcW, int kernelY, int kernelX, int dilationY, int dilationX, int strideY, int strideX, int padY, int padX, int padH, int padW, int group, const float * weight, const float * bias, float * dst, int dstC, float * buf) { int dstH = srcH - kernelY + 1; int dstW = srcW - kernelX + 1; int M = dstC; int N = dstH * dstW; int K = srcC * kernelY * kernelX; for (int b = 0; b < batch; ++b) { im2col(src, srcC, srcH, srcW, kernelY, kernelX, buf); gemm_nn(M, N, K, 1, weight, K, 0, buf, N, dst, N)); for (int i = 0; i < M; ++i) for (int j = 0; j < N; ++j) dst[i*N+ j] = relu(dst[i*N + j] + bias[i]); src += srcC*srcH*srcW; dst += dstC*dstH*dstW; } } 

рдЬреЛ рд▓реЛрдЧ рдпрд╣рд╛рдВ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреА рдУрд░ рдореБрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо рдбрд╛рд▓рддреЗ рд╣реИрдВ:

 strideY = strideX = dilationY = dilationX = group = 1, padY = padX = padH = padW = 0. 

рд╕рдВрд╢реЛрдзрд┐рдд рджреГрдврд╝ рд╕рдВрдХрд▓реНрдкрдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо


рдореИрдВ рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ рд╕реВрддреНрд░ рджреЗрддрд╛ рд╣реВрдВ (6):

F(2 times2,3 times3)=AT bigg[[GgGT] odot[BTdB] bigg]A.


рдпрджрд┐ рдЖрдк рдЖрдЙрдЯрдкреБрдЯ рдЗрдореЗрдЬ рд╕рд╛рдЗрдЬ рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ 2 times2 рдордирдорд╛рдиреЗ рдЖрдХрд╛рд░ рдХреА рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП, рдлрд┐рд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдЖрдХрд╛рд░ рдХреЗ рдмреНрд▓реЙрдХ рдореЗрдВ рддреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ 2 times2 ред рдРрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЗрдирдкреБрдЯ рдЗрдореЗрдЬ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА (2+3тИТ1) рдЧреБрдирд╛(2+3тИТ1)=$1рдЧреБрдирд╛ рдорд╛рди рдЬреЛ 16 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЧрдП рд╣реИрдВ BTdB рдЗрдирдкреБрдЯ рдЪрд┐рддреНрд░ рдЖрдзреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдХрдо рд╣реЛ рдЧрдПред рдлрд┐рд░, рдЗрди 16 рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╡рдЬрд╝рди рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреАрдЬреАрдЬреАрдЯреА ред 16 рдкрд░рд┐рдгрд╛рдореА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЖрдЙрдЯрдкреБрдЯ рдЗрдореЗрдЬ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ AT bigg[... bigg]A ред рдиреАрдЪреЗ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд░реЗрдЦ рдореЗрдВ рдЦреАрдВрдЪреА рдЧрдИ рд╣реИ:

рдЫрд╡рд┐

рдЗрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХрдиреНрд╡реЗрдВрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдлреЙрд░реНрдо рд▓реЗрддрд╛ рд╣реИ:

 void convolution(const float * src, int batch, int srcC, int srcH, int srcW, int kernelY, int kernelX, int dilationY, int dilationX, int strideY, int strideX, int padY, int padX, int padH, int padW, int group, const float * weight, const float * bias, float * dst, int dstC, float * buf) { const int block = 2, kernel = 3; int count = (block + kernel - 1)*(block + kernel - 1); // 16 int dstH = srcH - kernelY + 1; int dstW = srcW - kernelX + 1; int tileH = dstH / block; int tileW = dstW / block; int sizeW = srcC * dstC; int sizeS = srcC * tileH * tileW; int sizeD = dstC * tileH * tileW; int M = dstC; int N = tileH * tileW; int K = srcC; float * bufW = buf; float * bufS = bufW + sizeW*count; float * bufD = bufS + sizeS*count; set_filter(weight, sizeW, bufW); for (int b = 0; b < batch; ++b) { set_input(src, srcC, srcH, srcW, bufS, sizeS); for (int i = 0; i < count; ++i) gemm_nn(M, N, K, 1, bufW + i * sizeW, K, bufS + i * sizeS, N, 0, bufD + i * sizeD, N)); set_output(bufD, sizeD, dst, dstC, dstH, dstW); for (int i = 0; i < M; ++i) for (int j = 0; j < N; ++j) dst[i*N+ j] = relu(dst[i*N + j] + bias[i]); src += srcC*srcH*srcW; dst += dstC*dstH*dstW; } } 

рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЫрд╡рд┐ рдХреЗ рдЦрд╛рддрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗ рдмрд┐рдирд╛ рдХрд┐рддрдиреЗ рдСрдкрд░реЗрд╢рди рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ: ~ srcC * dstC * dstH * dstW * рдЧрд┐рдирддреА ред рдЕрдЧрд▓рд╛, рд╣рдо рд╡рдЬрд╝рди, рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред

рдХрдиреНрд╡реЗрдиреНрд╢рдирд▓ рд╕реНрдХреЗрд▓реНрд╕ рдХрдиреНрд╡рд░реНрдЯ рдХрд░реЗрдВ


рдЬреИрд╕рд╛ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (6) рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдХрдирд╡рд▓реНрд╢рди рд╡реЗрдЯ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЬреАрдЬреАрдЬреАрдЯреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╣рд╛рдБ рд╣реИ рдЬреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд (4)ред рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 void set_filter(const float * src, int size, float * dst) { for (int i = 0; i < size; i += 1, src += 9, dst += 1) { dst[0 * size] = src[0]; dst[1 * size] = (src[0] + src[2] + src[1])/2; dst[2 * size] = (src[0] + src[2] - src[1])/2; dst[3 * size] = src[2]; dst[4 * size] = (src[0] + src[6] + src[3])/2; dst[5 * size] = ((src[0] + src[6] + src[3]) + (src[2] + src[8] + src[5]) + (src[1] + src[7] + src[4]))/4; dst[6 * size] = ((src[0] + src[6] + src[3]) + (src[2] + src[8] + src[5]) - (src[1] + src[7] + src[4]))/4; dst[7 * size] = (src[2] + src[8] + src[5])/2; dst[8 * size] = (src[0] + src[6] - src[3])/2; dst[9 * size] = ((src[0] + src[6] - src[3]) + (src[2] + src[8] - src[5]) + (src[1] + src[7] - src[4]))/4; dst[10 * size] = ((src[0] + src[6] - src[3]) + (src[2] + src[8] - src[5]) - (src[1] + src[7] - src[4]))/4; dst[11 * size] = (src[2] + src[8] - src[5])/2; dst[12 * size] = src[6]; dst[13 * size] = (src[6] + src[8] + src[7])/2; dst[14 * size] = (src[6] + src[8] - src[7])/2; dst[15 * size] = src[8]; } } 

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдХреЗрд╡рд▓ 1 рдмрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдЕрдВрддрд┐рдо рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЗрдирдкреБрдЯ рдЫрд╡рд┐ рд░реВрдкрд╛рдВрддрд░рдг


рдЬреИрд╕рд╛ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (6) рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрдирдкреБрдЯ рдЫрд╡рд┐ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: BTdB рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╣рд╛рдБ рд╣реИ рдмрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд (3)ред рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 void set_input(const float * src, int srcC, int srcH, int srcW, float * dst, int size) { int dstH = srcH - 2; int dstW = srcW - 2; for (int c = 0; c < srcC; ++c) { for (int row = 0; row < dstH; row += 2) { for (int col = 0; col < dstW; col += 2) { float tmp[16]; for (int r = 0; r < 4; ++r) for (int c = c; c < 4; ++c) tmp[r * 4 + c] = src[(row + r) * srcW + col + c]; dst[0 * size] = (tmp[0] - tmp[8]) - (tmp[2] - tmp[10]); dst[1 * size] = (tmp[1] - tmp[9]) + (tmp[2] - tmp[10]); dst[2 * size] = (tmp[2] - tmp[10]) - (tmp[1] - tmp[9]); dst[3 * size] = (tmp[1] - tmp[9]) - (tmp[3] - tmp[11]); dst[4 * size] = (tmp[4] + tmp[8]) - (tmp[6] + tmp[10]); dst[5 * size] = (tmp[5] + tmp[9]) + (tmp[6] + tmp[10]); dst[6 * size] = (tmp[6] + tmp[10]) - (tmp[5] + tmp[9]); dst[7 * size] = (tmp[5] + tmp[9]) - (tmp[7] + tmp[11]); dst[8 * size] = (tmp[8] - tmp[4]) - (tmp[10] - tmp[6]); dst[9 * size] = (tmp[9] - tmp[5]) + (tmp[10] - tmp[6]); dst[10 * size] = (tmp[10] - tmp[6]) - (tmp[9] - tmp[5]); dst[11 * size] = (tmp[9] - tmp[5]) - (tmp[11] - tmp[7]); dst[12 * size] = (tmp[4] - tmp[12]) - (tmp[6] - tmp[14]); dst[13 * size] = (tmp[5] - tmp[13]) + (tmp[6] - tmp[14]); dst[14 * size] = (tmp[6] - tmp[14]) - (tmp[5] - tmp[13]); dst[15 * size] = (tmp[5] - tmp[13]) - (tmp[7] - tmp[15]); dst++; } } src += srcW * srcH; } } 

рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ: ~ srcH * srcW * srcC * count ред

рдЖрдЙрдЯрдкреБрдЯ рдЫрд╡рд┐ рд░реВрдкрд╛рдВрддрд░рдг


рдЬреИрд╕рд╛ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (6) рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдЙрдЯрдкреБрдЯ рдЗрдореЗрдЬ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдПрдЯреА[...]рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╣рд╛рдБ рд╣реИ рдмрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд (5)ред рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 void set_output(const float * src, int size, float * dst, int dstC, int dstH, int dstW) { for (int c = 0; c < dstC; ++c) { for (int row = 0; row < dstH; row += 2) { for (int col = 0; col < dstW; col += 2) { float tmp[8]; tmp[0] = src[0 * size] + src[1 * size] + src[2 * size]; tmp[1] = src[1 * size] - src[2 * size] - src[3 * size]; tmp[2] = src[4 * size] + src[5 * size] + src[6 * size]; tmp[3] = src[5 * size] - src[6 * size] - src[7 * size]; tmp[4] = src[8 * size] + src[9 * size] + src[10 * size]; tmp[5] = src[9 * size] - src[10 * size] - src[11 * size]; tmp[6] = src[12 * size] + src[13 * size] + src[14 * size]; tmp[7] = src[13 * size] - src[14 * size] - src[15 * size]; dst[col + 0] = tmp[0] + tmp[2] + tmp[4]; dst[col + 1] = tmp[1] + tmp[3] + tmp[5]; dst[dstW + col + 0] = tmp[2] - tmp[4] - tmp[6]; dst[dstW + col + 1] = tmp[3] - tmp[5] - tmp[7]; src++; } dst += 2*dstW; } } } 

рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ: ~ dstH * dstW * dstC * рдЧрд┐рдирддреА ред

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдЖрдХрд╛рд░ рдХреЗ рдПрдХ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреЛрд╣реНрд░реЙрдб рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ 2 times2 ред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╕рдВрд╕реНрдХрд░рдг рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: F(4 times4,3 times3) ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рд╣реЛрдЧрд╛ 4 times4 , рдФрд░ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ 36 рд╣реИред рд╕реВрддреНрд░ (8) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд▓рд╛рдн, 4 рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛ред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЕрд▓рдЧ рд╣реИред

рдЧрд┐рддреБрдм рдкрд░ рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЗрди рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕рдЬрд╛ рдХрд░реНрдиреЗрд▓ рдЖрдХрд╛рд░ рдФрд░ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╣рдордиреЗ рдПрдирд╕реАрдПрдЪрдбрдмреНрд▓реНрдпреВ рдЫрд╡рд┐ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреЛрдЧреНрд░рд╛рдж рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ , рд▓реЗрдХрд┐рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдПрдирдПрдЪрдбрдмреНрд▓реНрдпреВрд╕реА рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЗрди рдЫрд╡рд┐ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХреА рдереА ред

рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╡рд┐рдиреЛрдЧреНрд░рд╛рдж рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдореБрдЦреНрдп рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд▓реЛрдб (рдЗрд╕рдХреЗ рд╕рдХреНрд╖рдо рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ) рдЕрднреА рднреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрд╛ рдкрд░ рдирд┐рд╣рд┐рдд рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдПрдХ рдорд╛рдирдХ рд╕рдВрдЪрд╛рд▓рди рд╣реИ рдФрд░ рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

Vinohrad рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛рд░реНрдп рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЕрдВрдЧреВрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкреЗрд╢реЗрд╡рд░реЛрдВ:

  • рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрдИ рдмрд╛рд░ (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ 2-3 рдмрд╛рд░) рд╕рдЬрд╛ рдХреА рдЧрдгрдирд╛ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, "рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ" рд╕реАрдорд╛ рд╕реЗ рддреЗрдЬреА рд╕реЗ рд╕рдЬрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
  • рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдорд╛рдирдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
  • рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЗрдирдкреБрдЯ рдЫрд╡рд┐ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдПрдирд╕реАрдПрдЪрдбрдмреНрд▓реНрдпреВ , рдПрдирдПрдЪрдбрдмреНрд▓реНрдпреВрд╕реА ред
  • рдордзреНрдпрд╡рд░реНрддреА рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЪрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдлрд░ рдЖрдХрд╛рд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИред

рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рдХрд╣рд╛рдБ minuses рдХреЗ рдмрд┐рдирд╛:

  • рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рддреНрдпреЗрдХ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░реНрдиреЗрд▓ рдЖрдХрд╛рд░, рд╕рд╛рде рд╣реА рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдореБрдЦреНрдп рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ рд╣рд░ рдЬрдЧрд╣ рдХреЗрд╡рд▓ рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред 3 times3 ред
  • рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рдмрдврд╝рддрд╛ рд╣реИ, рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдИ рдмреНрд▓реЙрдХ рдЖрдХрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИрдВ 4 times4 ред
  • рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рд╕рдЦреНрдд рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИ strideY = strideY = dilationY = dilationX = group = 1 ред рдпрджреНрдпрдкрд┐ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЗрди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрдиреЗ рдкрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рдХрдо рджрдХреНрд╖рддрд╛ рдХреЗ рдХрд╛рд░рдг рдЫреЛрдЯрд╛ рд╣реИред
  • рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рджрдХреНрд╖рддрд╛ рдШрдЯ рдЬрд╛рддреА рд╣реИ рдпрджрд┐ рдЫрд╡рд┐ рдореЗрдВ рдЗрдирдкреБрдЯ рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЫреЛрдЯреА рд╣реИ (рдпрд╣ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЗ рдХрд╛рд░рдг рд╣реИ)ред
  • рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рджрдХреНрд╖рддрд╛ рдЗрдирдкреБрдЯ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ (рдЗрдирдкреБрдЯ рдЫрд╡рд┐ рд╕реЗ рдкрд░рд┐рдгрд╛рдореА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрд╣реБрдд рдЫреЛрдЯреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдорд╛рдирдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЙрдирдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рднрд╛рд╡реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╡рд┐рдиреЛрдЧреНрд░рд╛рдж рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк рдЧрдгрдирд╛ рдкрджреНрдзрддрд┐ рд╕рд░рд▓ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдЧреБрдгрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рдзрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рджрдХреНрд╖рддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХрд░ рд╕рдХрддреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИред рдХрдИ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рддреЗрдЬреА рд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрдгрди рдореИрдВ рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдЧрд▓реЗ рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдердЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдкрд╛рдардХреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рдереЗ!

PS рдпрд╣ рдФрд░ рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд┐рдордб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдиреНрд╡реЗрдВрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред
рдпрд╣ рдлреНрд░реЗрдорд╡рд░реНрдХ Synet рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ , CPU рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ред

Source: https://habr.com/ru/post/hi477718/


All Articles