рдХреГрддреНрд░рд┐рдо рдмреБрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рдЪреАрдЯ рд╢реАрдЯ - рдЕрддрд┐рд░рд┐рдХреНрдд рдлреЗрдВрдХ рджреЗрдВ, рдореБрдЦреНрдп рдмрд╛рдд рд╕рд┐рдЦрд╛рдПрдВред рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЕрдиреБрдХреНрд░рдо рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрдХрдиреАрдХ

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



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

рдХрд╛рдЧрд▓ рд╕рдореБрджреНрд░реА рдЦреЛрдЬ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реБрдИ рд╣реИред рдПрдпрд░рдмрд╕ рдиреЗ рдЬрд╣рд╛рдЬреЛрдВ рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ рд╕рдореБрджреНрд░ рдХреЗ рдЙрдкрдЧреНрд░рд╣ рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ред рдХреБрд▓ 192555 рдЪрд┐рддреНрд░ 768x768x3 - 340 720 680 960 рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВ рдпрджрд┐ uint8 рдФрд░ рдпрд╣ рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдФрд░ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рднреА рдЪрд┐рддреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдФрд░ рдЕрддрд┐рд░реЗрдХ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВред рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдЧрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред рдФрд░ рдЕрдЧрд░ рд╕рдореБрджреНрд░ рдХрд╛ рдПрдХ рдФрд░ рдПрдХ рд╣реА рдЦрдВрдб рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдФрд░ рджреВрд╕рд░реА рд╕рддреНрдпрд╛рдкрди рдХреНрд░рдо рдореЗрдВ рдЧрд┐рд░ рдЧрдИ, рддреЛ рд╕рддреНрдпрд╛рдкрди рдЕрдкрдирд╛ рдЕрд░реНрде рдЦреЛ рджреЗрдЧрд╛ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкреАрдЫреЗ рд╣рдЯ рдЬрд╛рдПрдЧрд╛, рд╣рдо рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рд╕рдорд╛рди рд╣реИред рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ GPU рдХрд╛ рдмрд╣реБрдд рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рд▓рдЧрд╛ред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╡рд┐рдЬреЗрддрд╛рдУрдВ рдФрд░ рдкреБрд░рд╕реНрдХрд╛рд░ рд╡рд┐рдЬреЗрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреЗ рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЛ рдорд╣рд╛рд░рдд рдХреЗ рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдФрд░ рдХреЛрдб рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЬрд▓реНрджреА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╕реАрдЦрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВрдЧреЗред

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









рдпрд╣ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рд╣реИ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрдиреЗрдХреНрд╢рди, рдЦрд░рд╛рдм рдорд╛рд░реНрдХрдЕрдк рдФрд░ рдЕрдиреНрдп рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред

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

рддреЛ, рд╕рдореБрджреНрд░реА np.random.sample () * 0.75 рдХреЛ рд▓реЗрдВ , рд╣рдореЗрдВ рд▓рд╣рд░реЛрдВ, рд╣рд╡рд╛, рддрдЯреЛрдВ рдФрд░ рдЕрдиреНрдп рдЫрд┐рдкреЗ рд╣реБрдП рдкреИрдЯрд░реНрди рдФрд░ рдЪреЗрд╣рд░реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЬрд╣рд╛рдЬреЛрдВ / рдПрд▓рд┐рдкреНрд╕ рдХреЛ рднреА рдПрдХ рд╣реА рд░рдВрдЧ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕рдореБрджреНрд░ рдХреЛ рдирд╛рд╡ рдФрд░ рд╣рд╕реНрддрдХреНрд╖реЗрдк рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 0.25 рдХреЛ рд╕рдореБрджреНрд░ рдпрд╛ рдирд╛рд╡ / рдЬреИрдорд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рдЖрдХрд╛рд░ рдХреЗ рд╣реЛрдВрдЧреЗ - рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдФрд░ рдЭреБрдХрд╛рд╡реЛрдВ рдХреЗ рджреАрд░реНрдШрд╡реГрддреНрддред рд╣рд╕реНрддрдХреНрд╖реЗрдк рднреА рдХреЗрд╡рд▓ рдЙрд╕реА рд░рдВрдЧ рдХрд╛ рдЖрдпрддрд╛рдХрд╛рд░ рд╣реЛрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рджреАрд░реНрдШрд╡реГрддреНрдд - рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рд╢реЛрд░ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рд╣реА рд░рдВрдЧ рдХрд╛ рд╣рд╕реНрддрдХреНрд╖реЗрдкред рд╣рдо рдХреЗрд╡рд▓ рд░рдВрдЧ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рджреАрд░реНрдШрд╡реГрддреНрдд / рдЖрдпрдд рдХреЗ рд▓рд┐рдП np.random.sample () рдЪрд▓рд╛рдПрдВрдЧреЗ , рдЕрд░реНрдерд╛рддред рди рддреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдФрд░ рди рд╣реА рджреАрд░реНрдШрд╡реГрддреНрдд / рдЖрдпрдд рдХрд╛ рд░рдВрдЧ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рда рдореЗрдВ рдЖрдЧреЗ рдЪрд┐рддреНрд░ / рдореБрдЦреМрдЯреЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рдХреЛрдб рд╣реИ рдФрд░ рджрд╕ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЪрдпрдирд┐рдд рдЬреЛрдбрд╝реЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рд▓реЗрдВ (рдЖрдк рдЕрдкрдирд╛ рдкрд╕рдВрджреАрджрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ) рдФрд░ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдЧреБрдгрд╛рддреНрдордХ рдФрд░ рдорд╛рддреНрд░рд╛рддреНрдордХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрдбрд╝реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЕрдиреБрдХреНрд░рдо рдХреА рдЕрддрд┐рд░реЗрдХ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдФрд░ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдпрд╛рдиреА рд▓реЗрдЦрдХ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЕрдиреБрдХреНрд░рдо рдХреЗ рдХрдИ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдХрд╛рдлреА рд╣рдж рддрдХ рдмреЗрдорд╛рдиреА рд╣реИрдВ, рдХрдИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЪрд┐рддреНрд░ рд╣реИрдВ, рджрд░реНрдЬрдиреЛрдВ GPU рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдбреЗрдЯрд╛ рдХреА рдЕрддрд┐рд░реЗрдХ рди рдХреЗрд╡рд▓ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ рдФрд░ рди рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдХрд┐ рдПрдХ рд╣реА рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕ рдбреЗрдЯрд╛ рдореЗрдВ рд╕реВрдЪрдирд╛ рдХреЗ рдЕрддрд┐рд░реЗрдХ рдореЗрдВ рднреАред рдбреЗрдЯрд╛ рдирд┐рд░рд░реНрдердХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рднрд▓реЗ рд╣реА рд╡рд╣ рдмрд┐рд▓реНрдХреБрд▓ рджреЛрд╣рд░рд╛рдпрд╛ рди рдЧрдпрд╛ рд╣реЛред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╕реВрдЪрдирд╛ рдХреА рд╕рдЦреНрдд рдкрд░рд┐рднрд╛рд╖рд╛ рдФрд░ рдЗрд╕рдХреА рдкрд░реНрдпрд╛рдкреНрддрддрд╛ рдпрд╛ рдЕрддрд┐рд░реЗрдХ рдирд╣реАрдВ рд╣реИред рд╣рдо рд╕рд┐рд░реНрдл рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЯреНрд░реЗрди рдХреЛ рдХрд┐рддрдирд╛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдХрд┐рди рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рддрд╕реНрд╡реАрд░реЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ (рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕рдЯреАрдХрддрд╛ рдЦреБрдж рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ) рдкреНрд░рд╢рд┐рдХреНрд╖рдгред рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рддреНрд░рд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рджреАрд░реНрдШрд╡реГрддреНрдд рдкрд░, рдПрдХ рдмрд╛рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдпрддрд╛рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рдореЗрд░реА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рдФрд░ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред , рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рдореЗрдпреЛрдВ рдХреЛ рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред

рддреЛ, рджрд┐рдпрд╛ рдЧрдпрд╛:

  • рдЪрд┐рддреНрд░ / рдореБрдЦреМрдЯрд╛ рдЬреЛрдбрд╝реЗ рдХрд╛ рд╕реАрдЦрдиреЗ рдХрд╛ рдХреНрд░рдоред рд╣рдо рдЪрд┐рддреНрд░реЛрдВ / рдорд╛рд╕реНрдХ рдХреА рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рддреБрд░рдВрдд рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреВрдВрдЧрд╛ - рд░рдВрдЧ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрдпреЛрдВ рд╣реИ? рдореИрдВ рдмрд╕, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдФрд░ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ, рд╕реАрдорд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдХрд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ;
  • рдиреЗрдЯрд╡рд░реНрдХ рд╕рд╛рдзрд╛рд░рдг, рд╕рд╛рдзрд╛рд░рдг U- рдиреЗрдЯ, рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдФрд░ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░:

  • рдирд┐рд░реНрдорд┐рдд рдЕрдиреБрдХреНрд░рдо рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдбреЗрдЯрд╛ рдХреЗ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдЦрдХ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЖрдХрд╛рд░ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ "рдмрд╣реБрдд рдХреБрдЫ" рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдРрд╕реА рд░рд╛рд╢рд┐, рджрд╕ рд╣рдЬрд╛рд░ рдЬреЛрдбрд╝реЗ рдЪрд┐рддреНрд░ / рдореБрдЦреМрдЯреЗ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдмрд╣реБрдд рдХрдо рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реЗ рд╕реАрдЦреЗрдВрдЧреЗред

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

рдЕрдм рдЖрдк рдЕрдкрдиреЗ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ 10,000 рдореЗрдВ рд╕реЗ рдХрд┐рддрдиреЗ рдЬреЛрдбрд╝реЗ рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди 0.98 рд╕реЗ рдЕрдзрд┐рдХ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде 10,000 рдЬреЛрдбрд╝реЗ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рднреА рдмрдирд╛рдпрд╛ рд╣реИред рддреБрд▓рдирд╛ рдХреЗ рдмрд╛рдж, рдХрд╛рдЧрдЬ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдкрд░ рд▓рд┐рдЦреЗрдВред

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рд╕рд╛рде рд╕рдореБрджреНрд░ рдФрд░ рдЬрд╣рд╛рдЬреЛрдВ рджреЛрдиреЛрдВ рдХреЛ рдХреГрддреНрд░рд┐рдо рд░реВрдк рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ np.random.sample () рд╣реИ ред

рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЪрд┐рддреНрд░реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
import numpy as np import matplotlib.pyplot as plt %matplotlib inline import math from tqdm import tqdm from skimage.draw import ellipse, polygon from keras import Model from keras.optimizers import Adam from keras.layers import Input,Conv2D,Conv2DTranspose,MaxPooling2D,concatenate from keras.layers import BatchNormalization,Activation,Add,Dropout from keras.losses import binary_crossentropy from keras import backend as K import tensorflow as tf import keras as keras w_size = 128 train_num = 10000 radius_min = 10 radius_max = 20 


рдиреБрдХрд╕рд╛рди рдФрд░ рд╕рдЯреАрдХрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВ
 def dice_coef(y_true, y_pred): y_true_f = K.flatten(y_true) y_pred = K.cast(y_pred, 'float32') y_pred_f = K.cast(K.greater(K.flatten(y_pred), 0.5), 'float32') intersection = y_true_f * y_pred_f score = 2. * K.sum(intersection) / (K.sum(y_true_f) + K.sum(y_pred_f)) return score def dice_loss(y_true, y_pred): smooth = 1. y_true_f = K.flatten(y_true) y_pred_f = K.flatten(y_pred) intersection = y_true_f * y_pred_f score = (2. * K.sum(intersection) + smooth) / (K.sum(y_true_f) + K.sum(y_pred_f) + smooth) return 1. - score def bce_dice_loss(y_true, y_pred): return binary_crossentropy(y_true, y_pred) + dice_loss(y_true, y_pred) def get_iou_vector(A, B): # Numpy version batch_size = A.shape[0] metric = 0.0 for batch in range(batch_size): t, p = A[batch], B[batch] true = np.sum(t) pred = np.sum(p) # deal with empty mask first if true == 0: metric += (pred == 0) continue # non empty mask case. Union is never empty # hence it is safe to divide by its number of pixels intersection = np.sum(t * p) union = true + pred - intersection iou = intersection / union # iou metrric is a stepwise approximation of the real iou over 0.5 iou = np.floor(max(0, (iou - 0.45)*20)) / 10 metric += iou # teake the average over all images in batch metric /= batch_size return metric def my_iou_metric(label, pred): # Tensorflow version return tf.py_func(get_iou_vector, [label, pred > 0.5], tf.float64) from keras.utils.generic_utils import get_custom_objects get_custom_objects().update({'bce_dice_loss': bce_dice_loss }) get_custom_objects().update({'dice_loss': dice_loss }) get_custom_objects().update({'dice_coef': dice_coef }) get_custom_objects().update({'my_iou_metric': my_iou_metric }) 


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

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

рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ "рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕" рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ, рд╣рдо рдпрд╣ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЕрдВрджрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдХреИрд╕реЗ рд╡рдЬрд╝рди рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдХреИрд╕реЗ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рдПрдХ рдЕрдиреНрдп рдЕрдзреНрдпрдпрди рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред

рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдпреВ-рдиреЗрдЯ
 def convolution_block(x, filters, size, strides=(1,1), padding='same', activation=True): x = Conv2D(filters, size, strides=strides, padding=padding)(x) x = BatchNormalization()(x) if activation == True: x = Activation('relu')(x) return x def residual_block(blockInput, num_filters=16): x = Activation('relu')(blockInput) x = BatchNormalization()(x) x = convolution_block(x, num_filters, (3,3) ) x = convolution_block(x, num_filters, (3,3), activation=False) x = Add()([x, blockInput]) return x # Build model def build_model(input_layer, start_neurons, DropoutRatio = 0.5): conv1 = Conv2D(start_neurons * 1, (3, 3), activation=None, padding="same" )(input_layer) conv1 = residual_block(conv1,start_neurons * 1) conv1 = residual_block(conv1,start_neurons * 1) conv1 = Activation('relu')(conv1) pool1 = MaxPooling2D((2, 2))(conv1) pool1 = Dropout(DropoutRatio/2)(pool1) conv2 = Conv2D(start_neurons * 2, (3, 3), activation=None, padding="same" )(pool1) conv2 = residual_block(conv2,start_neurons * 2) conv2 = residual_block(conv2,start_neurons * 2) conv2 = Activation('relu')(conv2) pool2 = MaxPooling2D((2, 2))(conv2) pool2 = Dropout(DropoutRatio)(pool2) conv3 = Conv2D(start_neurons * 4, (3, 3), activation=None, padding="same")(pool2) conv3 = residual_block(conv3,start_neurons * 4) conv3 = residual_block(conv3,start_neurons * 4) conv3 = Activation('relu')(conv3) pool3 = MaxPooling2D((2, 2))(conv3) pool3 = Dropout(DropoutRatio)(pool3) conv4 = Conv2D(start_neurons * 8, (3, 3), activation=None, padding="same")(pool3) conv4 = residual_block(conv4,start_neurons * 8) conv4 = residual_block(conv4,start_neurons * 8) conv4 = Activation('relu')(conv4) pool4 = MaxPooling2D((2, 2))(conv4) pool4 = Dropout(DropoutRatio)(pool4) # Middle convm = Conv2D(start_neurons * 16, (3, 3), activation=None, padding="same")(pool4) convm = residual_block(convm,start_neurons * 16) convm = residual_block(convm,start_neurons * 16) convm = Activation('relu')(convm) deconv4 = Conv2DTranspose(start_neurons * 8, (3, 3), strides=(2, 2), padding="same")(convm) uconv4 = concatenate([deconv4, conv4]) uconv4 = Dropout(DropoutRatio)(uconv4) uconv4 = Conv2D(start_neurons * 8, (3, 3), activation=None, padding="same")(uconv4) uconv4 = residual_block(uconv4,start_neurons * 8) uconv4 = residual_block(uconv4,start_neurons * 8) uconv4 = Activation('relu')(uconv4) deconv3 = Conv2DTranspose(start_neurons * 4, (3, 3), strides=(2, 2), padding="same")(uconv4) uconv3 = concatenate([deconv3, conv3]) uconv3 = Dropout(DropoutRatio)(uconv3) uconv3 = Conv2D(start_neurons * 4, (3, 3), activation=None, padding="same")(uconv3) uconv3 = residual_block(uconv3,start_neurons * 4) uconv3 = residual_block(uconv3,start_neurons * 4) uconv3 = Activation('relu')(uconv3) deconv2 = Conv2DTranspose(start_neurons * 2, (3, 3), strides=(2, 2), padding="same")(uconv3) uconv2 = concatenate([deconv2, conv2]) uconv2 = Dropout(DropoutRatio)(uconv2) uconv2 = Conv2D(start_neurons * 2, (3, 3), activation=None, padding="same")(uconv2) uconv2 = residual_block(uconv2,start_neurons * 2) uconv2 = residual_block(uconv2,start_neurons * 2) uconv2 = Activation('relu')(uconv2) deconv1 = Conv2DTranspose(start_neurons * 1, (3, 3), strides=(2, 2), padding="same")(uconv2) uconv1 = concatenate([deconv1, conv1]) uconv1 = Dropout(DropoutRatio)(uconv1) uconv1 = Conv2D(start_neurons * 1, (3, 3), activation=None, padding="same")(uconv1) uconv1 = residual_block(uconv1,start_neurons * 1) uconv1 = residual_block(uconv1,start_neurons * 1) uconv1 = Activation('relu')(uconv1) uconv1 = Dropout(DropoutRatio/2)(uconv1) output_layer = Conv2D(1, (1,1), padding="same", activation="sigmoid")(uconv1) return output_layer # model input_layer = Input((w_size, w_size, 3)) output_layer = build_model(input_layer, 16) model = Model(input_layer, output_layer) model.compile(loss=bce_dice_loss, optimizer="adam", metrics=[my_iou_metric]) model.summary() 


рдЪрд┐рддреНрд░ / рдореБрдЦреМрдЯрд╛ рдЬреЛрдбрд╝реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпред 128x128 рд░рдВрдЧ рдХреА рддрд╕реНрд╡реАрд░ рдкрд░ рджреЛ рд╢реЛрд░реЛрдВ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЪрдпрдирд┐рдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╢реЛрд░ рд╕реЗ рднрд░реА рд╣реБрдИ рд╣реИ, рдпрд╛ рддреЛ 0.0 ... 0.75 рдпрд╛ 0.25..1.0ред рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЙрдиреНрдореБрдЦ рджреАрд░реНрдШрд╡реГрддреНрдд рдХреЛ рдЪрд┐рддреНрд░ рдореЗрдВ рд░рдЦреЗрдВ рдФрд░ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рдПрдХ рдЖрдпрдд рд░рдЦреЗрдВред рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдпрдд рдХреЛ рдХрд┐рдирд╛рд░реЗ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рд╣рд░ рдмрд╛рд░ рд╣рдо рд╕рдореБрджреНрд░ / рдирд╛рд╡ рдХреЗ рд░рдВрдЧ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдлрд┐рд░ рд╕реЗ рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЪрд┐рддреНрд░ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ, рдЪреМрдереЗ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрд░реНрдерд╛рддреН рдбрд╛рд▓ рджреЗрдВрдЧреЗред Red.Green.Blue.Mask, рдпрд╣ рдЖрд╕рд╛рди рд╣реИред

 def next_pair(): img_l = (np.random.sample((w_size, w_size, 3))* 0.75).astype('float32') img_h = (np.random.sample((w_size, w_size, 3))* 0.75 + 0.25).astype('float32') img = np.zeros((w_size, w_size, 4), dtype='float') p = np.random.sample() - 0.5 r = np.random.sample()*(w_size-2*radius_max) + radius_max c = np.random.sample()*(w_size-2*radius_max) + radius_max r_radius = np.random.sample()*(radius_max-radius_min) + radius_min c_radius = np.random.sample()*(radius_max-radius_min) + radius_min rot = np.random.sample()*360 rr, cc = ellipse( r, c, r_radius, c_radius, rotation=np.deg2rad(rot), shape=img_l.shape ) p1 = np.rint(np.random.sample()* (w_size-2*radius_max) + radius_max) p2 = np.rint(np.random.sample()* (w_size-2*radius_max) + radius_max) p3 = np.rint(np.random.sample()* (2*radius_max - radius_min) + radius_min) p4 = np.rint(np.random.sample()* (2*radius_max - radius_min) + radius_min) poly = np.array(( (p1, p2), (p1, p2+p4), (p1+p3, p2+p4), (p1+p3, p2), (p1, p2), )) rr_p, cc_p = polygon(poly[:, 0], poly[:, 1], img_l.shape) in_sc_rr = list(set(rr) & set(rr_p)) in_sc_cc = list(set(cc) & set(cc_p)) if len(in_sc_rr) > 0 and len(in_sc_cc) > 0: if len(in_sc_rr) > 0: _delta_rr = np.max(in_sc_rr) - np.min(in_sc_rr) + 1 if np.mean(rr_p) > np.mean(in_sc_rr): poly[:,0] += _delta_rr else: poly[:,0] -= _delta_rr if len(in_sc_cc) > 0: _delta_cc = np.max(in_sc_cc) - np.min(in_sc_cc) + 1 if np.mean(cc_p) > np.mean(in_sc_cc): poly[:,1] += _delta_cc else: poly[:,1] -= _delta_cc rr_p, cc_p = polygon(poly[:, 0], poly[:, 1], img_l.shape) if p > 0: img[:,:,:3] = img_l.copy() img[rr, cc,:3] = img_h[rr, cc] img[rr_p, cc_p,:3] = img_h[rr_p, cc_p] else: img[:,:,:3] = img_h.copy() img[rr, cc,:3] = img_l[rr, cc] img[rr_p, cc_p,:3] = img_l[rr_p, cc_p] img[:,:,3] = 0. img[rr, cc,3] = 1. return img 

рдЪрд▓реЛ рдЬреЛрдбрд╝реЗ рдХрд╛ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЕрдиреБрдХреНрд░рдо рдмрдирд╛рддреЗ рд╣реИрдВ, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ 10 рджреЗрдЦреЗрдВ

 _txy = [next_pair() for idx in range(train_num)] f_imgs = np.array(_txy)[:,:,:,:3].reshape(-1,w_size ,w_size ,3) f_msks = np.array(_txy)[:,:,:,3:].reshape(-1,w_size ,w_size ,1) del(_txy) #    10   fig, axes = plt.subplots(2, 10, figsize=(20, 5)) for k in range(10): kk = np.random.randint(train_num) axes[0,k].set_axis_off() axes[0,k].imshow(f_imgs[kk]) axes[1,k].set_axis_off() axes[1,k].imshow(f_msks[kk].squeeze()) 



рдкрд╣рд▓рд╛ рдХрджрдоред рдЖрдЗрдП рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ


рд╣рдорд╛рд░реЗ рдкреНрд░рдпреЛрдЧ рдХрд╛ рдкрд╣рд▓рд╛ рдЪрд░рдг рд╕рд░рд▓ рд╣реИ, рд╣рдо рдХреЗрд╡рд▓ 11 рдкрд╣рд▓реЗ рдЪрд┐рддреНрд░реЛрдВ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

 batch_size = 10 val_len = 11 precision = 0.85 m0_select = np.zeros((f_imgs.shape[0]), dtype='int') for k in range(val_len): m0_select[k] = 1 t = tqdm() while True: fit = model.fit(f_imgs[m0_select>0], f_msks[m0_select>0], batch_size=batch_size, epochs=1, verbose=0 ) current_accu = fit.history['my_iou_metric'][0] current_loss = fit.history['loss'][0] t.set_description("accuracy {0:6.4f} loss {1:6.4f} ".\ format(current_accu, current_loss)) t.update(1) if current_accu > precision: break t.close() 

accuracy 0.8636 loss 0.0666 : : 47it [00:29, 5.82it/s]

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

рдЕрдм рдореБрдЦреНрдп рдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рдХрд░реЗрдВ


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

 batch_size = 50 t_batch_size = 1024 raw_len = val_len t = tqdm(-1) id_train = 0 #id_select = 1 while True: t.set_description("Accuracy {0:6.4f} loss {1:6.4f}\ selected img {2:5d} tested img {3:5d} ". format(current_accu, current_loss, val_len, raw_len)) t.update(1) if id_train == 1: fit = model.fit(f_imgs[m0_select>0], f_msks[m0_select>0], batch_size=batch_size, epochs=1, verbose=0 ) current_accu = fit.history['my_iou_metric'][0] current_loss = fit.history['loss'][0] if current_accu > precision: id_train = 0 else: t_pred = model.predict( f_imgs[raw_len: min(raw_len+t_batch_size,f_imgs.shape[0])], batch_size=batch_size ) for kk in range(t_pred.shape[0]): val_iou = get_iou_vector( f_msks[raw_len+kk].reshape(1,w_size,w_size,1), t_pred[kk].reshape(1,w_size,w_size,1) > 0.5) if val_iou < precision*0.95: new_img_test = 1 m0_select[raw_len+kk] = 1 val_len += 1 break raw_len += (kk+1) id_train = 1 if raw_len >= train_num: break t.close() 

 Accuracy 0.9830 loss 0.0287 selected img 271 tested img 9949 : : 1563it [14:16, 1.01it/s] 

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

рдиреЗрдЯрд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдЪрдпрдирд┐рдд рджреГрд╖реНрдЯрд┐рд╣реАрди рдЬреЛрдбрд╝реЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

 fig, axes = plt.subplots(2, 10, figsize=(20, 5)) t_imgs = f_imgs[m0_select>0] t_msks = f_msks[m0_select>0] for k in range(10): kk = np.random.randint(t_msks.shape[0]) axes[0,k].set_axis_off() axes[0,k].imshow(t_imgs[kk]) axes[1,k].set_axis_off() axes[1,k].imshow(t_msks[kk].squeeze()) 

рдХреБрдЫ рднреА рд╡рд┐рд╢реЗрд╖ рдпрд╛ рдЕрд▓реМрдХрд┐рдХ рдирд╣реАрдВ:



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

рдкрд░рд┐рдгрд╛рдо рдФрд░ рд╕рдЯреАрдХрддрд╛ рдХрд╛ рд╕рддреНрдпрд╛рдкрди


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

 sh = np.arange(train_num) np.random.shuffle(sh) f0_imgs = f_imgs[sh] f0_msks = f_msks[sh] model.compile(loss=bce_dice_loss, optimizer="adam", metrics=[my_iou_metric]) model.summary() 

рд╡рд░реНрдХрдЖрдЙрдЯ рдХреЛрдб
 batch_size = 10 val_len = 11 precision = 0.85 m0_select = np.zeros((f_imgs.shape[0]), dtype='int') for k in range(val_len): m0_select[k] = 1 t = tqdm() while True: fit = model.fit(f0_imgs[m0_select>0], f0_msks[m0_select>0], batch_size=batch_size, epochs=1, verbose=0 ) current_accu = fit.history['my_iou_metric'][0] current_loss = fit.history['loss'][0] t.set_description("accuracy {0:6.4f} loss {1:6.4f} ".\ format(current_accu, current_loss)) t.update(1) if current_accu > precision: break t.close() 

 accuracy 0.8636 loss 0.0710 : : 249it [01:03, 5.90it/s] 

 batch_size = 50 t_batch_size = 1024 raw_len = val_len t = tqdm(-1) id_train = 0 #id_select = 1 while True: t.set_description("Accuracy {0:6.4f} loss {1:6.4f}\ selected img {2:5d} tested img {3:5d} ". format(current_accu, current_loss, val_len, raw_len)) t.update(1) if id_train == 1: fit = model.fit(f0_imgs[m0_select>0], f0_msks[m0_select>0], batch_size=batch_size, epochs=1, verbose=0 ) current_accu = fit.history['my_iou_metric'][0] current_loss = fit.history['loss'][0] if current_accu > precision: id_train = 0 else: t_pred = model.predict( f_imgs[raw_len: min(raw_len+t_batch_size,f_imgs.shape[0])], batch_size=batch_size ) for kk in range(t_pred.shape[0]): val_iou = get_iou_vector( f_msks[raw_len+kk].reshape(1,w_size,w_size,1), t_pred[kk].reshape(1,w_size,w_size,1) > 0.5) if val_iou < precision*0.95: new_img_test = 1 m0_select[raw_len+kk] = 1 val_len += 1 break raw_len += (kk+1) id_train = 1 if raw_len >= train_num: break t.close() 

 Accuracy 0.9890 loss 0.0224 selected img 408 tested img 9456 : : 1061it [21:13, 2.16s/it] 


рдкрд░рд┐рдгрд╛рдо рдореВрд▓ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЬреЛрдбрд╝реЗ рдХреЗ рдХреНрд░рдо рдкрд░ рдХрд╛рдлреА рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдиреЗрдЯрд╡рд░реНрдХ рдиреЗ 271, рдЕрдм 408 рдХреЛ рдЪреБрдирд╛, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдиреЗрдЯрд╡рд░реНрдХ рдПрдХ рдЕрд▓рдЧ рд░рд╛рд╢рд┐ рдЪреБрди рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдЦрдХ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рдореЗрд╢рд╛ 10,000 рд╕реЗ рдХрд╛рдлреА рдХрдо рд╣реЛрдЧрд╛ред

рдПрдХ рдирдП рд╕реНрд╡рддрдВрддреНрд░ рдЕрдиреБрдХреНрд░рдо рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рд╕рдЯреАрдХрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ

 _txy = [next_pair() for idx in range(train_num)] test_imgs = np.array(_txy)[:,:,:,:3].reshape(-1,w_size ,w_size ,3) test_msks = np.array(_txy)[:,:,:,3:].reshape(-1,w_size ,w_size ,1) del(_txy) test_pred_0 = model.predict(test_imgs) t_val_0 = get_iou_vector(test_msks,test_pred_0) t_val_0 

 0.9927799999999938 


рд╕рд╛рд░рд╛рдВрд╢ рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕рд▓рд┐рдП, рд╣рдо 10,000 рдЬреЛрдбрд╝реЗ рдореЗрдВ рд╕реЗ рдЪрдпрдирд┐рдд рддреАрди рдпрд╛ рдЪрд╛рд░ рд╕реМ рд╕реЗ рдХрдо рдХреЛ рдирд┐рдЪреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ, рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рд╕рдЯреАрдХрддрд╛ 0.99278 рд╣реИ, рд╣рдордиреЗ рдЙрди рд╕рднреА рдЬреЛрдбрд╝реЛрдВ рдХреЛ рд▓рд┐рдпрд╛ рдЬрд┐рдирдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдмрд╛рдХреА рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ред рд╣рдордиреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЕрдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЬрд╛рдирдХрд╛рд░реА рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЖрджрд┐ред рдФрд░ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╣рдо рдПрдХ рддрд╕реНрд╡реАрд░ рд▓реЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдЕрдЬреНрдЮрд╛рдд рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╡рдЬрди рдореЗрдВ рдирд┐рдЪреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХрдо рд╕реЗ рдХрдо рдПрдХ "рд░рд╣рд╕реНрдпрдордп" рдЪрд┐рддреНрд░ рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

рдХреБрд▓ 271 рддрд╕реНрд╡реАрд░ / рдореБрдЦреМрдЯрд╛ рдЬреЛрдбрд╝реЗ рдореЗрдВ 10,000 рдЬреЛрдбрд╝реЗ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбрд╝реЗ рдкрд░ рдХрдо рд╕реЗ рдХрдо 0.8075 рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдпрд╛рдиреА, рдкреВрд░реЗ рдЕрдиреБрдХреНрд░рдо рдкрд░ рдХреБрд▓ рд╕рдЯреАрдХрддрд╛ рдЕрдзрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рддрд╕реНрд╡реАрд░ рдореЗрдВ рдпрд╣ 0.8075 рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реА рддрд╕реНрд╡реАрд░реЗрдВ рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рд╣рдо рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдирд┐рдЪрд▓реА рд╕реАрдорд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред (рдпрд╣рд╛рдВ, рдмреЗрд╢рдХ, рд▓реЗрдЦрдХ рдиреЗ рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рд▓реЗрдЦ рдЗрд╕ рдХрдерди рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓рдЧрднрдЧ 0.8075, рдпрд╛ рд╕рдмреВрдд, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ рд╕рдЪ рд╣реИ)

рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рде рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХреЗ рд╕рд╛рде GPU рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЯреНрд░реЗрди рдХреЗ рдореВрд▓ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдирдИ рддрд╕реНрд╡реАрд░реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдиреЗрдЯрд╡рд░реНрдХ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдереЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЯреНрд░реЗрди рдХреЗ рдореВрд▓ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рдереЗ, рдирдП рдЪрд┐рддреНрд░реЛрдВ рд╕реЗ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдирд┐рдЪреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреНрд░рдо рдХреЛ рдПрдХрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ; рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЪрдпрдирд┐рдд рдПрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдПрдХ рд╕рддреНрдпрд╛рдкрди рдЕрдиреБрдХреНрд░рдо рд╣реИред

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

рдЦреИрд░, рд╕рд┐рд▓рд╡рдЯреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╕реА рдЯрд┐рдкреНрдкрдгреА, рдХрдИ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдФрд░ рдХрд╛рдЧрд▓рд░реНрд╕ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╕рд┐рд▓рд╡рдЯреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдЧреЗ рдХреЗ рдЯреНрд░рд┐рдХреА рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЗрд╕реЗ рдлреЛрд▓реНрдб рдореЗрдВ рднреА рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдк 10,000 рд╕реЗ 271 рдЬреЛрдбрд╝реЗ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢реЗрд╖ рд▓реЛрдЧреЛрдВ рдореЗрдВ рдПрдХ рдирдпрд╛ рд░реВрдЯ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдХрд┐рди рддреБрд▓рдиреАрдп рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк рдмрд╕ рдЕрдиреНрдп рдкреНрд░рд╛рд░рдВрднрд┐рдХ 11 рдХреЛ рдорд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдЦ рдПрдХ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЫрд╡рд┐ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рдпреВ-рдиреЗрдЯ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдФрд░ рд▓реЗрдЦ рдореЗрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЕрдиреНрдп рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдирд╣реАрдВ рд╣реИрдВ, рдЕрдиреНрдп рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рдХрдареЛрд░ рдЧрдгрд┐рдд рдирд╣реАрдВ рд╣реИ, рд╕рдм рдХреБрдЫ "рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░" рдмрддрд╛рдпрд╛ рдФрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕рдЯреАрдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдЖрдк рдиреЗрдЯрд╡рд░реНрдХ рдХреИрд╕реЗ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

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


All Articles