рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдзреБрдВрдзрд▓реА рддрд╕реНрд╡реАрд░реЛрдВ рд╕реЗ рдХреИрд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ

рдЬрдм рд╣рдо рд╢реЙрдЯреНрд╕ рдХреА рдПрдХ рдмрдбрд╝реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдлрдЬреА рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рдмрдбрд╝реА рдСрдЯреЛрдореЛрдмрд╛рдЗрд▓ рдХрдВрдкрдиреА рдХреЛ рднреА рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдХрд╛рд░ рдХреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдХреА рдХреБрдЫ рддрд╕реНрд╡реАрд░реЗрдВ рдзреБрдВрдзрд▓реА рдирд┐рдХрд▓реАрдВ, рдЬреЛ рдмрд┐рдХреНрд░реА рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИрдВред

рдирд┐рдореНрди-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реА рдЫрд╡рд┐рдпрд╛рдВ рд╕реАрдзреЗ рдореБрдирд╛рдлреЗ рдХреЛ рдХрдо рдХрд░рддреА рд╣реИрдВред


  • рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реНрддрд░ рдкрд░ рдПрдХ рдЖрд╡реЗрджрди рдлрдЬреА рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ?
  • RGB рдЗрдореЗрдЬ рдХреА рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреИрд╕реЗ рдорд╛рдкреЗрдВ?



рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдирд┐рд░реВрдкрдг


рдореИрдВ рдПрдХ рдмрдбрд╝реА рдСрдЯреЛрдореЛрдмрд╛рдЗрд▓ рдХрдВрдкрдиреА рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рдХрд╛рд░ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рдХрд╛рд░ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рд╡реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдлреЛрдЯреЛ рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ рддреБрд░рдВрдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдХреБрдЫ рдЫрд╡рд┐рдпрд╛рдВ рдзреБрдВрдзрд▓реА рд╣реИрдВ, рдЬреЛ рдмрд┐рдХреНрд░реА рдХреЗ рд▓рд┐рдП рдЦрд░рд╛рдм рд╣реИред

рдпрд╣рд╛рдВ рд╕реЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ: "рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реНрддрд░ рдкрд░ рдлрдЬреА рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдП?"

рдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡реЛрдВ рдХреА 1200 рддрд╕реНрд╡реАрд░реЛрдВ рдХреЗ рдирдореВрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ред рдирдореВрдиреЗ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдмрд▓ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЪрд┐рддреНрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ рдФрд░ рдХреМрди рд╕реЗ рдирд╣реАрдВ рд╣реИрдВред

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдордПрд▓ рдореЙрдбрд▓ "рдПрдХ рд╢рд┐рдХреНрд╖рдХ рдХреЗ рд╕рд╛рде" рд╕реАрдЦрдирд╛ рд╕рдорд╛рдзрд╛рди рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИред

рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рдореИрдВрдиреЗ рдЯреВрд▓реНрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛:

  • рдЕрдЬрдЧрд░ ред рдкреБрд╕реНрддрдХрд╛рд▓рдп: рд╕реБрдиреНрди, matplotlib, cv2;
  • рдЬреНрдпреВрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХред

рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдмрддрд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЖрдпрд╛ рдерд╛ред

рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд┐рд╡рд░рдг


рдЪрд░рдг 1. рд╕реАрдорд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛


рдХреНрдпрд╛ рддрд╕реНрд╡реАрд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдПрдХ рдЬрд┐рд╕рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реАрдорд╛рдУрдВ рдХрд╛ рдЙрдЪреНрдЪрд╛рд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрдЬреА рд╢реЙрдЯреНрд╕ рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реАрдорд╛ рдзреБрдВрдзрд▓реА рд╣реЛрддреА рд╣реИред

рддрд╕реНрд╡реАрд░ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реАрдорд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХреИрд╕реЗ рдХрд░реЗрдВ?

рд╕реАрдорд╛рдУрдВ рдЬрд╣рд╛рдВ рд╣рдо рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд░рдВрдЧ рдЕрдВрддрд░ рджреЗрдЦрддреЗ рд╣реИрдВред

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЫрд╡рд┐ рдХреА рд╕реНрдкрд╖реНрдЯрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рддрд╕реНрд╡реАрд░реЛрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрдирдХреЗ рдЖрдХрд╛рд░, рдореЛрдЯрд╛рдИ, рд╕рдВрдЦреНрдпрд╛ рдЖрджрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВред

рдлреЛрдЯреЛ рдореЗрдВ 0 рд╕реЗ 255 рддрдХ рдХреА рддреАрди-рдЖрдпрд╛рдореА рд╕рд░рдгреА рд╣реЛрддреА рд╣реИ: (рдЪреМрдбрд╝рд╛рдИ, рдКрдВрдЪрд╛рдИ, 3 рд░рдВрдЧ)ред
рдореИрдВрдиреЗ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рд╕реАрдорд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдЧрд╣рд░реЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдиреЗ рдореЗрдВ: рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддреНрдпреЗрдХ рддреНрд░рд┐-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЛ рдЧреБрдгрд╛ рдХрд░рдХреЗ (рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП):

    тФВ 1 -1 тФВ
    тФВ 1 -1 тФВ

рдПрдХ рд░рдВрдЧ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рд░рдгреА рдПрдХ рдЙрдЪреНрдЪ рдорд╛рдкрд╛рдВрдХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред
рддреЛ рд╣рдо рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдФрд░ рдХреНрд╖реИрддрд┐рдЬ рд╕реАрдорд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдВрдХрдЧрдгрд┐рдд рдорд╛рдзреНрдп рдлреЛрдЯреЛрдЧреНрд░рд╛рдл рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕реАрдорд╛рдУрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рдЪрд░рдг 2. рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг


рд╕реАрдорд╛рдПрдБ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред

рдХреИрд╕реЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХреА рд╕реАрдорд╛ рд╕реЗ рдПрдХ рдлрдЬреА рдЫрд╡рд┐ рдХреА рд╕реАрдорд╛ рдХреЛ рднреЗрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?

рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдкрд░, рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдорд┐рд▓рд╛:

  1. рдореВрд▓ рддрд╕реНрд╡реАрд░ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ (рдЪрд░рдг 1 рдореЗрдВ рд╡рд░реНрдгрд┐рдд);
  2. рдореВрд▓ рдЫрд╡рд┐ рдХреЛ рдзреБрдВрдзрд▓рд╛ рдХрд░реЗрдВ;
  3. рдзреБрдВрдзрд▓реА рдЫрд╡рд┐ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ (рдЪрд░рдг 1 рдореЗрдВ рд╡рд░реНрдгрд┐рдд);
  4. рд╣рдо рдкреИрд░рд╛рдЧреНрд░рд╛рдл 1 рдФрд░ рдкреИрд░рд╛рдЧреНрд░рд╛рдл 2 рдХреЗ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдорд╛рдзреНрдп рдХреЗ рдЕрдиреБрдкрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ;
  5. рдкрд░рд┐рдгрд╛рдореА рдЧреБрдгрд╛рдВрдХ рдЫрд╡рд┐ рдХреА рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рддрд░реНрдХ рд╕рд░рд▓ рд╣реИ: рд╕реНрдкрд╖реНрдЯ рддрд╕реНрд╡реАрд░реЛрдВ рдореЗрдВ, рд╕реАрдорд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдлрдЬреА рд╡рд╛рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдШрдЯрд┐рдд рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЧреБрдгрд╛рдВрдХ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реАрдзреЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

import numpy as np
import matplotlib.pyplot as plt
import cv2

рд╕реАрдорд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдзрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

def edges(n, orient):
    edges = np.ones((2*n, 2*n, 3))
    
    if orient == 'vert':
        for i in range(0, 2*n):
            edges[i][n: 2*n] *= -1
    elif orient == 'horiz':
        edges[n: 2*n] *= -1
    
    return edges

рдкреИрд░рд╛рдореАрдЯрд░ n рдХреЗ рддрд╣рдд, рд╣рдо рдЙрди рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╕реАрдорд╛ рдЕрдиреБрдорд╛рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдХреНрд╖реИрддрд┐рдЬ рдпрд╛ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдЧреЗ рдХреЗ рдХрд╛рд░реНрдп рдПрдХ рдЧрд╣рд░реА рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рдд рдХреЗ рд╕рдорд╛рди рд╣реИрдВ:

# Apply one filter defined by parameters W and single slice
def conv_single_step(a_slice_prev, W):
    s = W * a_slice_prev
    Z = np.sum(s)
    Z = np.abs(Z)
    
    return Z
   
# Full edge filter
def conv_forward(A_prev, W, hparameters):
    m = len(A_prev)
    (f, f, n_C) = W.shape
    stride = hparameters['stride']
    pad = hparameters['pad']
    
    Z = list()
    flag = 0
    z_max = hparameters['z_max']
    
    if len(z_max) == 0:
        z_max = list()
        flag = 1
    
    for i in range(m):
        
        (x0, x1, x2) = A_prev[i].shape
        A_prev_pad = A_prev[i][ 
                            int(x0 / 4) : int(x0 * 3 / 4), 
                            int(x1 / 4) : int(x1 * 3 / 4), 
                            :]
        
        (n_H_prev, n_W_prev, n_C_prev) = A_prev_pad.shape
        n_H = int((n_H_prev - f + 2*pad) / stride) + 1
        n_W = int((n_W_prev - f + 2*pad) / stride) + 1
        z = np.zeros((n_H, n_W))
        
        a_prev_pad = A_prev_pad
        
        for h in range(n_H):
            vert_start = h * stride
            vert_end = h * stride + f
            
            for w in range(n_W):
                horiz_start = w * stride
                horiz_end = w * stride + f
                
               
                a_slice_prev = a_prev_pad[vert_start: vert_end, horiz_start: horiz_end, :]

                weights = W[:, :, :]
                z[h, w] = conv_single_step(a_slice_prev, weights)
        
        if flag == 1:
            z_max.append(np.max(z))
        Z.append(z / z_max[i])
        
    cache = (A_prev, W, hparameters)
    
    return Z, z_max, cache

# pooling
def pool_forward(A_prev, hparameters, mode = 'max'):
    m = len(A_prev)
    f = hparameters['f']
    stride = hparameters['stride']
    
    A = list()
    
    for i in range(m):
        (n_H_prev, n_W_prev) = A_prev[i].shape
        
        n_H = int(1 + (n_H_prev - f) / stride)
        n_W = int(1 + (n_W_prev - f) / stride)
        
        a = np.zeros((n_H, n_W))
        
        for h in range(n_H):
            vert_start = h * stride
            vert_end = h * stride + f
            
            for w in range(n_W):
                horiz_start = w * stride
                horiz_end = w * stride + f
                
                a_prev_slice = A_prev[i][vert_start: vert_end, horiz_start: horiz_end]

                if mode == 'max':
                    a[h, w] = np.max(a_prev_slice)
                elif mode == 'avg':
                    a[h, w] = np.mean(a_prev_slice)
                        
        A.append(a)

    cache = (A_prev, hparameters)
    
    return A, cache

conv_single_step - рд╕реАрдорд╛ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддреЗ рд╣реБрдП рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдЫрд╡рд┐ рд░рдВрдЧреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдгрдиред
conv_forward - рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдореЗрдВ рд╕реАрдорд╛рдУрдВ рдХреА рдПрдХ рдкреВрд░реА рдкрд░рд┐рднрд╛рд╖рд╛ред
pool_forward - рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рдХрдо рдХрд░реЗрдВред

рдЕрд▓рдЧ-рдЕрд▓рдЧ, рдореИрдВ conv_forward рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдореВрд▓реНрдп рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ:

(x0, x1, x2) = A_prev[i].shape
A_prev_pad = A_prev[i][ 
    int(x0 / 4) : int(x0 * 3 / 4), 
    int(x1 / 4) : int(x1 * 3 / 4), 
    :]

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

рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫрд╡рд┐ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:

# main layer
def borders(images, filter_size = 1, stride = 1, pool_stride = 2, pool_size = 2, z_max = []):
    Wv = edges(filter_size, 'vert')
    hparameters = {'pad': pad, 'stride': stride, 'pool_stride': pool_stride, 'f': pool_size, 'z_max': z_max}
    Z, z_max_v, _ = conv_forward(images, Wv, hparameters)
    
    print('edge filter applied')
    
    hparameters_pool = {'stride': pool_stride, 'f': pool_size}
    Av, _ = pool_forward(Z, hparameters_pool, mode = 'max')
    
    print('vertical filter applied')
    
    Wh = edges(filter_size, 'horiz')
    hparameters = {'pad': pad, 'stride': stride, 'pool_stride': pool_stride, 'f': pool_size, 'z_max': z_max}
    Z, z_max_h, _ = conv_forward(images, Wh, hparameters)
    
    print('edge filter applied')
    
    hparameters_pool = {'stride': pool_stride, 'f': pool_size}
    Ah, _ = pool_forward(Z, hparameters_pool, mode = 'max')
    
    print('horizontal filter applied')   
    
    return [(Av[i] + Ah[i]) / 2 for i in range(len(Av))], list(map(np.max, zip(z_max_v, z_max_h)))

рдлрд╝рдВрдХреНрд╢рди рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реАрдорд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдХреНрд╖реИрддрд┐рдЬ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рджреЛрдиреЛрдВ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдорд╛рдзреНрдп рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдФрд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп:

# calculate borders of original and blurred images
def orig_blur(images, filter_size = 1, stride = 3, pool_stride = 2, pool_size = 2, blur = 57):
    z_max = []

    img, z_max = borders(images, 
                         filter_size = filter_size, 
                         stride = stride, 
                         pool_stride = pool_stride, 
                         pool_size = pool_size
                        )
    print('original image borders is calculated')
    
    blurred_img = [cv2.GaussianBlur(x, (blur, blur), 0) for x in images]
    print('images blurred')
    
    blurred, z_max = borders(blurred_img, 
                             filter_size = filter_size, 
                             stride = stride, 
                             pool_stride = pool_stride, 
                             pool_size = pool_size, 
                             z_max = z_max
                            )
    print('blurred image borders is calculated')

    return [np.mean(orig) / np.mean(blurred) for (orig, blurred) in zip(img, blurred)], img, blurred

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдореВрд▓ рдЫрд╡рд┐ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо рдЫрд╡рд┐ рдХреЛ рдзреБрдВрдзрд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо рдзреБрдВрдзрд▓реА рддрд╕реНрд╡реАрд░ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдореВрд▓ рдЫрд╡рд┐ рдФрд░ рдзреБрдВрдзрд▓реЗ рдХреЗ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдорд╛рдзреНрдп рд╕реАрдорд╛рдУрдВ рдХреЗ рдЕрдиреБрдкрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛рд░рдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ, рдореВрд▓ рдЫрд╡рд┐ рдХреА рд╕реАрдорд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдФрд░ рдзреБрдВрдзрд▓реА рдХреА рд╕реАрдорд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреАред

рдПрд▓реНрдЧреЛрд░рд┐рдердо рдСрдкрд░реЗрд╢рди рдЙрджрд╛рд╣рд░рдг


рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ freepik.com рдлреЛрдЯреЛ рд╕реНрдЯреЙрдХ рд╕реЗ рддрд╕реНрд╡реАрд░реЗрдВ рд▓реАрдВред









рд╣рдо рдзреБрдВрдзрд▓рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдкрд╣рд▓реА рдЫрд╡рд┐ рдХреА рд╕реАрдорд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВ:



рджреВрд╕рд░рд╛:





рддреАрд╕рд░рд╛:





рдЪреМрдерд╛:





рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рдЪрд┐рддреНрд░реЛрдВ (3 рдФрд░ 4 рд╡реЗрдВ) рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ рдлрд╝рдЬрд╝реА рд▓реЛрдЧреЛрдВ (1 рдФрд░ 2) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдордЬрдмреВрдд рд╣реИред

рдЧрдгрдирд╛ рдХреЗ рдмрд╛рдж, рд╣рдо рдЧреБрдгрд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

[5.92918651681958,
2.672756123184502,
10.695051017699232,
11.901115749698139]

рдЧреБрдгрд╛рдВрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реИрдВ: рдмрдбрд╝рд╛ рдЧреБрдгрд╛рдВрдХ, рдлреЛрдЯреЛ рдХреЛ рддреЗрдЬ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреВрд╕рд░реА рддрд╕реНрд╡реАрд░ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЬреЛ рдЧреБрдгрд╛рдВрдХ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддреА рд╣реИред

рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реБрд╡рд┐рдзрд╛рдПрдБ


  • рддрд╕реНрд╡реАрд░ рдХреЛ рддреЗрдЬ рдХрд░реЗрдВ, рд╕реАрдорд╛ рдЬрд┐рддрдиреА рдордЬрдмреВрдд рд╣реЛрдЧреА, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛;
  • рд╡рд┐рднрд┐рдиреНрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЕрд▓рдЧ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдкрдиреЗ рдЖрдк рдкрд░ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ: рдХрд╣реАрдВ, рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рддрд╕реНрд╡реАрд░реЛрдВ рдХрд╛ рдЧреБрдгрд╛рдВрдХ 7 рд╕реЗ рдКрдкрд░ рд╣реЛрдЧрд╛, рдХрд╣реАрдВ 10 рд╕реЗ рдКрдкрд░;
  • рдЧреБрдгрд╛рдВрдХ рдлреЛрдЯреЛ рдХреА рдЪрдордХ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЕрдВрдзреЗрд░реЗ рддрд╕реНрд╡реАрд░реЛрдВ рдХреА рд╕реАрдорд╛рдПрдВ рдХрдордЬреЛрд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреА, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЧреБрдгрд╛рдВрдХ рдХрдо рд╣реЛрдЧрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд, рдорд╛рдирдХ рддрд╕реНрд╡реАрд░реЛрдВ рдХреЗ рд▓рд┐рдП;

рдПрдХ рдХрд╛рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрд░реЗ github рдЦрд╛рддреЗ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

All Articles