{"id":323616,"date":"2021-05-23T15:00:41","date_gmt":"2021-05-23T15:00:41","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=323616"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=323616","title":{"rendered":"3D teeth instance segmentation. \u0412 \u0442\u0435\u043c\u043d\u043e\u0442\u0435, \u043d\u043e \u043d\u0435 \u043e\u0434\u0438\u043d"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>3D \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0437\u0443\u0431\u043e\u0432 \u043e\u0442 \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u041f\u043e\u0447\u0442\u0438.<\/p>\n<h2>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440<\/h2>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0439 \u0432 \u043b\u044e\u0431\u043e\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430 \u0438 \u043d\u043e\u0441\u0438\u0442 \u0441\u0443\u0433\u0443\u0431\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440. \u0410\u0432\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 \u043d\u0435\u0441\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430 \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u0435\u0435 \u0447\u0442\u0435\u043d\u0438\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0431 \u0430\u0432\u0442\u043e\u0440\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 &#8212; \u0432\u0441\u0435\u043c, \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439(27). \u041f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u043e. \u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435? \u041f\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e &#8212; \u0431\u0430\u043a\u0430\u043b\u0430\u0432\u0440 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043c\u0435\u0445\u0430\u043d\u0438\u043a, \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044e \u0437\u043d\u0430\u044e. \u041e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b 2 \u0433\u043e\u0434\u0430 \u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430-\u044d\u043d\u0435\u0440\u0433\u0435\u0442\u0438\u043a\u0430 \u0432 \u0431\u0443\u0440\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0438\u0435 &#8212; \u0441\u0433\u043e\u0440\u0435\u043b, \u0434\u0430 \u043d\u0435 \u043f\u043e \u043c\u043d\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u044d\u0442\u043e \u0432\u0441\u0451. \u041d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u0441 \u041f\u041a \u0432 \u043e\u0431\u043d\u0438\u043c\u043a\u0443 \u0441 \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043b\u0435\u0442. \u0412\u044b\u0431\u043e\u0440 \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d. \u0412\u043d\u0430\u0447\u0430\u043b\u0435 (\u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434), \u0432\u0441\u0435\u0440\u044c\u0451\u0437 \u0434\u0443\u043c\u0430\u043b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u0443\u0440\u0441\u044b \u043e\u0442 \u042f \u0438\u043b\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435. \u041d\u0430\u0447\u0438\u0442\u0430\u043b\u0441\u044f \u043e\u0442\u0437\u044b\u0432\u043e\u0432, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0441 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c\u0438 \u0438 \u043f\u043e\u043d\u044f\u043b \u0447\u0442\u043e \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435\u0442. \u0422\u0430\u043a \u043d\u0430\u0448\u0435\u043b <a href=\"https:\/\/stepik.org\/catalog\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u0439\u0442<\/a>, \u0442\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0431\u0430\u0437\u0443 \u043f\u043e Python \u0438 \u0441 \u043d\u0438\u043c \u0443\u0436\u0435 \u043d\u0430\u0447\u0430\u043b \u0441\u0432\u043e\u0439 \u043f\u0443\u0442\u044c (\u0441\u0435\u0439\u0447\u0430\u0441 \u0442\u0430\u043c \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e  \u0438\u0437\u0443\u0447\u0430\u044e \u0432\u0441\u0451, \u0447\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 ML). \u0421\u0440\u0430\u0437\u0443 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u043e \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435, CV \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0441\u0435\u0431\u0435 \u0437\u0430\u0434\u0430\u0447\u0443 \u0438 \u0432\u043e\u0442  \u0437\u0434\u0435\u0441\u044c (\u043f\u043e \u043c\u043d\u0435, \u0442\u0430\u043a \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u0447\u0438\u0442\u044c\u0441\u044f).<\/p>\n<\/div>\n<\/details>\n<h2>1. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a, \u043f\u0440\u0438\u0448\u0435\u043b \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 2 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. 1-\u0430\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0437\u0443\u0431\u044b \u043a\u0430\u043a [1, 0] \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e, \u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043b\u0438\u0442 \u0438\u0445 \u043d\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438[0, 8]. \u041d\u043e \u043d\u0430\u0447\u043d\u0435\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. <\/p>\n<h2>2. \u041f\u043e\u0438\u0441\u043a \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u041f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u043d\u0435 \u043e\u0434\u0438\u043d \u0432\u0435\u0447\u0435\u0440 \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u043f\u0440\u0438\u0448\u0435\u043b \u0432 \u0432\u044b\u0432\u043e\u0434\u0443 \u0447\u0442\u043e \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u0447\u0435\u043b\u044e\u0441\u0442\u044c \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 (*.stl, *.nrrd \u0438 \u0442.\u0434.) \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041b\u0443\u0447\u0448\u0435\u0435, \u0447\u0442\u043e \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u043e\u0441\u044c &#8212; \u044d\u0442\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437\u0435\u0446 \u0433\u043e\u043b\u043e\u0432\u044b \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u0445\u0438\u0440\u0443\u0440\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u0447\u0435\u043b\u044e\u0441\u0442\u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 <a href=\"https:\/\/www.slicer.org\/\" rel=\"noopener noreferrer nofollow\">3D Slicer<\/a>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2fa\/cbd\/e6e\/2facbde6e54bae6a7760b8f75f4f03b6.gif\" width=\"690\" height=\"388\"><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0433\u043e\u043b\u043e\u0432\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u0440\u0435\u0437\u0430\u043b \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0434\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 163*112*120\u0440\u0445 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0441\u0442\u0435 {x*y*z = \u0448-\u0433-\u0432} \u0438 1\u0440\u0445 &#8212; 0,5\u043c\u043c), \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0443\u0431\u044b \u0438 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0447\u0435\u043b\u044e\u0441\u0442\u043d\u043e-\u043b\u0438\u0446\u0435\u0432\u044b\u0435 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/acc\/e39\/807\/acce39807ce00a805797cc945d9e66de.png\" width=\"1377\" height=\"450\"><figcaption><\/figcaption><\/figure>\n<p>\u0423\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0434\u0430\u043b\u044c\u0448\u0435 &#8212; \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0430\u0441\u043a\u0438 \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043d\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u044d\u0442\u0438\u043c &#8212; &#171;autothreshold&#187; \u043d\u0435 \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e, \u0434\u0443\u043c\u0430\u044e, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u044f\u043b\u043e \u0431\u044b \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u0432\u0440\u0443\u0447\u043d\u0443\u044e(\u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u0441\u043a\u0438).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/026\/6ab\/89b\/0266ab89bf8c7b73dd85c1a3a95daa66.gif\" alt=\"- \u041f\u0438\u043a\u0441\u0435\u043b\u0438(\u0441\u0440\u0435\u0437\u044b \u0441\u043b\u0435\u0432\u0430)? - \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\" title=\"- \u041f\u0438\u043a\u0441\u0435\u043b\u0438(\u0441\u0440\u0435\u0437\u044b \u0441\u043b\u0435\u0432\u0430)? - \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\" width=\"720\" height=\"400\"><figcaption>&#8212; \u041f\u0438\u043a\u0441\u0435\u043b\u0438(\u0441\u0440\u0435\u0437\u044b \u0441\u043b\u0435\u0432\u0430)? &#8212; \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/figcaption><\/figure>\n<p>\u0420\u0430\u0437\u043c\u0435\u0447\u0430\u043b \u0447\u0430\u0441\u043e\u0432 12~14. \u0418 \u0434\u0430, \u0442\u043e\u0442 \u0444\u0430\u043a\u0442 \u0447\u0442\u043e \u044f \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u0440\u0430\u0437\u043c\u0435\u0442\u0438\u043b \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0443\u0431 \u043a\u0430\u043a \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0441\u0442\u043e\u0438\u043b \u043c\u043d\u0435   \u0435\u0449\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 4 \u0447\u0430\u0441\u043e\u0432. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0443 \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/93c\/44f\/d06\/93c44fd069ef92ca6a16c46ebac1ee64.gif\" alt=\"\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u0430\u0441\u043a\u0438. Smooth 0.5. (\u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0432 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c)\" title=\"\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u0430\u0441\u043a\u0438. Smooth 0.5. (\u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0432 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c)\" width=\"720\" height=\"400\"><figcaption>\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u0430\u0441\u043a\u0438. Smooth 0.5. (\u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0432 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c)<\/figcaption><\/figure>\n<p>\u0414\u043e\u043b\u0436\u0435\u043d \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0434\u0430\u0436\u0435 \u043d\u0430 \u043c\u043e\u0439 (\u0431\u0435\u0437 \u043e\u043f\u044b\u0442\u0430) \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u0432 \u0433\u043e\u043b\u043e\u0432\u0443, \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 N-\u0440\u0430\u0437 \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c, random-crop \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0441\u0442\u0430\u043b.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import nrrd import torch import torchvision.transforms as tf   class DataBuilder:     def __init__(self,                  data_path,                  list_of_categories,                  num_of_chunks: int = 0,                  augmentation_coeff: int = 0,                  num_of_classes: int = 0,                  normalise: bool = False,                  fit: bool = True,                  data_format: int = 0,                  save_data: bool = False                  ):         self.data_path = data_path         self.number_of_chunks = num_of_chunks         self.augmentation_coeff = augmentation_coeff         self.list_of_cats = list_of_categories         self.num_of_cls = num_of_classes         self.normalise = normalise         self.fit = fit         self.data_format = data_format         self.save_data = save_data      def forward(self):         data = self.get_data()         data = self.fit_data(data) if self.fit else data         data = self.pre_normalize(data) if self.normalise else data         data = self.data_augmentation(data, self.augmentation_coeff) if self.augmentation_coeff != 0 else data         data = self.new_chunks(data, self.number_of_chunks) if self.number_of_chunks != 0 else data         data = self.category_splitter(data, self.num_of_cls, self.list_of_cats) if self.num_of_cls != 0 else data         torch.save(data, self.data_path[-14:]+'.pt') if self.save_data else None          return torch.unsqueeze(data, 1)      def get_data(self):         if self.data_format == 0:             return torch.from_numpy(nrrd.read(self.data_path)[0])         elif self.data_format == 1:             return torch.load(self.data_path).cpu()         elif self.data_format == 2:             return torch.unsqueeze(self.data_path, 0).cpu()         else:             print('Available types are: \"nrrd\", \"tensor\" or \"self.tensor(w\/o load)\"')      @staticmethod     def fit_data(some_data):         data = torch.movedim(some_data, (1, 0), (0, -1))         data_add_x = torch.nn.ZeroPad2d((5, 0, 0, 0))         data = data_add_x(data)         data = torch.movedim(data, -1, 0)         data_add_z = torch.nn.ZeroPad2d((0, 0, 8, 0))          return data_add_z(data)      @staticmethod     def pre_normalize(some_data):         min_d, max_d = torch.min(some_data), torch.max(some_data)          return (some_data - min_d) \/ (max_d - min_d)      @staticmethod     def data_augmentation(some_data, aug_n):         torch.manual_seed(17)         tr_data = []         for e in range(aug_n):             transform = tf.RandomRotation(degrees=(20*e, 20*e))             for image in some_data:                 image = torch.unsqueeze(image, 0)                 image = transform(image)                 tr_data.append(image)          return tr_data      def new_chunks(self, some_data, n_ch):         data = torch.stack(some_data, 0) if self.augmentation_coeff != 0 else some_data         data = torch.squeeze(data, 1)         chunks = torch.chunk(data, n_ch, 0)          return torch.stack(chunks)      @staticmethod     def category_splitter(some_data, alpha, list_of_categories):         data, _ = torch.squeeze(some_data, 1).to(torch.int64), alpha         for i in list_of_categories:             data = torch.where(data &lt; i, _, data)             _ += 1          return data - alpha <\/code><\/pre>\n<p>\u0418\u043c\u0435\u0439\u0442\u0435 \u0432\u0432\u0438\u0434\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f 3D U-net. \u0424\u043e\u0440\u0432\u0430\u0440\u0434: <\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0434\u0430\u0442\u0443 (\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430). <\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c 0 \u043f\u043e \u043a\u0440\u0430\u044f\u043c \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043e\u0433\u043d\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u043e 168*120*120 (\u0432\u043c\u0435\u0441\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 163*112*120). *\u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 0&#8230;1 (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 ~-2000&#8230;16000).<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c N-\u0440\u0430\u0437 \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0436\u0435\u043c \u043d\u0430 \u0440\u0430\u0432\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0431\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b \u043f\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0443 (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e 1, 1, 72, 120, 120).<\/p>\n<\/li>\n<li>\n<p>\u042d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c 28 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0437\u0443\u0431\u043e\u0432 \u0438 \u0444\u043e\u043d \u0434\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439 (\u0441\u043c. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435): <\/p>\n<ul>\n<li>\n<p>\u043e\u0434\u043d\u0443 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0434\u043b\u044f 1-\u043e\u0439;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 9 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 (8+\u0444\u043e\u043d) \u0434\u043b\u044f 2-\u043e\u0439.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Dataloader \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import torch.utils.data as tud   class ToothDataset(tud.Dataset):     def __init__(self, images, masks):         self.images = images         self.masks = masks      def __len__(self): return len(self.images)      def __getitem__(self, index):         if self.masks is not None:             return self.images[index, :, :, :, :],\\                     self.masks[index, :, :, :, :]         else:             return self.images[index, :, :, :, :]   def get_loaders(images, masks,                 batch_size: int = 1,                 num_workers: int = 1,                 pin_memory: bool = True):      train_ds = ToothDataset(images=images,                             masks=masks)      data_loader = tud.DataLoader(train_ds,                                  batch_size=batch_size,                                  shuffle=False,                                  num_workers=num_workers,                                  pin_memory=pin_memory)      return data_loader <\/code><\/pre>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u043c\u0435\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\">\n<\/td>\n<td>\n<p align=\"center\">Semantic<\/p>\n<\/td>\n<td>\n<p align=\"center\">Instance<\/p>\n<\/td>\n<td>\n<p align=\"center\">Predictions<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">Data<\/p>\n<\/td>\n<td>\n<p align=\"center\">(27*, 1, 56*, 120,120)[0&#8230;1]<\/p>\n<\/td>\n<td>\n<p align=\"center\">(27*, 1, 56*, 120,120) [0, 1]<\/p>\n<\/td>\n<td>\n<p align=\"center\">(1, 1, 168, 120, 120)[0&#8230;1]<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">Masks<\/p>\n<\/td>\n<td>\n<p align=\"center\">(27*, 1, 56*, 120,120)[0, 1]<\/p>\n<\/td>\n<td>\n<p align=\"center\">(27*, 1, 56*, 120,120)[0, 8]<\/p>\n<\/td>\n<td>\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>*\u044d\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 &#8212; \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<\/div>\n<\/details>\n<h2>3. \u0412\u044b\u0431\u043e\u0440 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0426\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442\u044b &#8212; \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0437\u044f\u043b \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0443\u044e \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b <a href=\"https:\/\/en.wikipedia.org\/wiki\/U-Net\" rel=\"noopener noreferrer nofollow\">U-Net<\/a>. \u041a\u043e\u0434 \u043d\u0435 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/github.com\/johschmidt42\/PyTorch-2D-3D-UNet-Tutorial\/blob\/master\/unet.py\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ae4\/f25\/616\/ae4f256167b58e07d156edd02029afee.png\" alt=\"2D U-Net\" title=\"2D U-Net\" width=\"900\" height=\"581\"><figcaption>2D U-Net<\/figcaption><\/figure>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0435 \u0432 \u0441\u0435\u0442\u0438. <a href=\"https:\/\/habr.com\/ru\/post\/318970\/\" rel=\"noopener noreferrer nofollow\">\u041c\u0435\u0442\u043e\u0434 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/a> &#8212; Adam, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043f\u043e\u0442\u0435\u0440\u044c Dice-loss(implement), \u0441\u043f\u0443\u0441\u043a\u043e\u0432\/\u043f\u043e\u0434\u044a\u0435\u043c\u043e\u0432 4, \u0444\u0438\u043b\u044c\u0442\u0440\u044b [64, 128, 256, 512] (\u0437\u043d\u0430\u044e, \u043c\u043d\u043e\u0433\u043e, \u043e\u0431 \u044d\u0442\u043e\u043c &#8212; \u043f\u043e\u0437\u0436\u0435). \u041e\u0431\u0443\u0447\u0430\u043b \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c 60-80 epochs \u043d\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442. <a href=\"https:\/\/cs231n.github.io\/transfer-learning\/\" rel=\"noopener noreferrer nofollow\">Transfer learning<\/a> \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b. <\/p>\n<details class=\"spoiler\">\n<summary>model.summary()<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">model = UNet(dim=2, in_channels=1, out_channels=1, n_blocks=4, start_filters=64).to(device) print(summary(model, (1, 168, 120)))  \"\"\" ----------------------------------------------------------------         Layer (type)               Output Shape         Param # ================================================================             Conv2d-1         [-1, 64, 168, 120]             640               ReLU-2         [-1, 64, 168, 120]               0        BatchNorm2d-3         [-1, 64, 168, 120]             128             Conv2d-4         [-1, 64, 168, 120]          36,928               ReLU-5         [-1, 64, 168, 120]               0        BatchNorm2d-6         [-1, 64, 168, 120]             128          MaxPool2d-7           [-1, 64, 84, 60]               0          DownBlock-8  [[-1, 64, 84, 60], [-1, 64, 168, 120]]  0             Conv2d-9          [-1, 128, 84, 60]          73,856              ReLU-10          [-1, 128, 84, 60]               0       BatchNorm2d-11          [-1, 128, 84, 60]             256            Conv2d-12          [-1, 128, 84, 60]         147,584              ReLU-13          [-1, 128, 84, 60]               0       BatchNorm2d-14          [-1, 128, 84, 60]             256         MaxPool2d-15          [-1, 128, 42, 30]               0         DownBlock-16  [[-1, 128, 42, 30], [-1, 128, 84, 60]]  0            Conv2d-17          [-1, 256, 42, 30]         295,168              ReLU-18          [-1, 256, 42, 30]               0       BatchNorm2d-19          [-1, 256, 42, 30]             512            Conv2d-20          [-1, 256, 42, 30]         590,080              ReLU-21          [-1, 256, 42, 30]               0       BatchNorm2d-22          [-1, 256, 42, 30]             512         MaxPool2d-23          [-1, 256, 21, 15]               0         DownBlock-24  [[-1, 256, 21, 15], [-1, 256, 42, 30]]  0            Conv2d-25          [-1, 512, 21, 15]       1,180,160              ReLU-26          [-1, 512, 21, 15]               0       BatchNorm2d-27          [-1, 512, 21, 15]           1,024            Conv2d-28          [-1, 512, 21, 15]       2,359,808              ReLU-29          [-1, 512, 21, 15]               0       BatchNorm2d-30          [-1, 512, 21, 15]           1,024         DownBlock-31  [[-1, 512, 21, 15], [-1, 512, 21, 15]]  0   ConvTranspose2d-32          [-1, 256, 42, 30]         524,544              ReLU-33          [-1, 256, 42, 30]               0       BatchNorm2d-34          [-1, 256, 42, 30]             512       Concatenate-35          [-1, 512, 42, 30]               0            Conv2d-36          [-1, 256, 42, 30]       1,179,904              ReLU-37          [-1, 256, 42, 30]               0       BatchNorm2d-38          [-1, 256, 42, 30]             512            Conv2d-39          [-1, 256, 42, 30]         590,080              ReLU-40          [-1, 256, 42, 30]               0       BatchNorm2d-41          [-1, 256, 42, 30]             512           UpBlock-42          [-1, 256, 42, 30]               0   ConvTranspose2d-43          [-1, 128, 84, 60]         131,200              ReLU-44          [-1, 128, 84, 60]               0       BatchNorm2d-45          [-1, 128, 84, 60]             256       Concatenate-46          [-1, 256, 84, 60]               0            Conv2d-47          [-1, 128, 84, 60]         295,040              ReLU-48          [-1, 128, 84, 60]               0       BatchNorm2d-49          [-1, 128, 84, 60]             256            Conv2d-50          [-1, 128, 84, 60]         147,584              ReLU-51          [-1, 128, 84, 60]               0       BatchNorm2d-52          [-1, 128, 84, 60]             256           UpBlock-53          [-1, 128, 84, 60]               0   ConvTranspose2d-54         [-1, 64, 168, 120]          32,832              ReLU-55         [-1, 64, 168, 120]               0       BatchNorm2d-56         [-1, 64, 168, 120]             128       Concatenate-57        [-1, 128, 168, 120]               0            Conv2d-58         [-1, 64, 168, 120]          73,792              ReLU-59         [-1, 64, 168, 120]               0       BatchNorm2d-60         [-1, 64, 168, 120]             128            Conv2d-61         [-1, 64, 168, 120]          36,928              ReLU-62         [-1, 64, 168, 120]               0       BatchNorm2d-63         [-1, 64, 168, 120]             128           UpBlock-64         [-1, 64, 168, 120]               0            Conv2d-65          [-1, 1, 168, 120]              65 ================================================================ Total params: 7,702,721 Trainable params: 7,702,721 Non-trainable params: 0 ---------------------------------------------------------------- Input size (MB): 0.08 Forward\/backward pass size (MB): 7434.08 Params size (MB): 29.38 Estimated Total Size (MB): 7463.54 \"\"\"<\/code><\/pre>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d24\/21a\/246\/d2421a24672cfc2928bf98a22ebd3bc7.gif\" alt=\"\u042d\u043a\u0441\u043f.\u21161 2D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [x, z]\" title=\"\u042d\u043a\u0441\u043f.\u21161 2D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [x, z]\" width=\"564\" height=\"476\"><figcaption>\u042d\u043a\u0441\u043f.\u21161 2D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [x, z]<\/figcaption><\/figure>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e, \u044d\u0442\u043e &#8212; \u0437\u0443\u0431\u044b. \u0422\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u043e\u043c\u0435 \u0437\u0443\u0431\u043e\u0432 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e, \u043d\u0430\u043c \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0433\u043e. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 numpy &#8212; *.stl \u0432 \u0413\u043b\u0430\u0432\u0435 6. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0451 \u0440\u0430\u0437 \u043d\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/75b\/d08\/ffb\/75bd08ffbdeac83181abf79355378872.png\" alt=\"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e: 1. \u041d\u0435 \u0432\u0438\u0434\u043d\u043e[x, y]. 2. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435[x, z]. 3.\u0415\u0449\u0451 \u043b\u0443\u0447\u0448\u0435[y, z]\" title=\"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e: 1. \u041d\u0435 \u0432\u0438\u0434\u043d\u043e[x, y]. 2. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435[x, z]. 3.\u0415\u0449\u0451 \u043b\u0443\u0447\u0448\u0435[y, z]\" width=\"749\" height=\"153\"><figcaption>\u0421\u043b\u0435\u0432\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e: 1. \u041d\u0435 \u0432\u0438\u0434\u043d\u043e[x, y]. 2. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435[x, z]. 3.\u0415\u0449\u0451 \u043b\u0443\u0447\u0448\u0435[y, z]<\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0430\u043c \u043d\u0435 \u0432\u0438\u0434\u0438\u0448\u044c \u043d\u0430 100% \u0433\u0434\u0435 \u0442\u0430\u043c \u043d\u0430\u0447\u0430\u043b\u0441\u044f \u0437\u0443\u0431 \u0430 \u0433\u0434\u0435 \u043d\u0435\u0442, \u0442\u043e \u043a\u0430\u043a \u0442\u043e\u0433\u0434\u0430 \u044d\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c? \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0430\u0447\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. <\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0434\u044f \u043d\u0435 \u043e\u0434\u0438\u043d \u0434\u0435\u043d\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044f\u0441\u044c \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0443\u044e\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043f\u0440\u0438\u0448\u0435\u043b \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0441\u043a\u0430\u0434 \u0438 \u0441\u0435\u0442\u0435\u0439, \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0433\u0440\u0443\u0431\u043e\u0439 \u0438 \u0442\u043e\u043d\u043a\u043e\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eef\/335\/e4e\/eef335e4ebb6f3a3d23709cf81948e40.png\" alt=\"\u042d\u043a\u0441\u043f.\u21162 \u041a\u0430\u0441\u043a\u0430\u0434 2-\u0443\u0445 2D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [y, z]\" title=\"\u042d\u043a\u0441\u043f.\u21162 \u041a\u0430\u0441\u043a\u0430\u0434 2-\u0443\u0445 2D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [y, z]\" width=\"559\" height=\"358\"><figcaption>\u042d\u043a\u0441\u043f.\u21162 \u041a\u0430\u0441\u043a\u0430\u0434 2-\u0443\u0445 2D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [y, z]<\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0432\u0438\u0434\u0435\u043d, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u043e\u043c\u0435\u0445\u0430\u043c\u0438 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0438 \u0447\u0430\u0441\u0442\u0438 \u0437\u0443\u0431\u043e\u0432, \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ce\/fc5\/3d5\/3cefc53d5fee0fdf2693b95e6db91152.png\" alt=\"\u042d\u043a\u0441\u043f.\u21163 \u041a\u0430\u0441\u043a\u0430\u0434 2-\u0443\u0445 2D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [y, z] \u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430 50%\" title=\"\u042d\u043a\u0441\u043f.\u21163 \u041a\u0430\u0441\u043a\u0430\u0434 2-\u0443\u0445 2D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [y, z] \u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430 50%\" width=\"801\" height=\"586\"><figcaption>\u042d\u043a\u0441\u043f.\u21163 \u041a\u0430\u0441\u043a\u0430\u0434 2-\u0443\u0445 2D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [y, z] \u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430 50%<\/figcaption><\/figure>\n<p>\u0412\u0432\u0438\u0434\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043d\u0430 3D \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. \u041f\u0435\u0440\u0435\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b \u043d\u0430 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c (<strong>24*<\/strong>, 120, 120). \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a? &#8212; \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f (~22\u043c\u043b\u043d. \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432). \u041c\u043e\u044f \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430(1063gtx) \u043d\u0435 \u043c\u043e\u0433\u043b\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>24*<\/summary>\n<div class=\"spoiler__content\">\n<p>\u042d\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0433\u043b\u0443\u0431\u0438\u043d\u044b. \u0411\u044b\u043b \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043d \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b:<\/p>\n<ul>\n<li>\n<p>\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445(<strong>1512<\/strong>, 120, 120) \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430\u0446\u0435\u043b\u043e \u043d\u0430 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e &#8212; \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 63;<\/p>\n<\/li>\n<li>\n<p>\u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f batch size (24, 120, 120) &#8212; \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u0432\u043c\u0435\u0449\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b \u0441 \u0442\u0435\u043a\u0443\u0449\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0441\u0435\u0442\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0430\u043c\u043e \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e (24) \u0434\u0435\u043b\u0438\u043b\u043e\u0441\u044c \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u0443\u0441\u043a\u043e\u0432\/\u043f\u043e\u0434\u044a\u0435\u043c\u043e\u0432 \u0442\u0430\u043a \u0436\u0435 \u043d\u0430\u0446\u0435\u043b\u043e (\u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e 24\/2\/2\/2=3 \u0438 3*2*2*2=24, \u0433\u0434\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0435\u043b\u0435\u043d\u0438\u0439\/\u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 2 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0441\u043f\u0443\u0441\u043a\u043e\u0432\/\u043f\u043e\u0434\u044a\u0435\u043c\u043e\u0432 \u043c\u0438\u043d\u0443\u0441 1);<\/p>\n<\/li>\n<li>\n<p>\u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0438 \u0434\u043b\u0438\u043d\u043d\u044b \u0438 \u0448\u0438\u0440\u0438\u043d\u044b. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0432 .summary()<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>model.summary()<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">model = UNet(dim=3, in_channels=1, out_channels=1, n_blocks=4, start_filters=64).to(device) print(summary(model, (1, 24, 120, 120)))  \"\"\"   ----------------------------------------------------------------         Layer (type)               Output Shape         Param # ================================================================             Conv3d-1     [-1, 64, 24, 120, 120]             1,792               ReLU-2     [-1, 64, 24, 120, 120]                 0        BatchNorm3d-3     [-1, 64, 24, 120, 120]               128             Conv3d-4     [-1, 64, 24, 120, 120]           110,656               ReLU-5     [-1, 64, 24, 120, 120]                 0        BatchNorm3d-6     [-1, 64, 24, 120, 120]               128          MaxPool3d-7        [-1, 64, 12, 60, 60]                0          DownBlock-8  [[-1, 64, 12, 60, 60], [-1, 64, 24, 120, 120]]               0             Conv3d-9       [-1, 128, 12, 60, 60]          221,312              ReLU-10       [-1, 128, 12, 60, 60]                0       BatchNorm3d-11       [-1, 128, 12, 60, 60]              256            Conv3d-12       [-1, 128, 12, 60, 60]          442,496              ReLU-13       [-1, 128, 12, 60, 60]                0       BatchNorm3d-14       [-1, 128, 12, 60, 60]              256         MaxPool3d-15       [-1, 128, 6, 30, 30]                 0         DownBlock-16  [[-1, 128, 6, 30, 30], [-1, 128, 12, 60, 60]]               0            Conv3d-17       [-1, 256, 6, 30, 30]           884,992              ReLU-18       [-1, 256, 6, 30, 30]                 0       BatchNorm3d-19       [-1, 256, 6, 30, 30]               512            Conv3d-20       [-1, 256, 6, 30, 30]         1,769,728              ReLU-21       [-1, 256, 6, 30, 30]                 0       BatchNorm3d-22       [-1, 256, 6, 30, 30]               512         MaxPool3d-23       [-1, 256, 3, 15, 15]                 0         DownBlock-24  [[-1, 256, 3, 15, 15], [-1, 256, 6, 30, 30]]               0            Conv3d-25       [-1, 512, 3, 15, 15]         3,539,456              ReLU-26       [-1, 512, 3, 15, 15]                 0       BatchNorm3d-27       [-1, 512, 3, 15, 15]             1,024            Conv3d-28       [-1, 512, 3, 15, 15]         7,078,400              ReLU-29       [-1, 512, 3, 15, 15]                 0       BatchNorm3d-30       [-1, 512, 3, 15, 15]             1,024         DownBlock-31  [[-1, 512, 3, 15, 15], [-1, 512, 3, 15, 15]]               0   ConvTranspose3d-32       [-1, 256, 6, 30, 30]         1,048,832              ReLU-33       [-1, 256, 6, 30, 30]                 0       BatchNorm3d-34       [-1, 256, 6, 30, 30]               512       Concatenate-35       [-1, 512, 6, 30, 30]                 0            Conv3d-36       [-1, 256, 6, 30, 30]         3,539,200              ReLU-37       [-1, 256, 6, 30, 30]                 0       BatchNorm3d-38       [-1, 256, 6, 30, 30]               512            Conv3d-39       [-1, 256, 6, 30, 30]         1,769,728              ReLU-40       [-1, 256, 6, 30, 30]                 0       BatchNorm3d-41       [-1, 256, 6, 30, 30]               512           UpBlock-42       [-1, 256, 6, 30, 30]                 0   ConvTranspose3d-43       [-1, 128, 12, 60, 60]          262,272              ReLU-44       [-1, 128, 12, 60, 60]                0       BatchNorm3d-45       [-1, 128, 12, 60, 60]              256       Concatenate-46       [-1, 256, 12, 60, 60]                0            Conv3d-47       [-1, 128, 12, 60, 60]          884,864              ReLU-48       [-1, 128, 12, 60, 60]                0       BatchNorm3d-49       [-1, 128, 12, 60, 60]              256            Conv3d-50       [-1, 128, 12, 60, 60]          442,496              ReLU-51       [-1, 128, 12, 60, 60]                0       BatchNorm3d-52       [-1, 128, 12, 60, 60]              256           UpBlock-53       [-1, 128, 12, 60, 60]                0   ConvTranspose3d-54       [-1, 64, 24, 120, 120]          65,600              ReLU-55       [-1, 64, 24, 120, 120]               0       BatchNorm3d-56       [-1, 64, 24, 120, 120]             128       Concatenate-57      [-1, 128, 24, 120, 120]               0            Conv3d-58       [-1, 64, 24, 120, 120]         221,248              ReLU-59       [-1, 64, 24, 120, 120]               0       BatchNorm3d-60       [-1, 64, 24, 120, 120]             128            Conv3d-61       [-1, 64, 24, 120, 120]         110,656              ReLU-62       [-1, 64, 24, 120, 120]               0       BatchNorm3d-63       [-1, 64, 24, 120, 120]             128           UpBlock-64       [-1, 64, 24, 120, 120]               0            Conv3d-65        [-1, 1, 24, 120, 120]              65 ================================================================ Total params: 22,400,321 Trainable params: 22,400,321 Non-trainable params: 0 ---------------------------------------------------------------- Input size (MB): 0.61 Forward\/backward pass size (MB): 15974.12 Params size (MB): 85.45 Estimated Total Size (MB): 16060.18 ---------------------------------------------------------------- \"\"\"<\/code><\/pre>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/618\/cdd\/83d\/618cdd83db3c6855c2f916a11303c960.png\" alt=\"\u042d\u043a\u0441\u043f.\u21164 3D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043c\u043e\u043c, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [y, z], \u0432\u0440\u0435\u043c\u044f*0,38\" title=\"\u042d\u043a\u0441\u043f.\u21164 3D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043c\u043e\u043c, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [y, z], \u0432\u0440\u0435\u043c\u044f*0,38\" width=\"759\" height=\"609\"><figcaption>\u042d\u043a\u0441\u043f.\u21164 3D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043c\u043e\u043c, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [y, z], \u0432\u0440\u0435\u043c\u044f*0,38<\/figcaption><\/figure>\n<p>\u0421 \u0443\u0447\u0435\u0442\u043e\u043c \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 ~60% \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f(25 epochs) \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u0435\u043d\u044f \u0443\u0441\u0442\u0440\u043e\u0438\u043b, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7c7\/e67\/19a\/7c7e6719a026fb11df22cd32eab03620.png\" alt=\"\u042d\u043a\u0441\u043f.\u21165 3D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043c\u043e\u043c, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [y, z],  65 epochs ~ 1,5 \u0447\u0430\u0441\u0430 \" title=\"\u042d\u043a\u0441\u043f.\u21165 3D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043c\u043e\u043c, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [y, z],  65 epochs ~ 1,5 \u0447\u0430\u0441\u0430 \" width=\"633\" height=\"468\"><figcaption>\u042d\u043a\u0441\u043f.\u21165 3D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043c\u043e\u043c, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [y, z],  65 epochs ~ 1,5 \u0447\u0430\u0441\u0430 <\/figcaption><\/figure>\n<p>\u041e\u0441\u043e\u0431\u044b\u0445 \u043f\u043e\u0442\u0435\u0440\u044c \u0432 \u0438\u0441\u043a\u043e\u043c\u044b\u0445 \u0437\u043e\u043d\u0430\u0445 \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b. \u0420\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c, \u043e\u0434\u043d\u0430\u043a\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u0443\u0436\u0435 \u0433\u0434\u0435 \u0442\u043e \u0432\u0438\u0434\u0435\u043b\u0438(\u044d\u043a\u0441\u043f.\u21163) &#8212; \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0438\u0441\u043a\u043e\u043c\u044b\u0445 \u0437\u043e\u043d \u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bc8\/372\/a07\/bc8372a07b3aa13e874b0f9abfc4d21a.png\" alt=\"\u042d\u043a\u0441\u043f.\u21166 3D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043c\u043e\u043c, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [x, z],  105 epochs ~ 2,1 \u0447\u0430\u0441\u0430 \" title=\"\u042d\u043a\u0441\u043f.\u21166 3D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043c\u043e\u043c, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [x, z],  105 epochs ~ 2,1 \u0447\u0430\u0441\u0430 \" width=\"676\" height=\"516\"><figcaption>\u042d\u043a\u0441\u043f.\u21166 3D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043c\u043e\u043c, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [x, z],  105 epochs ~ 2,1 \u0447\u0430\u0441\u0430 <\/figcaption><\/figure>\n<p>&#171;\u041d\u0430\u0443\u0447\u043d\u044b\u0439&#187; \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043d\u0435\u0434\u0435\u043b\u0438 \u043f\u0440\u0438\u043d\u0435\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0423\u043c\u0435\u043d\u044c\u0448\u0438\u043b \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438 \u0434\u043e ~400\u043a (\u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 ~22\u043c) \u043f\u0443\u0442\u0435\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430 [18, 32, 64, 128] \u0438 \u0441\u043f\u0443\u0441\u043a\u0430\/\u043f\u043e\u0434\u044a\u0435\u043c\u0430 \u0434\u043e 3. \u0418\u0437\u043c\u0435\u043d\u0438\u043b \u043c\u0435\u0442\u043e\u0434 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 RSMProp. \u0423\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430 (1, 1, <strong>72*<\/strong>, 120, 120). \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442?<\/p>\n<details class=\"spoiler\">\n<summary>model.summary()<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">model = UNet(dim=3, in_channels=1, out_channels=1, n_blocks=3, start_filters=18).to(device) print(summary(model, (1, 1, 72, 120, 120)))  \"\"\" ----------------------------------------------------------------         Layer (type)               Output Shape         Param # ================================================================             Conv3d-1     [-1, 18, 72, 120, 120]             504               ReLU-2     [-1, 18, 72, 120, 120]               0        BatchNorm3d-3     [-1, 18, 72, 120, 120]              36             Conv3d-4     [-1, 18, 72, 120, 120]           8,766               ReLU-5     [-1, 18, 72, 120, 120]               0        BatchNorm3d-6     [-1, 18, 72, 120, 120]              36          MaxPool3d-7       [-1, 18, 36, 60, 60]               0          DownBlock-8  [[-1, 18, 36, 60, 60], [-1, 18, 24, 120, 120]]               0             Conv3d-9       [-1, 36, 36, 60, 60]          17,532              ReLU-10       [-1, 36, 36, 60, 60]               0       BatchNorm3d-11       [-1, 36, 36, 60, 60]              72            Conv3d-12       [-1, 36, 36, 60, 60]          35,028              ReLU-13       [-1, 36, 36, 60, 60]               0       BatchNorm3d-14       [-1, 36, 36, 60, 60]              72         MaxPool3d-15        [-1, 36, 18, 30, 30]              0         DownBlock-16  [[-1, 36, 18, 30, 30], [-1, 36, 36, 60, 60]]               0            Conv3d-17        [-1, 72, 18, 30, 30]         70,056              ReLU-18        [-1, 72, 18, 30, 30]              0       BatchNorm3d-19        [-1, 72, 18, 30, 30]            144            Conv3d-20        [-1, 72, 18, 30, 30]        140,040              ReLU-21        [-1, 72, 18, 30, 30]              0       BatchNorm3d-22        [-1, 72, 18, 30, 30]            144         DownBlock-23  [[-1, 72, 18, 30, 30], [-1, 72, 18, 30, 30]]               0   ConvTranspose3d-24       [-1, 36, 36, 60, 60]          20,772              ReLU-25       [-1, 36, 36, 60, 60]               0       BatchNorm3d-26       [-1, 36, 36, 60, 60]              72       Concatenate-27       [-1, 72, 36, 60, 60]               0            Conv3d-28       [-1, 36, 36, 60, 60]          70,020              ReLU-29       [-1, 36, 36, 60, 60]               0       BatchNorm3d-30       [-1, 36, 36, 60, 60]              72            Conv3d-31       [-1, 36, 36, 60, 60]          35,028              ReLU-32       [-1, 36, 36, 60, 60]               0       BatchNorm3d-33       [-1, 36, 36, 60, 60]              72           UpBlock-34       [-1, 36, 36, 60, 60]               0   ConvTranspose3d-35     [-1, 18, 72, 120, 120]           5,202              ReLU-36     [-1, 18, 72, 120, 120]               0       BatchNorm3d-37     [-1, 18, 72, 120, 120]              36       Concatenate-38     [-1, 36, 72, 120, 120]               0            Conv3d-39     [-1, 18, 72, 120, 120]          17,514              ReLU-40     [-1, 18, 72, 120, 120]               0       BatchNorm3d-41     [-1, 18, 72, 120, 120]              36            Conv3d-42     [-1, 18, 72, 120, 120]           8,766              ReLU-43     [-1, 18, 72, 120, 120]               0       BatchNorm3d-44     [-1, 18, 72, 120, 120]              36           UpBlock-45     [-1, 18, 72, 120, 120]               0            Conv3d-46      [-1, 1, 72, 120, 120]              19 ================================================================ Total params: 430,075 Trainable params: 430,075 Non-trainable params: 0 ---------------------------------------------------------------- Input size (MB): 1.32 Forward\/backward pass size (MB): 5744.38 Params size (MB): 1.64 Estimated Total Size (MB): 5747.34 ---------------------------------------------------------------- \"\"\"<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>72*<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0432\u0430\u0441 \u043f\u043e\u0434\u0443\u043c\u0430\u044e\u0442, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (168, 120, 120), \u0430 \u0447\u0430\u0441\u0442\u044c (72, 120, 120). \u041d\u0430\u0437\u0440\u0435\u0432\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a \u0434\u0435\u043b\u0438\u0442\u044c. \u0412\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e, \u0432\u043e 2 \u0433\u043b\u0430\u0432\u0435 \u043c\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u043d\u0430\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0437\u0430\u0442\u0435\u043c \u0434\u0435\u043b\u0438\u043b\u0438 \u0438\u0445 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043c\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b. \u042f \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 9 \u0440\u0430\u0437 (1512, 120, 120) \u0442.\u0435. \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u043b \u043d\u0430 9 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0443\u0433\u043b\u043e\u0432 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0434\u043d\u043e\u0439 \u043e\u0441\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b \u043d\u0430 21(batch size) \u0447\u0430\u0441\u0442\u044c \u043f\u043e (72, 120, 120). \u0422\u0430\u043a \u0436\u0435 72 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0441\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0432 <strong>24*<\/strong>(\u0432\u044b\u0448\u0435).<\/p>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9d5\/497\/b04\/9d5497b04c3c3a80a2c6275e5148cb2c.png\" alt=\"\u042d\u043a\u0441\u043f.\u21167 3D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043c\u043e\u043c, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [x, z], \u041c\u0430\u0441\u043a\u0430 (\u0441\u043b\u0435\u0432\u0430) \u0438 \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f (\u0441\u043f\u0440\u0430\u0432\u0430), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0435\u0442\u0438, \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f(65 epochs) ~ 14\u043c\u0438\u043d.\" title=\"\u042d\u043a\u0441\u043f.\u21167 3D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043c\u043e\u043c, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [x, z], \u041c\u0430\u0441\u043a\u0430 (\u0441\u043b\u0435\u0432\u0430) \u0438 \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f (\u0441\u043f\u0440\u0430\u0432\u0430), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0435\u0442\u0438, \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f(65 epochs) ~ 14\u043c\u0438\u043d.\" width=\"1732\" height=\"615\"><figcaption>\u042d\u043a\u0441\u043f.\u21167 3D U-Net, \u043f\u043e\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043c\u043e\u043c, \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c [x, z], \u041c\u0430\u0441\u043a\u0430 (\u0441\u043b\u0435\u0432\u0430) \u0438 \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f (\u0441\u043f\u0440\u0430\u0432\u0430), \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0435\u0442\u0438, \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f(65 epochs) ~ 14\u043c\u0438\u043d.<\/figcaption><\/figure>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u0435\u0441\u0442\u044c \u043d\u0435\u0434\u043e\u0447\u0435\u0442\u044b (\u0432\u0440\u043e\u0434\u0435 &#171;\u043f\u043e\u0445\u0443\u0434\u0435\u0432\u0448\u0438\u0445&#187; \u0437\u0443\u0431\u043e\u0432). \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c \u0438\u0445 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0441\u0442\u0435. \u0414\u043b\u044f \u044d\u0442\u0430\u043f\u0430 semantic segmentation \u044f \u0434\u0443\u043c\u0430\u044e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u043f\u043e\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043d\u0430 3D \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0431\u044b\u043b\u0430 \u0432 \u0442\u043e\u043c \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0441\u043b\u0430\u0439\u0441\u0430\u043c\u0438 (\u043a\u0430\u043a \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0441\u0442\u0435) (1512, 120, 120) &#8212;&gt; 21*(1, 72, 120, 120), \u0430 \u043a\u0443\u0431\u0438\u043a\u0430\u043c\u0438 ~\u0445*(30, 30, 30) \u0438\u043b\u0438 \u043e\u043a\u043e\u043b\u043e \u0442\u043e\u0433\u043e (\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044d\u0442\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043d\u0435 \u0431\u044b\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d \u043e\u043f \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c). \u041e\u043f\u044b\u0442\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c \u043f\u043e\u043d\u044f\u043b 2 \u0432\u0435\u0449\u0438: \u0447\u0435\u043c \u0431<strong>\u043e<\/strong>\u043b\u044c\u0448\u0438\u043c\u0438 \u043f\u043e\u0440\u0446\u0438\u044f\u043c\u0438 \u0442\u044b \u043f\u043e\u0434\u0430\u0435\u0448\u044c 3-\u0445 \u043c\u0435\u0440\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442(\u0434\u043b\u044f \u043c\u043e\u0435\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f); \u0438 \u043d\u0443\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0442\u0435\u043e\u0440\u0438\u044e \u0442\u043e\u0433\u043e, \u0441 \u0447\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0448\u044c.   <\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u043c\u043e\u0434\u0435\u043b\u0438<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0435\u0442\u0438 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043d\u044b \u0442\u0430\u043a, \u0447\u0442\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 1 epochs \u043d\u0430 \u043c\u043e\u0435\u0439 &#171;\u0441\u0442\u0430\u0440\u0443\u0448\u043a\u0435&#187; \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 ~13\u0441\u0435\u043a, \u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 2\u043c\u0431 (\u043f\u0440\u043e\u0448\u043b\u0430\u044f&gt;80\u043c\u0431). \u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0432\u043d\u043e 1 epochs. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u044d\u0442\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. <\/p>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0441\u0435\u0431\u0435 \u0437\u0430\u0434\u0430\u0447\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 8 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 + \u0444\u043e\u043d. \u041e loss function \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 training loop<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import torch from tqdm import tqdm from _loss_f import LossFunction   class TrainFunction:     def __init__(self,                  data_loader,                  device_for_training,                  model_name,                  model_name_pretrained,                  model,                  optimizer,                  scale,                  learning_rate: int = 1e-2,                  num_epochs: int = 1,                  transfer_learning: bool = False,                  binary_loss_f: bool = True                  ):         self.data_loader = data_loader         self.device = device_for_training         self.model_name_pretrained = model_name_pretrained         self.semantic_binary = binary_loss_f         self.num_epochs = num_epochs         self.model_name = model_name         self.transfer = transfer_learning         self.optimizer = optimizer         self.learning_rate = learning_rate         self.model = model         self.scale = scale      def forward(self):         print('Running on the:', torch.cuda.get_device_name(self.device))         self.model.load_state_dict(torch.load(self.model_name_pretrained)) if self.transfer else None         optimizer = self.optimizer(self.model.parameters(), lr=self.learning_rate)         for epoch in range(self.num_epochs):             self.train_loop(self.data_loader, self.model, optimizer, self.scale, epoch)             torch.save(self.model.state_dict(), 'models\/' + self.model_name+str(epoch+1)                        + '_epoch.pth') if (epoch + 1) % 10 == 0 else None      def train_loop(self, loader, model, optimizer, scales, i):         loop, epoch_loss = tqdm(loader), 0         loop.set_description('Epoch %i' % (self.num_epochs - i))         for batch_idx, (data, targets) in enumerate(loop):             data, targets = data.to(device=self.device, dtype=torch.float), \\                             targets.to(device=self.device, dtype=torch.long)             optimizer.zero_grad()             *\u0442\u0443\u0442 \u0441\u0435\u043a\u0440\u0435\u0442*             with torch.cuda.amp.autocast():                 predictions = model(data)                 loss = LossFunction(predictions, targets,                                     device_for_training=self.device,                                     semantic_binary=self.semantic_binary                                     ).forward()             scales.scale(loss).backward()             scales.step(optimizer)             scales.update()             epoch_loss += (1 - loss.item())*100             loop.set_postfix(loss=loss.item())         print('Epoch-acc', round(epoch_loss \/ (batch_idx+1), 2)) <\/code><\/pre>\n<\/div>\n<\/details>\n<h2>4. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0438<\/h2>\n<p>\u041c\u043d\u0435 \u0432 \u0446\u0435\u043b\u043e\u043c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u043a\u0430\u043a \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442 \u0441\u0435\u0431\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/S%C3%B8rensen%E2%80%93Dice_coefficient\" rel=\"noopener noreferrer nofollow\">Dice-loss<\/a> \u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0442\u043e\u043b\u044c\u043a\u043e &#8216;\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430&#8217; \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 [0, 1]. \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 (\u0430 \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0444\u043e\u0440\u043c\u0430\u0442\u0443 [0, 1]), \u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0430\u0440\u044b (\u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u0432\u0438\u0434\u0443 &#171;\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435&#187; \u0438 &#171;\u043c\u0430\u0441\u043a\u0430&#187; \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438) \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e Dice-loss \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. <\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 categorical_dice_loss<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import torch   class LossFunction:     def __init__(self,                  prediction,                  target,                  device_for_training,                  semantic_binary: bool = True,                  ):         self.prediction = prediction         self.device = device_for_training         self.target = target         self.semantic_binary = semantic_binary      def forward(self):         if self.semantic_binary:             return self.dice_loss(self.prediction, self.target)         return self.categorical_dice_loss(self.prediction, self.target)      @staticmethod     def dice_loss(predictions, targets, alpha=1e-5):         intersection = 2. * (predictions * targets).sum()         denomination = (torch.square(predictions) + torch.square(targets)).sum()         dice_loss = 1 - torch.mean((intersection + alpha) \/ (denomination + alpha))          return dice_loss      def categorical_dice_loss(self, prediction, target):         pr, tr = self.prepare_for_multiclass_loss_f(prediction, target)         target_categories, losses = torch.unique(tr).tolist(), 0         for num_category in target_categories:             categorical_target = torch.where(tr == num_category, 1, 0)             categorical_prediction = pr[num_category][:][:][:]             losses += self.dice_loss(categorical_prediction, categorical_target).to(self.device)          return losses \/ len(target_categories)      @staticmethod     def prepare_for_multiclass_loss_f(prediction, target):         prediction_prepared = torch.squeeze(prediction, 0)         target_prepared = torch.squeeze(target, 0)         target_prepared = torch.squeeze(target_prepared, 0)          return prediction_prepared, target_prepared <\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044e &#171;categorical_dice_loss&#187;:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f);<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 batch \u043c\u0430\u0441\u043e\u043a;<\/p>\n<\/li>\n<li>\n<p>\u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0431\u0435\u0440\u0435\u043c &#171;\u043f\u0440\u043e\u0433\u043d\u043e\u0437&#187; \u0438 &#171;\u043c\u0430\u0441\u043a\u0443&#187; \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a \u0444\u043e\u0440\u043c\u0430\u0442\u0443 [0, 1] \u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e Dice-loss;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438 \u0434\u0435\u043b\u044f \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e  \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u0441\u0440\u0435\u0434\u043d\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e batct. \u041d\u0443 \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u0451 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a \u0436\u0435, \u0434\u0443\u043c\u0430\u044e, \u043f\u043e\u043c\u043e\u0433 \u0431\u044b \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a one-hot \u0444\u043e\u0440\u043c\u0430\u0442\u0443, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0434\u0430\u0442\u0430 \u0441\u0435\u0442\u0430 (\u0440\u0430\u0437\u0434\u0443\u0435\u0442 \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0435), \u0430 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u043c \u043e\u0448\u0438\u0431\u043a\u0438, \u043d\u043e \u044f \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b. \u041a\u0442\u043e \u0432 \u043a\u0443\u0440\u0441\u0435, \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0431\u0443\u0434\u0443 \u0440\u0430\u0434. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0413\u043b\u0430\u0432\u0435(5).<\/p>\n<h2>5. \u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u0422\u0430\u043a \u0438 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c &#171;..\u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0438\u0434 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0430&#187;. \u041d\u0430\u0447\u043d\u0443 \u0441 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c *.nrrd \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u0430\u043c\u044b\u043c <a href=\"https:\/\/pypi.org\/project\/pynrrd\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0441\u0442\u044b\u043c<\/a>.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import nrrd # \u0447\u0438\u0442\u0430\u0435\u0442 \u0432 numpy read = nrrd.read(data_path)  data, meta_data = read[0], read[1]  print(data.shape, np.max(data), np.min(data), meta_data, sep=\"\\n\")  (163, 112, 120) 14982 -2254   OrderedDict([('type', 'short'), ('dimension', 3), ('space', 'left-posterior-superior'), ('sizes', array([163, 112, 120])), ('space directions', array([[-0.5,  0. ,  0. ],        [ 0. , -0.5,  0. ],        [ 0. ,  0. ,  0.5]])), ('kinds', ['domain', 'domain', 'domain']), ('endian', 'little'), ('encoding', 'gzip'), ('space origin', array([131.57200623,  80.7661972 ,  32.29940033]))])<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 &#8212; \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438? \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0443\u0442\u0430\u044e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437 \u0447\u0438\u0441\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0438 \u0433\u0440\u0430\u043d\u0438, \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"float full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/645\/b5f\/ed7\/645b5fed724e4a4a24a6ef9fe7d8f1e4.png\" width=\"690\" height=\"479\"><figcaption><\/figcaption><\/figure>\n<p>\u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0443\u0431 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e 8 \u0432\u0435\u0440\u0448\u0438\u043d \u0438 12 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439. \u0412 \u044d\u0442\u043e\u043c \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0438\u0434\u0435\u044f (\u0434\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a) &#8212; \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 (\u0447\u0438\u0441\u043b\u0430 \u0432 3-\u0445 \u043c\u0435\u0440\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u0435) \u043d\u0430 \u0442\u0430\u043a\u0438\u0435 \u043a\u0443\u0431\u0438\u043a\u0438. \u041a\u043e\u0434 \u044f \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b, \u043d\u043e \u0441\u043c\u044b\u0441\u043b \u043f\u0440\u043e\u0441\u0442, \u0440\u0438\u0441\u0443\u0435\u043c \u043a\u0443\u0431 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 &#171;\u043f\u0438\u043a\u0441\u0435\u043b\u044f&#187; \u0441\u043e \u0441\u0434\u0432\u0438\u0433\u043e\u043c -1 \u043f\u043e \u0442\u0440\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c, \u043f\u043e\u0442\u043e\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438 \u0442.\u0434.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f86\/683\/5ee\/f866835eefbc96f0b9a6ea45a606c04f.png\" alt=\"\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u0431\u0440\u0435\u0434\u043e\u0432\u043e, \u043a\u0430\u043a \u0438 \u0437\u0432\u0443\u0447\u0438\u0442\" title=\"\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u0431\u0440\u0435\u0434\u043e\u0432\u043e, \u043a\u0430\u043a \u0438 \u0437\u0432\u0443\u0447\u0438\u0442\" width=\"840\" height=\"515\"><figcaption>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u0431\u0440\u0435\u0434\u043e\u0432\u043e, \u043a\u0430\u043a \u0438 \u0437\u0432\u0443\u0447\u0438\u0442<\/figcaption><\/figure>\n<p>\u041e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 &#8212; \u0442\u043e\u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c. \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u044f \u0443\u0436\u0435 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0431\u0435\u0437 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043c\u043d\u0435 \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c. \u041f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439 \u0432 \u0431\u044b\u043b\u0430 \u043f\u0430\u0440\u0430 Skimage \u0438 Stl. <\/p>\n<pre><code class=\"python\">from skimage.measure import marching_cubes import nrrd import numpy as np from stl import mesh  path = 'some_path.nrrd' data = nrrd.read(path)[0]   def three_d_creator(some_data):     vertices, faces, volume, _ = marching_cubes(some_data)     cube = mesh.Mesh(np.full(faces.shape[0], volume.shape[0], dtype=mesh.Mesh.dtype))     for i, f in enumerate(faces):         for j in range(3):             cube.vectors[i][j] = vertices[f[j]]     cube.save('name.stl')      return cube   stl = three_d_creator(datas)<\/code><\/pre>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u044d\u0442\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u043d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0444\u0430\u0439\u043b\u044b &#171;\u043b\u043e\u043c\u0430\u043b\u0438\u0441\u044c&#187; \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0438\u0441\u044c. \u0410 \u043d\u0430 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0438\u0441\u044c, \u0440\u0443\u0433\u0430\u043b\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 Win 10 3D Builder \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0442\u0430\u043c \u0447\u0442\u043e-\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c. \u0422\u0430\u043a \u0436\u0435 \u0435\u0449\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f &#171;\u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c&#187; \u043a \u043a\u043e\u0434\u0443 \u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 3D \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0431\u0435\u0437 \u0438\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 &#171;\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438&#187; \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eaa\/6cf\/ef6\/eaa6cfef6a3db704e47a0174e3852f9f.png\" width=\"1877\" height=\"858\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c <a href=\"https:\/\/vedo.embl.es\/#quick_start\" rel=\"noopener noreferrer nofollow\">v3do<\/a>. \u041a\u043e\u0440\u043e\u0442\u043a\u043e, \u0431\u044b\u0441\u0442\u0440\u043e, \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c. <\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 npy \u0432 stl \u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u0439<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">from vedo import Volume, show, write  prediction = 'some_data_path.npy'  def show_save(data, save=False):     data_multiclass = Volume(data, c='Set2', alpha=(0.1, 1), alphaUnit=0.87, mode=1)     data_multiclass.addScalarBar3D(nlabels=9)     show([(data_multiclass, \"Multiclass teeth segmentation prediction\")], bg='black', N=1, axes=1).close()     write(data_multiclass.isosurface(), 'some_name_.stl') if save else None      show_save(prediction, save=True)<\/code><\/pre>\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u0441\u0430\u043c\u0438 \u0437\u0430 \u0441\u0435\u0431\u044f.<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e. \u0422\u043e\u043c\u0438\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443:<\/p>\n<details class=\"spoiler\">\n<summary>model.summary()<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">model = UNet(dim=3, in_channels=1, out_channels=9, n_blocks=3, start_filters=9).to(device) print(summary(model, (1, 168*, 120, 120)))      \"\"\" ----------------------------------------------------------------         Layer (type)               Output Shape         Param # ================================================================             Conv3d-1      [-1, 9, 168, 120, 120]            252               ReLU-2      [-1, 9, 168, 120, 120]              0        BatchNorm3d-3      [-1, 9, 168, 120, 120]             18             Conv3d-4      [-1, 9, 168, 120, 120]          2,196               ReLU-5      [-1, 9, 168, 120, 120]              0        BatchNorm3d-6      [-1, 9, 168, 120, 120]             18          MaxPool3d-7        [-1, 9, 84, 60, 60]               0          DownBlock-8  [[-1, 9, 84, 60, 60], [-1, 9, 168, 120, 120]]               0             Conv3d-9       [-1, 18, 84, 60, 60]           4,392              ReLU-10       [-1, 18, 84, 60, 60]               0       BatchNorm3d-11       [-1, 18, 84, 60, 60]              36            Conv3d-12       [-1, 18, 84, 60, 60]           8,766              ReLU-13       [-1, 18, 84, 60, 60]               0       BatchNorm3d-14       [-1, 18, 84, 60, 60]              36         MaxPool3d-15       [-1, 18, 42, 30, 30]               0         DownBlock-16  [[-1, 18, 18, 42, 30], [-1, 18, 84, 60, 60]]               0            Conv3d-17       [-1, 36, 42, 30, 30]          17,532              ReLU-18       [-1, 36, 42, 30, 30]               0       BatchNorm3d-19       [-1, 36, 42, 30, 30]              72            Conv3d-20       [-1, 36, 42, 30, 30]          35,028              ReLU-21       [-1, 36, 42, 30, 30]               0       BatchNorm3d-22       [-1, 36, 42, 30, 30]              72         DownBlock-23  [[-1, 36, 42, 30, 30], [-1, 36, 42, 30, 30]]               0   ConvTranspose3d-24       [-1, 18, 84, 60, 60]           5,202              ReLU-25       [-1, 18, 84, 60, 60]               0       BatchNorm3d-26       [-1, 18, 84, 60, 60]              36       Concatenate-27       [-1, 36, 84, 60, 60]               0            Conv3d-28       [-1, 18, 84, 60, 60]          17,514              ReLU-29       [-1, 18, 84, 60, 60]               0       BatchNorm3d-30       [-1, 18, 84, 60, 60]              36            Conv3d-31       [-1, 18, 84, 60, 60]           8,766              ReLU-32       [-1, 18, 84, 60, 60]               0       BatchNorm3d-33       [-1, 18, 84, 60, 60]              36           UpBlock-34       [-1, 18, 84, 60, 60]               0   ConvTranspose3d-35      [-1, 9, 168, 120, 120]          1,305              ReLU-36      [-1, 9, 168, 120, 120]              0       BatchNorm3d-37      [-1, 9, 168, 120, 120]             18       Concatenate-38     [-1, 18, 168, 120, 120]              0            Conv3d-39      [-1, 9, 168, 120, 120]          4,383              ReLU-40      [-1, 9, 168, 120, 120]              0       BatchNorm3d-41      [-1, 9, 168, 120, 120]             18            Conv3d-42      [-1, 9, 168, 120, 120]          2,196              ReLU-43      [-1, 9, 168, 120, 120]              0       BatchNorm3d-44      [-1, 9, 168, 120, 120]             18           UpBlock-45      [-1, 9, 168, 120, 120]              0            Conv3d-46      [-1, 9, 168, 120, 120]             90 ================================================================ Total params: 108,036 Trainable params: 108,036 Non-trainable params: 0 ---------------------------------------------------------------- Input size (MB): 3.96 Forward\/backward pass size (MB): 12170.30 Params size (MB): 0.41 Estimated Total Size (MB): 12174.66 ----------------------------------------------------------------     \"\"\"<\/code><\/pre>\n<p><strong>*<\/strong>\u0412\u0432\u0438\u0434\u0443 \u0435\u0449\u0451 \u0431<strong>\u043e<\/strong>\u043b\u044c\u0448\u0435\u0433\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438(\u0444\u0438\u043b\u044c\u0442\u0440[9, 18, 36, 72]), \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b \u0446\u0435\u043b\u0438\u043a\u043e\u043c &#8212; 9*(168, 120, 120)<\/p>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0c4\/c19\/689\/0c4c196892e5ceedf3445d0ccb5c7131.gif\" width=\"720\" height=\"400\"><figcaption><\/figcaption><\/figure>\n<h2>6. After words<\/h2>\n<p>\u0414\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b, \u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c &#8212; \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b. \u0422\u0443\u0442 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u043d\u0430\u0434 \u0447\u0435\u043c \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041c\u043d\u0435, \u0432 \u0446\u0435\u043b\u043e\u043c, 2 \u044d\u0442\u0430\u043f \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u0445\u043e\u0442\u044c \u043e\u043d \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0417\u0430\u0447\u0435\u043c \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0446\u0435\u043b\u044b\u0439 \u0440\u0435\u0433\u0438\u043e\u043d? \u0410 \u0435\u0441\u043b\u0438, \u043e\u0431\u0440\u0430\u0437\u043d\u043e, \u0435\u0441\u0442\u044c 28 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432, \u0437\u0430\u0447\u0435\u043c \u043c\u043d\u0435 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0445 \u0432\u0441\u0435, \u043d\u0435 \u043f\u0440\u043e\u0449\u0435 \u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u0437\u0443\u0431 \u0438 \u0437\u0430\u0432\u044f\u0437\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u0451 \u043d\u0430 &#171;\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439&#187; \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439\/\u043d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444? \u0418\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u043e U-net \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c GCNN \u0438 \u0432\u043c\u0435\u0441\u0442\u043e Pytorch &#8212; Pytorch3D? \u041f\u044f\u0442\u043d\u0430, \u0434\u0443\u043c\u0430\u044e, \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 bounding box(\u0432\u0435\u0434\u044c \u043e\u0434\u0438\u043d \u0437\u0443\u0431 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 1 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438). \u041d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e\u0442\u043e\u0442\u0438\u043f (\u043d\u0430\u0431\u0440\u043e\u0441\u043e\u043a)<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/31b\/ea6\/340\/31bea6340fb1ad5fcb9fdd0c636f9be4.png\" width=\"918\" height=\"926\"><figcaption><\/figcaption><\/figure>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0422\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 &#171;\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u0433\u0440\u0430\u0444&#187;<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6a2\/13f\/3e4\/6a213f3e460be762f17aacc161d68309.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430 \u043d\u0430 28 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u0441 &quot;\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u043c\u0438&quot;\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430 \u043d\u0430 28 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u0441 &quot;\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u043c\u0438&quot;\" width=\"2045\" height=\"1568\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430 \u043d\u0430 28 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u0441 &#171;\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u043c\u0438&#187;<\/figcaption><\/figure>\n<\/div>\n<\/details>\n<hr>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u043c\u043e\u0435\u0439 \u0436\u0435\u043d\u0435 &#8212; \u0410\u043b\u0451\u043d\u0435, \u0437\u0430 \u043e\u0441\u043e\u0431\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u044d\u0442\u043e\u0433\u043e &#171;\u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432 \u0442\u0435\u043c\u043d\u043e\u0442\u0443&#187;.<\/p>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044e \u0432\u0441\u0435\u0445 \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u0440\u0438\u0442\u0438\u043a\u0430 \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439, \u0442\u0430\u043a \u0438 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 &#8212; \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f.<\/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\/558826\/\"> https:\/\/habr.com\/ru\/post\/558826\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>3D \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0437\u0443\u0431\u043e\u0432 \u043e\u0442 \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u041f\u043e\u0447\u0442\u0438.<\/p>\n<h2>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440<\/h2>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0439 \u0432 \u043b\u044e\u0431\u043e\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430 \u0438 \u043d\u043e\u0441\u0438\u0442 \u0441\u0443\u0433\u0443\u0431\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440. \u0410\u0432\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 \u043d\u0435\u0441\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430 \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u0435\u0435 \u0447\u0442\u0435\u043d\u0438\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0431 \u0430\u0432\u0442\u043e\u0440\u0435<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 &#8212; \u0432\u0441\u0435\u043c, \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439(27). \u041f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u043e. \u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435? \u041f\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044e &#8212; \u0431\u0430\u043a\u0430\u043b\u0430\u0432\u0440 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043c\u0435\u0445\u0430\u043d\u0438\u043a, \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044e \u0437\u043d\u0430\u044e. \u041e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b 2 \u0433\u043e\u0434\u0430 \u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430-\u044d\u043d\u0435\u0440\u0433\u0435\u0442\u0438\u043a\u0430 \u0432 \u0431\u0443\u0440\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0438\u0435 &#8212; \u0441\u0433\u043e\u0440\u0435\u043b, \u0434\u0430 \u043d\u0435 \u043f\u043e \u043c\u043d\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u044d\u0442\u043e \u0432\u0441\u0451. \u041d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u0441 \u041f\u041a \u0432 \u043e\u0431\u043d\u0438\u043c\u043a\u0443 \u0441 \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043b\u0435\u0442. \u0412\u044b\u0431\u043e\u0440 \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d. \u0412\u043d\u0430\u0447\u0430\u043b\u0435 (\u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434), \u0432\u0441\u0435\u0440\u044c\u0451\u0437 \u0434\u0443\u043c\u0430\u043b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u0443\u0440\u0441\u044b \u043e\u0442 \u042f \u0438\u043b\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435. \u041d\u0430\u0447\u0438\u0442\u0430\u043b\u0441\u044f \u043e\u0442\u0437\u044b\u0432\u043e\u0432, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0441 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430\u043c\u0438 \u0438 \u043f\u043e\u043d\u044f\u043b \u0447\u0442\u043e \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435\u0442. \u0422\u0430\u043a \u043d\u0430\u0448\u0435\u043b <a href=\"https:\/\/stepik.org\/catalog\" rel=\"noopener noreferrer nofollow\">\u0441\u0430\u0439\u0442<\/a>, \u0442\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0431\u0430\u0437\u0443 \u043f\u043e Python \u0438 \u0441 \u043d\u0438\u043c \u0443\u0436\u0435 \u043d\u0430\u0447\u0430\u043b \u0441\u0432\u043e\u0439 \u043f\u0443\u0442\u044c (\u0441\u0435\u0439\u0447\u0430\u0441 \u0442\u0430\u043c \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e  \u0438\u0437\u0443\u0447\u0430\u044e \u0432\u0441\u0451, \u0447\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 ML). \u0421\u0440\u0430\u0437\u0443 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u043e \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435, CV \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438. \u041f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0441\u0435\u0431\u0435 \u0437\u0430\u0434\u0430\u0447\u0443 \u0438 \u0432\u043e\u0442  \u0437\u0434\u0435\u0441\u044c (\u043f\u043e \u043c\u043d\u0435, \u0442\u0430\u043a \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u0447\u0438\u0442\u044c\u0441\u044f).<\/p>\n<\/div>\n<\/details>\n<h2>1. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a, \u043f\u0440\u0438\u0448\u0435\u043b \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 2 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. 1-\u0430\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0437\u0443\u0431\u044b \u043a\u0430\u043a [1, 0] \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e, \u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043b\u0438\u0442 \u0438\u0445 \u043d\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438[0, 8]. \u041d\u043e \u043d\u0430\u0447\u043d\u0435\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443. <\/p>\n<h2>2. \u041f\u043e\u0438\u0441\u043a \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u041f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u043d\u0435 \u043e\u0434\u0438\u043d \u0432\u0435\u0447\u0435\u0440 \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u043f\u0440\u0438\u0448\u0435\u043b \u0432 \u0432\u044b\u0432\u043e\u0434\u0443 \u0447\u0442\u043e \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u0447\u0435\u043b\u044e\u0441\u0442\u044c \u0432 \u0445\u043e\u0440\u043e\u0448\u0435\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 (*.stl, *.nrrd \u0438 \u0442.\u0434.) \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041b\u0443\u0447\u0448\u0435\u0435, \u0447\u0442\u043e \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u043e\u0441\u044c &#8212; \u044d\u0442\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437\u0435\u0446 \u0433\u043e\u043b\u043e\u0432\u044b \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u0445\u0438\u0440\u0443\u0440\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u0447\u0435\u043b\u044e\u0441\u0442\u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 <a href=\"https:\/\/www.slicer.org\/\" rel=\"noopener noreferrer nofollow\">3D Slicer<\/a>.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0433\u043e\u043b\u043e\u0432\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u0440\u0435\u0437\u0430\u043b \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0434\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 163*112*120\u0440\u0445 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0441\u0442\u0435 {x*y*z = \u0448-\u0433-\u0432} \u0438 1\u0440\u0445 &#8212; 0,5\u043c\u043c), \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0443\u0431\u044b \u0438 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0447\u0435\u043b\u044e\u0441\u0442\u043d\u043e-\u043b\u0438\u0446\u0435\u0432\u044b\u0435 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0423\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0434\u0430\u043b\u044c\u0448\u0435 &#8212; \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0430\u0441\u043a\u0438 \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043d\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u044d\u0442\u0438\u043c &#8212; &#171;autothreshold&#187; \u043d\u0435 \u0442\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u0438\u0448\u043d\u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e, \u0434\u0443\u043c\u0430\u044e, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u044f\u043b\u043e \u0431\u044b \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u0432\u0440\u0443\u0447\u043d\u0443\u044e(\u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u0441\u043a\u0438).<\/p>\n<figure class=\"full-width\"><figcaption>&#8212; \u041f\u0438\u043a\u0441\u0435\u043b\u0438(\u0441\u0440\u0435\u0437\u044b \u0441\u043b\u0435\u0432\u0430)? &#8212; \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/figcaption><\/figure>\n<p>\u0420\u0430\u0437\u043c\u0435\u0447\u0430\u043b \u0447\u0430\u0441\u043e\u0432 12~14. \u0418 \u0434\u0430, \u0442\u043e\u0442 \u0444\u0430\u043a\u0442 \u0447\u0442\u043e \u044f \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u0440\u0430\u0437\u043c\u0435\u0442\u0438\u043b \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0443\u0431 \u043a\u0430\u043a \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0441\u0442\u043e\u0438\u043b \u043c\u043d\u0435   \u0435\u0449\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 4 \u0447\u0430\u0441\u043e\u0432. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0443 \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. <\/p>\n<figure class=\"full-width\"><figcaption>\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u0430\u0441\u043a\u0438. Smooth 0.5. (\u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0432 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c)<\/figcaption><\/figure>\n<p>\u0414\u043e\u043b\u0436\u0435\u043d \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0434\u0430\u0436\u0435 \u043d\u0430 \u043c\u043e\u0439 (\u0431\u0435\u0437 \u043e\u043f\u044b\u0442\u0430) \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e \u0432 \u0433\u043e\u043b\u043e\u0432\u0443, \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 N-\u0440\u0430\u0437 \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c, random-crop \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0441\u0442\u0430\u043b.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import nrrd import torch import torchvision.transforms as tf   class DataBuilder:     def __init__(self,                  data_path,                  list_of_categories,                  num_of_chunks: int = 0,                  augmentation_coeff: int = 0,                  num_of_classes: int = 0,                  normalise: bool = False,                  fit: bool = True,                  data_format: int = 0,                  save_data: bool = False                  ):         self.data_path = data_path         self.number_of_chunks = num_of_chunks         self.augmentation_coeff = augmentation_coeff         self.list_of_cats = list_of_categories         self.num_of_cls = num_of_classes         self.normalise = normalise         self.fit = fit         self.data_format = data_format         self.save_data = save_data      def forward(self):         data = self.get_data()         data = self.fit_data(data) if self.fit else data         data = self.pre_normalize(data) if self.normalise else data         data = self.data_augmentation(data, self.augmentation_coeff) if self.augmentation_coeff != 0 else data         data = self.new_chunks(data, self.number_of_chunks) if self.number_of_chunks != 0 else data         data = self.category_splitter(data, self.num_of_cls, self.list_of_cats) if self.num_of_cls != 0 else data         torch.save(data, self.data_path[-14:]+'.pt') if self.save_data else None          return torch.unsqueeze(data, 1)      def get_data(self):         if self.data_format == 0:             return torch.from_numpy(nrrd.read(self.data_path)[0])         elif self.data_format == 1:             return torch.load(self.data_path).cpu()         elif self.data_format == 2:             return torch.unsqueeze(self.data_path, 0).cpu()         else:             print('Available types are: \"nrrd\", \"tensor\" or \"self.tensor(w\/o load)\"')      @staticmethod     def fit_data(some_data):         data = torch.movedim(some_data, (1, 0), (0, -1))         data_add_x = torch.nn.ZeroPad2d((5, 0, 0, 0))         data = data_add_x(data)         data = torch.movedim(data, -1, 0)         data_add_z = torch.nn.ZeroPad2d((0, 0, 8, 0))          return data_add_z(data)      @staticmethod     def pre_normalize(some_data):         min_d, max_d = torch.min(some_data), torch.max(some_data)          return (some_data - min_d) \/ (max_d - min_d)      @staticmethod     def data_augmentation(some_data, aug_n):         torch.manual_seed(17)         tr_data = []         for e in range(aug_n):             transform = tf.RandomRotation(degrees=(20*e, 20*e))             for image in some_data:                 image = torch.unsqueeze(image, 0)                 image = transform(image)                 tr_data.append(image)          return tr_data      def new_chunks(self, some_data, n_ch):         data = torch.stack(some_data, 0) if self.augmentation_coeff != 0 else some_data         data = torch.squeeze(data, 1)         chunks = torch.chunk(data, n_ch, 0)          return torch.stack(chunks)      @staticmethod     def category_splitter(some_data, alpha, list_of_categories):         data, _ = torch.squeeze(some_data, 1).to(torch.int64), alpha         for i in list_of_categories:             data = torch.where(data &lt; i, _, data)             _ += 1          return data - alpha <\/code><\/pre>\n<p>\u0418\u043c\u0435\u0439\u0442\u0435 \u0432\u0432\u0438\u0434\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f 3D U-net. \u0424\u043e\u0440\u0432\u0430\u0440\u0434: <\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0434\u0430\u0442\u0443 (\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430). <\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c 0 \u043f\u043e \u043a\u0440\u0430\u044f\u043c \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043e\u0433\u043d\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u043e 168*120*120 (\u0432\u043c\u0435\u0441\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 163*112*120). *\u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 0&#8230;1 (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 ~-2000&#8230;16000).<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c N-\u0440\u0430\u0437 \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0436\u0435\u043c \u043d\u0430 \u0440\u0430\u0432\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0431\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b \u043f\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0443 (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e 1, 1, 72, 120, 120).<\/p>\n<\/li>\n<li>\n<p>\u042d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u043c 28 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0437\u0443\u0431\u043e\u0432 \u0438 \u0444\u043e\u043d \u0434\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439 (\u0441\u043c. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435): <\/p>\n<ul>\n<li>\n<p>\u043e\u0434\u043d\u0443 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0434\u043b\u044f 1-\u043e\u0439;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 9 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 (8+\u0444\u043e\u043d) \u0434\u043b\u044f 2-\u043e\u0439.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>Dataloader \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import torch.utils.data as tud   class ToothDataset(tud.Dataset):     def __init__(self, images, masks):         self.images = images         self.masks = masks      def __len__(self): return len(self.images)      def __getitem__(self, index):         if self.masks is not None:             return self.images[index, :, :, :, :],\\                     self.masks[index, :, :, :, :]         else:             return self.images[index, :, :, :, :]   def get_loaders(images, masks,                 batch_size: int = 1,                 num_workers: int = 1,                 pin_memory: bool = True):      train_ds = ToothDataset(images=images,                             masks=masks)      data_loader = tud.DataLoader(train_ds,                                  batch_size=batch_size,                                  shuffle=False,                                  num_workers=num_workers,                                  pin_memory=pin_memory)      return data_loader <\/code><\/pre>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u043c\u0435\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\">\n<\/td>\n<td>\n<p align=\"center\">Semantic<\/p>\n<\/td>\n<td>\n<p align=\"center\">Instance<\/p>\n<\/td>\n<td>\n<p align=\"center\">Predictions<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">Data<\/p>\n<\/td>\n<td>\n<p align=\"center\">(27*, 1, 56*, 120,120)[0&#8230;1]<\/p>\n<\/td>\n<td>\n<p align=\"center\">(27*, 1, 56*, 120,120) [0, 1]<\/p>\n<\/td>\n<td>\n<p align=\"center\">(1, 1, 168, 120, 120)[0&#8230;1]<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"center\">Masks<\/p>\n<\/td>\n<td>\n<p align=\"center\">(27*, 1, 56*, 120,120)[0, 1]<\/p>\n<\/td>\n<td>\n<p align=\"center\">(27*, 1, 56*, 120,120)[0, 8]<\/p>\n<\/td>\n<td>\n<p align=\"center\">&#8212;<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>*\u044d\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 &#8212; \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<\/div>\n<\/details>\n<h2>3. \u0412\u044b\u0431\u043e\u0440 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0426\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442\u044b &#8212; \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0437\u044f\u043b \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0443\u044e \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b <a href=\"https:\/\/en.wikipedia.org\/wiki\/U-Net\" rel=\"noopener noreferrer nofollow\">U-Net<\/a>. \u041a\u043e\u0434 \u043d\u0435 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/github.com\/johschmidt42\/PyTorch-2D-3D-UNet-Tutorial\/blob\/master\/unet.py\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>.<\/p>\n<figure class=\"full-width\"><figcaption>2D U-Net<\/figcaption><\/figure>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0435 \u0432 \u0441\u0435\u0442\u0438. <a href=\"https:\/\/habr.com\/ru\/post\/318970\/\" rel=\"noopener noreferrer nofollow\">\u041c\u0435\u0442\u043e\u0434 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/a> &#8212; Adam, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043f\u043e\u0442\u0435\u0440\u044c Dice-loss(implement), \u0441\u043f\u0443\u0441\u043a\u043e\u0432\/\u043f\u043e\u0434\u044a\u0435\u043c\u043e\u0432 4, \u0444\u0438\u043b\u044c\u0442\u0440\u044b [64, 128, 256, 512] (\u0437\u043d\u0430\u044e, \u043c\u043d\u043e\u0433\u043e, \u043e\u0431 \u044d\u0442\u043e\u043c &#8212; \u043f\u043e\u0437\u0436\u0435). \u041e\u0431\u0443\u0447\u0430\u043b \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c 60-80 epochs \u043d\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442. <a href=\"https:\/\/cs231n.github.io\/transfer-learning\/\" rel=\"noopener noreferrer nofollow\">Transfer learning<\/a> \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b. <\/p>\n<details class=\"spoiler\">\n<summary>model.summary()<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">model = UNet(dim=2, in_channels=1, out_channels=1, n_blocks=4, start_filters=64).to(device) print(summary(model, (1, 168, 120)))  \"\"\" ----------------------------------------------------------------         Layer (type)               Output Shape         Param # ================================================================             Conv2d-1         [-1, 64, 168, 120]             640               ReLU-2         [-1, 64, 168, 120]               0        BatchNorm2d-3         [-1, 64, 168, 120]             128             Conv2d-4         [-1, 64, 168, 120]          36,928               ReLU-5         [-1, 64, 168, 120]               0        BatchNorm2d-6         [-1, 64, 168, 120]             128          MaxPool2d-7           [-1, 64, 84, 60]               0          DownBlock-8  [[-1, 64, 84, 60], [-1, 64, 168, 120]]  0             Conv2d-9          [-1, 128, 84, 60]          73,856              ReLU-10          [-1, 128, 84, 60]               0       BatchNorm2d-11          [-1, 128, 84, 60]             256            Conv2d-12          [-1, 128, 84, 60]         147,584              ReLU-13          [-1, 128, 84, 60]               0       BatchNorm2d-14          [-1, 128, 84, 60]             256         MaxPool2d-15          [-1, 128, 42, 30]               0         DownBlock-16  [[-1, 128, 42, 30], [-1, 128, 84, 60]]  0            Conv2d-17          [-1, 256, 42, 30]         295,168              ReLU-18          [-1, 256, 42, 30]               0       BatchNorm2d-19          [-1, 256, 42, 30]    <\/code><\/pre>\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-323616","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/323616","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=323616"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/323616\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=323616"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=323616"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=323616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}