рдХреЗрд░рд╕ рдФрд░ рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдПрдкреАрдЖрдИ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрд▓рдорд╛рд░рд┐рдпреЛрдВ рдкрд░ рдорд╛рд▓ рдХреА рдорд╛рдиреНрдпрддрд╛

рд▓реЗрдЦ рдореЗрдВ рд╣рдо рд╕рд╛рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд▓рдорд╛рд░рд┐рдпреЛрдВ рдХреА рддрд╕реНрд╡реАрд░реЛрдВ рд╕реЗ рдПрдХ рдкреБрдирдГ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╡реНрдпрд╡рд╕рд╛рдп рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред Tensorflow Object Detection API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЦреЛрдЬ / рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рд╣рдо рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рд╡рд┐рдВрдбреЛ рдФрд░ рдПрдХ рдЧреИрд░-рдЕрдзрд┐рдХрддрдо рджрдорди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдЪреНрдЪ-рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╡рд╛рд▓реА рддрд╕реНрд╡реАрд░реЛрдВ рдореЗрдВ рдЫреЛрдЯреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВрдЧреЗред Keras рдореЗрдВ, рд╣рдо рдмреНрд░рд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдорд╛рд▓ рдХрд╛ рдПрдХ рд╡рд░реНрдЧреАрдХрд░рдг рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ, рд╣рдо 4 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХреЗ рдирд┐рд░реНрдгрдпреЛрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рд╕рднреА рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб GitHub рдкрд░ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



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


рдПрдХ рдкреНрд▓рд╛рдиреЛрдЧреНрд░рд╛рдо рдХреНрдпрд╛ рд╣реИ? рд╕реНрдЯреЛрд░ рдХреЗ рдХрдВрдХреНрд░реАрдЯ рдЯреНрд░реЗрдбрд┐рдВрдЧ рдЙрдкрдХрд░рдг рдкрд░ рд╕рд╛рдорд╛рдиреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдЖрд░реЗрдЦред

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

рдкреНрд▓реЗрдиреЛрдЧреНрд░рд╛рдо - рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИред



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

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

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

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

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

рдбреЗрдЯрд╛ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг


рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрдХрдЯреНрдард╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдХрдИ рд╕реМ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЗрдмрд▓рдЖрдИрдПрдордЬреАрдПрдо ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Yandex.Tolok рдкрд░ рдЖрдк рдорд╛рд░реНрдХрдЕрдк рдСрд░реНрдбрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



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

2014 рдореЗрдВ, Idea Teknoloji, рдЗрд╕реНрддрд╛рдВрдмреБрд▓, рддреБрд░реНрдХреА рдХреЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдиреЗ 4 рдХреИрдорд░реЛрдВ рдкрд░ рдмрдирд╛рдП рдЧрдП 40 рд╕реНрдЯреЛрд░ рд╕реЗ 354 рддрд╕реНрд╡реАрд░реЗрдВ рдЕрдкрд▓реЛрдб рдХреАрдВред рдЗрди рддрд╕реНрд╡реАрд░реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрдИ рд╣рдЬрд╛рд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рдХреБрд▓ рдЖрдпрддреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ 10 рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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



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



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

рд╣рдо рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдВрдЧреЗ:

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

рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ


рдореБрдЦреНрдп рддрдХрдиреАрдХреЗрдВ рдЬрд┐рдирдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ: рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ, рдХреЗрд░рд╕, рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдПрдкреАрдЖрдИ, рдУрдкрдирд╕реАрд╡реАред рдпрджреНрдпрдкрд┐ рд╡рд┐рдВрдбреЛрдЬ рдФрд░ рдореИрдХ рдУрдПрд╕ рджреЛрдиреЛрдВ рд╣реА рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рдлрд┐рд░ рднреА рд╣рдо рдЙрдмрдВрдЯреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдХрднреА рдЗрд╕ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХрд╛ рдПрдХ рдЯрди рдмрдЪ рдЬрд╛рдПрдЧрд╛ред GPU рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Tensorflow рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдПрдХ рдРрд╕рд╛ рд╡рд┐рд╖рдп рд╣реИ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рдпреЛрдЧреНрдп рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдРрд╕реЗ рд▓реЗрдЦ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Ubuntu 16.04 рдкрд░ Nvidia GPU рдХреЗ рд╕рд╛рде TensorFlow рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ ред рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢ рдкреБрд░рд╛рдиреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЪрд░рдг 1. рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ ( рдЬреАрдердм рд▓рд┐рдВрдХ )

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

рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЕрдирдЬрд╝рд┐рдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

wget https://github.com/gulvarol/grocerydataset/releases/download/1.0/GroceryDataset_part1.tar.gz wget https://github.com/gulvarol/grocerydataset/releases/download/1.0/GroceryDataset_part2.tar.gz tar -xvzf GroceryDataset_part1.tar.gz tar -xvzf GroceryDataset_part2.tar.gz 

рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдорд┐рд▓рддреА рд╣реИ:



рд╣рдо ShelfImages рдФрд░ ProductImagesFromShelves рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд╢реЗрд▓реНрдлрд╝рдореИрд╕реЗрдЬ рдореЗрдВ рд╕реНрд╡рдпрдВ рдЕрд▓рдорд╛рд░рд┐рдпреЛрдВ рдХреЗ рдЪрд┐рддреНрд░ рд╣реИрдВред рдирд╛рдо рдореЗрдВ, рдЪрд┐рддреНрд░ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд░реИрдХ рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИред рдПрдХ рд░реИрдХ рдХреЗ рдХрдИ рдЪрд┐рддреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдореЗрдВ рдПрдХ рддрд╕реНрд╡реАрд░ рдФрд░ рдЪреМрд░рд╛рд╣реЛрдВ рдХреЗ рд╕рд╛рде рднрд╛рдЧреЛрдВ рдореЗрдВ 5 рддрд╕реНрд╡реАрд░реЗрдВред

рдлрд╝рд╛рдЗрд▓ C1_P01_N1_S2_2.JPG (рд░реИрдХ C1_P01, рд╕реНрдиреИрдкрд╢реЙрдЯ N1_S2_2):



рд╣рдо рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрдВрдбреЛрдВ рдХреЗ рдбреЗрдЯрд╛ рдлреНрд░реЗрдо рдлреЛрдЯреЛ_рдбреИрдк рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ:


ProductImagesFromShelves рдореЗрдВ 11 рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЕрд▓рдорд╛рд░рд┐рдпреЛрдВ рд╕реЗ рдорд╛рд▓ рдХреА рдХрдЯ-рдЖрдЙрдЯ рддрд╕реНрд╡реАрд░реЗрдВ рд╣реИрдВ: 0 - рд╡рд░реНрдЧреАрдХреГрдд рдирд╣реАрдВ, 1 - рдорд╛рд░реНрд▓рдмреЛрд░реЛ, 2 - рдХреЗрдВрдЯ, рдЖрджрд┐ред рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд┐рдирд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдХреЗрд╡рд▓ рд╢реНрд░реЗрдгреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдирд╛рдореЛрдВ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд░реИрдХ, рдЙрд╕ рдкрд░ рдкреИрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЖрдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред

рдлрд╝рд╛рдЗрд▓ C1_P01_N1_S3_1.JPG_1276_1828_276_448.png рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ 1 (рд╢реНрд░реЗрдгреА 1, рд░реИрдХ C1_P01, рдЫрд╡рд┐ N1_S3_1, рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ (1276, 1828), рдЪреМрдбрд╝рд╛рдИ 276, рдКрдВрдЪрд╛рдИ 448) рд╕реЗ:


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


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

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

рд╣рдо рдПрдХ 70/30 рд╡рд┐рднрд╛рдЬрди рдмрдирд╛рддреЗ рд╣реИрдВ (30% рд░реИрдХ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдмрд╛рдХреА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП):

 # get distinct shelves shelves = list(set(photos_df['shelf_id'].values)) # use train_test_split from sklearn shelves_train, shelves_validation, _, _ = train_test_split(   shelves, shelves, test_size=0.3, random_state=6) # mark all records in data frames with is_train flag def is_train(shelf_id): return shelf_id in shelves_train photos_df['is_train'] = photos_df.shelf_id.apply(is_train) products_df['is_train'] = products_df.shelf_id.apply(is_train) 

рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЬрдм рд╣рдо рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реЛрддреЗ рд╣реИрдВ:

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

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

рдЙрд╕реА рд╕рдордп, рдорд╛рд░реНрдХрдЕрдк рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдлреЛрдЯреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдиреНрдореБрдЦ рдереЗред рдЬрд▓реНрджреА рдареАрдХ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдордЬреЗрджрд╛рд░ рд╣реЛ рдЧрдИрдВред

рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ pkl рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВрдЧреЗред рдХреБрд▓, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:

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

рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд░реИрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 # function to display shelf photo with rectangled products def draw_shelf_photo(file):   file_products_df = products_df[products_df.file == file]   coordinates = file_products_df[['xmin', 'ymin', 'xmax', 'ymax']].values   im = cv2.imread(f'{shelf_images}{file}')   im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)      for xmin, ymin, xmax, ymax in coordinates:       cv2.rectangle(im, (xmin, ymin), (xmax, ymax), (0, 255, 0), 5)   plt.imshow(im) # draw one photo to check our data fig = plt.gcf() fig.set_size_inches(18.5, 10.5) draw_shelf_photo('C3_P07_N1_S6_1.JPG') 



рдЪрд░рдг 2. рдмреНрд░рд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдЧреАрдХрд░рдг ( рдЬреАрдердм рдкрд░ рд▓рд┐рдВрдХ )

рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬрд╝рди рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╣реИред рд╕рдорд╕реНрдпрд╛ "рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдЧреИрдк" рд╣реИ: рдлреЛрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ [0, 255]ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 800x600x3 (3 RGB рдЪреИрдирд▓)ред



рдпрд╣ рдХрд╛рд░реНрдп рдХрдард┐рди рдХреНрдпреЛрдВ рд╣реИ:



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

"

рдЙрдирдХрд╛ рд▓реЗрдЦ 92% рдХреА рдХреБрд▓ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╡рд░реНрдЧреАрдХрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ:

  • рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ,
  • рд╣рдо ResNet v1 рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рджреГрдврд╝ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ,
  • рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдлрд╝реЛрдЯреЛ рджреЗрдЦреЗрдВред

рдпрд╣ "рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ" рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЕрднреА рдХреЗрд░рд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ " рдЯреНрд░реЗрди рдХреЛ CIFAR10 рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдПрдХ ResNet " рд╕реЗ рдЗрд╕реЗ рд▓реЗрдиреЗ рд╕реЗ ResNet v1 рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣реЛрддрд╛ рд╣реИред

рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреЛ рд╕рд░рдгрд┐рдпрд╛рдБ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: x - рдПрдХ рдЖрдпрд╛рдо рдХреЗ рд╕рд╛рде рдкреИрдХ рдХреА рддрд╕реНрд╡реАрд░реЗрдВ (рдкреИрдХ рдХреА рд╕рдВрдЦреНрдпрд╛, рдКрдВрдЪрд╛рдИ, рдЪреМрдбрд╝рд╛рдИ, 3) рдФрд░ y - рдПрдХ рдЖрдпрд╛рдо (рдкреИрдХ рдХреА рд╕рдВрдЦреНрдпрд╛, 10) рдХреЗ рд╕рд╛рде рдЙрдирдХреА рд╢реНрд░реЗрдгрд┐рдпрд╛рдВред Array y рдореЗрдВ рддрдерд╛рдХрдерд┐рдд 1-рдЧрд░реНрдо рд╡реИрдХреНрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдХ рдХреА рд╢реНрд░реЗрдгреА рдореЗрдВ 2 рдирдВрдмрд░ (0 рд╕реЗ 9 рддрдХ) рд╣реИ, рддреЛ рдпрд╣ рд╡реЗрдХреНрдЯрд░ [0, 0, 1, 0, 0, 0, 0, 0, 0] рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред

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

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

 # resize pack to fixed size SHAPE_WIDTH x SHAPE_HEIGHT def resize_pack(pack):   fx_ratio = SHAPE_WIDTH / pack.shape[1]   fy_ratio = SHAPE_HEIGHT / pack.shape[0]      pack = cv2.resize(pack, (0, 0), fx=fx_ratio, fy=fy_ratio)   return pack[0:SHAPE_HEIGHT, 0:SHAPE_WIDTH] 

рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╕реНрдХреЗрд▓ рдФрд░ рдПрдХ рдкреИрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред рдмреНрд░рд╛рдВрдб рдХрд╛ рдирд╛рдо рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреИрд╕реЗ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ:



рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЭрдВрдбреЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддреИрдпрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо x рдФрд░ y рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ x_train / x_validation рдФрд░ y_train / y_validation рдореЗрдВ рддреЛрдбрд╝рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:

 x_train shape: (1969, 120, 80, 3) y_train shape: (1969, 10) 1969 train samples 775 validation samples 

рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдХреЗрд░рд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ ResNet v1 рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдХрд╛рд░реНрдп рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВ:

 def resnet_v1(input_shape, depth, num_classes=10):   тАж 

рд╣рдо рдПрдХ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ:

 model = resnet_v1(input_shape=x_train.shape[1:], depth=depth, num_classes=num_classes) model.compile(loss='categorical_crossentropy',             optimizer=Adam(lr=lr_schedule(0)), metrics=['accuracy']) 

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

 # This will do preprocessing and realtime data augmentation: datagen = ImageDataGenerator(   featurewise_center=False,  # set input mean to 0 over the dataset   samplewise_center=False,  # set each sample mean to 0   featurewise_std_normalization=False,  # divide inputs by std of the dataset   samplewise_std_normalization=False,  # divide each input by its std   zca_whitening=False,  # apply ZCA whitening   rotation_range=5,  # randomly rotate images in the range (degrees, 0 to 180)   width_shift_range=0.1,  # randomly shift images horizontally (fraction of total width)   height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)   horizontal_flip=False,  # randomly flip images   vertical_flip=False)  # randomly flip images datagen.fit(x_train) 

рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

 # let's run training process, 20 epochs is enough batch_size = 50 epochs = 15 model.fit_generator(datagen.flow(x_train, y_train, batch_size=batch_size),                   validation_data=(x_validation, y_validation),                   epochs=epochs, verbose=1, workers=4,                   callbacks=[LearningRateScheduler(lr_schedule)]) 

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

рдмреНрдпрд╛рдЬ рдХреЗ рд▓рд┐рдП, рднреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:

рд▓рдЧрднрдЧ рд╕рднреА рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рд╣рдорд╛рд░реЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИрдВ, рд╢реНрд░реЗрдгреА 4 рдФрд░ 7 рдХреЛ рдЫреЛрдбрд╝рдХрд░ред рдкреНрд░рддреНрдпреЗрдХ рднреНрд░рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕реЗрд▓ рдХреЗ рдкреНрд░рддрд┐рднрд╛рд╢рд╛рд▓реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ:

рдЖрдк рдпрд╣ рднреА рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдКрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рдж рдХреА рдЧрд▓рддреА рдХреНрдпреЛрдВ рдереА, рд▓реЗрдХрд┐рди рд╡рд┐рдВрд╕реНрдЯрди рдХреЛ рд▓рдХреА рд╕реНрдЯреНрд░рд╛рдЗрдХ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдЧрд▓рдд рдард╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдпрд╣ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИ - рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреА рдкреВрд░реА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдкрд░рддреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рджреГрд╢реНрдп рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрд╡рд╕рд░ рдЕрдзрд┐рдХ рдлрд╝реЛрдЯреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИред

рддреЛ, рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░рд┐рдпрд░ рддреИрдпрд╛рд░ рд╣реИред рдбрд┐рдЯреЗрдХреНрдЯрд░ рдкрд░ рдЬрд╛рдПрдВред

рдЪрд░рдг 3. рддрд╕реНрд╡реАрд░ рдореЗрдВ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ ( рдЬреАрдердм рдкрд░ рд▓рд┐рдВрдХ )

рдХрдВрдкреНрдпреВрдЯрд░ рджреГрд╖реНрдЯрд┐ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╡рд┐рднрд╛рдЬрди, рд╕реНрдерд╛рдиреАрдпрдХрд░рдг, рд╡рд╕реНрддреБ рдЦреЛрдЬ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рднрд╛рдЬрди рд╣реИрдВред



рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред 2014 рд▓реЗрдЦ рджреГрд╢реНрдп рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╡рд╛рдпреЛрд▓рд╛-рдЬреЛрдиреНрд╕ рдФрд░ рдПрдЪрдУрдЬреА рдкрджреНрдзрддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:



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



рдЕрдм рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдорджрдж рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд╛рдиреНрдпрддрд╛ рдХрд╛ рдХрд╛рд░реНрдп рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо Tensorflow Object Detection API рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ Mobilenet V1 SSD рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдРрд╕реЗ рдореЙрдбрд▓ рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХрдИ рджрд┐рди рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╕реАрдЦрдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ COCO рдбреЗрдЯрд╛ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

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

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

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рдЯреНрд░рд╛рдВрд╕рдлрд░ рд▓рд░реНрдирд┐рдВрдЧ, рд╣рдо рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╕реНрддрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкрд░рддреЛрдВ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реМ рддрд╕реНрд╡реАрд░реЗрдВ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг GPU рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдХреБрдЫ рдШрдВрдЯреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ COCO (рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреЙрдорди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЗрди рдХреЙрдирдЯреЗрдХреНрд╕реНрдЯ) рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдХрд┐ 91 рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рдФрд░ 2,500,000 рдЫрд╡рд┐рдпрд╛рдВ рд╣реИрдВ! рдХрдИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд┐рдХрд╛рд╕ рдХреЗ 500 рдорд┐рд▓рд┐рдпрди рд╡рд░реНрд╖ рдирд╣реАрдВред

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

рдЫрд╡рд┐

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

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

рддреИрдпрд╛рд░ рдФрд░ рд╕рдВрдХреБрдЪрд┐рдд рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ (eval рдФрд░ train) рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдХрд╛ рд╡рд┐рд╡рд░рдг (рдЙрди рдкрд░ рдореМрдЬреВрдж рдмрдВрдбрд▓реЛрдВ рдХреЗ рд╕рд╛рде) рджреЛ рдкрд╛рдВрдбрд╛ рдбреЗрдЯрд╛ рдлреНрд░реЗрдо (train_df рдФрд░ eval_df) рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирддрд╛ рд╣реИ:


Tensorflow Object Detection API рд╕рд┐рд╕реНрдЯрдо рдХреЛ tfrecord рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдк рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдПрдХ рдХреЛрдб рдмрдирд╛ рджреЗрдВрдЧреЗ:

 def class_text_to_int(row_label):   if row_label == 'pack':       return 1   else:       None def split(df, group):   data = namedtuple('data', ['filename', 'object'])   gb = df.groupby(group)   return [data(filename, gb.get_group(x))           for filename, x in zip(gb.groups.keys(), gb.groups)] def create_tf_example(group, path):   with tf.gfile.GFile(os.path.join(path, '{}'.format(group.filename)), 'rb') as fid:       encoded_jpg = fid.read()   encoded_jpg_io = io.BytesIO(encoded_jpg)   image = Image.open(encoded_jpg_io)   width, height = image.size   filename = group.filename.encode('utf8')   image_format = b'jpg'   xmins = []   xmaxs = []   ymins = []   ymaxs = []   classes_text = []   classes = []   for index, row in group.object.iterrows():       xmins.append(row['xmin'] / width)       xmaxs.append(row['xmax'] / width)       ymins.append(row['ymin'] / height)       ymaxs.append(row['ymax'] / height)       classes_text.append(row['class'].encode('utf8'))       classes.append(class_text_to_int(row['class']))   tf_example = tf.train.Example(features=tf.train.Features(feature={       'image/height': dataset_util.int64_feature(height),       'image/width': dataset_util.int64_feature(width),       'image/filename': dataset_util.bytes_feature(filename),       'image/source_id': dataset_util.bytes_feature(filename),       'image/encoded': dataset_util.bytes_feature(encoded_jpg),       'image/format': dataset_util.bytes_feature(image_format),       'image/object/bbox/xmin': dataset_util.float_list_feature(xmins),       'image/object/bbox/xmax': dataset_util.float_list_feature(xmaxs),       'image/object/bbox/ymin': dataset_util.float_list_feature(ymins),       'image/object/bbox/ymax': dataset_util.float_list_feature(ymaxs),       'image/object/class/text': dataset_util.bytes_list_feature(classes_text),       'image/object/class/label': dataset_util.int64_list_feature(classes),   }))   return tf_example def convert_to_tf_records(images_path, examples, dst_file):   writer = tf.python_io.TFRecordWriter(dst_file)   grouped = split(examples, 'filename')   for group in grouped:       tf_example = create_tf_example(group, images_path)       writer.write(tf_example.SerializeToString())   writer.close() convert_to_tf_records(f'{cropped_path}train/', train_df, f'{detector_data_path}train.record') convert_to_tf_records(f'{cropped_path}eval/', eval_df, f'{detector_data_path}eval.record') 

рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:



рд╕рдВрд░рдЪрдирд╛ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд╛рддреЗ рд╣реИрдВред

рдбреЗрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╡реЗ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬреЛ рд╣рдордиреЗ tfrecords (train.record рдФрд░ eval.record) рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде pack.pbtxt рднреА рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╣рдо рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдмрд╣реБрдд рдЫреЛрдЯреА рд╣реИ:



Sdd_mobilenet_v1 рдЪрд╛рдЗрд▓реНрдб рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдореЙрдбрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдореЙрдбрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ) рдореЗрдВ .config рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛрддреА рд╣реИрдВ, рд╕рд╛рде рд╣реА рджреЛ рдЦрд╛рд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ: рдЯреНрд░реЗрди рдФрд░ рдИрд╡реИрд▓ред рдЯреНрд░реЗрди рдореЗрдВ, "рдЯреНрд░реЗрдирд░" рдореЙрдбрд▓ рдирд┐рдпрдВрддреНрд░рдг рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛, "рдореВрд▓реНрдпрд╛рдВрдХрдирдХрд░реНрддрд╛" рдЙрдиреНрд╣реЗрдВ рдЙрдард╛рдПрдЧрд╛, рдореВрд▓реНрдпрд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рдПрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ eval рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛ред Tensorboard рдЗрди рджреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦреЗрдЧрд╛ред

рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдЖрджрд┐ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдгред рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рдПрдкреАрдЖрдИ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдирд┐рд░реНрджреЗрд╢ рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

рд╣рдо рдореЙрдбрд▓ / рдЕрдиреБрд╕рдВрдзрд╛рди / object_detection рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХрд╛ рдмрдЪрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ:

 wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2017_11_17.tar.gz tar -xvzf ssd_mobilenet_v1_coco_2017_11_17.tar.gz 

рд╣рдо рд╡рд╣рд╛рдВ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ pack_detector рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░реЗрдВ:

 python3 train.py --logtostderr \   --train_dir=pack_detector/models/ssd_mobilenet_v1/train/ \   --pipeline_config_path=pack_detector/models/ssd_mobilenet_v1/ssd_mobilenet_v1_pack.config 

рд╣рдо рдореВрд▓реНрдпрд╛рдВрдХрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреВрд╕рд░рд╛ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ (рдирд┐рд░реНрджреЗрд╢ CUDA_VISIBLE_DEVICES = "" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ:

 CUDA_VISIBLE_DEVICES="" python3 eval.py \   --logtostderr \   --checkpoint_dir=pack_detector/models/ssd_mobilenet_v1/train \   --pipeline_config_path=pack_detector/models/ssd_mobilenet_v1/ssd_mobilenet_v1_pack.config \   --eval_dir=pack_detector/models/ssd_mobilenet_v1/eval 

рд╣рдо рдЯреЗрдВрд╕рд░рдмреЛрд░реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

 tensorboard --logdir=pack_detector/models/ssd_mobilenet_v1 

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рд╕реБрдВрджрд░ рд░реЗрдЦрд╛рдВрдХрди, рд╕рд╛рде рд╣реА рдЕрдиреБрдорд╛рдирд┐рдд рдбреЗрдЯрд╛ рдкрд░ рдореЙрдбрд▓ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рдо (рд╢реБрд░реБрдЖрдд рдореЗрдВ gif) рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:



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

 python3 export_inference_graph.py \   --input_type image_tensor \   --pipeline_config_path pack_detector/models/ssd_mobilenet_v1/ssd_mobilenet_v1_pack.config \   --trained_checkpoint_prefix pack_detector/models/ssd_mobilenet_v1/train/model.ckpt-13756 \   --output_directory pack_detector/models/ssd_mobilenet_v1/pack_detector_2018_06_03 

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

рдЪрд░рдг 4. рдЦреЛрдЬ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ ( рдЬреАрдердм рд▓рд┐рдВрдХ )

рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рдЗрдирд╡рд┐рдЬрд╝рди рдЧреНрд░рд╛рдл рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рд╣реИред рдореБрдЦреНрдп рдЦреЛрдЬ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

 # let's write function that executes detection def run_inference_for_single_image(image, image_tensor, sess, tensor_dict):   # Run inference   expanded_dims = np.expand_dims(image, 0)   output_dict = sess.run(tensor_dict, feed_dict={image_tensor: expanded_dims})   # all outputs are float32 numpy arrays, so convert types as appropriate   output_dict['num_detections'] = int(output_dict['num_detections'][0])   output_dict['detection_classes'] = output_dict['detection_classes'][0].astype(np.uint8)   output_dict['detection_boxes'] = output_dict['detection_boxes'][0]   output_dict['detection_scores'] = output_dict['detection_scores'][0]   return output_dict # it is useful to be able to run inference not only on the whole image, # but also on its parts # cutoff - minimum detection score needed to take box def run_inference_for_image_part(image_tensor, sess, tensor_dict,                                image, cutoff, ax0, ay0, ax1, ay1):   boxes = []   im = image[ay0:ay1, ax0:ax1]   h, w, c = im.shape   output_dict = run_inference_for_single_image(im, image_tensor, sess, tensor_dict)   for i in range(100):       if output_dict['detection_scores'][i] < cutoff:           break       y0, x0, y1, x1, score = *output_dict['detection_boxes'][i], \                               output_dict['detection_scores'][i]       x0, y0, x1, y1, score = int(x0*w), int(y0*h), \                               int(x1*w), int(y1*h), \                               int(score * 100)       boxes.append((x0+ax0, y0+ay0, x1+ax0, y1+ay0, score))   return boxes 

рдлрд╝рдВрдХреНрд╢рди рдкреВрд░реЗ рдлрд╝реЛрдЯреЛ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЙрд╕рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдкреИрдХ рдХреЗ рд▓рд┐рдП рдмрдВрдзреЗ рд╣реБрдП рдмрдХреНрд╕реЗ рдкрд╛рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХрдЯрдСрдл рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрдо рдкрд╣рдЪрд╛рди рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рдкрд╛рдП рдЧрдП рдЖрдпрддреЛрдВ рдХреЛ рднреА рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рджреБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИред рдПрдХ рддрд░рдл, рдЙрдЪреНрдЪ рдХрдЯрдСрдл рдХреЗ рд╕рд╛рде, рд╣рдо рдмрд╣реБрдд рд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ, рджреВрд╕рд░реА рддрд░рдл, рдХрдо рдХрдЯрдСрдл рдХреЗ рд╕рд╛рде, рд╣рдо рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдвреВрдВрдврдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдмрдВрдбрд▓ рдирд╣реАрдВ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рд╣рдо рдЕрднреА рднреА рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рдкрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдирд╣реАрдВ:

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рд╣рдо рдлреЛрдЯреЛ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рдиреНрдпрддрд╛ рдХрдЯрдСрдл = 0.9 рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рд╕рд╣реА рд╣реИред



рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ MobileNet V1 SSD рдореЙрдбрд▓ 300x300 рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрдХреЗрдд рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдпреЗ рд╕рдВрдХреЗрдд рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВ рдЕрдЧрд░ рд╣рдо рдПрдХ рдЫреЛрдЯреЗ рд╡рд░реНрдЧ рдХреЛ рдХрд╛рдЯрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдкреИрдХ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рд╡рд┐рдВрдбреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ: рд╣рдо рдПрдХ рддрд╕реНрд╡реАрд░ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рдЖрдпрдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдорд┐рд▓рд╛ рд╣реИ рдЙрд╕реЗ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред



: , . . : (detection score), , , overlapTresh ( ):

 # function for non-maximum suppression def non_max_suppression(boxes, overlapThresh):   if len(boxes) == 0:       return np.array([]).astype("int")   if boxes.dtype.kind == "i":       boxes = boxes.astype("float")   pick = []   x1 = boxes[:,0]   y1 = boxes[:,1]   x2 = boxes[:,2]   y2 = boxes[:,3]   sc = boxes[:,4]   area = (x2 - x1 + 1) * (y2 - y1 + 1)   idxs = np.argsort(sc)   while len(idxs) > 0:       last = len(idxs) - 1       i = idxs[last]       pick.append(i)       xx1 = np.maximum(x1[i], x1[idxs[:last]])       yy1 = np.maximum(y1[i], y1[idxs[:last]])       xx2 = np.minimum(x2[i], x2[idxs[:last]])       yy2 = np.minimum(y2[i], y2[idxs[:last]])       w = np.maximum(0, xx2 - xx1 + 1)       h = np.maximum(0, yy2 - yy1 + 1)       #todo fix overlap-contains...       overlap = (w * h) / area[idxs[:last]]              idxs = np.delete(idxs, np.concatenate(([last],           np.where(overlap > overlapThresh)[0])))     return boxes[pick].astype("int") 

:



:



, , .

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


┬л┬╗: , . , , .. .

, , :

  1. 150 , , ,
  2. 3-7 ,
  3. 100 ,
  4. ,
  5. (),
  6. (, ),
  7. , ┬л┬╗,
  8. , , (SSD ),
  9. , ,
  10. .

, , .

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


All Articles