Ознайомлюючись з лекцію про "Згорткові нейронні мережі" (Conv) в темі "Python Data Sciense" школи GoIT. Думаю що ж таке знайоме.
convolutional neural network |
Знаходжу код далекого 2014 року, де у браузері,
в той час Chrome NaCL мав можливість виконувати порогами клієнта на С,
компілювавши на стороні клієнта файл (.pexe), писали код котрий покращував
зображення відео на "льоту" через OpenGL Shaders.
(Capture кадр відео, і
поверх відео малював OpenGL зображення, а оригінальне відео не було
видно.)
Так от там і були операції як раз такі самі як у Conv kernel 3х3
, і середнє потім забиралося. 😀
const char kFragShaderSource[] = "precision mediump float;\n" "uniform sampler2D u_texture;\n" "uniform float imgWidth;\n" "uniform float imgHeight;\n" "varying vec2 v_texcoord;\n" "float kernel[9];\n" "vec2 offset[9];\n" "float step_w = 1.0/imgWidth;\n" "float step_h = 1.0/imgHeight;\n" "void main() {\n" "offset[0] = vec2(-step_w, -step_h);\n" "offset[1] = vec2(0.0, -step_h);\n" "offset[2] = vec2(step_w, -step_h);\n" "offset[3] = vec2(-step_w, 0.0);\n" "offset[4] = vec2(0.0, 0.0);\n" "offset[5] = vec2(step_w, 0.0);\n" "offset[6] = vec2(-step_w, step_h);\n" "offset[7] = vec2(0.0, step_h);\n" "offset[8] = vec2(step_w, step_h);\n" "kernel[0] = 0.;\n" "kernel[1] = -.4;\n" "kernel[2] = 0.;\n" "kernel[3] = -.4;\n" "kernel[4] = 2.6;\n" "kernel[5] = -.4;\n" "kernel[6] = 0.;\n" "kernel[7] = -.4;\n" "kernel[8] = 0.;\n" "vec4 sum = vec4(0.0);\n" "int i;\n" "for (i = 0; i < 9; i++) {\n" "vec4 color = texture2D(u_texture, (vec2(1.0,1.0)-v_texcoord) + offset[i]);\n" "sum += color * kernel[i];\n" "}\n" "gl_FragColor = sum;\n" "}\n";
kernel:
0.0 -0.4 0.0 -0.4 2.6 -0.4 0.0 -0.4 0.0Так як паддінгу не було, на жаль в коді.
То по периметру були проблеми на 1 піксель :)
"offset[0] = vec2(-step_w, -step_h);\n"
Немає коментарів:
Дописати коментар