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

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

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

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рднрдВрдбрд╛рд░ рд╕реЗ рдШрдЯрдХреЛрдВ (1), (2) рдФрд░ (3) рдХреЛ рд▓реЗ
рдЬрд╛рдКрдВрдЧрд╛ , рдЬрд┐рд╕рдореЗрдВ рд╕рдмрд╕реЗ рд╣рд▓реНрдХрд╛ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ - рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг рд▓реЛрдХрдкреНрд░рд┐рдп
TensorFlow рдврд╛рдВрдЪреЗ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЪрдпрдирд┐рдд рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдкреВрд░реНрд╡ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рднрд╛рд░ (4) рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╡реЗ рд╢рд╛рд╕реНрддреНрд░реАрдп рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдВред рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛рд╕реЗрдЯ (5) рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ
рдлрд╝реВрдб -резреж рд▓реЗ рд▓реВрдВрдЧрд╛ред
рдЖрджрд░реНрд╢
рдПрдХ рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдХреНрд▓рд╛рд╕рд┐рдХ
рд╡реАрдЬреАрдЬреА рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ,
рд╡реАрдЬреАрдЬреА 19 ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХреБрдЫ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рдореЙрдбрд▓ рдХрд╛рдлреА рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред TensorFlow рд╕реНрд▓рд┐рдо рдкрд░, рдореЙрдбрд▓ рд╡рд┐рд╡рд░рдг рдХрд╛рдлреА рдХреЙрдореНрдкреИрдХреНрдЯ рджрд┐рдЦрддрд╛ рд╣реИ:
import tensorflow as tf import tensorflow.contrib.slim as slim def vgg_19(inputs, num_classes, is_training, scope='vgg_19', weight_decay=0.0005): with slim.arg_scope([slim.conv2d], activation_fn=tf.nn.relu, weights_regularizer=slim.l2_regularizer(weight_decay), biases_initializer=tf.zeros_initializer(), padding='SAME'): with tf.variable_scope(scope, 'vgg_19', [inputs]): net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1') net = slim.max_pool2d(net, [2, 2], scope='pool1') net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2') net = slim.max_pool2d(net, [2, 2], scope='pool2') net = slim.repeat(net, 4, slim.conv2d, 256, [3, 3], scope='conv3') net = slim.max_pool2d(net, [2, 2], scope='pool3') net = slim.repeat(net, 4, slim.conv2d, 512, [3, 3], scope='conv4') net = slim.max_pool2d(net, [2, 2], scope='pool4') net = slim.repeat(net, 4, slim.conv2d, 512, [3, 3], scope='conv5') net = slim.max_pool2d(net, [2, 2], scope='pool5')
рдЗрдореЗрдЬрдиреЗрдЯ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╡реАрдЬреАрдЬреА 19 рдХреЗ рд▓рд┐рдП рд╡реЗрдЯ рдФрд░ рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд,
рдкреНрд░реА-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рд╕реЗрдХреНрд╢рди рд╕реЗ рдЧрд┐рдЯрд╣рдм рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
mkdir data && cd data wget http://download.tensorflow.org/models/vgg_19_2016_08_28.tar.gz tar -xzf vgg_19_2016_08_28.tar.gz
рдбрд╛рдЯрд╛рд╕реЗрдЯ
рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рд╕рддреНрдпрд╛рдкрди рдирдореВрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ
рдЦрд╛рджреНрдп -резрежрез рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ резреж рд╣рдЬрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдЦрд╛рджреНрдп рдЪрд┐рддреНрд░ рд╣реИрдВ, рдЬреЛ резрежрез рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИрдВред

рдбреЗрдЯрд╛рд╕реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЕрдирдкреИрдХ рдХрд░реЗрдВ:
cd data wget http://data.vision.ee.ethz.ch/cvl/food-101.tar.gz tar -xzf food-101.tar.gz
рд╣рдорд╛рд░реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЗрдВ рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕реЗ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рд╡рд░реНрдЧреЛрдВ рдХреА рд╕реВрдЪреА (рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ)
- рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓: рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддреЛрдВ рдХреА рд╕реВрдЪреА рдФрд░ рд╕рд╣реА рдЙрддреНрддрд░реЛрдВ рдХреА рд╕реВрдЪреА
- рд╕рддреНрдпрд╛рдкрди рд╕реЗрдЯ: рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддреЛрдВ рдХреА рд╕реВрдЪреА рдФрд░ рд╕рд╣реА рдЙрддреНрддрд░реЛрдВ рдХреА рд╕реВрдЪреА
рдпрджрд┐ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ, рддреЛ
рдЯреНрд░реЗрди рдФрд░
рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕реЗрдЯ рдХреЛ рд╕реНрд╡рдпрдВ рддреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд╝реВрдб -резреж рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рд╡рд┐рднрд╛рдЬрди рд╣реИ, рдФрд░ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА
meta
рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред
DATASET_ROOT = 'data/food-101/' train_data, val_data, classes = data.food101(DATASET_ROOT) num_classes = len(classes)
рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╕рднреА рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдПрдХ рдЕрд▓рдЧ
data.py
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
data.py from os.path import join as opj import tensorflow as tf def parse_ds_subset(img_root, list_fpath, classes): ''' Parse a meta file with image paths and labels -> img_root: path to the root of image folders -> list_fpath: path to the file with the list (eg train.txt) -> classes: list of class names <- (list_of_img_paths, integer_labels) ''' fpaths = [] labels = [] with open(list_fpath, 'r') as f: for line in f: class_name, image_id = line.strip().split('/') fpaths.append(opj(img_root, class_name, image_id+'.jpg')) labels.append(classes.index(class_name)) return fpaths, labels def food101(dataset_root): ''' Get lists of train and validation examples for Food-101 dataset -> dataset_root: root of the Food-101 dataset <- ((train_fpaths, train_labels), (val_fpaths, val_labels), classes) ''' img_root = opj(dataset_root, 'images') train_list_fpath = opj(dataset_root, 'meta', 'train.txt') test_list_fpath = opj(dataset_root, 'meta', 'test.txt') classes_list_fpath = opj(dataset_root, 'meta', 'classes.txt') with open(classes_list_fpath, 'r') as f: classes = [line.strip() for line in f] train_data = parse_ds_subset(img_root, train_list_fpath, classes) val_data = parse_ds_subset(img_root, test_list_fpath, classes) return train_data, val_data, classes def imread_and_crop(fpath, inp_size, margin=0, random_crop=False): ''' Construct TF graph for image preparation: Read the file, crop and resize -> fpath: path to the JPEG image file (TF node) -> inp_size: size of the network input (eg 224) -> margin: cropping margin -> random_crop: perform random crop or central crop <- prepared image (TF node) ''' data = tf.read_file(fpath) img = tf.image.decode_jpeg(data, channels=3) img = tf.image.convert_image_dtype(img, dtype=tf.float32) shape = tf.shape(img) crop_size = tf.minimum(shape[0], shape[1]) - 2 * margin if random_crop: img = tf.random_crop(img, (crop_size, crop_size, 3)) else:
рдореЙрдбрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг
рдореЙрдбрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЛрдб рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:
- рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдЯреНрд░реЗрди / рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди
- рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдЯреНрд░реЗрди / рд╕рддреНрдпрд╛рдкрди рдЧреНрд░рд╛рдл (рдиреЗрдЯрд╡рд░реНрдХ)
- рдЯреНрд░реЗрди рдЧреНрд░рд╛рдл рдкрд░ рдиреБрдХрд╕рд╛рди рдХреЗ рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдорд╛рд░реЛрд╣ ( рдХреНрд░реЙрд╕ рдПрдиреНрдЯреНрд░рд╛рдкреА рд▓реЙрд╕ ) рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛
- рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рд╕рддреНрдпрд╛рдкрди рдирдореВрдиреЗ рдкрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпреЛрдВ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб
- рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕реЗ рдкреВрд░реНрд╡ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рддрд░рд╛рдЬреВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ
- рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
- рд╕реНрд╡рдпрдВ рд╕реАрдЦрдиреЗ рдХрд╛ рдЪрдХреНрд░ (рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЕрдиреБрдХреВрд▓рди)
рдЧреНрд░рд╛рдл рдХреА рдЕрдВрддрд┐рдо рдкрд░рдд рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдиреНрдпреВрд░реЙрдиреНрд╕ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдореЙрдбрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЛрдб import numpy as np import tensorflow as tf import tensorflow.contrib.slim as slim tf.logging.set_verbosity(tf.logging.INFO) import model import data
рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк TensorBoard рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ TensorFlow рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдЕрдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
tensorboard --logdir checkpoints/
TensorBoard рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдПрдХ рд▓рдЧрднрдЧ рд╕рд╣реА рддрд╕реНрд╡реАрд░ рджреЗрдЦрддреЗ рд╣реИрдВ:
рдЯреНрд░реЗрди рдХреА рдХрдореА рдореЗрдВ
рдХрдореА рдФрд░ рд╡реИрдзрддрд╛
рд╕рдЯреАрдХрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐

рдирддреАрдЬрддрди, рд╣рдореЗрдВ
checkpoints/vgg19_food
рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╕реНрдиреИрдкрд╢реЙрдЯ
checkpoints/vgg19_food
, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ (
checkpoints/vgg19_food
рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдХрд░реЗрдВрдЧреЗред
рдореЙрдбрд▓ рдкрд░реАрдХреНрд╖рдг
рдЕрдм рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
- рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдиреБрдорд╛рди рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдирдпрд╛ рдЧреНрд░рд╛рдл
is_training=False
( is_training=False
) - рдПрдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕реЗ рднрд╛рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рднрд╛рд░
- рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЗрдирдкреБрдЯ рдкрд░реАрдХреНрд╖рдг рдЫрд╡рд┐ рдХреЛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдВред
- рдЪрд▓реЛ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЫрд╡рд┐ рдХреЛ рдбреНрд░рд╛рдЗрд╡ рдХрд░реЗрдВ рдФрд░ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
inference.py import sys import numpy as np import imageio from skimage.transform import resize import tensorflow as tf import model

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