{"id":335763,"date":"2022-07-15T21:00:11","date_gmt":"2022-07-15T21:00:11","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=335763"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=335763","title":{"rendered":"<span>\u0420\u0430\u0437\u0431\u043e\u0440 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0430\u044d\u0440\u043e\u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u043a \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0441 \u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u041f\u0440\u043e\u0440\u044b\u0432\u0430<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/080\/7db\/9ca\/0807db9caf744f2a0311cba235fe69e1.jpg\" alt=\"ruDALL-E Kandinsky \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u044d\u0440\u043e\u0441\u043d\u0438\u043c\u043a\u0438 \u043a \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0430 \u0412\u044b?\" title=\"ruDALL-E Kandinsky \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u044d\u0440\u043e\u0441\u043d\u0438\u043c\u043a\u0438 \u043a \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0430 \u0412\u044b?\" width=\"2048\" height=\"2048\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/080\/7db\/9ca\/0807db9caf744f2a0311cba235fe69e1.jpg\" data-blurred=\"true\"\/><figcaption>ruDALL-E Kandinsky \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u044d\u0440\u043e\u0441\u043d\u0438\u043c\u043a\u0438 \u043a \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0430 \u0412\u044b?<\/figcaption><\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<\/p>\n<p>\u042d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0438\u0437 \u0442\u0440\u0435\u0445 \u0441\u0442\u0430\u0442\u0435\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f (\u0430\u0432\u0442\u043e\u0440 \u043a\u0430\u043d\u0430\u043b\u0430\u00a0<a href=\"https:\/\/t.me\/hahatons\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u0439\u0446\u0435\u043c \u043f\u043e \u0425\u0430\u0425\u0430\u0442\u043e\u043d\u0430\u043c<\/a>) \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043e \u0437\u0430\u0434\u0430\u0447\u0430\u0445 <a href=\"https:\/\/hacks-ai.ru\/championships\/758453\" rel=\"noopener noreferrer nofollow\">\u0412\u0441\u0435\u0440\u043e\u0441\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430 \u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u041f\u0440\u043e\u0440\u044b\u0432\u0430<\/a>, \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f (baseline) \u0438 \u0434\u0430\u044e \u0441\u043e\u0432\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u043d\u044f\u0442\u044c\u0441\u044f \u0432\u044b\u0448\u0435 \u043f\u043e \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0443. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043a\u0435\u0439\u0441 \u043e\u0442 \u041c\u0424\u0422\u0418 \u043f\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0435 \u0430\u044d\u0440\u043e\u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u043a \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438. <\/p>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0435\u0439\u0437\u043b\u0430\u0439\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u0421\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0435 \u043d\u0438\u0436\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 9 \u043c\u0435\u0441\u0442\u043e \u0432 \u043b\u0438\u0434\u0435\u0440\u0431\u043e\u0440\u0434\u0435!<\/p>\n<p>\u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u0435\u0442\u044b \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f.<\/p>\n<h2>\u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u041f\u0440\u043e\u0440\u044b\u0432<\/h2>\n<p>\u0414\u0443\u043c\u0430\u044e, \u0432\u0441\u0435 \u0438 \u0442\u0430\u043a \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435\u00a0<a href=\"https:\/\/hacks-ai.ru\" rel=\"noopener noreferrer nofollow\">\u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u041f\u0440\u043e\u0440\u044b\u0432<\/a>. \u041e\u0434\u043d\u0430\u043a\u043e, \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0439 \u0441\u0442\u0430\u043b \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442. \u0418 \u0441\u0435\u0437\u043e\u043d \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u0432 \u0441\u0430\u043c\u043e\u043c \u0440\u0430\u0437\u0433\u0430\u0440\u0435!<\/p>\n<p>\u0425\u043e\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u0439 \u0443\u0436\u0435 \u043f\u0440\u043e\u0448\u043b\u0430, \u0432\u043f\u0435\u0440\u0435\u0434\u0438 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u0436\u0434\u0435\u0442 \u0435\u0449\u0451 19 \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u043e\u0432, 5 \u043e\u043a\u0440\u0443\u0436\u043d\u044b\u0445 \u0445\u0430\u043a\u0430\u0442\u043e\u043d\u043e\u0432 \u0438 3 \u0432\u0441\u0435\u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430. \u0421\u043e\u0432\u0435\u0442\u0443\u044e \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u043a\u043e \u043c\u043d\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0438\u0433\u0440\u0430\u0442\u044c \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0435 \u043f\u0440\u0438\u0437\u044b \u0438 \u043a\u0440\u0443\u0442\u044b\u0435 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043e\u043f\u044b\u0442\u0430 \u043d\u0430 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445.<\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u043e\u0432\u044b\u0445 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0438 \u0430\u044d\u0440\u043e\u0444\u043e\u0442\u043e\u0441\u043d\u0438\u043c\u043a\u043e\u0432. \u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043e\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0442\u043e, \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u044b\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0436\u0430\u0440\u044b, \u043d\u0430\u0432\u043e\u0434\u043d\u0435\u043d\u0438\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438. \u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0437\u0440\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0437\u0430\u0434\u0430\u0447, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0440\u0430\u0441\u0442\u0435\u0442.<\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c, \u0447\u0442\u043e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0433\u0435\u043e\u0434\u0435\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b, \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u043f\u0430\u0432\u0448\u0438\u0445 \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0440\u0443\u0431\u043a\u0443 \u043b\u0435\u0441\u043e\u0432. \u0418 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0433\u043e, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0430\u044d\u0440\u043e\u0444\u043e\u0442\u043e\u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u043a \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438.\u00a0<\/p>\n<p>\u0423\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0441\u043d\u0438\u043c\u043a\u0430 \u043d\u0430 \u043a\u0440\u0430\u0439\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043f\u043e \u0432\u044b\u0441\u043e\u0442\u0435 \u0438 \u0448\u0438\u0440\u0438\u043d\u0435 \u0441 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h2>\u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<p>\u0426\u0435\u043b\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u2014\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0441\u043d\u0438\u043c\u043a\u0430 \u043d\u0430 \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0435.<\/p>\n<p>\u0414\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c \u0441\u0442\u043e\u0438\u0442 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p><em>\u041f\u043e\u0434\u043b\u043e\u0436\u043a\u0430<\/em><strong>\u00a0<\/strong>\u2014 \u043a\u0440\u0430\u0439\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u044b\u0441\u043e\u0442\u0435 \u0438 \u0448\u0438\u0440\u0438\u043d\u0435 \u0441 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0442.\u0435. \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u0438\u043b\u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u043b\u043e\u0449\u0430\u0434\u044c \u0437\u0435\u043c\u043b\u0438 (\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435 \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u044b \u0438 \u0431\u043e\u043b\u0435\u0435)<\/p>\n<\/li>\n<li>\n<p><em>\u0410\u044d\u0440\u043e\u0444\u043e\u0442\u043e\u0441\u043d\u0438\u043c\u043e\u043a<\/em><strong>\u00a0<\/strong>\u2014 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u0430 \u0438\u043b\u0438 \u0431\u0435\u0441\u043f\u0438\u043b\u043e\u0442\u043d\u043e\u0433\u043e \u043b\u0435\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0430, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u043f\u0440\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0432\u043d\u0438\u0437. \u0418\u043c\u0435\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u043e\u0439. \u041f\u043e \u0441\u0443\u0442\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0444\u043e\u0442\u043e\u0430\u043f\u043f\u0430\u0440\u0430\u0442. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0430\u044d\u0440\u043e\u0444\u043e\u0442\u043e\u0441\u043d\u0438\u043c\u043e\u043a \u0441\u0434\u0435\u043b\u0430\u043d \u0432 \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043e\u0442 \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0438 \u0432\u0440\u0435\u043c\u044f, \u0432\u0440\u0435\u043c\u044f \u0433\u043e\u0434\u0430, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0432 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0433\u043e\u0434 \u0438\u043b\u0438 \u043d\u0430 \u0440\u0430\u0437\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p><em>\u041f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u0435<\/em><strong>\u00a0<\/strong>\u2014 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u043f\u043b\u043e\u0449\u0430\u0434\u044c \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0432\u0438\u0434\u043d\u0430 \u043d\u0430 \u0434\u0432\u0443\u0445 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0430\u044d\u0440\u043e\u0444\u043e\u0442\u043e\u0441\u043d\u0438\u043c\u043a\u0430\u0445. \u0412\u0437\u0430\u0438\u043c\u043d\u043e\u0435 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043f\u043e\u0434 \u0441\u043e\u0431\u043e\u0439 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u0445 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0441 \u043a\u0430\u0440\u0442\u043e\u0439.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0414\u0430\u043d\u043d\u044b\u0435<\/h3>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0430\u044d\u0440\u043e\u0444\u043e\u0442\u043e\u0441\u043d\u0438\u043c\u043a\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430:<\/p>\n<ul>\n<li>\n<p><em>train\/img<\/em> \u2014 \u043f\u0430\u043f\u043a\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f 800 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p><em>train\/json<\/em> \u2014 \u043f\u0430\u043f\u043a\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438<\/p>\n<ul>\n<li>\n<p><em>left top<\/em><strong>\u00a0<\/strong>\u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u043b\u0435\u0432\u043e\u0433\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p><em>right top<\/em><strong>\u00a0<\/strong>\u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430;<\/p>\n<\/li>\n<li>\n<p><em>left bottom<\/em><strong>\u00a0<\/strong>\u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u043b\u0435\u0432\u043e\u0433\u043e \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430;<\/p>\n<\/li>\n<li>\n<p><em>right bottom<\/em><strong>\u00a0<\/strong>\u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430;<\/p>\n<\/li>\n<li>\n<p><em>angle<\/em><strong>\u00a0<\/strong>\u2014 \u0443\u0433\u043e\u043b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><em>test\/<\/em> \u2014 \u043f\u0430\u043f\u043a\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f 400 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p><em>original.tiff<\/em> \u2014 \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0430 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c 10496 x 10496:<\/p>\n<\/li>\n<\/ul>\n<h3>\u041d\u0430 \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0421\u043d\u0438\u043c\u043a\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0438 \u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043e\u0433\u043e\u0434\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u0430 \u0437\u0430 \u043e\u0431\u043b\u0430\u043a\u0430\u043c\u0438. \u0421\u0442\u043e\u0438\u0442 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u043b\u043e, \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0437\u0430 \u0441\u0447\u0435\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0440\u0435\u0437\u043a\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0441 \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0438.<\/p>\n<h3>\u041c\u0435\u0442\u0440\u0438\u043a\u0430<\/h3>\n<p>\u0414\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0441\u0432\u043e\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0446\u0435\u043d\u0442\u0440\u043e\u043c, \u0443\u0433\u043b\u043e\u043c \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0438 \u0438\u0445 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/c65\/f4c\/287\/c65f4c287a7738bd86c6bfe7cb3c15ed.jpeg\" alt=\"\u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0438  (\u043f\u043e\u0437\u0436\u0435 \u0431\u044b\u043b\u0430 \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u0442\u0430\u043a \u043a\u0430\u043a 10 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432  \u0438\u043b\u0438 350 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432 \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 10 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432, \u0430 \u043d\u0435 \u0432 350)\" title=\"\u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0438  (\u043f\u043e\u0437\u0436\u0435 \u0431\u044b\u043b\u0430 \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u0442\u0430\u043a \u043a\u0430\u043a 10 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432  \u0438\u043b\u0438 350 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432 \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 10 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432, \u0430 \u043d\u0435 \u0432 350)\" width=\"1280\" height=\"328\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c65\/f4c\/287\/c65f4c287a7738bd86c6bfe7cb3c15ed.jpeg\" data-blurred=\"true\"\/><figcaption>\u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0438  (\u043f\u043e\u0437\u0436\u0435 \u0431\u044b\u043b\u0430 \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u0442\u0430\u043a \u043a\u0430\u043a 10 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432  \u0438\u043b\u0438 350 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432 \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 10 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432, \u0430 \u043d\u0435 \u0432 350)<\/figcaption><\/figure>\n<h2>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0438<\/h2>\n<h3>\u041c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0412 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443, \u043a\u0430\u043a \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0438. \u0422\u0430\u0440\u0433\u0435\u0442\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 4 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438 \u0443\u0433\u043e\u043b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e.<\/p>\n<p>\u0421\u0445\u0435\u043c\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439:<\/p>\n<ol>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442 \u0432\u0441\u0435\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u0432 (DataLoader) \u0434\u043b\u044f \u043f\u043e\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c <\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<\/ol>\n<h3>\u041a\u0430\u043a\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b<\/h3>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u0432\u044b\u0431\u0440\u0430\u043d <em>torch<\/em>.<\/p>\n<pre><code class=\"python\"># \u041e\u0431\u0449\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 import pandas as pd import numpy as np import glob from tqdm import tqdm import os from sklearn.model_selection import train_test_split import json from math import sin, cos  # \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dataset from torchvision import datasets, models, transforms  # \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 import cv2 from PIL import Image  # \u0414\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 import matplotlib.pyplot as plt from IPython.display import clear_output<\/code><\/pre>\n<h3>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430<\/h3>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 json \u0444\u0430\u0439\u043b\u0430\u0445, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 pandas-\u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c.<\/p>\n<pre><code class=\"python\">json_dir = \"\/content\/json\/\"  data_df = pd.DataFrame({'id': [], \"left_top_x\": [], 'left_top_y': [], \"right_bottom_x\": [], 'right_bottom_y': [], 'angle': []})  json_true = [] for _, _, files in os.walk(json_dir):     for x in files:         if x.endswith(\".json\"):             data = json.load(open(json_dir + x))             new_row = {'id':x.split(\".\")[0]+\".img\", 'left_top_x':data[\"left_top\"][0], 'left_top_y':data[\"left_top\"][1], 'right_bottom_x': data[\"right_bottom\"][0], \"right_bottom_y\": data[\"right_bottom\"][1], 'angle': data[\"angle\"]}             data_df = data_df.append(new_row, ignore_index=True)  data_df.head(5)<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/349\/f13\/5aa\/349f135aa154bfd18784533ca8a9066a.jpeg\" alt=\"\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\" title=\"\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\" width=\"990\" height=\"348\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/349\/f13\/5aa\/349f135aa154bfd18784533ca8a9066a.jpeg\" data-blurred=\"true\"\/><figcaption>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442<\/figcaption><\/figure>\n<h3>\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u0414\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0431\u0430\u0442\u0447\u0435\u0439. \u0411\u0430\u0442\u0447 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>batch_size <\/em>\u0440\u0430\u0432\u0435\u043d 16, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0442\u0447, \u043f\u043e\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 16 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442.<\/p>\n<pre><code class=\"python\">class ImageDataset(Dataset):     def __init__(self, data_df, transform=None):          self.data_df = data_df         self.transform = transform      def __getitem__(self, idx):         # \u0434\u043e\u0441\u0442\u0430\u0435\u043c \u0438\u043c\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0435\u0435 \u043b\u0435\u0439\u0431\u043b         image_name, labels = self.data_df.iloc[idx]['id'], [self.data_df.iloc[idx]['left_top_x']\/10496,                                                              self.data_df.iloc[idx]['left_top_y']\/10496,                                                              self.data_df.iloc[idx]['right_bottom_x']\/10496,                                                              self.data_df.iloc[idx]['right_bottom_y']\/10496,                                                              self.data_df.iloc[idx]['angle']]          # \u0447\u0438\u0442\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443. read the image         image = cv2.imread(f\"\/content\/train\/{image_name}\")         image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)         image = Image.fromarray(image)                  # \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e. transform it, if necessary         if self.transform:             image = self.transform(image)                  return image, torch.tensor(labels).float()          def __len__(self):         return len(self.data_df)<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0430\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<pre><code class=\"python\">train_transform = transforms.Compose([     transforms.RandomResizedCrop(224),     transforms.ToTensor(),     transforms.Normalize(mean=[0.485, 0.456, 0.406],                           std=[0.229, 0.224, 0.225]), ])  valid_transform = transforms.Compose([     transforms.RandomResizedCrop(224),     transforms.ToTensor(),     transforms.Normalize(mean=[0.485, 0.456, 0.406],                           std=[0.229, 0.224, 0.225]), ])<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u0438\u0445 \u043d\u0430 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u0443\u044e \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u0438.<\/p>\n<pre><code class=\"python\">from os import listdir  print(\"\u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \" ,len(listdir(\"\/content\/train\"))) print(\"\u0422\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \" ,len(listdir(\"\/content\/test\")))  \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 800 \u0422\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 400<\/code><\/pre>\n<pre><code class=\"python\"># \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u043d\u0430 \u0442\u0440\u0435\u0439\u043d \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e train_df, valid_df = train_test_split(data_df, test_size=0.2, random_state=43)<\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u0443\u044e \u0438\u0437 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u043f\u043e\u0434\u0430\u0434\u0438\u043c \u0432 \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u0431\u0435\u0440\u043d\u0435\u043c \u044d\u0442\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043b\u0430\u0441\u0441, \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <em>torch &#8212; DataLoader<\/em>.<\/p>\n<pre><code class=\"python\">train_dataset = ImageDataset(train_df, train_transform) valid_dataset = ImageDataset(valid_df, valid_transform)<\/code><\/pre>\n<pre><code class=\"python\">train_loader = torch.utils.data.DataLoader(dataset=train_dataset,                                            batch_size=16,                                            shuffle=True,                                            pin_memory=True,                                            num_workers=2)  valid_loader = torch.utils.data.DataLoader(dataset=valid_dataset,                                            batch_size=16,                                            # shuffle=True,                                            pin_memory=True,                                            num_workers=2)<\/code><\/pre>\n<h3>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/h3>\n<p>\u0414\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u0441\u0447\u0435\u0442\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u0412\u0430\u0436\u043d\u043e\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435 &#8212; \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0434\u043b\u044f \u043b\u0438\u0434\u0435\u0440\u0431\u043e\u0440\u0434\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u043e\u0439, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 &#171;\u041c\u0435\u0442\u0440\u0438\u043a\u0430&#187;.<\/p>\n<pre><code class=\"python\">def compute_metric(data_true, data_pred, outImageW = 10496, outImageH = 10496):      x_center_true = np.array((data_true[0] + data_true[2])\/2).astype(int)     y_center_true = np.array((data_true[1] + data_true[3])\/2).astype(int)      x_metr = x_center_true - np.array((data_pred[0] + data_pred[2])\/2).astype(int)     y_metr = y_center_true - np.array((data_pred[1] + data_pred[3])\/2).astype(int)      metr =  1 - 0.7 * (abs(x_metr)\/outImageH + abs(y_metr)\/outImageW)\/2 + 0.3 *abs(data_pred[4] - data_true[4])\/359     return metr<\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"python\">def plot_history(train_history, val_history, title='loss'):     plt.figure()     plt.title('{}'.format(title))     plt.plot(train_history, label='train', zorder=1)          points = np.array(val_history)     steps = list(range(0, len(train_history) + 1, int(len(train_history) \/ len(val_history))))[1:]          plt.scatter(steps, val_history, marker='+', s=180, c='orange', label='val', zorder=2)     plt.xlabel('train steps')          plt.legend(loc='best')     plt.grid()      plt.show()<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0431\u0435\u0437 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (\u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a TrainEpoch). \u042d\u0442\u043e \u0434\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u0442\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. <\/p>\n<pre><code class=\"python\">def train(res_model, criterion, optimizer, train_dataloader, test_dataloader, NUM_EPOCH=15):     train_loss_log = []     val_loss_log = []          train_acc_log = []     val_acc_log = []          for epoch in tqdm(range(NUM_EPOCH)):         model.train()         train_loss = 0.         train_size = 0                  train_pred = []          for imgs, labels in train_dataloader:             optimizer.zero_grad()              imgs = imgs.cuda()             labels = labels.cuda()              y_pred = model(imgs)              loss = criterion(y_pred, labels)             loss.backward()                          train_loss += loss.item()             train_size += y_pred.size(0)             train_loss_log.append((loss.data.cpu().detach().numpy() \/ y_pred.size(0)) * 100)                          y_pred[:, :4] = y_pred[:, :4] * 10496             y_pred[:, -1] = y_pred[:, -1] * 360              labels[:, :4] = labels[:, :4] * 10496             labels[:, -1] = labels[:, -1] * 360              for label, pr in zip(labels, y_pred):                     train_pred.append(compute_metric(label.cpu().detach().numpy(), pr.cpu().detach().numpy()))              optimizer.step()          train_acc_log.append(train_pred)          val_loss = 0.         val_size = 0                  val_pred = []                  model.eval()                  with torch.no_grad():             for imgs, labels in test_dataloader:                                  imgs = imgs.cuda()                 labels = labels.cuda()                                  pred = model(imgs)                 loss = criterion(pred, labels)                  pred[:, :4] = pred[:, :4] * 10496                 pred[:, -1] = pred[:, -1] * 360                  labels[:, :4] = labels[:, :4] * 10496                 labels[:, -1] = labels[:, -1] * 360                                  val_loss += loss.item()                 val_size += pred.size(0)                  for label, pr in zip(labels, pred):                     val_pred.append(compute_metric(label.cpu().detach().numpy(), pr.cpu().detach().numpy()))          val_loss_log.append((val_loss \/ val_size)*100)         val_acc_log.append(val_pred)          clear_output()         plot_history(train_loss_log, val_loss_log, 'loss')                    print('Train loss:', (train_loss \/ train_size)*100)         print('Val loss:', (val_loss \/ val_size)*100)         print('Train metric:', (np.mean(train_pred)))         print('Val metric:', (np.mean(val_pred)))              return train_loss_log, train_acc_log, val_loss_log, val_acc_log<\/code><\/pre>\n<h3>\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438<\/h3>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <em>resnet50<\/em>, \u043f\u0440\u0435\u0434\u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435 <em>imagenet<\/em> \u0441 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u043c \u0441\u043b\u043e\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 5, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c 5 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0424\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043f\u043e\u0442\u0435\u0440\u044c \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 MSELoss, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0438.<\/p>\n<pre><code class=\"python\">torch.cuda.empty_cache()  # \u041f\u043e\u0434\u0440\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c  model = models.resnet50(pretrained=True) model.fc = nn.Linear(2048, 5)  model = model.cuda() criterion = torch.nn.MSELoss()  optimizer = torch.optim.Adam(model.fc.parameters(), lr=0.001)<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043b\u043e\u0441\u0441\u043e\u0432.<\/p>\n<pre><code class=\"python\">train_loss_log, train_acc_log, val_loss_log, val_acc_log = train(model,                                                                   criterion,                                                                  optimizer,                                                                   train_loader,                                                                   valid_loader,                                                                   15)<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/3ff\/496\/443\/3ff496443d122679ce90ea0eeb5b8257.jpeg\" alt=\"\u041b\u043e\u0433\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438\" title=\"\u041b\u043e\u0433\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438\" width=\"1280\" height=\"676\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ff\/496\/443\/3ff496443d122679ce90ea0eeb5b8257.jpeg\" data-blurred=\"true\"\/><figcaption>\u041b\u043e\u0433\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438<\/figcaption><\/figure>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0438<\/h3>\n<p>\u041f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u043d\u0430 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435 \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0443 0.98. \u041e\u0434\u043d\u0430\u043a\u043e, \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0431\u0443\u0447\u0430\u043b\u0438\u0441\u044c \u043c\u044b \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u043d\u0430 \u043b\u0438\u0434\u0435\u0440\u0431\u043e\u0440\u0434\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f.<\/p>\n<pre><code class=\"python\">total_metric = []  for imgs, labels in valid_loader:     imgs = imgs.cuda()     labels = labels.cpu().detach().numpy()                 pred = model(imgs)     pred = pred.cpu().detach().numpy()          pred[:, :4] = pred[:, :4] * 10496     pred[:, -1] = pred[:, -1] * 360      labels[:, :4] = labels[:, :4] * 10496     labels[:, -1] = labels[:, -1] * 360          for label, pr in zip(labels, pred):         total_metric.append(compute_metric(label, pr))      total_metric = np.mean(total_metric) print('Valid metric:', total_metric)  Valid metric: 0.9801261833663446<\/code><\/pre>\n<h3>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0434\u043b\u044f \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0445.<\/p>\n<pre><code class=\"python\">class TestImageDataset(Dataset):     def __init__(self, files, transform=None):          self.files = files         self.transform = transform      def __getitem__(self, idx):          image_name = self.files[idx]          # \u0447\u0438\u0442\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443. read the image         image = cv2.imread(f\"\/content\/test\/{image_name}\")         image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)         image = Image.fromarray(image)                  # \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e. transform it, if necessary         if self.transform:             image = self.transform(image)                  return image          def __len__(self):         return len(self.files)<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0434\u0430\u0442\u0430\u043b\u043e\u0430\u0434\u0435\u0440 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u0430\u0442\u0447\u0430 16, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a 400, \u0430 400%16==0.<\/p>\n<pre><code class=\"python\">test_images_dir = '\/content\/test\/'  for _, _, test_files in os.walk(test_images_dir):     break  test_dataset = TestImageDataset(test_files, valid_transform)  test_loader = torch.utils.data.DataLoader(dataset=test_dataset,                                            batch_size=16,                                            # shuffle=True,                                            pin_memory=True,                                            num_workers=2                                            )<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432 \u0441\u043f\u0438\u0441\u043e\u043a.<\/p>\n<pre><code class=\"python\">indexes = [x.split('.')[0] for x in test_files] preds = []  for imgs in test_loader:     imgs = imgs.cuda()                 pred = model(imgs)     pred = pred.cpu().detach().numpy()     pred[:, :4] = np.clip(pred[:, :4] * 10496, 0, 10496)     pred[:, -1] = np.clip(pred[:, -1] * 360, 0, 360)     preds.extend(list(pred))<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u0434\u043b\u044f \u0441\u0430\u0431\u043c\u0438\u0442\u0430 \u0444\u043e\u0440\u043c\u0430\u0442. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0436\u0430\u0442\u044c \u0432\u0441\u0435 .json-\u0444\u0430\u0439\u043b\u044b \u0432 \u0430\u0440\u0445\u0438\u0432 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443.<\/p>\n<pre><code class=\"python\">sub_dir = \"\/content\/submission\/\" if not os.path.exists(sub_dir):     os.makedirs(sub_dir)  json_true = []  for indx, pred in zip(indexes, preds):      pred = [int(x) for x in pred]      left_top = [pred[0], pred[1]]     right_top = [pred[2], pred[1]]     left_bottom = [pred[0], pred[3]]     right_bottom = [pred[2], pred[3]]              res = {         'left_top': left_top,         'right_top': right_top,         'left_bottom': left_bottom,         'right_bottom': right_bottom,         'angle': pred[4]     }      with open(sub_dir+indx+'.json', 'w') as f:         json.dump(res, f)<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 .json-\u0444\u0430\u0439\u043b.<\/p>\n<pre><code class=\"json\">{   \"left_top\": [7000, 4000],    \"right_top\": [6000, 4000],    \"left_bottom\": [7000, 3000],    \"right_bottom\": [6000, 3000],    \"angle\": 178 }<\/code><\/pre>\n<h2>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h2>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043f\u043e\u0445 \u0438 \u0434\u043e\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043d\u0441\u0430\u043c\u0431\u043b\u044c \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 TTA (Test Time Augmentation).<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0430\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0438\u0437 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0438 \u0438\u043b\u0438 \u0438\u0437 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u0442\u044c \u043d\u0430\u0434 \u0438\u043d\u044b\u043c\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u043c\u0438 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u0447\u0438 &#8212; \u043d\u0435 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<h2>\u0418\u0442\u043e\u0433\u0438<\/h2>\n<p>\u041a\u0435\u0439\u0441 \u0432\u0435\u0441\u044c\u043c\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0437\u0430 \u0441\u0447\u0435\u0442 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u0447\u0438. \u0415\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0440 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u0434 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u043c\u0438. \u0410 \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u0442\u043e \u0435\u0449\u0435 \u0438 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0439 \u043f\u0440\u0438\u0437 \u0434\u043e 250 \u0442\u044b\u0441\u044f\u0447 \u0440\u0443\u0431\u043b\u0435\u0439!<\/p>\n<p>\u0412\u0441\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u0432\u0430\u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u00a0<a href=\"https:\/\/t.me\/hahatons\" rel=\"noopener noreferrer nofollow\">\u043a\u0430\u043d\u0430\u043b\u0435 \u0417\u0430\u0439\u0446\u0435\u043c \u043f\u043e \u0425\u0430\u0425\u0430\u0442\u043e\u043d\u0430\u043c<\/a>.<\/p>\n<p>\u0412\u0441\u0435\u043c \u0443\u0434\u0430\u0447\u0438 \u043d\u0430 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430\u0445 \u0438 \u0445\u0430\u043a\u0430\u0442\u043e\u043d\u0430\u0445!<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/676080\/\"> https:\/\/habr.com\/ru\/post\/676080\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption>ruDALL-E Kandinsky \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u043a \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u044d\u0440\u043e\u0441\u043d\u0438\u043c\u043a\u0438 \u043a \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0430 \u0412\u044b?<\/figcaption><\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<\/p>\n<p>\u042d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0438\u0437 \u0442\u0440\u0435\u0445 \u0441\u0442\u0430\u0442\u0435\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f (\u0430\u0432\u0442\u043e\u0440 \u043a\u0430\u043d\u0430\u043b\u0430\u00a0<a href=\"https:\/\/t.me\/hahatons\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u0439\u0446\u0435\u043c \u043f\u043e \u0425\u0430\u0425\u0430\u0442\u043e\u043d\u0430\u043c<\/a>) \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043e \u0437\u0430\u0434\u0430\u0447\u0430\u0445 <a href=\"https:\/\/hacks-ai.ru\/championships\/758453\" rel=\"noopener noreferrer nofollow\">\u0412\u0441\u0435\u0440\u043e\u0441\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430 \u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0433\u043e \u041f\u0440\u043e\u0440\u044b\u0432\u0430<\/a>, \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f (baseline) \u0438 \u0434\u0430\u044e \u0441\u043e\u0432\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u043d\u044f\u0442\u044c\u0441\u044f \u0432\u044b\u0448\u0435 \u043f\u043e \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0443. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043a\u0435\u0439\u0441 \u043e\u0442 \u041c\u0424\u0422\u0418 \u043f\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0435 \u0430\u044d\u0440\u043e\u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u043a \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438. <\/p>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0435\u0439\u0437\u043b\u0430\u0439\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u0421\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0435 \u043d\u0438\u0436\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 9 \u043c\u0435\u0441\u0442\u043e \u0432 \u043b\u0438\u0434\u0435\u0440\u0431\u043e\u0440\u0434\u0435!<\/p>\n<p>\u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u0435\u0442\u044b \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f.<\/p>\n<h2>\u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u041f\u0440\u043e\u0440\u044b\u0432<\/h2>\n<p>\u0414\u0443\u043c\u0430\u044e, \u0432\u0441\u0435 \u0438 \u0442\u0430\u043a \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435\u00a0<a href=\"https:\/\/hacks-ai.ru\" rel=\"noopener noreferrer nofollow\">\u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u041f\u0440\u043e\u0440\u044b\u0432<\/a>. \u041e\u0434\u043d\u0430\u043a\u043e, \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0439 \u0441\u0442\u0430\u043b \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442. \u0418 \u0441\u0435\u0437\u043e\u043d \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u0432 \u0441\u0430\u043c\u043e\u043c \u0440\u0430\u0437\u0433\u0430\u0440\u0435!<\/p>\n<p>\u0425\u043e\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u0439 \u0443\u0436\u0435 \u043f\u0440\u043e\u0448\u043b\u0430, \u0432\u043f\u0435\u0440\u0435\u0434\u0438 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u0436\u0434\u0435\u0442 \u0435\u0449\u0451 19 \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u043e\u0432, 5 \u043e\u043a\u0440\u0443\u0436\u043d\u044b\u0445 \u0445\u0430\u043a\u0430\u0442\u043e\u043d\u043e\u0432 \u0438 3 \u0432\u0441\u0435\u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430. \u0421\u043e\u0432\u0435\u0442\u0443\u044e \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u043a\u043e \u043c\u043d\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0438\u0433\u0440\u0430\u0442\u044c \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0435 \u043f\u0440\u0438\u0437\u044b \u0438 \u043a\u0440\u0443\u0442\u044b\u0435 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043e\u043f\u044b\u0442\u0430 \u043d\u0430 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445.<\/p>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u043e\u0432\u044b\u0445 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0438 \u0430\u044d\u0440\u043e\u0444\u043e\u0442\u043e\u0441\u043d\u0438\u043c\u043a\u043e\u0432. \u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043e\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0442\u043e, \u043a\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u044b\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0436\u0430\u0440\u044b, \u043d\u0430\u0432\u043e\u0434\u043d\u0435\u043d\u0438\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438. \u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u0437\u0440\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0437\u0430\u0434\u0430\u0447, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0440\u0430\u0441\u0442\u0435\u0442.<\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c, \u0447\u0442\u043e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0433\u0435\u043e\u0434\u0435\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b, \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u043f\u0430\u0432\u0448\u0438\u0445 \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0440\u0443\u0431\u043a\u0443 \u043b\u0435\u0441\u043e\u0432. \u0418 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0433\u043e, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0430\u044d\u0440\u043e\u0444\u043e\u0442\u043e\u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u043a \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438.\u00a0<\/p>\n<p>\u0423\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0441\u043d\u0438\u043c\u043a\u0430 \u043d\u0430 \u043a\u0440\u0430\u0439\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043f\u043e \u0432\u044b\u0441\u043e\u0442\u0435 \u0438 \u0448\u0438\u0440\u0438\u043d\u0435 \u0441 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h2>\u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<p>\u0426\u0435\u043b\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u2014\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0441\u043d\u0438\u043c\u043a\u0430 \u043d\u0430 \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0435.<\/p>\n<p>\u0414\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c \u0441\u0442\u043e\u0438\u0442 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p><em>\u041f\u043e\u0434\u043b\u043e\u0436\u043a\u0430<\/em><strong>\u00a0<\/strong>\u2014 \u043a\u0440\u0430\u0439\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u044b\u0441\u043e\u0442\u0435 \u0438 \u0448\u0438\u0440\u0438\u043d\u0435 \u0441 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0442.\u0435. \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u0438\u043b\u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u043b\u043e\u0449\u0430\u0434\u044c \u0437\u0435\u043c\u043b\u0438 (\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0435 \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u044b \u0438 \u0431\u043e\u043b\u0435\u0435)<\/p>\n<\/li>\n<li>\n<p><em>\u0410\u044d\u0440\u043e\u0444\u043e\u0442\u043e\u0441\u043d\u0438\u043c\u043e\u043a<\/em><strong>\u00a0<\/strong>\u2014 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u0430 \u0438\u043b\u0438 \u0431\u0435\u0441\u043f\u0438\u043b\u043e\u0442\u043d\u043e\u0433\u043e \u043b\u0435\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0430, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u043f\u0440\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e \u0432\u043d\u0438\u0437. \u0418\u043c\u0435\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u043e\u0439. \u041f\u043e \u0441\u0443\u0442\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0444\u043e\u0442\u043e\u0430\u043f\u043f\u0430\u0440\u0430\u0442. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0430\u044d\u0440\u043e\u0444\u043e\u0442\u043e\u0441\u043d\u0438\u043c\u043e\u043a \u0441\u0434\u0435\u043b\u0430\u043d \u0432 \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043e\u0442 \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0438 \u0432\u0440\u0435\u043c\u044f, \u0432\u0440\u0435\u043c\u044f \u0433\u043e\u0434\u0430, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0432 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0433\u043e\u0434 \u0438\u043b\u0438 \u043d\u0430 \u0440\u0430\u0437\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p><em>\u041f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u0435<\/em><strong>\u00a0<\/strong>\u2014 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u043f\u043b\u043e\u0449\u0430\u0434\u044c \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0432\u0438\u0434\u043d\u0430 \u043d\u0430 \u0434\u0432\u0443\u0445 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0430\u044d\u0440\u043e\u0444\u043e\u0442\u043e\u0441\u043d\u0438\u043c\u043a\u0430\u0445. \u0412\u0437\u0430\u0438\u043c\u043d\u043e\u0435 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043f\u043e\u0434 \u0441\u043e\u0431\u043e\u0439 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u0445 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0441 \u043a\u0430\u0440\u0442\u043e\u0439.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0414\u0430\u043d\u043d\u044b\u0435<\/h3>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0430\u044d\u0440\u043e\u0444\u043e\u0442\u043e\u0441\u043d\u0438\u043c\u043a\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430:<\/p>\n<ul>\n<li>\n<p><em>train\/img<\/em> \u2014 \u043f\u0430\u043f\u043a\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f 800 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p><em>train\/json<\/em> \u2014 \u043f\u0430\u043f\u043a\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 json \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438<\/p>\n<ul>\n<li>\n<p><em>left top<\/em><strong>\u00a0<\/strong>\u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u043b\u0435\u0432\u043e\u0433\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p><em>right top<\/em><strong>\u00a0<\/strong>\u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430;<\/p>\n<\/li>\n<li>\n<p><em>left bottom<\/em><strong>\u00a0<\/strong>\u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u043b\u0435\u0432\u043e\u0433\u043e \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430;<\/p>\n<\/li>\n<li>\n<p><em>right bottom<\/em><strong>\u00a0<\/strong>\u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0443\u0433\u043b\u0430;<\/p>\n<\/li>\n<li>\n<p><em>angle<\/em><strong>\u00a0<\/strong>\u2014 \u0443\u0433\u043e\u043b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><em>test\/<\/em> \u2014 \u043f\u0430\u043f\u043a\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f 400 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p><em>original.tiff<\/em> \u2014 \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0430 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c 10496 x 10496:<\/p>\n<\/li>\n<\/ul>\n<h3>\u041d\u0430 \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0421\u043d\u0438\u043c\u043a\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0438 \u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043e\u0433\u043e\u0434\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u0430 \u0437\u0430 \u043e\u0431\u043b\u0430\u043a\u0430\u043c\u0438. \u0421\u0442\u043e\u0438\u0442 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u043b\u043e, \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0437\u0430 \u0441\u0447\u0435\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0440\u0435\u0437\u043a\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0441 \u043f\u043e\u0434\u043b\u043e\u0436\u043a\u0438.<\/p>\n<h3>\u041c\u0435\u0442\u0440\u0438\u043a\u0430<\/h3>\n<p>\u0414\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0441\u0432\u043e\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0446\u0435\u043d\u0442\u0440\u043e\u043c, \u0443\u0433\u043b\u043e\u043c \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u0438 \u0438\u0445 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<figure class=\"full-width\"><figcaption>\u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0438  (\u043f\u043e\u0437\u0436\u0435 \u0431\u044b\u043b\u0430 \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u0442\u0430\u043a \u043a\u0430\u043a 10 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432  \u0438\u043b\u0438 350 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432 \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 10 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432, \u0430 \u043d\u0435 \u0432 350)<\/figcaption><\/figure>\n<h2>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0438<\/h2>\n<h3>\u041c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0412 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443, \u043a\u0430\u043a \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0438. \u0422\u0430\u0440\u0433\u0435\u0442\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 4 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438 \u0443\u0433\u043e\u043b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e.<\/p>\n<p>\u0421\u0445\u0435\u043c\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439:<\/p>\n<ol>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442 \u0432\u0441\u0435\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u0432 (DataLoader) \u0434\u043b\u044f \u043f\u043e\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c <\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<\/ol>\n<h3>\u041a\u0430\u043a\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b<\/h3>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u0432\u044b\u0431\u0440\u0430\u043d <em>torch<\/em>.<\/p>\n<pre><code class=\"python\"># \u041e\u0431\u0449\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 import pandas as pd import numpy as np import glob from tqdm import tqdm import os from sklearn.model_selection import train_test_split import json from math import sin, cos  # \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dataset from torchvision import datasets, models, transforms  # \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 import cv2 from PIL import Image  # \u0414\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 import matplotlib.pyplot as plt from IPython.display import clear_output<\/code><\/pre>\n<h3>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430<\/h3>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 json \u0444\u0430\u0439\u043b\u0430\u0445, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 pandas-\u0434\u0430\u0442\u0430\u0444\u0440\u0435\u0439\u043c.<\/p>\n<pre><code class=\"python\">json_dir = \"\/content\/json\/\"  data_df = pd.DataFrame({'id': [], \"left_top_x\": [], 'left_top_y': [], \"right_bottom_x\": [], 'right_bottom_y': [], 'angle': []})  json_true = [] for _, _, files in os.walk(json_dir):     for x in files:         if x.endswith(\".json\"):             data = json.load(open(json_dir + x))             new_row = {'id':x.split(\".\")[0]+\".img\", 'left_top_x':data[\"left_top\"][0], 'left_top_y':data[\"left_top\"][1], 'right_bottom_x': data[\"right_bottom\"][0], \"right_bottom_y\": data[\"right_bottom\"][1], 'angle': data[\"angle\"]}             data_df = data_df.append(new_row, ignore_index=True)  data_df.head(5)<\/code><\/pre>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442<\/figcaption><\/figure>\n<h3>\u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u0414\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0431\u0430\u0442\u0447\u0435\u0439. \u0411\u0430\u0442\u0447 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>batch_size <\/em>\u0440\u0430\u0432\u0435\u043d 16, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0442\u0447, \u043f\u043e\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 16 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442.<\/p>\n<pre><code class=\"python\">class ImageDataset(Dataset):     def __init__(self, data_df, transform=None):          self.data_df = data_df         self.transform = transform      def __getitem__(self, idx):         # \u0434\u043e\u0441\u0442\u0430\u0435\u043c \u0438\u043c\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0435\u0435 \u043b\u0435\u0439\u0431\u043b         image_name, labels = self.data_df.iloc[idx]['id'], [self.data_df.iloc[idx]['left_top_x']\/10496,                                                              self.data_df.iloc[idx]['left_top_y']\/10496,                                                              self.data_df.iloc[idx]['right_bottom_x']\/10496,                                                              self.data_df.iloc[idx]['right_bottom_y']\/10496,                                                              self.data_df.iloc[idx]['angle']]          # \u0447\u0438\u0442\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443. read the image         image = cv2.imread(f\"\/content\/train\/{image_name}\")         image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)         image = Image.fromarray(image)                  # \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e. transform it, if necessary         if self.transform:             image = self.transform(image)                  return image, torch.tensor(labels).float()          def __len__(self):         return len(self.data_df)<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0430\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<pre><code class=\"python\">train_transform = transforms.Compose([     transforms.RandomResizedCrop(224),     transforms.ToTensor(),     transforms.Normalize(mean=[0.485, 0.456, 0.406],                           std=[0.229, 0.224, 0.225]), ])  valid_transform = transforms.Compose([     transforms.RandomResizedCrop(224),     transforms.ToTensor(),     transforms.Normalize(mean=[0.485, 0.456, 0.406],                           std=[0.229, 0.224, 0.225]), ])<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u0438\u0445 \u043d\u0430 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u0443\u044e \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u0438.<\/p>\n<pre><code class=\"python\">from os import listdir  print(\"\u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \" ,len(listdir(\"\/content\/train\"))) print(\"\u0422\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \" ,len(listdir(\"\/content\/test\")))  \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 800 \u0422\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 400<\/code><\/pre>\n<pre><code class=\"python\"># \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u043d\u0430 \u0442\u0440\u0435\u0439\u043d \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e train_df, valid_df = train_test_split(data_df, test_size=0.2, random_state=43)<\/code><\/pre>\n<p>\u041a\u0430\u0436\u0434\u0443\u044e \u0438\u0437 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u043f\u043e\u0434\u0430\u0434\u0438\u043c \u0432 \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u0431\u0435\u0440\u043d\u0435\u043c \u044d\u0442\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043b\u0430\u0441\u0441, \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <em>torch &#8212; DataLoader<\/em>.<\/p>\n<pre><code class=\"python\">train_dataset = ImageDataset(train_df, train_transform) valid_dataset = ImageDataset(valid_df, valid_transform)<\/code><\/pre>\n<pre><code class=\"python\">train_loader = torch.utils.data.DataLoader(dataset=train_dataset,                                            batch_size=16,                                            shuffle=True,                                            pin_memory=True,                                            num_workers=2)  valid_loader = torch.utils.data.DataLoader(dataset=valid_dataset,                                            batch_size=16,                                            # shuffle=True,                                            pin_memory=True,                                            num_workers=2)<\/code><\/pre>\n<h3>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/h3>\n<p>\u0414\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u0441\u0447\u0435\u0442\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u0412\u0430\u0436\u043d\u043e\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435 &#8212; \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0434\u043b\u044f \u043b\u0438\u0434\u0435\u0440\u0431\u043e\u0440\u0434\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u043e\u0439, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 &#171;\u041c\u0435\u0442\u0440\u0438\u043a\u0430&#187;.<\/p>\n<pre><code class=\"python\">def<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-335763","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/335763","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=335763"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/335763\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=335763"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=335763"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=335763"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}