YOLOv3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ iOS рдкрд░ рд░рд┐рдпрд▓-рдЯрд╛рдЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдорд╛рдиреНрдпрддрд╛


рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!

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

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

рд╡рд╕реНрддреБ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛


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

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

рдСрдмреНрдЬреЗрдХреНрдЯ рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реАрдПрдирдПрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░:

  • рдЖрд░-рд╕реАрдПрдирдПрдиред рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдореЙрдбрд▓ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдирд┐рдпрдорд┐рдд рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЫрд╡рд┐ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдирдкреБрдЯ рд╕реЗ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдмрд╣реБрдд рдзреАрдореА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЫрд╡рд┐ рдХреЛ рдХрдИ рд╣рдЬрд╛рд░ рдмрд╛рд░ рдЪрд▓рд╛рддрд╛ рд╣реИред
  • рдлрд╛рд╕реНрдЯ рдЖрд░-рд╕реАрдПрдирдПрдиред рдЖрд░-рд╕реАрдПрдирдПрди рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рдФрд░ рддреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг, рдПрдХ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдкреВрд░реА рдЫрд╡рд┐ рдХреЛ рд╕реАрдПрдирдПрди рдЗрдирдкреБрдЯ рд╕реЗ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдмрд╣реБрдд рдзреАрдореА рд╣реИред
  • рддреЗрдЬрд╝ рдЖрд░-рд╕реАрдПрдирдПрдиред рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЪрдпрдирд╛рддреНрдордХ рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ "рдЙрдиреНрд╣реЗрдВ" рдпрд╛рдж рд░рдЦрдирд╛ред
  • YOLOред рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдСрдкрд░реЗрд╢рди рдХрд╛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рддреЗрдЬред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
  • рдПрд╕рдПрд╕рдбреАред рдпрд╣ YOLO рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ VGG16 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рднреА рдмрд╣реБрдд рддреЗрдЬ рдФрд░ рдЙрдкрдпреБрдХреНрдд рд╣реИред
  • рдлрд╝реАрдЪрд░ рдкрд┐рд░рд╛рдорд┐рдб рдиреЗрдЯрд╡рд░реНрдХ (FPN)ред рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЬреИрд╕реЗ рдХрд┐ рд╕рд┐рдВрдЧрд▓ рд╢реЙрдЯ рдбрд┐рдЯреЗрдХреНрдЯрд░, рдлреАрдЪрд░ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдПрд╕рдПрд╕рдбреА рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдЫреЛрдЯреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИред
  • RetinaNetред рдпрд╣ FPN + ResNet рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░, рдПрдХ рд╡рд┐рд╢реЗрд╖ рддреНрд░реБрдЯрд┐ рдлрд╝рдВрдХреНрд╢рди (рдлреЛрдХрд▓ рд▓реЙрд╕) рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрдХ рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рджреЗрддрд╛ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдпреЛрд▓реЛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН рдЗрд╕рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╢реЛрдзрди, рдпреЛрд▓реЛрд╡ рейред

рдХреНрдпреЛрдВ YOLO?




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

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

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкреВрд░реА рдЫрд╡рд┐ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рджреМрд░рд╛рди рд╕рдВрджрд░реНрдн рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред YOLO рднреА R-CNN рд╕реЗ 1000 рдЧреБрдирд╛ рддреЗрдЬрд╝ рд╣реИ рдФрд░ Fast R-CNN рд╕реЗ рд▓рдЧрднрдЧ 100 рдЧреБрдирд╛ рддреЗрдЬрд╝ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдСрдирд▓рд╛рдЗрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧреБрдг рд╣реИред

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ ред

YOLOv3


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



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

рд╣рдо рд╡рд╕реНрддреБ рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ


рдордЬрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ!

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

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдо рдПрдХ рддреИрдпрд╛рд░ рдиреЗрдЯрд╡рд░реНрдХ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рддрд░рд╛рдЬреВ рдХреЛ рдПрдХ COCO рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ 80 рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдиреНрдпреВрд░реЙрди 80 рд╡рд┐рднрд┐рдиреНрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

Darknet рд╕реЗ CoreML рддрдХ


рдореВрд▓ YOLOv3 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдбрд╛рд░реНрдХрдиреЗрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

IOS рдкрд░, рд╕рдВрд╕реНрдХрд░рдг 11.0 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рдПрдХ рдЕрджреНрднреБрдд CoreML рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбрд▓ рдХреЛ рд╕реАрдзреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рд╕реАрдорд╛ рд╣реИ: рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗрд╡рд▓ iOS 11 рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ CoreML рдХреЗрд╡рд▓ .coreml рдореЙрдбрд▓ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╕рдордЭрддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЯреЗрдирд╕рдлрд╝реНрд▓реЛ, рдХреЗрд░рд╕ рдпрд╛ рдПрдХреНрд╕рдЬреАрдмреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП, рд╕реАрдзреЗ рдХреЛрд░рдПрдордПрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд▓реЗрдХрд┐рди рдбрд╛рд░реНрдХрдиреЗрдЯ рдХреЗ рд▓рд┐рдП рдРрд╕реА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред Darknet рд╕реЗ CoreML рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЧрдП рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Darknet рдХреЛ ONNX рдкрд░ рд╕рд╣реЗрдЬреЗрдВ , рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ ONNX рд╕реЗ CoreML рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред

рд╣рдо рдПрдХ рд╕рд░рд▓ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╣рдо YOLOv3 рдХреЗ Keras рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдПрдХреНрд╢рди рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдпрд╣ рд╣реИ: рдбрд╛рд░реНрдХрдиреЗрдЯ рд╡реЗрдЯреНрд╕ рдХреЛ рдХреЗрд░рд╕ рдореЙрдбрд▓ рдореЗрдВ рд▓реЛрдб рдХрд░реЗрдВ, рдЗрд╕реЗ рдХреЗрд░рд╕ рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд╕реЗрд╡ рдХрд░реЗрдВ рдФрд░ рд╕реАрдзреЗ рдЗрд╕реЗ рдХреЛрд░рдПрдордПрд▓ рд╕реЗ рдЗрд╕реЗ рдХрдиреНрд╡рд░реНрдЯ рдХрд░реЗрдВред

  1. рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдбрд╛рд░реНрдХрдиреЗрдЯред рдпрд╣рд╛рдВ рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд Darknet-YOLOv3 рдореЙрдбрд▓ рдХреА рдлрд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рджреЛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛: YOLOv3-416 рдФрд░ YOLOv3- рдЫреЛрдЯреЗред рд╣рдо рджреЛрдиреЛрдВ cfg рдФрд░ рд╡рдЬрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
  2. рдбрд╛рд░реНрдХрдиреЗрдЯ рд╕реЗ рд▓реЗрдХрд░ рдХреЗрд░реЗрд╕ рддрдХред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ, рд░реЗрдкреЛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдПрдВ рдФрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

    python convert.py yolov3.cfg yolov3.weights yolo.h5 

    рдЬрд╣рд╛рдВ yolov3.cfg рдФрд░ yolov3.weights рдиреЗ Darknet рдлрд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╣реИрдВред рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред 5 - рдпрд╣ рдХреЗрдЖрд░рдПрдПрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреА рдЧрдИ YOLOv3 рдореЙрдбрд▓ рд╣реИред
  3. рдХрд░реЗрд╕ рд╕реЗ рдХреЛрд░рдорд▓ рддрдХред рдЖрдЦрд┐рд░реА рдЪрд░рдг рдмрдирд╛ рд░рд╣рд╛ред рдореЙрдбрд▓ рдХреЛ CoreML рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рдХреЙрд░рдореНрд╕реНрдЯреВрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛):

     import coremltools coreml_model = coremltools.converters.keras.convert( 'yolo.h5', input_names='image', image_input_names='image', input_name_shape_dict={'image': [None, 416, 416, 3]}, #      image_scale=1/255.) coreml_model.input_description['image'] = 'Input image' coreml_model.save('yolo.mlmodel') 

рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЪрд░рдгреЛрдВ рдХреЛ рджреЛ рдореЙрдбрд▓ YOLOv3-416 рдФрд░ YOLOv3- рдЫреЛрдЯреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬрдм рд╣рдордиреЗ рдпрд╣ рд╕рдм рдХрд┐рдпрд╛, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ: yolo.mlmodel рдФрд░ yolo-small.mlmodelред рдЕрдм рдЖрдк рдЖрд╡реЗрджрди рдХрд╛ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

IOS рдРрдк рдмрдирд╛рдирд╛


рдореИрдВрдиреЗ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рд▓рд┐рдВрдХ рдЬрд┐рд╕реЗ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣рдиреЗ рджреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди UIViewController-a: OnlineViewController, PhotoViewController рдФрд░ SettingsViewController рд╣реИрдВред рдкрд╣рд▓рд╛ рдХреИрдорд░рд╛ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдСрдирд▓рд╛рдЗрди рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИред рджреВрд╕рд░реЗ рдореЗрдВ, рдЖрдк рдПрдХ рддрд╕реНрд╡реАрд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЧреИрд▓рд░реА рд╕реЗ рдПрдХ рддрд╕реНрд╡реАрд░ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрди рдЪрд┐рддреНрд░реЛрдВ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреАрд╕рд░реЗ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ, рдЖрдк YOLOv3-416 рдпрд╛ YOLOv3- рдЫреЛрдЯреЗ рдореЙрдбрд▓ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдереНрд░реЗрд╕рд╣реЛрд▓реНрдб IoU (рдпреВрдирд┐рдпрди рдкрд░ рдЪреМрд░рд╛рд╣рд╛) рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ (рд╡рд░реНрддрдорд╛рди рдЫрд╡рд┐ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛) рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

CoreML рдореЗрдВ рд▓реЛрдб рд╣реЛ рд░рд╣реЗ рдореЙрдбрд▓

рд╣рдордиреЗ рдбрд╛рд░реНрдХрдиреЗрдЯ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХреЛ CoreML рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди .mlmodel рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдХреНрд░рдорд╢рдГ YOLOv3-416 рдФрд░ YOLOv3- рдЫреЛрдЯреЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдИрдВ : yolo.mlmodel рдФрд░ yolo-small.mlmodel ред рдЕрдм рдЖрдк рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ Xcode рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

  private func loadModel(type: YOLOType) { do { self.model = try YOLO(type: type) } catch { assertionFailure("error creating model") } } 

YOLO рд╡рд░реНрдЧ рд╕реАрдзреЗ .mlmodel рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдореЙрдбрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдбрд╛рдЙрдирд▓реЛрдб рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓реЗрдВ:

  var url: URL? = nil self.type = type switch type { case .v3_Tiny: url = Bundle.main.url(forResource: "yolo-tiny", withExtension:"mlmodelc") self.anchors = tiny_anchors case .v3_416: url = Bundle.main.url(forResource: "yolo", withExtension:"mlmodelc") self.anchors = anchors_416 } guard let modelURL = url else { throw YOLOError.modelFileNotFound } do { model = try MLModel(contentsOf: modelURL) } catch let error { print(error) throw YOLOError.modelCreationError } 

рдкреВрд░реНрдг ModelProvider рдХреЛрдбред
 import UIKit import CoreML protocol ModelProviderDelegate: class { func show(predictions: [YOLO.Prediction]?, stat: ModelProvider.Statistics, error: YOLOError?) } @available(macOS 10.13, iOS 11.0, tvOS 11.0, watchOS 4.0, *) class ModelProvider { struct Statistics { var timeForFrame: Float var fps: Float } static let shared = ModelProvider(modelType: Settings.shared.modelType) var model: YOLO! weak var delegate: ModelProviderDelegate? var predicted = 0 var timeOfFirstFrameInSecond = CACurrentMediaTime() init(modelType type: YOLOType) { loadModel(type: type) } func reloadModel(type: YOLOType) { loadModel(type: type) } private func loadModel(type: YOLOType) { do { self.model = try YOLO(type: type) } catch { assertionFailure("error creating model") } } func predict(frame: UIImage) { DispatchQueue.global().async { do { let startTime = CACurrentMediaTime() let predictions = try self.model.predict(frame: frame) let elapsed = CACurrentMediaTime() - startTime self.showResultOnMain(predictions: predictions, elapsed: Float(elapsed), error: nil) } catch let error as YOLOError { self.showResultOnMain(predictions: nil, elapsed: -1, error: error) } catch { self.showResultOnMain(predictions: nil, elapsed: -1, error: YOLOError.unknownError) } } } private func showResultOnMain(predictions: [YOLO.Prediction]?, elapsed: Float, error: YOLOError?) { if let delegate = self.delegate { DispatchQueue.main.async { let fps = self.measureFPS() delegate.show(predictions: predictions, stat: ModelProvider.Statistics(timeForFrame: elapsed, fps: fps), error: error) } } } private func measureFPS() -> Float { predicted += 1 let elapsed = CACurrentMediaTime() - timeOfFirstFrameInSecond let currentFPSDelivered = Double(predicted) / elapsed if elapsed > 1 { predicted = 0 timeOfFirstFrameInSecond = CACurrentMediaTime() } return Float(currentFPSDelivered) } } 


рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг

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


рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдВ рдФрд░ YOLOv3- рдЫреЛрдЯреЗ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВред


рдкреНрд░рд╡реЗрд╢ рдФрд░ YOLOv3-416 рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рдХреА рдЫрд╡рд┐ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ YOLOv3-416 рдХреЗ рд▓рд┐рдП рддреАрди рдФрд░ YOLOv3- рдЫреЛрдЯреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рджреЛ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдЧрдИ рд╣реИред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рд░рдгреА рд╣реИ, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред

YOLOv3 рдореЙрдбрд▓ рдПрдХ рдЕрд▓рдЧ рдЧреНрд░рд┐рдб рдореЗрдВ рдЫрд╡рд┐ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рддреАрди рдкрд░рддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрди рдЧреНрд░рд┐рдбреЛрдВ рдХреЗ рд╕реЗрд▓ рдЖрдХрд╛рд░ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рди рд╣реИрдВ: 8, 16 рдФрд░ 32. рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдХрд╛рд░ рдореЗрдВ 416x416 рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдЫрд╡рд┐ рд╣реИ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ (рдЧреНрд░рд┐рдб) рдХрд╛ рдЖрдХрд╛рд░ 52x5252 рд╣реЛрдЧрд╛ , 26x26 рдФрд░ 13x13 (416/8 = 52, 416/16 = 26 рдФрд░ 416/32 = 13)ред YOLOv3- рдЫреЛрдЯреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рддреАрди рдЧреНрд░рд┐рдбреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ: 16 рдФрд░ 32 рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, 26x26 рдФрд░ 13x13 рдЖрдпрд╛рдореЛрдВ рдХреЗ рдореИрдЯреНрд░реЗрд╕ рд╣реИрдВред

рд▓реЛрдб рдХрд┐рдП рдЧрдП CoreML рдореЙрдбрд▓ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ MLMultiArray рд╡рд░реНрдЧ рдХреА рджреЛ (рдпрд╛ рддреАрди) рд╡рд╕реНрддреБрдПрдВ рдорд┐рд▓рддреА рд╣реИрдВред рдФрд░ рдпрджрд┐ рдЖрдк рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рджреЗрдЦреЗрдВрдЧреЗ (YOLOv3- рдЫреЛрдЯреЗ рдХреЗ рд▓рд┐рдП):

[1,1,255,26,26][1,1,255,13,13]


рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЖрдпрд╛рдо 26x26 рдФрд░ 13x13 рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рд╕рдВрдЦреНрдпрд╛ 255 рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛? рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдпрд░ 52x52, 26x26 рдФрд░ 13x13 рдореИрдЯреНрд░рд┐рд╕реЗрд╕ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рд╡реЗрдХреНрдЯрд░ рд╣реИред рдпрд╣реА рд╣реИ, рдЖрдЙрдЯрдкреБрдЯ рдкрд░рдд рдПрдХ рддреАрди-рдЖрдпрд╛рдореА рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИред рдЗрд╕ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдЖрдпрд╛рдо B x (5 + C) рд╣реИ, рдЬрд╣рд╛рдВ B рд╕реЗрд▓ рдореЗрдВ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, C рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред 5 рдирдВрдмрд░ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИ? рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдмреЙрдХреНрд╕-рдП рдХреЗ рд▓рд┐рдП, рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡рд╕реНрддреБ (рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕) рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдЧрдИ рд╣реИ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдФрд░ рд╢реЗрд╖ рдЪрд╛рд░ рдЕрдиреБрдорд╛рдирд┐рдд рдмреЙрдХреНрд╕-рдП рдХреЗ рд▓рд┐рдП x, y, рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЖрдВрдХрдбрд╝рд╛ рдЗрд╕ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдПрдХ рдпреЛрдЬрдирд╛рдмрджреНрдз рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ:


рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдпрд░ (рдлреАрдЪрд░ рдореИрдк) рдХрд╛ рдпреЛрдЬрдирд╛рдмрджреНрдз рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред

80 рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╣рдорд╛рд░реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП, 3 рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕-рдП рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рдЧреНрд░рд┐рдб рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдЧрдИ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП - 80 рд╡рд░реНрдЧ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ + рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ + рдЗрд╕ рдмреЙрдХреНрд╕-рдП рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ 4 рдирдВрдмрд░ред рдХреБрд▓: 3 x (5 + 80) = 255

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

  let pointer = UnsafeMutablePointer<Double>(OpaquePointer(out.dataPointer)) //    if out.strides.count < 3 { throw YOLOError.strideOutOfBounds } let channelStride = out.strides[out.strides.count-3].intValue let yStride = out.strides[out.strides.count-2].intValue let xStride = out.strides[out.strides.count-1].intValue func offset(ch: Int, x: Int, y: Int) -> Int { //     return ch * channelStride + y * yStride + x * xStride } 

рдЕрдм рдЖрдкрдХреЛ 255 рддрддреНрд╡реЛрдВ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ 80 рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рд╡рд┐рддрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдк рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ рдХреНрдпрд╛ рд╣реИ
рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЛ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ  mathbbx рдЖрдпрд╛рдо K, рдПрдХ рд╣реА рдЖрдпрд╛рдо рдХреЗ рдПрдХ рд╕рджрд┐рд╢ рдореЗрдВ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдордиреНрд╡рдп рдХрд░рддреЗ рд╣реИрдВ  mathbbxi рдкрд░рд┐рдгрд╛рдореА рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ [0,1] рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдпреЛрдЧ 1 рд╣реИред

 рд╕рд┐рдЧреНрдорд╛( mathbbx)i= fracexi sumKk=1exk

рд╕рд┐рдЧреНрдорд╛

рдЬрд╣рд╛рдВ K рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЖрдпрд╛рдо рд╣реИред

рд╕реНрд╡рд┐рдлреНрдЯ рдкрд░ рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди:

  private func softmax(_ x: inout [Float]) { let len = vDSP_Length(x.count) var count = Int32(x.count) vvexpf(&x, x, &count) var sum: Float = 0 vDSP_sve(x, 1, &sum, len) vDSP_vsdiv(x, 1, &sum, &x, 1, len) } 

рдмрд╛рдЙрдВрдбрд┐рдВрдЧ-рдП рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рдЖрдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

x= sigma( hatx)+cxy= sigma( haty)+cyw=pwe hatwh=phehathh


рдЬрд╣рд╛рдБ  рд╣x, рд╣рдпрдЯ, рд╣рд╡реЙрдЯ, рд╣реИрдЯрд╣рд╣рд╣рдпрдЯрд╣рд╡реЙрдЯрд╣реИрдЯрд╣ - рдЕрдиреБрдорд╛рдирд┐рдд x, y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдХреНрд░рдорд╢рдГ,  рд╕рд┐рдЧреНрдорд╛(x)рд╕рд┐рдЧреНрдорд╛ рд╕рд┐рдЧреНрдореЙрдЗрдб рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдФрд░ pw,ph - рддреАрди рдмрдХреНрд╕реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдВрдЧрд░ (рд▓рдВрдЧрд░) рдХрд╛ рдорд╛рдиред рдпреЗ рдорд╛рди рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ Helpers.swift рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:

 let anchors1: [Float] = [116,90, 156,198, 373,326] //     let anchors2: [Float] = [30,61, 62,45, 59,119] //     let anchors3: [Float] = [10,13, 16,30, 33,23] //     


рдПрдХ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд╛ рдпреЛрдЬрдирд╛рдмрджреНрдз рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред

рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдпрд░реНрд╕ рдХреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреВрд░рд╛ рдХреЛрдбред
  private func process(output out: MLMultiArray, name: String) throws -> [Prediction] { var predictions = [Prediction]() let grid = out.shape[out.shape.count-1].intValue let gridSize = YOLO.inputSize / Float(grid) let classesCount = labels.count print(out.shape) let pointer = UnsafeMutablePointer<Double>(OpaquePointer(out.dataPointer)) if out.strides.count < 3 { throw YOLOError.strideOutOfBounds } let channelStride = out.strides[out.strides.count-3].intValue let yStride = out.strides[out.strides.count-2].intValue let xStride = out.strides[out.strides.count-1].intValue func offset(ch: Int, x: Int, y: Int) -> Int { return ch * channelStride + y * yStride + x * xStride } for x in 0 ..< grid { for y in 0 ..< grid { for box_i in 0 ..< YOLO.boxesPerCell { let boxOffset = box_i * (classesCount + 5) let bbx = Float(pointer[offset(ch: boxOffset, x: x, y: y)]) let bby = Float(pointer[offset(ch: boxOffset + 1, x: x, y: y)]) let bbw = Float(pointer[offset(ch: boxOffset + 2, x: x, y: y)]) let bbh = Float(pointer[offset(ch: boxOffset + 3, x: x, y: y)]) let confidence = sigmoid(Float(pointer[offset(ch: boxOffset + 4, x: x, y: y)])) if confidence < confidenceThreshold { continue } let x_pos = (sigmoid(bbx) + Float(x)) * gridSize let y_pos = (sigmoid(bby) + Float(y)) * gridSize let width = exp(bbw) * self.anchors[name]![2 * box_i] let height = exp(bbh) * self.anchors[name]![2 * box_i + 1] for c in 0 ..< 80 { classes[c] = Float(pointer[offset(ch: boxOffset + 5 + c, x: x, y: y)]) } softmax(&classes) let (detectedClass, bestClassScore) = argmax(classes) let confidenceInClass = bestClassScore * confidence if confidenceInClass < confidenceThreshold { continue } predictions.append(Prediction(classIndex: detectedClass, score: confidenceInClass, rect: CGRect(x: CGFloat(x_pos - width / 2), y: CGFloat(y_pos - height / 2), width: CGFloat(width), height: CGFloat(height)))) } } } return predictions } 


рдЧреИрд░ рдЕрдзрд┐рдХрддрдо рджрдорди

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

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

  1. рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЙрдЪреНрдЪрддрдо рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд╛рд▓реЗ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
  2. рд╣рдо рд╕рднреА рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╡рд╕реНрддреБ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред
  3. рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ рдпрджрд┐ рдкрд╣рд▓реЗ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдШ (IoU) рдкрд░ рдЕрдВрддрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред

IoU рдХреА рдЧрдгрдирд╛ рдПрдХ рд╕рд░рд▓ рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛рддреА рд╣реИ:

 textIoU= frac textрдЕрдВрддрдГрдХреНрд╖реЗрддреНрд░рдХреНрд╖реЗрддреНрд░ textрдПрд╕реЛрд╕рд┐рдПрд╢рдирдХреНрд╖реЗрддреНрд░

рдЕрдВрддрдГрдХреНрд╖реЗрддреНрд░рдХреНрд╖реЗрддреНрд░рдПрд╕реЛрд╕рд┐рдПрд╢рдирдХреНрд╖реЗрддреНрд░
IoU рдХреА рдЧрдгрдирд╛ред
  static func IOU(a: CGRect, b: CGRect) -> Float { let areaA = a.width * a.height if areaA <= 0 { return 0 } let areaB = b.width * b.height if areaB <= 0 { return 0 } let intersection = a.intersection(b) let intersectionArea = intersection.width * intersection.height return Float(intersectionArea / (areaA + areaB - intersectionArea)) } 


рдЧреИрд░ рдЕрдзрд┐рдХрддрдо рджрдордиред
  private func nonMaxSuppression(boxes: inout [Prediction], threshold: Float) { var i = 0 while i < boxes.count { var j = i + 1 while j < boxes.count { let iou = YOLO.IOU(a: boxes[i].rect, b: boxes[j].rect) if iou > threshold { if boxes[i].score > boxes[j].score { if boxes[i].classIndex == boxes[j].classIndex { boxes.remove(at: j) } else { j += 1 } } else { if boxes[i].classIndex == boxes[j].classIndex { boxes.remove(at: i) j = i + 1 } else { j += 1 } } } else { j += 1 } } i += 1 } } 


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

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдСрдирд▓рд╛рдЗрди рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рдХрд╛ рдереЛрдбрд╝рд╛ рдЪреМрд░рд╕рд╛рдИ рдХрд┐рдпрд╛, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдкрд┐рдЫрд▓реЗ 30 рдлрд╝реНрд░реЗрдореЛрдВ рдореЗрдВ рдЕрдиреБрдорд╛рдирд┐рдд рд╡рд░реНрдЧ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЖрдХрд╛рд░ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдФрд╕рдд рд╣реИред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг


рдЕрдм рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рддреАрди рд╡реНрдпреВрдХрдВрдЯреНрд░реЛрд▓рд░ рд╣реИрдВ, рдПрдХ рдлреЛрдЯреЛ рдпрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдСрдирд▓рд╛рдЗрди рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рддреАрд╕рд░рд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рддреАрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдЖрдк рджреЛ рдореЗрдВ рд╕реЗ рдПрдХ рдореЙрдбрд▓ YOLOv3- рд╕реНрдорд╛рд▓ рдпрд╛ YOLOv3-416 рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ рдереНрд░реЗрд╢реЛрд▓реНрдб рдФрд░ IoU рдереНрд░реЗрд╢реЛрд▓реНрдб рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдСрдирд▓рд╛рдЗрди рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рдХреЛ рдЗрдиреЗрдмрд▓ рдпрд╛ рдбрд┐рд╕реЗрдмрд▓ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


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


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

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд YOLOv3-416 рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐, YOLOv3- рдЫреЛрдЯреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдлрд╝реНрд░реЗрдо рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИрдВ, рд╕рд╛рде рд╣реА рдЫрд╡рд┐ рдореЗрдВ рдЫреЛрдЯреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдорд╛рдиреНрдпрддрд╛ рджреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рддреАрд╕рд░реА рдЖрдЙрдЯрдкреБрдЯ рдкрд░рдд рдХреЗ рдХрд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред


YOLOv3-416 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫрд╡рд┐ рд╕рдВрд╕рд╛рдзрд┐рдд рдХреА рдЧрдИред

рдЬрдм рдСрдирд▓рд╛рдЗрди рдСрдкрд░реЗрд╢рди рдореЛрдб рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рдЧрдИ рдереА, iPhone XS рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдереЗ, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рджреЛрдиреЛрдВ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рдерд╛ред YOLOv3- рдЫреЛрдЯреЗ 23 - 25 рдПрдлрдкреАрдПрд╕ рд╕реЗ 30 - 32 рдПрдлрдкреАрдПрд╕, YOLOv3-416 - рдХрд╛ рдФрд╕рдд рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдЬрд┐рд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд╡рд╣ рдХрд╛рдлреА рдЙрддреНрдкрд╛рджрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рдХреЗ рдореЙрдбрд▓ рдкрд░ рдкрд░рд┐рдгрд╛рдо рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдпреЛрд▓реЛрд╡ 3-рдЫреЛрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ: yolo-рдЫреЛрдЯреЗ.mlmodel (YOLOv3- рдЫреЛрдЯреЗ) рдореЗрдВ рд▓рдЧрднрдЧ 35 рдПрдордмреА рд▓рдЧрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ yolo.mlmodel (YOLOv3 -16) рдХрд╛ рд╡рдЬрди рд▓рдЧрднрдЧ 250 рдПрдордмреА рд╣реИ, рдЬреЛ рдПрдХ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИред

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


рдирддреАрдЬрддрди, рдПрдХ iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдорджрдж рд╕реЗ рдЫрд╡рд┐ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХрддреЗ рд╣реИрдВред рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХреЛрд░рдПрдордПрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ (рд╡реИрд╕реЗ, рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдСрдмреНрдЬреЗрдХреНрдЯ рдорд╛рдиреНрдпрддрд╛ рд╕рдорд╕реНрдпрд╛ YOLOv3 рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХреА рдЧрдИ рдереАред IPhone XS рдкрд░, рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ (YOLOv3-small) ~ 30 рдлреНрд░реЗрдо рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдкреВрд░рд╛ рдЖрд╡реЗрджрди рдХреЛрдб GitHub рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

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


All Articles