{"id":315521,"date":"2020-12-25T09:00:55","date_gmt":"2020-12-25T09:00:55","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=315521"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=315521","title":{"rendered":"\u041a\u0430\u043a \u043c\u044b \u043e\u0431\u0443\u0447\u0438\u043b\u0438 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u0438 \u043d\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p><strong>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<\/strong><\/p>\n<\/p>\n<p>\u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e Computer Vision Engineer \u0432 Everypixel<a href=\"everypixel.com\" rel=\"noopener noreferrer nofollow\"> <\/a>\u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432\u0430\u043c, \u043a\u0430\u043a \u043c\u044b \u0443\u0447\u0438\u043b\u0438 <a href=\"https:\/\/arxiv.org\/pdf\/1406.2661.pdf\" rel=\"noopener noreferrer nofollow\">\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0441\u043e\u0441\u0442\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u044c<\/a> \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u0438 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438.<\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c <em>GAN<\/em> \u043d\u0435 \u0442\u0430\u043a \u0442\u0440\u0443\u0434\u043d\u043e, \u043a\u0430\u043a \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434. \u0412 \u043d\u0430\u0443\u0447\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u0442\u0435\u043c\u0443 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0441\u043e\u0441\u0442\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0432\u0430\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0430\u0443\u0447\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u043f\u043e\u0440\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0432\u044b\u0431\u0440\u0430\u043b <a href=\"https:\/\/openaccess.thecvf.com\/content_CVPR_2020\/html\/Liu_ARShadowGAN_Shadow_Generative_Adversarial_Network_for_Augmented_Reality_in_Single_CVPR_2020_paper.html\" rel=\"noopener noreferrer nofollow\"><em>ARShadowGAN<\/em><\/a><em> <\/em>\u2014 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043e <em>GAN<\/em>, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0435 \u0442\u0435\u043d\u0438 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e, \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u044f \u0431\u0443\u0434\u0443 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0442\u044c\u0441\u044f, \u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0451 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 <em>ARShadowGAN-like<\/em>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e09\/4f7\/418\/e094f7418f9b888d14d95ce80c365c94.jpg\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 ARShadowGAN-like\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 ARShadowGAN-like\" width=\"601\" height=\"301\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 ARShadowGAN-like<\/figcaption><\/figure>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0431\u0440\u0430\u0443\u0437\u0435\u0440;<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Python;<\/p>\n<\/li>\n<li>\n<p>\u0433\u0443\u0433\u043b-\u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0441\u0440\u0435\u0434\u0435 <a href=\"https:\/\/colab.research.google.com\/\" rel=\"noopener noreferrer nofollow\">Google Colaboratory<\/a>.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0441\u043e\u0441\u0442\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438<\/h3>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0441\u043e\u0441\u0442\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u0435\u0442\u0435\u0439:<\/p>\n<ul>\n<li>\n<p><strong>\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/strong>, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0448\u0443\u043c\u0430 (\u0443 \u043d\u0430\u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u044c, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 \u0438 \u043c\u0430\u0441\u043a\u0443 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430);<\/p>\n<\/li>\n<li>\n<p><strong>\u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440\u0430<\/strong>, \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u0442 \u043f\u043e\u0434\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/45d\/538\/f29\/45d538f29730460f2ab7c94077347b21\" alt=\"\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 ARShadowGAN-like\" title=\"\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 ARShadowGAN-like\" width=\"1823\" height=\"922\"><figcaption>\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 ARShadowGAN-like<\/figcaption><\/figure>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0438 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435. \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u0447\u0438\u0442\u0441\u044f \u0432\u0441\u0451 \u043b\u0443\u0447\u0448\u0435 \u0438 \u043b\u0443\u0447\u0448\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u044c, \u043e\u0431\u043c\u0430\u043d\u044b\u0432\u0430\u0442\u044c \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440. \u0414\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440 \u0436\u0435 \u0443\u0447\u0438\u0442\u0441\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430<\/strong> \u2014 \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0442\u0435\u043d\u044c. \u0414\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440 \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0430 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 (\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441, \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d \u0438 \u0442.\u0434.) \u043e\u043d \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p><strong>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440<\/strong><\/p>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 <em>ARShadowGAN-like <\/em>\u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432: <em>attention<\/em> \u0438 <em>shadow generation <\/em>(SG).  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/90e\/4a0\/0ec\/90e4a00ec2ea9b1641d350c6d5c3fe41.png\" alt=\"\u0421\u0445\u0435\u043c\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430\" title=\"\u0421\u0445\u0435\u043c\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430\" width=\"2952\" height=\"1728\"><figcaption>\u0421\u0445\u0435\u043c\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/figcaption><\/figure>\n<p><strong>\u041e\u0434\u043d\u0430 \u0438\u0437<\/strong> <strong>\u0444\u0438\u0448\u0435\u043a <\/strong>\u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u041a\u0430\u0440\u0442\u044b \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e, \u0438\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043c\u0430\u0441\u043a\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0438\u0437 \u043d\u0443\u043b\u0435\u0439 (\u0447\u0451\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442) \u0438 \u0435\u0434\u0438\u043d\u0438\u0446 (\u0431\u0435\u043b\u044b\u0439 \u0446\u0432\u0435\u0442, \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430).<\/p>\n<p><strong>Attention<\/strong><em> <\/em>\u0431\u043b\u043e\u043a<em> <\/em>\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u2014 \u043a\u0430\u0440\u0442\u044b \u0442\u0435\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0442\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0417\u0434\u0435\u0441\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u0440\u0442 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043c\u0430\u0441\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u043e\u043a\u043a\u043b\u044e\u0434\u0435\u0440\u043e\u0432) \u0438 \u043c\u0430\u0441\u043a\u0430 \u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u043e\u0442 \u043d\u0438\u0445 \u0442\u0435\u043d\u0435\u0439. \u0422\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0442\u043e \u0431\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u0442\u0438, \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u044c, \u043e\u043d\u0430 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0442\u0435\u043d\u0438 \u043e\u0442 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041f\u043e\u0434\u0445\u043e\u0434 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0431\u044b \u0432 \u0436\u0438\u0437\u043d\u0438 \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0442\u0435\u043d\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0432 \u0444\u043e\u0442\u043e\u0448\u043e\u043f\u0435. <\/p>\n<p>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043c\u043e\u0434\u0443\u043b\u044f: <em>U-Net<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c 4 \u043a\u0430\u043d\u0430\u043b\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 (<em>RGB<\/em>-\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 \u0438 \u043c\u0430\u0441\u043a\u0430 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430) \u0438 2 \u043a\u0430\u043d\u0430\u043b\u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 (\u043c\u0430\u0441\u043a\u0430 \u043e\u043a\u043a\u043b\u044e\u0434\u0435\u0440\u043e\u0432 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0438\u043c \u0442\u0435\u043d\u044f\u043c).<\/p>\n<p><strong>Shadow generation<\/strong> \u2014 \u0441\u0430\u043c\u044b\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0432\u0441\u0435\u0439 \u0441\u0435\u0442\u0438. \u0415\u0433\u043e \u0446\u0435\u043b\u044c: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 3-\u043a\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0441\u043a\u0438 \u0442\u0435\u043d\u0438. \u041e\u043d, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e <em>attention<\/em>, \u0438\u043c\u0435\u0435\u0442 <em>U-Net<\/em>-\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0431\u043b\u043e\u043a\u043e\u043c \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043d\u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 (<em>refinement<\/em>). \u041d\u0430 \u0432\u0445\u043e\u0434 \u0431\u043b\u043e\u043a\u0443 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432\u0441\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 (3 \u043a\u0430\u043d\u0430\u043b\u0430), \u043c\u0430\u0441\u043a\u0430 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (1 \u043a\u0430\u043d\u0430\u043b) \u0438 \u0432\u044b\u0445\u043e\u0434 <em>attention<\/em> \u0431\u043b\u043e\u043a\u0430 \u2014 \u043c\u0430\u0441\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (1 \u043a\u0430\u043d\u0430\u043b) \u0438 \u043c\u0430\u0441\u043a\u0430 \u0442\u0435\u043d\u0435\u0439 \u043e\u0442 \u043d\u0438\u0445 (1 \u043a\u0430\u043d\u0430\u043b). \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430 \u0432\u0445\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 6-\u043a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043d\u0437\u043e\u0440. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 3 \u043a\u0430\u043d\u0430\u043b\u0430 \u2014 \u0446\u0432\u0435\u0442\u043d\u0430\u044f \u043c\u0430\u0441\u043a\u0430 \u0442\u0435\u043d\u0438 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. <\/p>\n<p>\u0412\u044b\u0445\u043e\u0434 <em>shadow generation<\/em> \u043f\u043e\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f) \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u043d\u044c\u044e. \u041a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u043e\u0439\u043d\u0443\u044e \u043d\u0430\u043a\u043b\u0430\u0434\u043a\u0443 \u0442\u0435\u043d\u0438 \u0432 \u0444\u043e\u0442\u043e\u0448\u043e\u043f\u0435 \u2014 \u0442\u0435\u043d\u044c \u0431\u0443\u0434\u0442\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043f\u043e\u0432\u0435\u0440\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438.<\/p>\n<p><strong>\u0414\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440<\/strong><\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440\u0430 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440 \u043e\u0442 <a href=\"https:\/\/github.com\/eriklindernoren\/PyTorch-GAN\/blob\/master\/implementations\/srgan\/models.py#L74\" rel=\"noopener noreferrer nofollow\"><em>SRGAN<\/em><\/a>. \u041e\u043d \u043f\u0440\u0438\u0432\u043b\u0435\u043a \u0441\u0432\u043e\u0435\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0449\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u043e\u043b\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 <em>ARShadowGAN-like<\/em> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a (\u0434\u0430, \u043c\u0435\u043b\u043a\u043e, \u043d\u043e \u043a\u0440\u0443\u043f\u043d\u044b\u043c \u043f\u043b\u0430\u043d\u043e\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 \u0431\u044b\u043b\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u0432\u044b\u0448\u0435 \u263a):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c5f\/7a5\/613\/c5f7a56138ec92d92ada83c4516d0caf.jpg\" alt=\"\u041f\u043e\u043b\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f ARShadowGAN-like\" title=\"\u041f\u043e\u043b\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f ARShadowGAN-like\" width=\"4176\" height=\"1808\"><figcaption>\u041f\u043e\u043b\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f ARShadowGAN-like<\/figcaption><\/figure>\n<h3>\u041e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435<\/h3>\n<p>\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0441\u043e\u0441\u0442\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u044b\u0432\u0430\u0435\u0442 <em>paired <\/em>\u0438 <em>unpaired. <\/em><\/p>\n<p>\u0421 <strong>\u043f\u0430\u0440\u043d\u044b\u043c\u0438 <\/strong>\u0434\u0430\u043d\u043d\u044b\u043c\u0438 (<em>paired<\/em>) \u0432\u0441\u0451 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441 \u0443\u0447\u0438\u0442\u0435\u043b\u0435\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 (<em>ground truth<\/em>), \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0432\u044b\u0445\u043e\u0434 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0414\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439: \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u2014 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u043e\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u041d\u0435\u0439\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u0443\u0447\u0438\u0442\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e.<\/p>\n<p><strong>\u041d\u0435\u043f\u0430\u0440\u043d\u043e\u0435 <\/strong>\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u2014 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 \u0431\u0435\u0437 \u0443\u0447\u0438\u0442\u0435\u043b\u044f. \u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0430\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043b\u0438\u0431\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043b\u0438\u0431\u043e \u0442\u0440\u0443\u0434\u043d\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/openaccess.thecvf.com\/content_ICCV_2017\/papers\/Zhu_Unpaired_Image-To-Image_Translation_ICCV_2017_paper.pdf\" rel=\"noopener noreferrer nofollow\"><em>unpaired<\/em> <\/a>\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0434\u0430\u0447\u0435 <a href=\"https:\/\/godatadriven.com\/blog\/how-to-style-transfer-your-own-images\/\" rel=\"noopener noreferrer nofollow\"><em>Style Transfer<\/em><\/a>\u2014<em> <\/em>\u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0441\u0442\u0438\u043b\u044f \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0435. \u0417\u0434\u0435\u0441\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442, \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0443\u0447\u0438\u0442\u0435\u043b\u044f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b82\/86c\/dda\/b8286cdda9a66f536c3fb41cef3414a5.jpg\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 Style Transfer\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 Style Transfer\" width=\"859\" height=\"547\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 Style Transfer<\/figcaption><\/figure>\n<p>\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u0437\u044f\u0442\u043e <a href=\"https:\/\/godatadriven.com\/blog\/how-to-style-transfer-your-own-images\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043d\u0435\u0439. \u0410\u0432\u0442\u043e\u0440\u044b <em>ARShadowGAN <\/em>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u0430\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0439 \u0441\u0435\u0442\u0438. \u041f\u0430\u0440\u0430\u043c\u0438 \u0437\u0434\u0435\u0441\u044c \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 \u2014 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0435\u043c\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u043d\u044c\u044e. <\/p>\n<p>\u041a\u0430\u043a \u0436\u0435 <strong>\u0441\u043e\u0431\u0440\u0430\u0442\u044c<\/strong> \u0442\u0430\u043a\u043e\u0439 <strong>\u0434\u0430\u0442\u0430\u0441\u0435\u0442<\/strong>?<\/p>\n<p>\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e, \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445:<\/p>\n<ul>\n<li>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u2014 <strong>\u043e\u0442\u0441\u043d\u044f\u0442\u044c \u0434\u0430\u0442\u0430\u0441\u0435\u0442<\/strong>. \u041d\u0443\u0436\u043d\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0446\u0435\u043d\u0443, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u043c\u0435\u0440\u044b \u0438 \u0442.\u0434., \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u043d\u0443\u043b\u044f\u0442\u044c \u0442\u0435\u043d\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0446\u0435\u043d\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u0430) \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043a\u0438 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 \u0438 \u0441 \u0442\u0435\u043d\u044c\u044e. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0443\u0434\u043e\u0435\u043c\u043e\u043a \u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u044f \u0432\u0438\u0436\u0443 <strong>\u0441\u0431\u043e\u0440 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441 \u0442\u0435\u043d\u044f\u043c\u0438<\/strong>. \u041b\u043e\u0433\u0438\u043a\u0430 \u0442\u0430\u043a\u0430\u044f: \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u043d\u044c\u044e \u0438 \u0442\u0435\u043d\u044c \u0443\u0434\u0430\u043b\u0438\u043c. \u041e\u0442\u0441\u044e\u0434\u0430 \u0432\u044b\u0442\u0435\u043a\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u0430\u044f, \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043b\u0451\u0433\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Inpainting\" rel=\"noopener noreferrer nofollow\"><em>Image Inpainting <\/em><\/a>\u2014 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 \u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u043b\u0438\u0431\u043e \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u0440\u0443\u0447\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0432 \u0444\u043e\u0442\u043e\u0448\u043e\u043f\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441\u0435\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0430\u043a\u043e\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c\u0441\u044f \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u044b \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0433\u043b\u0430\u0437\u0443, \u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u044b \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u043c \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435. <\/p>\n<\/li>\n<li>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 <strong>\u0441\u0431\u043e\u0440 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>3D<\/em><\/strong>. \u0410\u0432\u0442\u043e\u0440\u044b <em>ARShadowGAN <\/em>\u043f\u043e\u0448\u043b\u0438 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u0443\u0442\u0438 \u0438 \u0441\u043e\u0431\u0440\u0430\u043b\u0438 <em>ShadowAR-dataset. <\/em>\u0418\u0434\u0435\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f: \u0441\u043f\u0435\u0440\u0432\u0430 \u0430\u0432\u0442\u043e\u0440\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <em>3D<\/em>-\u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438\u0437 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/arxiv.org\/pdf\/1512.03012.pdf\" rel=\"noopener noreferrer nofollow\"><em>ShapeNet<\/em><\/a>, \u0437\u0430\u0442\u0435\u043c \u044d\u0442\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0446\u0435\u043d\u044b. \u0414\u0430\u043b\u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0440\u0435\u043d\u0434\u0435\u0440 \u044d\u0442\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u043c \u0444\u043e\u043d\u0435 \u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u2014 \u0441 \u0442\u0435\u043d\u044c\u044e \u0438 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u044b \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u043d\u0430 <em>2D<\/em>-\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0446\u0435\u043d \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043e\u043a. \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u0430\u0440\u044b: \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 (<em>noshadow<\/em>) \u0438 <em>ground truth <\/em>\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u043d\u044c\u044e (<em>shadow<\/em>). \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0441\u0431\u043e\u0440\u0435 <em>ShadowAR-dataset<\/em> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/openaccess.thecvf.com\/content_CVPR_2020\/papers\/Liu_ARShadowGAN_Shadow_Generative_Adversarial_Network_for_Augmented_Reality_in_Single_CVPR_2020_paper.pdf\" rel=\"noopener noreferrer nofollow\">\u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0430\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 <em>noshadow <\/em>\u0438 <em>shadow <\/em>\u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c. \u041e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u043c\u0430\u0441\u043a\u0438?<\/p>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u043c\u0430\u0441\u043e\u043a \u0443 \u043d\u0430\u0441 \u0442\u0440\u0438: \u043c\u0430\u0441\u043a\u0430 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043c\u0430\u0441\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u043e\u043a\u043a\u043b\u044e\u0434\u0435\u0440\u043e\u0432) \u0438 \u043c\u0430\u0441\u043a\u0430 \u0442\u0435\u043d\u0435\u0439 \u043e\u0442 \u043d\u0438\u0445. \u041c\u0430\u0441\u043a\u0430 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043d\u0434\u0435\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u043c \u0444\u043e\u043d\u0435. \u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439 \u0444\u043e\u043d \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c, \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443, \u2014 \u0431\u0435\u043b\u044b\u043c. \u041c\u0430\u0441\u043a\u0438 \u0436\u0435 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0442\u0435\u043d\u0435\u0439 \u043e\u0442 \u043d\u0438\u0445 \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 <em>ARShadowGAN <\/em>\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 (\u043a\u0440\u0430\u0443\u0434\u0441\u043e\u0440\u0441\u0438\u043d\u0433\u0430).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/109\/564\/ba5\/109564ba5ea599ade50839b0867c4dc7.jpg\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 Shadow-AR \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430.\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 Shadow-AR \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430.\" width=\"1309\" height=\"457\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 Shadow-AR \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430.<\/figcaption><\/figure>\n<h3>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u0440\u044c \u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0438<\/h3>\n<p><strong>Attention<\/strong><\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u043c\u0441\u044f \u043e\u0442 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0442\u0435\u0440\u044c \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u0430\u0440\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f (\u043c\u0430\u0441\u043e\u043a) \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u0440\u044c \u0432\u043e\u0437\u044c\u043c\u0435\u043c <a href=\"https:\/\/en.wikipedia.org\/wiki\/S%C3%B8rensen%E2%80%93Dice_coefficient\" rel=\"noopener noreferrer nofollow\"><em>Dice<\/em><\/a><em> Loss<\/em>. \u041e\u043d\u0430 \u0445\u043e\u0440\u043e\u0448\u043e \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u0430 \u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a \u043d\u0435\u0441\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ef\/f20\/fab\/3eff20fab5e3fba27f5c7123014cf5c7.png\" width=\"857\" height=\"76\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432\u043e\u0437\u044c\u043c\u0435\u043c <a href=\"https:\/\/arxiv.org\/pdf\/1902.09630.pdf\" rel=\"noopener noreferrer nofollow\"><em>IoU<\/em> <\/a>(Intersection over Union). <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/584\/51c\/ecb\/58451cecb2b4d3eec90ae66bb683de5b.png\" width=\"850\" height=\"79\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e <em>Dice Loss<\/em> \u0438 <em>IoU <\/em>\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/www.youtube.com\/watch?v=AZr64OxshLo&amp;ab_channel=SmartAlphaAI\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p><strong>Shadow generation<\/strong><\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0442\u0435\u0440\u044c \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0442\u043e\u0439, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 <a href=\"https:\/\/openaccess.thecvf.com\/content_CVPR_2020\/html\/Liu_ARShadowGAN_Shadow_Generative_Adversarial_Network_for_Augmented_Reality_in_Single_CVPR_2020_paper.html\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a>. \u041e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b \u0442\u0440\u0451\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0442\u0435\u0440\u044c: <em>L2<\/em>, <em>Lper <\/em>\u0438 <em>Ladv<\/em>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ae\/43f\/fd4\/3ae43ffd408e21573eada9e0198ba7ca.png\" width=\"1246\" height=\"67\"><figcaption><\/figcaption><\/figure>\n<p><em>L2<\/em> \u0431\u0443\u0434\u0435\u0442 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 <em>ground truth<\/em> \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 (\u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 <em>refinement<\/em>-\u0431\u043b\u043e\u043a\u0430, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u043a <em>R<\/em>). <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/776\/d79\/740\/776d797409e792a5e1489f068aa6775f.png\" width=\"871\" height=\"498\"><figcaption><\/figcaption><\/figure>\n<p><em>Lper <\/em>(perceptual loss) \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0442\u0435\u0440\u044c, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0449\u0430\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0440\u0442\u0430\u043c\u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432 \u0441\u0435\u0442\u0438 <em>VGG16<\/em> \u043f\u0440\u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0451 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c <em>MSE <\/em>\u043c\u0435\u0436\u0434\u0443 <em>ground truth<\/em> \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0441 \u0442\u0435\u043d\u044c\u044e \u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u2014 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 <em>refinement-<\/em>\u0431\u043b\u043e\u043a\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cda\/f97\/79f\/cdaf9779fa20a2a6fdb0fab68d1f4d98.png\" width=\"1306\" height=\"565\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/10c\/c5a\/dd6\/10cc5add6e5b29c2233b87902a1c0153.png\" width=\"863\" height=\"71\"><figcaption><\/figcaption><\/figure>\n<p><em>Ladv<\/em> \u2014  \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 adversarial \u043b\u043e\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u0435\u0436\u0434\u0443 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0438 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440\u043e\u043c. \u0417\u0434\u0435\u0441\u044c <em>D(.)<\/em> \u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u043a \u043a\u043b\u0430\u0441\u0441\u0443 \u00ab\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u00bb. \u0412 \u0445\u043e\u0434\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c <em>Ladv<\/em>, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u2014 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h3>\n<h4>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/h4>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <em>ARShadowGAN-like<\/em> \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f Python \u2014 <em>pytorch<\/em>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438: \u0447\u0442\u043e \u0434\u043b\u044f \u0447\u0435\u0433\u043e?<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0420\u0430\u0431\u043e\u0442\u0443 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439:<\/p>\n<ul>\n<li>\n<p><em>segmentation-models-pytorch<\/em> \u2014 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 U-Net \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p><em>albumentations<\/em> \u2014 \u0434\u043b\u044f \u0430\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0439;<\/p>\n<\/li>\n<li>\n<p><em>piq <\/em>\u2014 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u0440\u044c;<\/p>\n<\/li>\n<li>\n<p><em>matplotlib <\/em>\u2014 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p><em>numpy <\/em>\u2014 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438;<\/p>\n<\/li>\n<li>\n<p><em>opencv-python<\/em> \u2014 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438;<\/p>\n<\/li>\n<li>\n<p><em>tensorboard <\/em>\u2014 \u0434\u043b\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<\/li>\n<li>\n<p><em>torch <\/em>\u2014 \u0434\u043b\u044f \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p><em>torchvision <\/em>\u2014 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0434\u043b\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p><em>tqdm <\/em>\u2014 \u0434\u043b\u044f progress bar \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">pip install segmentation-models-pytorch==0.1.0 pip install albumentations==0.5.1 pip install piq==0.5.1 pip install matplotlib==3.2.1 pip install numpy==1.18.4 pip install opencv-python&gt;=3.4.5.20 pip install tensorboard==2.2.1 pip install torch&gt;=1.5.0 pip install torchvision&gt;=0.6.0 pip install tqdm&gt;=4.41.1<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h3>\u0414\u0430\u0442\u0430\u0441\u0435\u0442<\/h3>\n<details class=\"spoiler\">\n<summary>\u0414\u0430\u0442\u0430\u0441\u0435\u0442: \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435, \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/drive.google.com\/file\/d\/1CsKIg8tV6gP35l_u3Dg-RKrXBggJrNaL\/view?usp=sharing\" rel=\"noopener noreferrer nofollow\">\u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442<\/a>. \u0412 \u043d\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0436\u0435 \u0440\u0430\u0437\u0431\u0438\u0442\u044b \u043d\u0430 <em>train <\/em>\u0438 <em>test <\/em>\u0432\u044b\u0431\u043e\u0440\u043a\u0438. \u0421\u043a\u0430\u0447\u0430\u0435\u043c \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u0443\u0435\u043c \u0435\u0433\u043e.<\/p>\n<pre><code class=\"bash\">unzip shadow_ar_dataset.zip<\/code><\/pre>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043e\u043a \u0432 \u043d\u0430\u0431\u043e\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f. <\/p>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 5 \u043f\u0430\u043f\u043e\u043a \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438: <br \/>&#8212; <em>noshadow <\/em>(\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0442\u0435\u043d\u0435\u0439); <br \/>&#8212; <em>shadow <\/em>(\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 \u0442\u0435\u043d\u044f\u043c\u0438); <br \/>&#8212; <em>mask <\/em>(\u043c\u0430\u0441\u043a\u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432); <br \/>&#8212; <em>robject <\/em>(\u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438\u043b\u0438 \u043e\u043a\u043a\u043b\u044e\u0434\u0435\u0440\u044b); <br \/>&#8212; <em>rshadow <\/em>(\u0442\u0435\u043d\u0438 \u043e\u0442 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432).<\/p>\n<pre><code class=\"python\">dataset \u251c\u2500\u2500 train \u2502   \u251c\u2500\u2500 noshadow \u2500\u2500 example1.png, ... \u2502   \u251c\u2500\u2500 shadow \u2500\u2500\u2500\u2500 example1.png, ... \u2502   \u251c\u2500\u2500 mask \u2500\u2500\u2500\u2500\u2500\u2500 example1.png, ... \u2502   \u251c\u2500\u2500 robject \u2500\u2500\u2500 example1.png, ... \u2502   \u2514\u2500\u2500 rshadow \u2500\u2500\u2500 example1.png, ... \u2514\u2500\u2500 test     \u251c\u2500\u2500 noshadow \u2500\u2500 example2.png, ...     \u251c\u2500\u2500 shadow \u2500\u2500\u2500\u2500 example2.png, ...     \u251c\u2500\u2500 mask \u2500\u2500\u2500\u2500\u2500\u2500 example2.png, ...     \u251c\u2500\u2500 robject \u2500\u2500\u2500 example2.png, ...     \u2514\u2500\u2500 rshadow \u2500\u2500\u2500 example2.png, ...<\/code><\/pre>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439.<\/p>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418\u0442\u0430\u043a, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043a\u043b\u0430\u0441\u0441 <em>ARDataset <\/em>\u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0432\u044b\u0434\u0430\u0447\u0438<em> i<\/em>-\u043e\u0439 \u043f\u043e\u0440\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u043c\u043f\u043e\u0440\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import os import os.path as osp import cv2 import random import numpy as np import albumentations as albu  import torch import torch.nn as nn from torch.utils.data import Dataset, DataLoader from torch.autograd import Variable from piq import ContentLoss import segmentation_models_pytorch as smp<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0441\u0430\u043c <strong>\u043a\u043b\u0430\u0441\u0441<\/strong>. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u2014 <code>__getitem__()<\/code> . \u041e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <em>i<\/em>-\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0435\u043c\u0443 \u043c\u0430\u0441\u043a\u0443 \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043b\u0430\u0441\u0441 ARDataset<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">class ARDataset(Dataset):     def __init__(self, dataset_path, augmentation=None, \\                  augmentation_images=None, preprocessing=None, \\                  is_train=True, ):         \"\"\" \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430          dataset_path - \u043f\u0443\u0442\u044c \u0434\u043e \u043f\u0430\u043f\u043a\u0438 train \u0438\u043b\u0438 test         augmentation - \u0430\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u043a\u0430\u043a \u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c, \u0442\u0430\u043a \u0438                        \u043a \u043c\u0430\u0441\u043a\u0430\u043c         augmentation_images - \u0430\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a          \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c         preprocessing - \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439         is_train - \u0444\u043b\u0430\u0433 [True - \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \/ False - \u0440\u0435\u0436\u0438\u043c \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f]         \"\"\"         noshadow_path = os.path.join(dataset_path, 'noshadow')         mask_path = os.path.join(dataset_path, 'mask')          # \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u043f\u0443\u0442\u0438 \u0434\u043e \u0444\u0430\u0439\u043b\u043e\u0432         self.noshadow_paths = []; self.mask_paths = [];         self.rshadow_paths = []; self.robject_paths = [];         self.shadow_paths = [];          if is_train:             rshadow_path = osp.join(dataset_path, 'rshadow')             robject_path = osp.join(dataset_path, 'robject')             shadow_path = osp.join(dataset_path, 'shadow')          files_names_list = sorted(os.listdir(noshadow_path))          for file_name in files_names_list:             self.noshadow_paths.append(osp.join(noshadow_path, file_name))             self.mask_paths.append(osp.join(mask_path, file_name))              if is_train:                 self.rshadow_paths.append(osp.join(rshadow_path, file_name))                 self.robject_paths.append(osp.join(robject_path, file_name))                 self.shadow_paths.append(osp.join(shadow_path, file_name))          self.augmentation = augmentation         self.augmentation_images = augmentation_images         self.preprocessing = preprocessing         self.is_train = is_train      def __getitem__(self, i):         \"\"\" \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 i-\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0438\u0437 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430.         i - \u0438\u043d\u0434\u0435\u043a\u0441          \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442:         image - \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u043b\u044f attention \u0431\u043b\u043e\u043a\u0430         mask - \u043c\u0430\u0441\u043a\u0430 \u0441 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u043b\u044f attention \u0431\u043b\u043e\u043a\u0430         image1 - \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u043b\u044f shadow generation \u0431\u043b\u043e\u043a\u0430         mask1 - \u043c\u0430\u0441\u043a\u0430 \u0441 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u043b\u044f shadow generaion \u0431\u043b\u043e\u043a\u0430         \"\"\"         # \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435         image = cv2.imread(self.noshadow_paths[i])         image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)          # \u043c\u0430\u0441\u043a\u0430 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430         mask = cv2.imread(self.mask_paths[i], 0)          if self.is_train:             # \u043c\u0430\u0441\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432             robject_mask = cv2.imread(self.robject_paths[i], 0)              # \u043c\u0430\u0441\u043a\u0430 \u0442\u0435\u043d\u0435\u0439 \u043e\u0442 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432             rshadow_mask = cv2.imread(self.rshadow_paths[i], 0)              # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435             res_image = cv2.imread(self.shadow_paths[i])             res_image = cv2.cvtColor(res_image, cv2.COLOR_BGR2RGB)              # \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0430\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c             if self.augmentation_images:                 sample = self.augmentation_images(                   image=image,                    image1=res_image                 )                 image = sample['image']                 res_image = sample['image1']              # \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u043c\u0430\u0441\u043a\u0438 \u0432 \u043e\u0434\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0430\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0439             mask = np.stack([robject_mask, rshadow_mask, mask], axis=-1)             mask = mask.astype('float')              # \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438             image = np.concatenate([image, res_image], axis=2)             image = image.astype('float')          # \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0430\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438         if self.augmentation:             sample = self.augmentation(image=image, mask=mask)             image, mask = sample['image'], sample['mask']          # \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0430\u0441\u043e\u043a         mask[mask &gt;= 128] = 255; mask[mask &lt; 128] = 0         # \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f shadow generation \u0431\u043b\u043e\u043a\u0430         image1, mask1 = image.astype(np.float) \/ 127.5 - 1.0, \\                         mask.astype(np.float) \/ 127.5 - 1.0         # \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f attention \u0431\u043b\u043e\u043a\u0430         image, mask = image.astype(np.float) \/ 255.0, \\                       mask.astype(np.float) \/ 255.0          # \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433         if self.preprocessing:             sample = self.preprocessing(image=image, mask=mask)             image, mask = sample['image'], sample['mask']              sample = self.preprocessing(image=image1, mask=mask1)             image1, mask1 = sample['image'], sample['mask']          return image, mask, image1, mask1      def __len__(self):         \"\"\" \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430\"\"\"         return len(self.noshadow_paths)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u043c<strong> \u0430\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/strong> \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0410\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u043c \u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f <a href=\"https:\/\/github.com\/albumentations-team\/albumentations\" rel=\"noopener noreferrer nofollow\">albumentations<\/a>. <\/p>\n<details class=\"spoiler\">\n<summary>\u0410\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0435\u0434\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def get_training_augmentation():     \"\"\" \u0410\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430. \"\"\"     train_transform = [         albu.Resize(256,256),         albu.HorizontalFlip(p=0.5),         albu.Rotate(p=0.3, limit=(-10, 10), interpolation=3, border_mode=2),     ]     return albu.Compose(train_transform)   def get_validation_augmentation():     \"\"\" \u0410\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \/ \u0442\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430 \"\"\"     test_transform = [         albu.Resize(256,256),     ]     return albu.Compose(test_transform)   def get_image_augmentation():     \"\"\" \u0410\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (\u043d\u0435 \u0434\u043b\u044f \u043c\u0430\u0441\u043e\u043a). \"\"\"     image_transform = [         albu.OneOf([           albu.Blur(p=0.2, blur_limit=(3, 5)),           albu.GaussNoise(p=0.2, var_limit=(10.0, 50.0)),           albu.ISONoise(p=0.2, intensity=(0.1, 0.5), \\                         color_shift=(0.01, 0.05)),           albu.ImageCompression(p=0.2, quality_lower=90, quality_upper=100, \\                                 compression_type=0),           albu.MultiplicativeNoise(p=0.2, multiplier=(0.9, 1.1), \\                                    per_channel=True, \\                                    elementwise=True),         ], p=1),         albu.OneOf([           albu.HueSaturationValue(p=0.2, hue_shift_limit=(-10, 10), \\                                   sat_shift_limit=(-10, 10), \\                                   val_shift_limit=(-10, 10)),           albu.RandomBrightness(p=0.3, limit=(-0.1, 0.1)),           albu.RandomGamma(p=0.3, gamma_limit=(80, 100), eps=1e-07),           albu.ToGray(p=0.1),           albu.ToSepia(p=0.1),         ], p=1)     ]     return albu.Compose(image_transform, additional_targets={         'image1': 'image',         'image2': 'image'     })   def get_preprocessing():     \"\"\" \u041f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433 \"\"\"     _transform = [         albu.Lambda(image=to_tensor, mask=to_tensor),     ]     return albu.Compose(_transform)   def to_tensor(x, **kwargs):     \"\"\" \u041f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442: [channels, width, height] \"\"\"     return x.transpose(2, 0, 1).astype('float32')<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h3>\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u043c <strong>\u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b <\/strong>\u0438 <strong>\u0434\u0430\u0442\u0430\u043b\u043e\u0430\u0434\u0435\u0440\u044b <\/strong>\u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u0435\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0443\u0447\u0430\u0442\u044c\u0441\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u0430\u0442\u0430\u0441\u0435\u0442\u044b, \u0434\u0430\u0442\u0430\u043b\u043e\u0430\u0434\u0435\u0440\u044b, \u0434\u0435\u0432\u0430\u0439\u0441<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\"># \u0447\u0438\u0441\u043b\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u0437\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 batch_size = 8 dataset_path = '\/path\/to\/your\/dataset' train_path = osp.join(dataset_path, 'train') test_path = osp.join(dataset_path, 'test')  # \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b train_dataset = ARDataset(train_path,\\                           augmentation=get_training_augmentation(),\\                           preprocessing=get_preprocessing(),) valid_dataset = ARDataset(test_path, \\                           augmentation=get_validation_augmentation(),\\                           preprocessing=get_preprocessing(),)  # \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u0434\u0430\u0442\u0430\u043b\u043e\u0430\u0434\u0435\u0440\u044b train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True) valid_loader = DataLoader(valid_dataset, batch_size=batch_size, shuffle=False)<\/code><\/pre>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c <strong>\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e<\/strong>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u0443\u0447\u0438\u0442\u044c \u0441\u0435\u0442\u044c:<\/p>\n<pre><code class=\"python\">device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0411\u0443\u0434\u0435\u043c \u0443\u0447\u0438\u0442\u044c <em>attention <\/em>\u0438 <em>shadow generation<\/em> \u0431\u043b\u043e\u043a\u0438 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h4>\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 attention \u0431\u043b\u043e\u043a\u0430<\/h4>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 <em>attention<\/em> \u0431\u043b\u043e\u043a\u0430 \u0432\u043e\u0437\u044c\u043c\u0451\u043c <a href=\"https:\/\/arxiv.org\/pdf\/1505.04597.pdf\" rel=\"noopener noreferrer nofollow\"><em>U-Net<\/em><\/a>. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f <a href=\"https:\/\/github.com\/qubvel\/segmentation_models.pytorch\" rel=\"noopener noreferrer nofollow\">segmentation_models<em>.<\/em>pytorch<\/a>.  \u0414\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0435\u0442\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u0447\u0430\u0441\u0442\u044c <em>U-Net<\/em> \u043d\u0430 \u0441\u0435\u0442\u044c-\u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <em>resnet34<\/em>. <\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430 \u0432\u0445\u043e\u0434 <em>attention<\/em> \u0431\u043b\u043e\u043a \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 \u0438 \u043c\u0430\u0441\u043a\u0443 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u043b\u043e\u0439 \u0432 \u043c\u043e\u0434\u0435\u043b\u0438: \u043d\u0430 \u0432\u0445\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044e \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 4-\u043a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043d\u0437\u043e\u0440 (3 \u0446\u0432\u0435\u0442\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u0430 + 1 \u0447\u0435\u0440\u043d\u043e-\u0431\u0435\u043b\u044b\u0439).<\/p>\n<pre><code class=\"python\"># \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044c Unet \u0441 2 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 - 2 \u043c\u0430\u0441\u043a\u0438 (\u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u0438\u0445 \u0442\u0435\u043d\u0438) model = smp.Unet(encoder_name='resnet34', classes=2, activation='sigmoid',) # \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u043b\u043e\u0439 - \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c 4 \u043a\u0430\u043d\u0430\u043b\u0430 model.encoder.conv1 = nn.Conv2d(4, 64, kernel_size=(7, 7), stride=(2, 2), \\                                 padding=(3, 3), bias=False)<\/code><\/pre>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u043c <strong>\u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0442\u0435\u0440\u044c<\/strong>, <strong>\u043c\u0435\u0442\u0440\u0438\u043a\u0443 <\/strong>\u0438 <strong>\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440<\/strong>.<\/p>\n<pre><code class=\"python\">loss = smp.utils.losses.DiceLoss() metric = smp.utils.metrics.IoU(threshold=0.5) optimizer = torch.optim.Adam([dict(params=model.parameters(), lr=1e-4),])<\/code><\/pre>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f <em>attention<\/em> \u0431\u043b\u043e\u043a\u0430.  \u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0440\u0435\u0445 \u0446\u0438\u043a\u043b\u043e\u0432: \u0446\u0438\u043a\u043b\u0430 \u043f\u043e \u044d\u043f\u043e\u0445\u0430\u043c, \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u043e \u0431\u0430\u0442\u0447\u0430\u043c \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u043e \u0431\u0430\u0442\u0447\u0430\u043c. <\/p>\n<p>\u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0434\u0430\u0442\u0430\u043b\u043e\u0430\u0434\u0435\u0440\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u0440\u043e\u0433\u043e\u043d \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0439. \u0414\u0430\u043b\u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u0440\u044c \u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f (\u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438), \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u0441\u043e\u0432.<\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f attention \u0438 \u0435\u0451 \u0432\u044b\u0437\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def train(n_epoch, train_loader, valid_loader, model_path, model, loss,\\           metric, optimizer, device):     \"\"\" \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438.      n_epoch -- \u0447\u0438\u0441\u043b\u043e \u044d\u043f\u043e\u0445     train_loader -- \u0434\u0430\u0442\u0430\u043b\u043e\u0430\u0434\u0435\u0440 \u0434\u043b\u044f \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438     valid_loader -- \u0434\u0430\u0442\u0430\u043b\u043e\u0430\u0434\u0435\u0440 \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438     model_path -- \u043f\u0443\u0442\u044c \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438     model -- \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c     loss -- \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0442\u0435\u0440\u044c     metric -- \u043c\u0435\u0442\u0440\u0438\u043a\u0430     optimizer -- \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440     device -- \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 torch.device     \"\"\"     model.to(device)      max_score = 0     total_train_steps = len(train_loader)     total_valid_steps = len(valid_loader)      # \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0446\u0438\u043a\u043b \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f     print('Start training!')      for epoch in range(n_epoch):         # \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0451\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u0440\u0435\u0436\u0438\u043c \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438         model.train()         train_loss = 0.0         train_metric = 0.0          # \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043f\u043e \u0431\u0430\u0442\u0447\u0430\u043c         for data in train_loader:             noshadow_image = data[0][:, :3].to(device)             robject_mask = torch.unsqueeze(data[1][:, 0], 1).to(device)             rshadow_mask = torch.unsqueeze(data[1][:, 1], 1).to(device)             mask = torch.unsqueeze(data[1][:, 2], 1).to(device)              # \u043f\u0440\u043e\u0433\u043e\u043d\u0438\u043c \u0447\u0435\u0440\u0435\u0437 \u043c\u043e\u0434\u0435\u043b\u044c             model_input = torch.cat((noshadow_image, mask), axis=1)             model_output = model(model_input)              # \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0432\u044b\u0445\u043e\u0434 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441 ground truth \u0434\u0430\u043d\u043d\u044b\u043c\u0438             ground_truth = torch.cat((robject_mask, rshadow_mask), axis=1)             loss_result = loss(ground_truth, model_output)             train_metric += metric(ground_truth, model_output).item()              optimizer.zero_grad()             loss_result.backward()             optimizer.step()              train_loss += loss_result.item()          # \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0451\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0432 eval-\u0440\u0435\u0436\u0438\u043c         model.eval()         valid_loss = 0.0         valid_metric = 0.0          # \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043f\u043e \u0431\u0430\u0442\u0447\u0430\u043c         for data in valid_loader:             noshadow_image = data[0][:, :3].to(device)             robject_mask = torch.unsqueeze(data[1][:, 0], 1).to(device)             rshadow_mask = torch.unsqueeze(data[1][:, 1], 1).to(device)             mask = torch.unsqueeze(data[1][:, 2], 1).to(device)              # \u043f\u0440\u043e\u0433\u043e\u043d\u0438\u043c \u0447\u0435\u0440\u0435\u0437 \u043c\u043e\u0434\u0435\u043b\u044c             model_input = torch.cat((noshadow_image, mask), axis=1)              with torch.no_grad():                 model_output = model(model_input)              # \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u0432\u044b\u0445\u043e\u0434 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441 ground truth \u0434\u0430\u043d\u043d\u044b\u043c\u0438             ground_truth = torch.cat((robject_mask, rshadow_mask), axis=1)             loss_result = loss(ground_truth, model_output)             valid_metric += metric(ground_truth, model_output).item()             valid_loss += loss_result.item()          train_loss = train_loss \/ total_train_steps         train_metric = train_metric \/ total_train_steps         valid_loss = valid_loss \/ total_valid_steps         valid_metric = valid_metric \/ total_valid_steps          print(f'\\nEpoch {epoch}, train_loss: {train_loss}, train_metric: {train_metric}, valid_loss: {valid_loss}, valid_metric: {valid_metric}')          # \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043f\u043e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 - \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c         if max_score &lt; valid_metric:             max_score = valid_metric             torch.save(model.state_dict(), model_path)             print('Model saved!')   # \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e:  # \u0447\u0438\u0441\u043b\u043e \u044d\u043f\u043e\u0445 n_epoch = 10 # \u043f\u0443\u0442\u044c \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 model_path = '\/path\/for\/model\/saving'   train(n_epoch=n_epoch,       train_loader=train_loader,       valid_loader=valid_loader,       model_path=model_path,       model=model,       loss=loss,       metric=metric,       optimizer=optimizer,       device=device)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 <em>attention<\/em> \u0431\u043b\u043e\u043a\u0430 \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043e, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0435\u0442\u0438.<\/p>\n<h4>\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 shadow generation \u0431\u043b\u043e\u043a\u0430<\/h4>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 <em>shadow generation <\/em>\u0431\u043b\u043e\u043a\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0432\u043e\u0437\u044c\u043c\u0451\u043c <a href=\"https:\/\/arxiv.org\/pdf\/1505.04597.pdf\" rel=\"noopener noreferrer nofollow\"><em>U-Net<\/em><\/a>, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0441\u0435\u0442\u044c \u043f\u043e\u043b\u0435\u0433\u0447\u0435 \u2014 <em>resnet18<\/em>. <\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430 \u0432\u0445\u043e\u0434 <em>shadow generation<\/em> \u0431\u043b\u043e\u043a \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 \u0438 3 \u043c\u0430\u0441\u043a\u0438 (\u043c\u0430\u0441\u043a\u0443 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043c\u0430\u0441\u043a\u0443 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u043c\u0430\u0441\u043a\u0443 \u0442\u0435\u043d\u0435\u0439 \u043e\u0442 \u043d\u0438\u0445), \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u043b\u043e\u0439 \u0432 \u043c\u043e\u0434\u0435\u043b\u0438: \u043d\u0430 \u0432\u0445\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044e \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 6-\u043a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043d\u0437\u043e\u0440 (3 \u0446\u0432\u0435\u0442\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u0430 + 3 \u0447\u0435\u0440\u043d\u043e-\u0431\u0435\u043b\u044b\u0445).<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 <em>U-Net<\/em> \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043a\u043e\u043d\u0446\u0435 4 <em>refinement<\/em>-\u0431\u043b\u043e\u043a\u0430. \u041e\u0434\u0438\u043d \u0442\u0430\u043a\u043e\u0439 \u0431\u043b\u043e\u043a \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438: <em>BatchNorm2d<\/em>, <em>ReLU<\/em> \u0438 <em>Conv2d<\/em>.<\/p>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u043c \u043a\u043b\u0430\u0441\u0441 <strong>\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440<\/strong>.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043b\u0430\u0441\u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">class Generator_with_Refin(nn.Module):     def __init__(self, encoder):         \"\"\" \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430.\"\"\"         super(Generator_with_Refin, self).__init__()         self.generator = smp.Unet(             encoder_name=encoder,             classes=1,             activation='identity',         )         self.generator.encoder.conv1 = nn.Conv2d(6, 64, kernel_size=(7, 7), \\                                                  stride=(2, 2), padding=(3, 3), \\                                                  bias=False)         self.generator.segmentation_head = nn.Identity()         self.SG_head = nn.Conv2d(in_channels=16, out_channels=3, \\                                  kernel_size=3, stride=1, padding=1)          self.refinement = torch.nn.Sequential()         for i in range(4):             self.refinement.add_module(f'refinement{3*i+1}', nn.BatchNorm2d(16))             self.refinement.add_module(f'refinement{3*i+2}', nn.ReLU())             refinement3 = nn.Conv2d(in_channels=16, out_channels=16, \\                                     kernel_size=3, stride=1, padding=1)             self.refinement.add_module(f'refinement{3*i+3}', refinement3)          self.output1 = nn.Conv2d(in_channels=16, out_channels=3, kernel_size=3, \\                                  stride=1, padding=1)      def forward(self, x):       \t\"\"\" \u041f\u0440\u044f\u043c\u043e\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0442\u044c.\"\"\"         x = self.generator(x)         out1 = self.SG_head(x)          x = self.refinement(x)         x = self.output1(x)         return out1, x<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u043c \u043a\u043b\u0430\u0441\u0441 <strong>\u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440.<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043b\u0430\u0441\u0441 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">class Discriminator(nn.Module):     def __init__(self, input_shape):         super(Discriminator, self).__init__()          self.input_shape = input_shape         in_channels, in_height, in_width = self.input_shape         patch_h, patch_w = int(in_height \/ 2 ** 4), int(in_width \/ 2 ** 4)         self.output_shape = (1, patch_h, patch_w)          def discriminator_block(in_filters, out_filters, first_block=False):             layers = []             layers.append(nn.Conv2d(in_filters, out_filters, kernel_size=3, \\                                     stride=1, padding=1))             if not first_block:                 layers.append(nn.BatchNorm2d(out_filters))             layers.append(nn.LeakyReLU(0.2, inplace=True))             layers.append(nn.Conv2d(out_filters, out_filters, kernel_size=3, \\                                     stride=2, padding=1))             layers.append(nn.BatchNorm2d(out_filters))             layers.append(nn.LeakyReLU(0.2, inplace=True))             return layers          layers = []         in_filters = in_channels         for i, out_filters in enumerate([64, 128, 256, 512]):             layers.extend(discriminator_block(in_filters, out_filters, \\                                               first_block=(i == 0)))             in_filters = out_filters          layers.append(nn.Conv2d(out_filters, 1, kernel_size=3, stride=1, \\                                 padding=1))          self.model = nn.Sequential(*layers)      def forward(self, img):         return self.model(img)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 <strong>\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u0440\u044c<\/strong> \u0438 <strong>\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440 <\/strong>\u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u0440\u044c, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">generator = Generator_with_Refin('resnet18') discriminator = Discriminator(input_shape=(3,256,256))  l2loss = nn.MSELoss() perloss = ContentLoss(feature_extractor=\"vgg16\", layers=(\"relu3_3\", )) GANloss = nn.MSELoss()  optimizer_G = torch.optim.Adam([dict(params=generator.parameters(), lr=1e-4),]) optimizer_D = torch.optim.Adam([dict(params=discriminator.parameters(), lr=1e-6),])<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f <em>SG<\/em> \u0431\u043b\u043e\u043a\u0430. \u0415\u0451 \u0432\u044b\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0432\u044b\u0437\u043e\u0432\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f <em>attention<\/em>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f SG \u0431\u043b\u043e\u043a\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def train(generator, discriminator, device, n_epoch, optimizer_G, optimizer_D, train_loader, valid_loader, scheduler, losses, models_paths, bettas, writer):     \"\"\"\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f SG-\u0431\u043b\u043e\u043a\u0430          generator: \u043c\u043e\u0434\u0435\u043b\u044c-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440         discriminator: \u043c\u043e\u0434\u0435\u043b\u044c-\u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440         device: torch-device \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f         n_epoch: \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043f\u043e\u0445         optimizer_G: \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430         optimizer_D: \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438-\u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440\u0430         train_loader: \u0434\u0430\u0442\u0430\u043b\u043e\u0430\u0434\u0435\u0440 \u0434\u043b\u044f \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438         valid_loader: \u0434\u0430\u0442\u0430\u043b\u043e\u0430\u0434\u0435\u0440 \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438         scheduler: \u0448\u0435\u0434\u0443\u043b\u043b\u0435\u0440 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f         losses:  \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0442\u0435\u0440\u044c         models_paths: \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0443\u0442\u0435\u0439 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439         bettas: \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0442\u0435\u0440\u044c         writer: tensorboard writer     \"\"\"     # \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 \u0413\u041f\u0423     generator.to(device)     discriminator.to(device)      # \u0434\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430     val_common_min = np.inf      print('\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435!')     for epoch in range(n_epoch):         # \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f         generator.train()         discriminator.train()          # \u0441\u043f\u0438\u0441\u043a\u0438 \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0442\u0435\u0440\u044c         train_l2_loss = []; train_per_loss = []; train_common_loss = [];          train_D_loss = []; valid_l2_loss = []; valid_per_loss = [];          valid_common_loss = [];          print('\u0426\u0438\u043a\u043b \u043f\u043e \u0431\u0430\u0442\u0447\u0430\u043c (\u043f\u0430\u043a\u0435\u0442\u0430\u043c):')         for batch_i, data in enumerate(tqdm(train_loader)):             noshadow_image = data[2][:, :3].to(device)             shadow_image = data[2][:, 3:].to(device)             robject_mask = torch.unsqueeze(data[3][:, 0], 1).to(device)             rshadow_mask = torch.unsqueeze(data[3][:, 1], 1).to(device)             mask = torch.unsqueeze(data[3][:, 2], 1).to(device)              # \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u043d\u0437\u043e\u0440 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438             model_input = torch.cat((noshadow_image, mask, robject_mask, rshadow_mask), axis=1)             # ------------ \u0443\u0447\u0438\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 -------------------------------------             shadow_mask_tensor1, shadow_mask_tensor2 = generator(model_input)             result_nn_tensor1 = torch.add(noshadow_image, shadow_mask_tensor1)             result_nn_tensor2 = torch.add(noshadow_image, shadow_mask_tensor2)              for_per_shadow_image_tensor = torch.sigmoid(shadow_image)             for_per_result_nn_tensor1 = torch.sigmoid(result_nn_tensor1)             for_per_result_nn_tensor2 = torch.sigmoid(result_nn_tensor2)              # Adversarial ground truths             valid = Variable(torch.cuda.FloatTensor(np.ones((data[2].size(0), *discriminator.output_shape))), requires_grad=False)             fake = Variable(torch.cuda.FloatTensor(np.zeros((data[2].size(0), *discriminator.output_shape))), requires_grad=False)              # \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u0440\u044c             l2_loss = losses[0](shadow_image, result_nn_tensor1) + losses[0](shadow_image, result_nn_tensor2)             per_loss = losses[1](for_per_shadow_image_tensor, for_per_result_nn_tensor1) + losses[1](for_per_shadow_image_tensor, for_per_result_nn_tensor2)             gan_loss = losses[2](discriminator(result_nn_tensor2), valid)             common_loss = bettas[0] * l2_loss + bettas[1] * per_loss + bettas[2] * gan_loss              optimizer_G.zero_grad()             common_loss.backward()             optimizer_G.step()              # ------------ \u0443\u0447\u0438\u043c \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440 ---------------------------------             optimizer_D.zero_grad()              loss_real = losses[2](discriminator(shadow_image), valid)             loss_fake = losses[2](discriminator(result_nn_tensor2.detach()), fake)             loss_D = (loss_real + loss_fake) \/ 2              loss_D.backward()             optimizer_D.step()              # ------------------------------------------------------------------             train_l2_loss.append((bettas[0] * l2_loss).item())             train_per_loss.append((bettas[1] * per_loss).item())             train_D_loss.append((bettas[2] * loss_D).item())             train_common_loss.append(common_loss.item())          # \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c generator \u0432 eval-\u0440\u0435\u0436\u0438\u043c         generator.eval()          # \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f         for batch_i, data in enumerate(valid_loader):             noshadow_image = data[2][:, :3].to(device)             shadow_image = data[2][:, 3:].to(device)             robject_mask = torch.unsqueeze(data[3][:, 0], 1).to(device)             rshadow_mask = torch.unsqueeze(data[3][:, 1], 1).to(device)             mask = torch.unsqueeze(data[3][:, 2], 1).to(device)              # \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0432\u0445\u043e\u0434 \u0432 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438             model_input = torch.cat((noshadow_image, mask, robject_mask, rshadow_mask), axis=1)              with torch.no_grad():                 shadow_mask_tensor1, shadow_mask_tensor2 = generator(model_input)              result_nn_tensor1 = torch.add(noshadow_image, shadow_mask_tensor1)             result_nn_tensor2 = torch.add(noshadow_image, shadow_mask_tensor2)              for_per_result_shadow_image_tensor = torch.sigmoid(shadow_image)             for_per_result_nn_tensor1 = torch.sigmoid(result_nn_tensor1)             for_per_result_nn_tensor2 = torch.sigmoid(result_nn_tensor2)              # \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u0440\u044c             l2_loss = losses[0](shadow_image, result_nn_tensor1) + losses[0](shadow_image, result_nn_tensor2)             per_loss = losses[1](for_per_result_shadow_image_tensor, for_per_result_nn_tensor1) + losses[1](for_per_result_shadow_image_tensor, for_per_result_nn_tensor2)             common_loss = bettas[0] * l2_loss + bettas[1] * per_loss              valid_per_loss.append((bettas[1] * per_loss).item())             valid_l2_loss.append((bettas[0] * l2_loss).item())             valid_common_loss.append(common_loss.item())          # \u0443\u0441\u0440\u0435\u0434\u043d\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0442\u0435\u0440\u044c         tr_l2_loss = np.mean(train_l2_loss)         val_l2_loss = np.mean(valid_l2_loss)         tr_per_loss = np.mean(train_per_loss)         val_per_loss = np.mean(valid_per_loss)         tr_common_loss = np.mean(train_common_loss)         val_common_loss = np.mean(valid_common_loss)         tr_D_loss = np.mean(train_D_loss)          # \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 tensorboard         writer.add_scalar('tr_l2_loss', tr_l2_loss, epoch)         writer.add_scalar('val_l2_loss', val_l2_loss, epoch)         writer.add_scalar('tr_per_loss', tr_per_loss, epoch)         writer.add_scalar('val_per_loss', val_per_loss, epoch)         writer.add_scalar('tr_common_loss', tr_common_loss, epoch)         writer.add_scalar('val_common_loss', val_common_loss, epoch)         writer.add_scalar('tr_D_loss', tr_D_loss, epoch)          # \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e         print(f'\\nEpoch {epoch}, tr_common loss: {tr_common_loss:.4f}, val_common loss: {val_common_loss:.4f}, D_loss {tr_D_loss:.4f}')          if val_common_loss &lt;= val_common_min:             # \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043b\u0443\u0447\u0448\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c             torch.save(generator.state_dict(), models_paths[0])             torch.save(discriminator.state_dict(), models_paths[1])             val_common_min = val_common_loss             print(f'Model saved!')          # \u0434\u0435\u043b\u0430\u0435\u043c \u0448\u0430\u0433 \u0448\u0435\u0434\u0443\u043b\u043b\u0435\u0440\u0430         scheduler.step(val_common_loss)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h3>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f<\/h3>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/q_\/7d\/dm\/q_7ddmkbvqt8zou9hmui3_qkk3a.gif\" alt=\"\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \" title=\"\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \" width=\"514\" height=\"260\"><figcaption>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f <\/figcaption><\/figure>\n<h4>\u0413\u0440\u0430\u0444\u0438\u043a\u0438, \u043e\u0431\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f<\/h4>\n<p>\u0414\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0443 GTX 1080Ti \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 hostkey. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0442\u0435\u0440\u044c \u043f\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u044b <a href=\"https:\/\/pytorch.org\/docs\/stable\/tensorboard.html\" rel=\"noopener noreferrer nofollow\">tensorboard<\/a>. \u041d\u0438\u0436\u0435, \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0430\u0445, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0439 \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a24\/925\/892\/a2492589240c358b90d6baf814a47ac8.jpg\" alt=\"\u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u2014 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430\" title=\"\u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u2014 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430\" width=\"1500\" height=\"1000\"><figcaption>\u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u2014 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430<\/figcaption><\/figure>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0438\u0441\u0443\u043d\u043e\u043a, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430 \u043d\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0439. \u041f\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0430\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432\u044b\u0445\u043e\u0434 \u043d\u0430 \u043f\u043b\u0430\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u043b \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 200-250-\u0439 \u044d\u043f\u043e\u0445\u0438. \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u0436\u0435 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u0440\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0432 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0448\u043a\u0430\u043b\u0435 \u2014 \u043e\u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0430. \u041f\u043e \u0433\u0440\u0430\u0444\u0438\u043a\u0443 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u0440\u044c \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 200-250-\u0439 \u044d\u043f\u043e\u0445\u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u043d\u043e\u0432\u0430\u0442\u043e, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u043e\u0437\u0436\u0435, \u043d\u0430 400-\u0439 \u044d\u043f\u043e\u0445\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/87b\/13f\/b4a\/87b13fb4a7dec794c757c81a99923ed6.jpg\" alt=\"\u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u2014 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430\" title=\"\u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u2014 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430\" width=\"1500\" height=\"1000\"><figcaption>\u0413\u0440\u0430\u0444\u0438\u043a\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u2014 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430<\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 (\u0441\u043c. \u0433\u0438\u0444\u043a\u0443 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0448\u0435).<\/p>\n<h4>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438<\/h4>\n<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u2014 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0432\u0437\u0432\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0442\u0435\u0440\u044c. <\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430\u0448\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0442\u0435\u0440\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 <em>\u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u043e\u0439<\/em> \u0441\u0443\u043c\u043c\u044b \u0434\u0440\u0443\u0433\u0438\u0445 \u043b\u043e\u0441\u0441-\u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u043a\u043b\u0430\u0434 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0432 \u043e\u0431\u0449\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0443\u0442\u0451\u043c \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043d\u0438\u0445. \u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u0432\u0437\u044f\u0442\u044c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. <\/p>\n<p>\u041f\u0440\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0435 \u043b\u043e\u0441\u0441-\u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0434\u043b\u044f <em>L2<\/em> \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u043a\u043b\u0430\u0434, \u0442\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0438 \u0432\u043e\u0432\u0441\u0435 \u0437\u0430\u0441\u0442\u043e\u043f\u043e\u0440\u0438\u0442\u044c\u0441\u044f. <em>L2 <\/em>\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0432\u0441\u0435\u043c \u0443\u0431\u0438\u0440\u0430\u0442\u044c \u0435\u0451 \u0438\u0437 \u043e\u0431\u0449\u0435\u0439 \u0441\u0443\u043c\u043c\u044b \u0442\u043e\u0436\u0435 \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u2014 \u0432\u044b\u0445\u043e\u0434\u043d\u0430\u044f \u0442\u0435\u043d\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u043d\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0439, \u043c\u0435\u043d\u0435\u0435 \u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0439 \u043f\u043e \u0446\u0432\u0435\u0442\u0443 \u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438. <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f66\/51c\/607\/f6651c607a8cbfca60a9f746408964b6\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043d\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0432\u043a\u043b\u0430\u0434\u0430 L2-\u043b\u043e\u0441\u0441\u0430\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043d\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0432\u043a\u043b\u0430\u0434\u0430 L2-\u043b\u043e\u0441\u0441\u0430\" width=\"518\" height=\"260\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043d\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0432\u043a\u043b\u0430\u0434\u0430 L2-\u043b\u043e\u0441\u0441\u0430<\/figcaption><\/figure>\n<p>\u041d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0441\u043b\u0435\u0432\u0430 \u2014 <em>ground truth<\/em> \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0441\u043f\u0440\u0430\u0432\u0430 \u2014 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. <\/p>\n<h3>\u0418\u043d\u0444\u0435\u0440\u0435\u043d\u0441<\/h3>\n<p>\u0414\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u0438 <em>attention<\/em> \u0438 <em>SG <\/em>\u0432 \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441 <em>ARShadowGAN.<\/em> <\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043b\u0430\u0441\u0441 ARShadowGAN, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0438\u0439 attention \u0438 shadow generation \u0431\u043b\u043e\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">class ARShadowGAN(nn.Module):     def __init__(self, model_path_attention, model_path_SG, encoder_att='resnet34', \\                  encoder_SG='resnet18', device='cuda:0'):         super(ARShadowGAN, self).__init__()          self.device = torch.device(device)         self.model_att = smp.Unet(             classes=2,             encoder_name=encoder_att,             activation='sigmoid'         )         self.model_att.encoder.conv1 = nn.Conv2d(4, 64, kernel_size=(7,7), stride=(2,2), padding=(3,3), bias=False)         self.model_att.load_state_dict(torch.load(model_path_attention))         self.model_att.to(device)          self.model_SG = Generator_with_Refin(encoder_SG)         self.model_SG.load_state_dict(torch.load(model_path_SG))         self.model_SG.to(device)      def forward(self, tensor_att, tensor_SG):         self.model_att.eval()          with torch.no_grad():             robject_rshadow_tensor = self.model_att(tensor_att)          robject_rshadow_np = robject_rshadow_tensor.cpu().numpy()          robject_rshadow_np[robject_rshadow_np &gt;= 0.5] = 1         robject_rshadow_np[robject_rshadow_np &lt; 0.5] = 0         robject_rshadow_np = 2 * (robject_rshadow_np - 0.5)          robject_rshadow_tensor = torch.cuda.FloatTensor(robject_rshadow_np)          tensor_SG = torch.cat((tensor_SG, robject_rshadow_tensor), axis=1)          self.model_SG.eval()         with torch.no_grad():             output_mask1, output_mask2 = self.model_SG(tensor_SG)          result = torch.add(tensor_SG[:,:3, ...], output_mask2)          return result, output_mask2<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043c \u0441\u0430\u043c \u043a\u043e\u0434 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u043d\u0444\u0435\u0440\u0435\u043d\u0441<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\"># \u0443\u043a\u0430\u0436\u0435\u043c \u043f\u0443\u0442\u0438 \u0434\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0447\u0435\u043a\u043f\u043e\u0438\u043d\u0442\u043e\u0432 dataset_path = '\/content\/arshadowgan\/uploaded' result_path = '\/content\/arshadowgan\/uploaded\/shadow'  path_att = '\/content\/drive\/MyDrive\/ARShadowGAN-like\/attention.pth' path_SG = '\/content\/drive\/MyDrive\/ARShadowGAN-like\/SG_generator.pth'  # \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0438 \u0434\u0430\u0442\u0430\u043b\u043e\u0430\u0434\u0435\u0440 dataset = ARDataset(dataset_path, augmentation=get_validation_augmentation(256), preprocessing=get_preprocessing(), is_train=False) dataloader = DataLoader(dataset, batch_size=1, shuffle=False, num_workers=0)  # \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')  # \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u043f\u043e\u043b\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c model = ARShadowGAN(     encoder_att='resnet34',     encoder_SG='resnet18',     model_path_attention=path_att,     model_path_SG=path_SG,     device=device ) # \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043c \u0435\u0435 \u0432 \u0440\u0435\u0436\u0438\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f model.eval()  # \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435 for i, data in enumerate(dataloader):     tensor_att = torch.cat((data[0][:, :3], torch.unsqueeze(data[1][:, -1], axis=1)), axis=1).to(device)     tensor_SG = torch.cat((data[2][:, :3], torch.unsqueeze(data[3][:, -1], axis=1)), axis=1).to(device)      with torch.no_grad():         result, shadow_mask = model(tensor_att, tensor_SG)          shadow_mask = np.uint8(127.5*shadow_mask[0].cpu().numpy().transpose((1,2,0)) + 1.0)         output_image = np.uint8(127.5 * (result.cpu().numpy()[0].transpose(1,2,0) + 1.0))          cv2.imwrite(osp.join(result_path, 'test.png'), output_image)         print('\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d: ' + result_path + '\/test.png') <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0441\u043e\u0441\u0442\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0430\u043c\u0431\u0438\u0446\u0438\u043e\u0437\u043d\u044b\u0445 \u0438 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u043d\u0430 \u0441\u0442\u044b\u043a\u0435 <em>Augmented Reality<\/em> \u0438 <em>Computer Vision<\/em>. \u0412 \u0446\u0435\u043b\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0443\u043c\u0435\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u0438, \u043f\u0443\u0441\u0442\u044c \u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e. <\/p>\n<p>\u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e <em>GAN <\/em>\u2014 \u044d\u0442\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043d\u0438, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0438 <em>3D<\/em>-\u0440\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0438 \u0442.\u043f.<\/p>\n<p><strong>\u0412\u0435\u0441\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 <\/strong>\u2014 <a href=\"https:\/\/github.com\/artyomnaz\/arshadowgan\" rel=\"noopener noreferrer nofollow\">\u0432 <\/a><a href=\"https:\/\/github.com\/Everypixel\/arshadowgan-like\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>, \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u2014 <a href=\"https:\/\/colab.research.google.com\/drive\/159bHQiaVhs8t5J_3DqwFrlgTF2YTHrbO?usp=sharing\" rel=\"noopener noreferrer nofollow\">\u0432 Google Colab \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435<\/a>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/43c\/da8\/fcd\/43cda8fcd09a3ed8f743f2d51336a702.jpg\" width=\"600\" height=\"300\"><figcaption><\/figcaption><\/figure>\n<p><em>P.S. <\/em>\u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438, \u043a\u0430\u043a\u0438\u043c-\u043b\u0438\u0431\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u043c \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c. <\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<\/div>\n<p> \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\/528800\/\"> https:\/\/habr.com\/ru\/post\/528800\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p><strong>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<\/strong><\/p>\n<\/p>\n<p>\u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e Computer Vision Engineer \u0432 Everypixel<a href=\"everypixel.com\" rel=\"noopener noreferrer nofollow\"> <\/a>\u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432\u0430\u043c, \u043a\u0430\u043a \u043c\u044b \u0443\u0447\u0438\u043b\u0438 <a href=\"https:\/\/arxiv.org\/pdf\/1406.2661.pdf\" rel=\"noopener noreferrer nofollow\">\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0441\u043e\u0441\u0442\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0435\u0442\u044c<\/a> \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u0438 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438.<\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c <em>GAN<\/em> \u043d\u0435 \u0442\u0430\u043a \u0442\u0440\u0443\u0434\u043d\u043e, \u043a\u0430\u043a \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434. \u0412 \u043d\u0430\u0443\u0447\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0439 \u043d\u0430 \u0442\u0435\u043c\u0443 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0441\u043e\u0441\u0442\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0432\u0430\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0430\u0443\u0447\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u043f\u043e\u0440\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0432\u044b\u0431\u0440\u0430\u043b <a href=\"https:\/\/openaccess.thecvf.com\/content_CVPR_2020\/html\/Liu_ARShadowGAN_Shadow_Generative_Adversarial_Network_for_Augmented_Reality_in_Single_CVPR_2020_paper.html\" rel=\"noopener noreferrer nofollow\"><em>ARShadowGAN<\/em><\/a><em> <\/em>\u2014 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043e <em>GAN<\/em>, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0435 \u0442\u0435\u043d\u0438 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e, \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u044f \u0431\u0443\u0434\u0443 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0442\u044c\u0441\u044f, \u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0451 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 <em>ARShadowGAN-like<\/em>.<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 ARShadowGAN-like<\/figcaption><\/figure>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0431\u0440\u0430\u0443\u0437\u0435\u0440;<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Python;<\/p>\n<\/li>\n<li>\n<p>\u0433\u0443\u0433\u043b-\u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0441\u0440\u0435\u0434\u0435 <a href=\"https:\/\/colab.research.google.com\/\" rel=\"noopener noreferrer nofollow\">Google Colaboratory<\/a>.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0441\u043e\u0441\u0442\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438<\/h3>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0441\u043e\u0441\u0442\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u0435\u0442\u0435\u0439:<\/p>\n<ul>\n<li>\n<p><strong>\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/strong>, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0437 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0448\u0443\u043c\u0430 (\u0443 \u043d\u0430\u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u044c, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 \u0438 \u043c\u0430\u0441\u043a\u0443 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430);<\/p>\n<\/li>\n<li>\n<p><strong>\u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440\u0430<\/strong>, \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u0442 \u043f\u043e\u0434\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><figcaption>\u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 ARShadowGAN-like<\/figcaption><\/figure>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0438 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u043c\u0435\u0441\u0442\u0435. \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0443\u0447\u0438\u0442\u0441\u044f \u0432\u0441\u0451 \u043b\u0443\u0447\u0448\u0435 \u0438 \u043b\u0443\u0447\u0448\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u044c, \u043e\u0431\u043c\u0430\u043d\u044b\u0432\u0430\u0442\u044c \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440. \u0414\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440 \u0436\u0435 \u0443\u0447\u0438\u0442\u0441\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430<\/strong> \u2014 \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0442\u0435\u043d\u044c. \u0414\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440 \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0430 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 (\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441, \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d \u0438 \u0442.\u0434.) \u043e\u043d \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p><strong>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440<\/strong><\/p>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 <em>ARShadowGAN-like <\/em>\u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432: <em>attention<\/em> \u0438 <em>shadow generation <\/em>(SG).  <\/p>\n<figure class=\"full-width\"><figcaption>\u0421\u0445\u0435\u043c\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/figcaption><\/figure>\n<p><strong>\u041e\u0434\u043d\u0430 \u0438\u0437<\/strong> <strong>\u0444\u0438\u0448\u0435\u043a <\/strong>\u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u041a\u0430\u0440\u0442\u044b \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e, \u0438\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043c\u0430\u0441\u043a\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0438\u0437 \u043d\u0443\u043b\u0435\u0439 (\u0447\u0451\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442) \u0438 \u0435\u0434\u0438\u043d\u0438\u0446 (\u0431\u0435\u043b\u044b\u0439 \u0446\u0432\u0435\u0442, \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430).<\/p>\n<p><strong>Attention<\/strong><em> <\/em>\u0431\u043b\u043e\u043a<em> <\/em>\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u2014 \u043a\u0430\u0440\u0442\u044b \u0442\u0435\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0442\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0417\u0434\u0435\u0441\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u0440\u0442 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043c\u0430\u0441\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u043e\u043a\u043a\u043b\u044e\u0434\u0435\u0440\u043e\u0432) \u0438 \u043c\u0430\u0441\u043a\u0430 \u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u043e\u0442 \u043d\u0438\u0445 \u0442\u0435\u043d\u0435\u0439. \u0422\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0442\u043e \u0431\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u0442\u0438, \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u044c, \u043e\u043d\u0430 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0442\u0435\u043d\u0438 \u043e\u0442 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041f\u043e\u0434\u0445\u043e\u0434 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0431\u044b \u0432 \u0436\u0438\u0437\u043d\u0438 \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0442\u0435\u043d\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0432 \u0444\u043e\u0442\u043e\u0448\u043e\u043f\u0435. <\/p>\n<p>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043c\u043e\u0434\u0443\u043b\u044f: <em>U-Net<\/em>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c 4 \u043a\u0430\u043d\u0430\u043b\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 (<em>RGB<\/em>-\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 \u0438 \u043c\u0430\u0441\u043a\u0430 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430) \u0438 2 \u043a\u0430\u043d\u0430\u043b\u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 (\u043c\u0430\u0441\u043a\u0430 \u043e\u043a\u043a\u043b\u044e\u0434\u0435\u0440\u043e\u0432 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0438\u043c \u0442\u0435\u043d\u044f\u043c).<\/p>\n<p><strong>Shadow generation<\/strong> \u2014 \u0441\u0430\u043c\u044b\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0432\u0441\u0435\u0439 \u0441\u0435\u0442\u0438. \u0415\u0433\u043e \u0446\u0435\u043b\u044c: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 3-\u043a\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0441\u043a\u0438 \u0442\u0435\u043d\u0438. \u041e\u043d, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e <em>attention<\/em>, \u0438\u043c\u0435\u0435\u0442 <em>U-Net<\/em>-\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0431\u043b\u043e\u043a\u043e\u043c \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043d\u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 (<em>refinement<\/em>). \u041d\u0430 \u0432\u0445\u043e\u0434 \u0431\u043b\u043e\u043a\u0443 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432\u0441\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 (3 \u043a\u0430\u043d\u0430\u043b\u0430), \u043c\u0430\u0441\u043a\u0430 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (1 \u043a\u0430\u043d\u0430\u043b) \u0438 \u0432\u044b\u0445\u043e\u0434 <em>attention<\/em> \u0431\u043b\u043e\u043a\u0430 \u2014 \u043c\u0430\u0441\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (1 \u043a\u0430\u043d\u0430\u043b) \u0438 \u043c\u0430\u0441\u043a\u0430 \u0442\u0435\u043d\u0435\u0439 \u043e\u0442 \u043d\u0438\u0445 (1 \u043a\u0430\u043d\u0430\u043b). \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430 \u0432\u0445\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 6-\u043a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043d\u0437\u043e\u0440. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 3 \u043a\u0430\u043d\u0430\u043b\u0430 \u2014 \u0446\u0432\u0435\u0442\u043d\u0430\u044f \u043c\u0430\u0441\u043a\u0430 \u0442\u0435\u043d\u0438 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. <\/p>\n<p>\u0412\u044b\u0445\u043e\u0434 <em>shadow generation<\/em> \u043f\u043e\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f) \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u043d\u044c\u044e. \u041a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u043e\u0439\u043d\u0443\u044e \u043d\u0430\u043a\u043b\u0430\u0434\u043a\u0443 \u0442\u0435\u043d\u0438 \u0432 \u0444\u043e\u0442\u043e\u0448\u043e\u043f\u0435 \u2014 \u0442\u0435\u043d\u044c \u0431\u0443\u0434\u0442\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043f\u043e\u0432\u0435\u0440\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438.<\/p>\n<p><strong>\u0414\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440<\/strong><\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440\u0430 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440 \u043e\u0442 <a href=\"https:\/\/github.com\/eriklindernoren\/PyTorch-GAN\/blob\/master\/implementations\/srgan\/models.py#L74\" rel=\"noopener noreferrer nofollow\"><em>SRGAN<\/em><\/a>. \u041e\u043d \u043f\u0440\u0438\u0432\u043b\u0435\u043a \u0441\u0432\u043e\u0435\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0449\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u043e\u043b\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 <em>ARShadowGAN-like<\/em> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a (\u0434\u0430, \u043c\u0435\u043b\u043a\u043e, \u043d\u043e \u043a\u0440\u0443\u043f\u043d\u044b\u043c \u043f\u043b\u0430\u043d\u043e\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 \u0431\u044b\u043b\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u0432\u044b\u0448\u0435 \u263a):<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u043e\u043b\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f ARShadowGAN-like<\/figcaption><\/figure>\n<h3>\u041e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435<\/h3>\n<p>\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e-\u0441\u043e\u0441\u0442\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u044b\u0432\u0430\u0435\u0442 <em>paired <\/em>\u0438 <em>unpaired. <\/em><\/p>\n<p>\u0421 <strong>\u043f\u0430\u0440\u043d\u044b\u043c\u0438 <\/strong>\u0434\u0430\u043d\u043d\u044b\u043c\u0438 (<em>paired<\/em>) \u0432\u0441\u0451 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441 \u0443\u0447\u0438\u0442\u0435\u043b\u0435\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 (<em>ground truth<\/em>), \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0432\u044b\u0445\u043e\u0434 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0414\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439: \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u2014 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u043e\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u041d\u0435\u0439\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u0443\u0447\u0438\u0442\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e.<\/p>\n<p><strong>\u041d\u0435\u043f\u0430\u0440\u043d\u043e\u0435 <\/strong>\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u2014 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 \u0431\u0435\u0437 \u0443\u0447\u0438\u0442\u0435\u043b\u044f. \u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0430\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043b\u0438\u0431\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043b\u0438\u0431\u043e \u0442\u0440\u0443\u0434\u043d\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/openaccess.thecvf.com\/content_ICCV_2017\/papers\/Zhu_Unpaired_Image-To-Image_Translation_ICCV_2017_paper.pdf\" rel=\"noopener noreferrer nofollow\"><em>unpaired<\/em> <\/a>\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0434\u0430\u0447\u0435 <a href=\"https:\/\/godatadriven.com\/blog\/how-to-style-transfer-your-own-images\/\" rel=\"noopener noreferrer nofollow\"><em>Style Transfer<\/em><\/a>\u2014<em> <\/em>\u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0441\u0442\u0438\u043b\u044f \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0435. \u0417\u0434\u0435\u0441\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442, \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0443\u0447\u0438\u0442\u0435\u043b\u044f.<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 Style Transfer<\/figcaption><\/figure>\n<p>\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u0437\u044f\u0442\u043e <a href=\"https:\/\/godatadriven.com\/blog\/how-to-style-transfer-your-own-images\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043d\u0435\u0439. \u0410\u0432\u0442\u043e\u0440\u044b <em>ARShadowGAN <\/em>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u0430\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0439 \u0441\u0435\u0442\u0438. \u041f\u0430\u0440\u0430\u043c\u0438 \u0437\u0434\u0435\u0441\u044c \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 \u2014 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0435\u043c\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u043d\u044c\u044e. <\/p>\n<p>\u041a\u0430\u043a \u0436\u0435 <strong>\u0441\u043e\u0431\u0440\u0430\u0442\u044c<\/strong> \u0442\u0430\u043a\u043e\u0439 <strong>\u0434\u0430\u0442\u0430\u0441\u0435\u0442<\/strong>?<\/p>\n<p>\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e, \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445:<\/p>\n<ul>\n<li>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u2014 <strong>\u043e\u0442\u0441\u043d\u044f\u0442\u044c \u0434\u0430\u0442\u0430\u0441\u0435\u0442<\/strong>. \u041d\u0443\u0436\u043d\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0446\u0435\u043d\u0443, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u043c\u0435\u0440\u044b \u0438 \u0442.\u0434., \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u043d\u0443\u043b\u044f\u0442\u044c \u0442\u0435\u043d\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0446\u0435\u043d\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u0430) \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043a\u0438 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 \u0438 \u0441 \u0442\u0435\u043d\u044c\u044e. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0447\u0435\u043d\u044c \u0442\u0440\u0443\u0434\u043e\u0435\u043c\u043e\u043a \u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u044f \u0432\u0438\u0436\u0443 <strong>\u0441\u0431\u043e\u0440 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441 \u0442\u0435\u043d\u044f\u043c\u0438<\/strong>. \u041b\u043e\u0433\u0438\u043a\u0430 \u0442\u0430\u043a\u0430\u044f: \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u043d\u044c\u044e \u0438 \u0442\u0435\u043d\u044c \u0443\u0434\u0430\u043b\u0438\u043c. \u041e\u0442\u0441\u044e\u0434\u0430 \u0432\u044b\u0442\u0435\u043a\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u0430\u044f, \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043b\u0451\u0433\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Inpainting\" rel=\"noopener noreferrer nofollow\"><em>Image Inpainting <\/em><\/a>\u2014 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 \u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u043b\u0438\u0431\u043e \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u0440\u0443\u0447\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0432 \u0444\u043e\u0442\u043e\u0448\u043e\u043f\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441\u0435\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0430\u043a\u043e\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c\u0441\u044f \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u044b \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0433\u043b\u0430\u0437\u0443, \u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u044b \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u043c \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435. <\/p>\n<\/li>\n<li>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 <strong>\u0441\u0431\u043e\u0440 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>3D<\/em><\/strong>. \u0410\u0432\u0442\u043e\u0440\u044b <em>ARShadowGAN <\/em>\u043f\u043e\u0448\u043b\u0438 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043f\u0443\u0442\u0438 \u0438 \u0441\u043e\u0431\u0440\u0430\u043b\u0438 <em>ShadowAR-dataset. <\/em>\u0418\u0434\u0435\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f: \u0441\u043f\u0435\u0440\u0432\u0430 \u0430\u0432\u0442\u043e\u0440\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <em>3D<\/em>-\u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438\u0437 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/arxiv.org\/pdf\/1512.03012.pdf\" rel=\"noopener noreferrer nofollow\"><em>ShapeNet<\/em><\/a>, \u0437\u0430\u0442\u0435\u043c \u044d\u0442\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0446\u0435\u043d\u044b. \u0414\u0430\u043b\u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0440\u0435\u043d\u0434\u0435\u0440 \u044d\u0442\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u043c \u0444\u043e\u043d\u0435 \u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u2014 \u0441 \u0442\u0435\u043d\u044c\u044e \u0438 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u044b \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u043d\u0430 <em>2D<\/em>-\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0446\u0435\u043d \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043e\u043a. \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u0430\u0440\u044b: \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0442\u0435\u043d\u0438 (<em>noshadow<\/em>) \u0438 <em>ground truth <\/em>\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0442\u0435\u043d\u044c\u044e (<em>shadow<\/em>). \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0441\u0431\u043e\u0440\u0435 <em>ShadowAR-dataset<\/em> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/openaccess.thecvf.com\/content_CVPR_2020\/papers\/Liu_ARShadowGAN_Shadow_Generative_Adversarial_Network_for_Augmented_Reality_in_Single_CVPR_2020_paper.pdf\" rel=\"noopener noreferrer nofollow\">\u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0430\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 <em>noshadow <\/em>\u0438 <em>shadow <\/em>\u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c. \u041e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u043c\u0430\u0441\u043a\u0438?<\/p>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u043c\u0430\u0441\u043e\u043a \u0443 \u043d\u0430\u0441 \u0442\u0440\u0438: \u043c\u0430\u0441\u043a\u0430 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043c\u0430\u0441\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u043e\u043a\u043a\u043b\u044e\u0434\u0435\u0440\u043e\u0432) \u0438 \u043c\u0430\u0441\u043a\u0430 \u0442\u0435\u043d\u0435\u0439 \u043e\u0442 \u043d\u0438\u0445. \u041c\u0430\u0441\u043a\u0430 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043d\u0434\u0435\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u043c \u0444\u043e\u043d\u0435. \u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439 \u0444\u043e\u043d \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c, \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443, \u2014 \u0431\u0435\u043b\u044b\u043c. \u041c\u0430\u0441\u043a\u0438 \u0436\u0435 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0442\u0435\u043d\u0435\u0439 \u043e\u0442 \u043d\u0438\u0445 \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 <em>ARShadowGAN <\/em>\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 (\u043a\u0440\u0430\u0443\u0434\u0441\u043e\u0440\u0441\u0438\u043d\u0433\u0430).<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 Shadow-AR \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430.<\/figcaption><\/figure>\n<h3>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u0440\u044c \u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0438<\/h3>\n<p><strong>Attention<\/strong><\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u043c\u0441\u044f \u043e\u0442 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0442\u0435\u0440\u044c \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u0430\u0440\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f (\u043c\u0430\u0441\u043e\u043a) \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u0440\u044c \u0432\u043e\u0437\u044c\u043c\u0435\u043c <a href=\"https:\/\/en.wikipedia.org\/wiki\/S%C3%B8rensen%E2%80%93Dice_coefficient\" rel=\"noopener noreferrer nofollow\"><em>Dice<\/em><\/a><em> Loss<\/em>. \u041e\u043d\u0430 \u0445\u043e\u0440\u043e\u0448\u043e \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u0430 \u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a \u043d\u0435\u0441\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432\u043e\u0437\u044c\u043c\u0435\u043c <a href=\"https:\/\/arxiv.org\/pdf\/1902.09630.pdf\" rel=\"noopener noreferrer nofollow\"><em>IoU<\/em> <\/a>(Intersection over Union). <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e <em>Dice Loss<\/em> \u0438 <em>IoU <\/em>\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/www.youtube.com\/watch?v=AZr64OxshLo&amp;ab_channel=SmartAlphaAI\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p><strong>Shadow generation<\/strong><\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0442\u0435\u0440\u044c \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0442\u043e\u0439, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 <a href=\"https:\/\/openaccess.thecvf.com\/content_CVPR_2020\/html\/Liu_ARShadowGAN_Shadow_Generative_Adversarial_Network_for_Augmented_Reality_in_Single_CVPR_2020_paper.html\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a>. \u041e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b \u0442\u0440\u0451\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0442\u0435\u0440\u044c: <em>L2<\/em>, <em>Lper <\/em>\u0438 <em>Ladv<\/em>:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><em>L2<\/em> \u0431\u0443\u0434\u0435\u0442 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 <em>ground truth<\/em> \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 (\u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 <em>refinement<\/em>-\u0431\u043b\u043e\u043a\u0430, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u043a <em>R<\/em>). <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><em>Lper <\/em>(perceptual loss) \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0442\u0435\u0440\u044c, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0449\u0430\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0440\u0442\u0430\u043c\u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432 \u0441\u0435\u0442\u0438 <em>VGG16<\/em> \u043f\u0440\u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0451 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c <em>MSE <\/em>\u043c\u0435\u0436\u0434\u0443 <em>ground truth<\/em> \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0441 \u0442\u0435\u043d\u044c\u044e \u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u2014 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 <em>refinement-<\/em>\u0431\u043b\u043e\u043a\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><em>Ladv<\/em> \u2014  \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 adversarial \u043b\u043e\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u0435\u0436\u0434\u0443 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0438 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440\u043e\u043c. \u0417\u0434\u0435\u0441\u044c <em>D(.)<\/em> \u2014 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u043a \u043a\u043b\u0430\u0441\u0441\u0443 \u00ab\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u00bb. \u0412 \u0445\u043e\u0434\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c <em>Ladv<\/em>, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u0442\u043e\u0440, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u2014 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h3>\n<h4>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/h4>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <em>ARShadowGAN-like<\/em> \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f Python \u2014 <em>pytorch<\/em>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438: \u0447\u0442\u043e \u0434\u043b\u044f \u0447\u0435\u0433\u043e?<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0420\u0430\u0431\u043e\u0442\u0443 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439:<\/p>\n<ul>\n<li>\n<p><em>segmentation-models-pytorch<\/em> \u2014 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 U-Net \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p><em>albumentations<\/em> \u2014 \u0434\u043b\u044f \u0430\u0443\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0439;<\/p>\n<\/li>\n<li>\n<p><em>piq <\/em>\u2014 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u0440\u044c;<\/p>\n<\/li>\n<li>\n<p><em>matplotlib <\/em>\u2014 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p><em>numpy <\/em>\u2014 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438;<\/p>\n<\/li>\n<li>\n<p><em>opencv-python<\/em> \u2014 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438;<\/p>\n<\/li>\n<li>\n<p><em>tensorboard <\/em>\u2014 \u0434\u043b\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<\/li>\n<li>\n<p><em>torch <\/em>\u2014 \u0434\u043b\u044f \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p><em>torchvision <\/em>\u2014 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0434\u043b\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p><em>tqdm <\/em>\u2014 \u0434\u043b\u044f progress bar \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"bash\">pip install segmentation-models-pytorch==0.1.0 pip install albumentations==0.5.1 pip install piq==0.5.1 pip install matplotlib==3.2.1 pip install numpy==1.18.4 pip install opencv-python&gt;=3.4.5.20 pip install tensorboard==2.2.1 pip install torch&gt;=1.5.0 pip install torchvision&gt;=0.6.0 pip install tqdm&gt;=4.41.1<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h3>\u0414\u0430\u0442\u0430\u0441\u0435\u0442<\/h3>\n<details class=\"spoiler\">\n<summary>\u0414\u0430\u0442\u0430\u0441\u0435\u0442: \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435, \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/drive.google.com\/file\/d\/1CsKIg8tV6gP35l_u3Dg-RKrXBggJrNaL\/view?usp=sharing\" rel=\"noopener noreferrer nofollow\">\u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0434\u0430\u0442\u0430\u0441\u0435\u0442<\/a>. \u0412 \u043d\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0443\u0436\u0435 \u0440\u0430\u0437\u0431\u0438\u0442\u044b \u043d\u0430 <em>train <\/em>\u0438 <em>test <\/em>\u0432\u044b\u0431\u043e\u0440\u043a\u0438. \u0421\u043a\u0430\u0447\u0430\u0435\u043c \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u0443\u0435\u043c \u0435\u0433\u043e.<\/p>\n<pre><code class=\"bash\">unzip shadow_ar_dataset.zip<\/code><\/pre>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043e\u043a \u0432 \u043d\u0430\u0431\u043e\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f. <\/p>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u0432\u044b\u0431\u043e\u0440\u043e\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 5 \u043f\u0430\u043f\u043e\u043a \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438: <br \/>&#8212; <em>noshadow <\/em>(\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0442\u0435\u043d\u0435\u0439); <br \/>&#8212; <em>shadow <\/em>(\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 \u0442\u0435\u043d\u044f\u043c\u0438); <br \/>&#8212; <em>mask <\/em>(\u043c\u0430\u0441\u043a\u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432); <br \/>&#8212; <em>robject <\/em>(\u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438\u043b\u0438 \u043e\u043a\u043a\u043b\u044e\u0434\u0435\u0440\u044b); <br \/>&#8212; <em>rshadow <\/em>(\u0442\u0435\u043d\u0438 \u043e\u0442 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432).<\/p>\n<pre><code class=\"python\">dataset \u251c\u2500\u2500 train \u2502   \u251c\u2500\u2500 noshadow \u2500\u2500 example1.png, ... \u2502   \u251c\u2500\u2500 shadow \u2500\u2500\u2500\u2500<\/code><\/pre>\n<p><\/br><\/br><\/br><\/br><\/br><\/br><\/p>\n<\/div>\n<\/details>\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-315521","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/315521","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=315521"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/315521\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=315521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=315521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=315521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}