{"id":89110,"date":"2020-07-18T19:42:10","date_gmt":"2020-07-18T17:42:10","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej"},"modified":"2020-07-18T19:42:10","modified_gmt":"2020-07-18T17:42:10","slug":"obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","title":{"rendered":"Splo\u0161ni pregled arhitekture storitve za oceno videza na podlagi nevronskih mre\u017e","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Splo\u0161ni pregled arhitekture storitve za oceno videza na podlagi nevronskih mre\u017e\" src=\"\/wp-content\/uploads\/2020\/07\/f624e995fbee3496f1f7890b98106df4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Uvod<\/h2>\n<p><\/p>\n<p>Pozdrav!<\/p>\n<p><\/p>\n<p>V tem \u010dlanku bom delil izku\u0161nje pri gradnji mikroservisne arhitekture za projekt, ki uporablja nevronske mre\u017ee.<\/p>\n<p><\/p>\n<p>Pogovorili bomo o zahtevah za arhitekturo, si ogledali razli\u010dne strukturne diagrame, razpravljali o vsakem od komponent kon\u010dne arhitekture in ocenili tehni\u010dne metrike re\u0161itve.<\/p>\n<p><\/p>\n<p>U\u017eivajte v branju!<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Nekaj besed o nalogi in njenem re\u0161enju<\/h2>\n<p><\/p>\n<p>Osnovna ideja je, da na podlagi fotografij ocenimo privla\u010dnost osebe na desetstopenjski lestvici.<\/p>\n<p><\/p>\n<p>V tem \u010dlanku se bomo odmaknili od opisovanja tako uporabljenih nevronskih mre\u017e kot tudi procesa priprave podatkov in u\u010denja. Vendar pa se bomo v eni izmed naslednjih objav zagotovo vrnili k razpravi o cevem sistemu ocene na poglobljeni ravni.<\/p>\n<p><\/p>\n<p>Trenutno bomo na visoki ravni preleteli cevi sistem ocene, pri \u010demer se bomo osredoto\u010dili na interakcijo mikroservisov v okviru celotne arhitekture projekta.\u00a0<\/p>\n<p><\/p>\n<p>Pri delu na cevi sistema ocene privla\u010dnosti je bila naloga razdeljena na naslednje sestavne dele:<\/p>\n<p><\/p>\n<ol>\n<li>Izlo\u010danje obrazov na fotografijah<\/li>\n<li>Ocena vsakega obraza<\/li>\n<li>Prikaz rezultata<\/li>\n<\/ol>\n<p><\/p>\n<p>Prvo nalogo re\u0161uje predhodno usposobljena <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1604.02878\">MTCNN<\/a><\/noindex>. Za drugo je bila usposobljena konvolucijska nevronska mre\u017ea na PyTorchu, pri \u010demer je bila uporabljena <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1512.03385\">ResNet34<\/a><\/noindex> \u2013 s poudarkom na ravnote\u017eju \"kakovost \/ hitrost inference na CPU\".<\/p>\n<p>\n<img decoding=\"async\" alt=\"Splo\u0161ni pregled arhitekture storitve za oceno videza na podlagi nevronskih mre\u017e\" src=\"\/wp-content\/uploads\/2020\/07\/181cc89a2cf5295bdcd4b838216f96d6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Funkcionalni diagram cevi sistema ocene<\/i><\/p>\n<p><\/p>\n<h2>Analiza zahtev za arhitekturo projekta<\/h2>\n<p><\/p>\n<p>V \u017eivljenjskem ciklu <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Machine_learning\">ML<\/a><\/noindex> projekti so faze dela na arhitekturi in avtomatizaciji uvajanja modela pogosto med najbolj zamudnimi po \u010dasu in virih.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Splo\u0161ni pregled arhitekture storitve za oceno videza na podlagi nevronskih mre\u017e\" src=\"\/wp-content\/uploads\/2020\/07\/4949f217d31c863176122ed87b43a88c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>\u017divljenjski cikel ML projekta<\/i><\/p>\n<p><\/p>\n<p>Ta projekt ni izjema \u2013 sprejeta je bila odlo\u010ditev, da se cevni sistem ocene ovije v spletno storitev, pri \u010demer je bilo potrebno poglobiti se v arhitekturo. Dolo\u010dene so bile naslednje osnovne zahteve:<\/p>\n<p><\/p>\n<ol>\n<li>Enotno skladi\u0161\u010de dnevnikov \u2013 vsi servisi morajo bele\u017eiti dnevnike na eno mesto, ki naj bi jih bilo enostavno analizirati.<\/li>\n<li>Mo\u017enost horizontalnega skaliranja storitve ocene \u2013 kot najverjetnej\u0161i Bottleneck.<\/li>\n<li>Na oceno vsake fotografije je treba dodeliti enako \u0161tevilo procesorskih virov \u2013 da se izognemo odstopanjem v porazdelitvi \u010dasa na inference.<\/li>\n<li>Hitro (ponovno) uvajanje tako konkretnih storitev kot tudi celotnega sklada.<\/li>\n<li>Mo\u017enost, po potrebi, uporabe skupnih objektov v razli\u010dnih storitvah.<\/li>\n<\/ol>\n<p><\/p>\n<h2>Arhitektura<\/h2>\n<p><\/p>\n<p>Po analizi zahtevov je postalo o\u010ditno, da mikroservisna arhitektura v ve\u010dini primerov ustreza skoraj popolnoma.<\/p>\n<p><\/p>\n<p>Da bi se izognili nepotrebnim te\u017eavam, je bila za frontend izbrana Telegram API.<\/p>\n<p><\/p>\n<p>Za za\u010detek si oglejmo strukturni diagram kon\u010dne arhitekture, nato pa se bomo podali v opis posameznih komponent in formalizirali postopek uspe\u0161nega obdelovanja slik.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Splo\u0161ni pregled arhitekture storitve za oceno videza na podlagi nevronskih mre\u017e\" src=\"\/wp-content\/uploads\/2020\/07\/163ec019341e9d71a1e0854c6026bd01.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Strukturni diagram kon\u010dne arhitekture<\/i><\/p>\n<p><\/p>\n<p>Podrobneje se bomo pogovorili o vsaki komponenti diagrama, ozna\u010dili bomo njihovo enotno odgovornost v procesu ocenjevanja slik.<\/p>\n<p><\/p>\n<h3>Mikroservis \u201eattrai-telegram-bot\u201c<\/h3>\n<p><\/p>\n<p>Ta mikroservis inkapsulira vse interakcije z Telegram API. Lahko izpostavimo dva glavna scenarija \u2013 delo s slikami uporabnikov in delo z rezultatom procesiranja ocenjevanja. Obe scenariju bosta predstavljeni na splo\u0161no.<\/p>\n<p><\/p>\n<p>Ob prejemu uporabni\u0161kega sporo\u010dila s sliko:<\/p>\n<p><\/p>\n<ol>\n<li>Izvaja se filtriranje, ki vklju\u010duje naslednje preverjanja:\n<ul>\n<li>Obstoja optimalne velikosti slike<\/li>\n<li>\u0160tevila slik uporabnika, ki so \u017ee v \u010dakalni vrsti<\/li>\n<\/ul>\n<\/li>\n<li>Ob uspe\u0161nem prehodu za\u010detne filtracije se slika shranjuje v docker volume<\/li>\n<li>V \u010dakalno vrsto \u201cto_estimate\u201d se posreduje naloga, ki vsebuje tudi pot do slike, ki le\u017ei v na\u0161em volumnu<\/li>\n<li>\u010ce so zgoraj navedeni koraki uspe\u0161no zaklju\u010deni \u2013 uporabnik bo prejel sporo\u010dilo z okvirnim \u010dasom obdelave slike, ki se izra\u010duna na podlagi \u0161tevila nalog v \u010dakalni vrsti. V primeru napake bo uporabnik jasno obve\u0161\u010den \u2013 z po\u0161iljanjem sporo\u010dila z informacijami o tem, kaj bi lahko \u0161lo narobe. <\/li>\n<\/ol>\n<p><\/p>\n<p>Poleg tega ta mikroservis, kot celery worker, poslu\u0161a \u010dakalno vrsto \u201eafter_estimate\u201c, namenjeno nalogam, ki so pre\u0161le skozi proces ocenjevanja.<\/p>\n<p><\/p>\n<p>Ob prejemu nove naloge iz \u201cafter_estimate\u201d:<\/p>\n<p><\/p>\n<ol>\n<li>\u010ce je bila slika uspe\u0161no obdelana \u2013 po\u0161ljemo rezultat uporabniku, sicer ga obvestimo o napaki<\/li>\n<li>Izbri\u0161emo sliko, ki je rezultat procesa ocenjevanja<\/li>\n<\/ol>\n<p><\/p>\n<h3>Mikroservis za ocenjevanje \u201eattrai-estimator\u201c<\/h3>\n<p><\/p>\n<p>Ta mikroservis je celery worker in inkapsulira vse, kar je povezano s procesom ocenjevanja slike. Algoritem dela je en sam \u2013 razlo\u017eimo ga.<\/p>\n<p><\/p>\n<p>Ob prejemu nove naloge iz \u201cto_estimate\u201d:<\/p>\n<p><\/p>\n<ol>\n<li>Sliko preusmerimo skozi proces ocenjevanja:\n<ol>\n<li>Nalo\u017eimo sliko v spomin<\/li>\n<li>Prilagodimo sliku na odgovaraju\u0107u veli\u010dinu<\/li>\n<li>Pronala\u017eenje svih lica (MTCNN)<\/li>\n<li>Procjenjujemo sva lica (omotamo prona\u0111ena lica iz prethodnog koraka u grupu i izvr\u0161avamo inference pomo\u0107u ResNet34)<\/li>\n<li>Renderujemo kona\u010dnu sliku\n<ol>\n<li>Crtamo bounding boxeve<\/li>\n<li>Crtamo procjene<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li>Bri\u0161emo korisni\u010dku (izvorno) sliku<\/li>\n<li>Spremamo izlaz iz procjenske cevi<\/li>\n<li>Stavljamo zadatak u red \u201cafter_estimate\u201d, koji slu\u0161a razra\u0111eni mikroslu\u017ebeni \u201cattrai-telegram-bot\u201d<\/li>\n<\/ol>\n<p><\/p>\n<h3>Graylog (+ mongoDB + Elasticsearch)<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.graylog.org\/\">Graylog<\/a><\/noindex> \u2014 je re\u0161enje za centralizovano upravljanje logovima. U ovom projektu, kori\u0161\u0107en je za svoju pravu svrhu.<\/p>\n<p><\/p>\n<p>Izbor je pao ba\u0161 na njega, a ne na svima poznati <noindex><a rel=\"nofollow\" href=\"https:\/\/www.elastic.co\/what-is\/elk-stack\">ELK<\/a><\/noindex> stack, zbog prakti\u010dnosti rada sa njim iz Pythona. Sve \u0161to je potrebno za logiranje u Graylog, je da dodate GELFTCPHandler iz paketa <noindex><a rel=\"nofollow\" href=\"https:\/\/pypi.org\/project\/graypy\/\">graypy<\/a><\/noindex> ostalim root logger handlerima na\u0161eg python mikroservisa.<\/p>\n<p><\/p>\n<p>Ja, kao osoba koja je pre radila samo sa ELK stackom, u su\u0161tini sam imao pozitivno iskustvo tokom rada sa Graylogom. Jedino \u0161to odbija su prednosti Kibane nad web-interfejsom Grayloga.<\/p>\n<p><\/p>\n<h3>RabbitMQ<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/noindex> \u2014 je posrednik poruka na osnovu AMQP protokola.<\/p>\n<p><\/p>\n<p>U ovom projektu kori\u0161\u0107en je kao <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.celeryproject.org\/en\/latest\/getting-started\/brokers\/#broker-overview\">najstabilniji i vremenom provereni<\/a><\/noindex> posrednik za Celery i radio je u durable re\u017eimu.<\/p>\n<p><\/p>\n<h3>Redis<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/redis.io\/\">Redis<\/a><\/noindex> \u2014 je NoSQL DBMS koja radi sa strukturama podataka tipa \u2018klju\u010d \u2014 vrednost\u2019<\/p>\n<p><\/p>\n<p>Ponekad se pojavljuje potreba za kori\u0161\u0107enjem zajedni\u010dkih objekata u razli\u010ditim python mikroservisima, koji implementiraju odre\u0111ene strukture podataka.<\/p>\n<p><\/p>\n<p>Na primer, u Redis-u se \u010duva hashmap tipa \u2018telegram_user_id =&gt; broj aktivnih zadataka u redu\u2019, \u0161to omogu\u0107ava ograni\u010davanje broja zahteva od jednog korisnika na odre\u0111enu vrednost i tako spre\u010dava DoS napade.<\/p>\n<p><\/p>\n<h3>Formalizujemo proces uspe\u0161ne obrade slike<\/h3>\n<p><\/p>\n<ol>\n<li>Korisnik \u0161alje sliku telegram botu<\/li>\n<li>\u201cattrai-telegram-bot\u201d prima poruku od Telegram API i obra\u0111uje je<\/li>\n<li>Zadatak sa slikom se dodaje u asinhronu grupu \u2018to_estimate\u2019<\/li>\n<li>Korisnik prima poruku sa planiranim vremenom procene<\/li>\n<li>\u201cattrai-estimator\u201d uzima zadatak iz reda \u2018to_estimate\u2019, prolazi kroz procenjiva\u010dku cev i \u0161alje zadatak u red \u2018after_estimate\u2019<\/li>\n<li>\u201cattrai-telegram-bot\u201d, koji slu\u0161a red \u2018after_estimate\u2019, \u0161alje rezultat korisniku<\/li>\n<\/ol>\n<p><\/p>\n<h2>DevOps<\/h2>\n<p><\/p>\n<p>Na kraju, nakon pregleda arhitekture, mo\u017eemo pre\u0107i na ne manje zanimljiv deo \u2014 DevOps<\/p>\n<p><\/p>\n<h3>Docker Swarm<\/h3>\n<p><\/p>\n<p>\u00a0<\/p>\n<p>\n<img decoding=\"async\" alt=\"Splo\u0161ni pregled arhitekture storitve za oceno videza na podlagi nevronskih mre\u017e\" src=\"\/wp-content\/uploads\/2020\/07\/ba539d1c8197c7961d6e5e6a5c7e83c6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/swarm\/\">Docker Swarm <\/a><\/noindex>\u00a0\u2014 sistem klasterizacije, \u010dija se funkcionalnost realizuje unutar Docker Engine-a i dostupna je iz kutije.<\/p>\n<p><\/p>\n<p>Pomo\u0107u \u201eroja\u201c, sve node na\u0161eg klastera mogu se podeliti u 2 tipa \u2013 worker i manager. Na ma\u0161inama prvog tipa se pokre\u0107u grupe kontejnera (stackovi), dok ma\u0161ine drugog tipa obavljaju skaliranje, ravnote\u017eu i <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/swarm\/#feature-highlights\">druge sjajne funkcije<\/a><\/noindex>. Menad\u017eeri su po defaultu tako\u0111e i radnici.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Splo\u0161ni pregled arhitekture storitve za oceno videza na podlagi nevronskih mre\u017e\" src=\"\/wp-content\/uploads\/2020\/07\/d195e2aab6d3552652102c2b5246abfc.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><i>Klaster s jednim leader managerom i tri radnika<\/i><\/p>\n<p><\/p>\n<p>Minimalna veli\u010dina klastera je 1 node, jedina ma\u0161ina \u0107e istovremeno biti i leader manager i worker. U zavisnosti od veli\u010dine projekta i minimalnih zahteva za otpornosti na gre\u0161ke, odlu\u010deno je da se koristi ovakav pristup.<\/p>\n<p><\/p>\n<p>Zabranjuju\u0107i unapred, mogu re\u0107i da od prve produkcijske isporuke, koja je bila sredinom juna, nije bilo problema vezanih za ovu organizaciju klastera (ali to ne zna\u010di da je takva organizacija uop\u0161te prihvatljiva za bilo koje srednje-velike projekte koji imaju zahteve za otpornost na gre\u0161ke).<\/p>\n<p><\/p>\n<h3>Docker Stack<\/h3>\n<p><\/p>\n<p>U re\u017eimu \u201eroja\u201c za implementaciju stackova (skupova docker servisa) odgovara <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/stack\/\">docker stack<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Podr\u017eava docker-compose konfiguracije, omogu\u0107avaju\u0107i dodatnu upotrebu deploy parametara.\u00a0\u00a0<\/p>\n<p><\/p>\n<p>Na primer, pomo\u0107u ovih parametara su ograni\u010deni resursi za svaku od instanci mikrosistema za procenu (dodelju\u0107i na N instanci N jezgara, a u samom mikrosistemu ograni\u010davamo broj jezgara koje koristi PyTorch, na jedan)<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">attrai_estimator:\n\u00a0\u00a0image: 'erqups\/attrai_estimator:1.2'\n\u00a0\u00a0deploy:\n\u00a0\u00a0\u00a0\u00a0replicas: 4\n\u00a0\u00a0\u00a0\u00a0resources:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0limits:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0cpus: '4'\n\u00a0\u00a0\u00a0\u00a0restart_policy:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0condition: on-failure\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u2026<\/code><\/pre>\n<p><\/p>\n<p>Va\u017eno je napomenuti da su Redis, RabbitMQ i Graylog \u2014 stateful servisi i skaliranje njih nije tako jednostavno kao \u201eattrai-estimator\u201c.<\/p>\n<p><\/p>\n<h3>Predvi\u0111aju\u0107i pitanje \u2014 za\u0161to ne Kubernetes?<\/h3>\n<p><\/p>\n<p>Izgleda da je kori\u0161\u0107enje Kubernetes-a u projektima malog i srednjeg obima \u2014 prekomerno optere\u0107enje, sav potrebni funkcionalnost mo\u017ee se dobiti od Docker Swarm, koji je prili\u010dno user friendly za orkestrator kontejnera, a tako\u0111e ima nizak prag ulaska.<\/p>\n<p><\/p>\n<h3>Infrastruktura<\/h3>\n<p><\/p>\n<p>Sve to je implementirano na VDS sa slede\u0107im karakteristikama:<\/p>\n<p><\/p>\n<ul>\n<li>CPU: 4 jezgra Intel&reg; Xeon&reg; Gold 5120 CPU @ 2.20GHz<\/li>\n<li>RAM: 8 GB<\/li>\n<li>SSD: 160 GB<\/li>\n<\/ul>\n<p><\/p>\n<p>Nakon lokalnog stres testiranja, delovalo je da \u0107e ova ma\u0161ina biti na granici kapaciteta prilikom ozbiljnog pove\u0107anja korisnika.<\/p>\n<p><\/p>\n<p>Immediately after the deployment, I posted a link to one of the most popular image boards in the CIS (yes, that one), after which people became interested, and within a few hours, the service successfully processed tens of thousands of images. At peak moments, the CPU and RAM resources were not even used halfway.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Splo\u0161ni pregled arhitekture storitve za oceno videza na podlagi nevronskih mre\u017e\" src=\"\/wp-content\/uploads\/2020\/07\/458d74dae00d455fbce1ca6a197325d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<img decoding=\"async\" alt=\"Splo\u0161ni pregled arhitekture storitve za oceno videza na podlagi nevronskih mre\u017e\" src=\"\/wp-content\/uploads\/2020\/07\/e9383c47369c606d26e89a69f4d22b5a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>A bit more graphics<\/h3>\n<p><\/p>\n<p>The number of unique users and assessment requests since deployment, depending on the day<\/p>\n<p>\n<img decoding=\"async\" alt=\"Splo\u0161ni pregled arhitekture storitve za oceno videza na podlagi nevronskih mre\u017e\" src=\"\/wp-content\/uploads\/2020\/07\/7112c78c8400d2ac73562243b16a015b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Distribution of inference time for the assessment pipeline<\/p>\n<p>\n<img decoding=\"async\" alt=\"Splo\u0161ni pregled arhitekture storitve za oceno videza na podlagi nevronskih mre\u017e\" src=\"\/wp-content\/uploads\/2020\/07\/4c892ce607c3ff3db466459729dd0876.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Zaklju\u010dki<\/h2>\n<p><\/p>\n<p>In summary, I can say that the architecture and approach to container orchestration have fully justified themselves \u2014 even during peak moments, there were no crashes or delays in processing time.\u00a0<\/p>\n<p><\/p>\n<p>I believe that small and medium-sized projects using real-time inference of neural networks on CPUs can successfully adopt the practices described in this article.<\/p>\n<p><\/p>\n<p>I would like to add that the original article was longer, but to avoid posting a long read, I decided to omit some points \u2014 we will return to them in future publications.<\/p>\n<p><\/p>\n<p>You can poke the bot in Telegram \u2014 @AttraiBot, it will be operational at least until the end of autumn 2020. I remind you \u2014 no user data is stored \u2014 neither the original images nor the results of the assessment pipeline \u2014 everything is deleted after processing.<\/p>\n<p>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/511332\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u041f\u0440\u0438\u0432\u0435\u0442! \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u043e\u043f\u044b\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. \u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u0445 \u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b, \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0446\u0435\u043d\u0438\u043c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f! \u041f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e \u0437\u0430\u0434\u0430\u0447\u0435 \u0438 \u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u2013 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u043e\u0442\u043e \u0434\u0430\u0442\u044c \u043e\u0446\u0435\u043d\u043a\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":89111,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-89110","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\".\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u043d\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\".\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-18T17:42:10+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-18T17:42:10+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Overview of the architecture of the service for assessing appearance based on neural networks | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u043d\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 | ProHoster","og:description":".","og:url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/obshhij-obzor-arhitektury-servisa-dlya-oczenki-vneshnosti-na-osnove-nejronnyh-setej","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-18T17:42:10+00:00","article:modified_time":"2020-07-18T17:42:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"89110","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:16:27","updated":"2022-09-29 06:10:39","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/89110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=89110"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/89110\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/89111"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=89110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=89110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=89110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}