{"id":54494,"date":"2019-12-27T00:00:00","date_gmt":"2019-12-26T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning"},"modified":"2020-02-18T14:02:30","modified_gmt":"2020-02-18T11:02:30","slug":"dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","title":{"rendered":"Tehnica Jedi de reducere a re\u021belelor convolu\u021bionale \u2013 pruning","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Tehnica Jedi de reducere a re\u021belelor convolu\u021bionale \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/cca85b86c64843707a2167a7fed19867.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cen fa\u021ba ta se afl\u0103 din nou o sarcin\u0103 de detectare a obiectelor. Prioritatea este viteza de lucru cu o acurate\u021be acceptabil\u0103. Ia arhitectura YOLOv3 \u0219i ajusteaz\u0103-o. Acurate\u021bea (mAp75) trebuie s\u0103 fie peste 0.95. Dar viteza de rulare este \u00eenc\u0103 sc\u0103zut\u0103. Drace. <\/p>\n<p><\/p>\n<p>Ast\u0103zi vom ocoli cuantizarea. Iar sub titlu vom analiza <strong>Model Pruning<\/strong> \u2014 t\u0103ierea p\u0103r\u021bilor redundante ale re\u021belei pentru a accelera Inferen\u021ba f\u0103r\u0103 a pierde acurate\u021bea. Vizual \u2014 de unde, c\u00e2t \u0219i cum se poate t\u0103ia. Vom discuta despre cum s\u0103 facem acest lucru manual \u0219i unde se poate automatiza. La final \u2014 un repository pe keras.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"vvedenie\">Introducere<\/h3>\n<p><\/p>\n<p>La fostul meu loc de munc\u0103, Macroscop din Perm, am dob\u00e2ndit o obicei \u2014 s\u0103 urm\u0103resc \u00eentotdeauna timpul de execu\u021bie al algoritmilor. Iar timpul de rulare al re\u021belelor trebuie verificat \u00eentotdeauna printr-un filtru de adecvare. De obicei, solu\u021biile de v\u00e2rf nu trec acest filtru, ceea ce m-a dus la Pruning. <\/p>\n<p><\/p>\n<p>Pruning-ul este o tem\u0103 veche despre care s-a vorbit la <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=eZdOkDtYMoo\">lec\u021biile de la Stanford<\/a><\/noindex> \u00een 2017. Ideea principal\u0103 este reducerea dimensiunii re\u021belei antrenate f\u0103r\u0103 a pierde acurate\u021bea prin eliminarea diferitelor noduri. Sun\u0103 grozav, dar rar aud de aplicarea sa. Probabil c\u0103 lipse\u0219te implement\u0103rile, nu exist\u0103 articole \u00een limba rom\u00e2n\u0103 sau pur \u0219i simplu toat\u0103 lumea crede c\u0103 pruning-ul este un know-how \u0219i tace.<br \/>\nDar hai s\u0103 discut\u0103m despre<\/p>\n<p><\/p>\n<h3 id=\"vzglyad-v-biologiyu\">O privire \u00een biologie<\/h3>\n<p><\/p>\n<p>\u00cemi place c\u00e2nd \u00een Deep Learning apar idei din biologie. Lor, ca \u0219i evolu\u021biei, le putem acorda \u00eencredere (\u0219tiai c\u0103 ReLU este foarte similar\u0103 cu <noindex><a rel=\"nofollow\" href=\"http:\/\/www.gatsby.ucl.ac.uk\/~lmate\/biblio\/dayanabbott.pdf\">func\u021bia de activare a neuronilor din creier<\/a><\/noindex>?) <\/p>\n<p><\/p>\n<p>Procesul de Model Pruning este de asemenea apropiat de biologie. Reac\u021bia re\u021belei poate fi comparat\u0103 cu plasticitatea creierului. Exist\u0103 c\u00e2teva exemple interesante \u00een cartea <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/norman-doydzh\/plastichnost-mozga\/?utm_medium=cpc&amp;utm_source=google&amp;utm_campaign=DSA%7C149839530&amp;utm_term=&amp;utm_content=k50id%7Caud-499675211712%3Adsa-179513627318%7Ccid%7C149839530%7Caid%7C248455294996%7Cgid%7C6837176850%7Cpos%7C1t1%7Csrc%7Cg_%7Cdvc%7Cc%7Creg%7C1011993%7Crin%7C%7C&amp;k50id=6837176850%7Caud-499675211712%3Adsa-179513627318&amp;gclid=Cj0KCQiA0ZHwBRCRARIsAK0Tr-oKPqkmL7_Oxg62JZO8Jlk9zO-9nYKIRFxHi_lgoCvsQQadvUGxUzkaApgpEALw_wcB\">Norman Doidge<\/a><\/noindex>:<\/p>\n<p><\/p>\n<ol>\n<li>Creierul unei femei care a avut de la na\u0219tere doar o jum\u0103tate s-a reprogramat singur pentru a \u00eendeplini func\u021biile jum\u0103t\u0103\u021bii lips\u0103.<\/li>\n<li>Un b\u0103iat \u0219i-a \u00eempu\u0219cat o parte din creier care r\u0103spundea la vedere. \u00cen timp, alte p\u0103r\u021bi ale creierului au preluat aceste func\u021bii. (nu ne str\u0103duim s\u0103 repet\u0103m)<\/li>\n<\/ol>\n<p><\/p>\n<p>Astfel, din modelul t\u0103u se pot t\u0103ia p\u0103r\u021bi din convolu\u021biile slabe. \u00cen cel mai r\u0103u caz, convolu\u021biile r\u0103mase vor ajuta la \u00eenlocuirea celor t\u0103iate. <\/p>\n<p><\/p>\n<h3 id=\"lyubish-transfer-learning-ili-uchish-s-nulya\">\u00ce\u021bi place Transfer Learning sau \u00eenve\u021bi de la zero?<\/h3>\n<p><\/p>\n<p><strong>Varianta num\u0103rul unu.<\/strong> Folose\u0219ti Transfer Learning cu Yolov3, Retina, Mask-RCNN sau U-Net. Dar, cel mai adesea, nu trebuie s\u0103 recunoa\u0219tem 80 de clase de obiecte, ca \u00een COCO. \u00cen practica mea, ne limit\u0103m la 1-2 clase. Se poate presupune c\u0103 arhitectura pentru 80 de clase este excesiv\u0103. Se contureaz\u0103 ideea c\u0103 trebuie s\u0103 mic\u0219or\u0103m arhitectura. \u00cens\u0103, ne-ar pl\u0103cea s\u0103 facem asta f\u0103r\u0103 a pierde greut\u0103\u021bile pre-antrenate existente.<\/p>\n<p><\/p>\n<p><strong>Varianta num\u0103rul doi.<\/strong> Poate ai multe date \u0219i resurse de calcul sau pur \u0219i simplu ai nevoie de o arhitectur\u0103 super personalizat\u0103. Nu conteaz\u0103. Dar \u00eenve\u021bi re\u021beaua de la zero. Ordinea obi\u0219nuit\u0103 este s\u0103 ne uit\u0103m la structura datelor, s\u0103 alegem o arhitectur\u0103 EXCESIV\u0102 ca putere \u0219i s\u0103 acoperim dropout-urile pentru a evita supra\u00eenv\u0103\u021barea. Am v\u0103zut dropout-uri de 0.6, Karl. <\/p>\n<p><\/p>\n<p>\u00cen ambele cazuri, re\u021beaua poate fi mic\u0219orat\u0103. Ne-am motivat. Acum mergem s\u0103 \u00een\u021belegem ce \u00eenseamn\u0103 t\u0103ierea (pruning).<\/p>\n<p><\/p>\n<h3 id=\"obschiy-algoritm\">Algoritmul general<\/h3>\n<p><\/p>\n<p>Am decis c\u0103 putem elimina convolu\u021biile. Pare destul de simplu:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tehnica Jedi de reducere a re\u021belelor convolu\u021bionale \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/1c01fa318d08550c9738c88d52e36b2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Eliminarea oric\u0103rei convolu\u021bii este un stres pentru re\u021bea, care de obicei duce la o cre\u0219tere a erorii. Pe de o parte, aceast\u0103 cre\u0219tere a erorii este un indicator al c\u00e2t de corect elimin\u0103m convolu\u021biile (de exemplu, o cre\u0219tere mare sugereaz\u0103 c\u0103 facem ceva gre\u0219it). Dar o mic\u0103 cre\u0219tere este acceptabil\u0103 \u0219i de multe ori este eliminat\u0103 printr-un mic reantrenament cu un LR sc\u0103zut. Ad\u0103ug\u0103m un pas de reantrenare:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tehnica Jedi de reducere a re\u021belelor convolu\u021bionale \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/d51df9606d65fd4e7e80209743f761c3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Acum trebuie s\u0103 \u00een\u021belegem c\u00e2nd vrem s\u0103 oprim ciclul nostru de \u00cenv\u0103\u021bareT\u0103iere. Aici pot exista variante exotice, c\u00e2nd trebuie s\u0103 mic\u0219or\u0103m re\u021beaua la o dimensiune \u0219i o vitez\u0103 de procesare specific\u0103 (de exemplu, pentru dispozitive mobile). Cu toate acestea, cea mai frecvent\u0103 variant\u0103 este continuarea ciclului p\u00e2n\u0103 c\u00e2nd eroarea dep\u0103\u0219e\u0219te o limit\u0103 acceptabil\u0103. Ad\u0103ug\u0103m o condi\u021bie:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tehnica Jedi de reducere a re\u021belelor convolu\u021bionale \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/9032018847833b54402124a29d3acbb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A\u0219adar, algoritmul devine clar. R\u0103m\u00e2ne s\u0103 analiz\u0103m cum s\u0103 determin\u0103m convolu\u021biile care trebuie eliminate.<\/p>\n<p><\/p>\n<h3 id=\"poisk-udalyaemyh-svertok\">C\u0103utarea convolu\u021biilor care pot fi eliminate.<\/h3>\n<p><\/p>\n<p>Trebuie s\u0103 elimin\u0103m unele rulouri. Amerge \u00een for\u021b\u0103 \u0219i a \"\u00eempu\u0219ca\" orice este o idee proast\u0103, de\u0219i va func\u021biona. Dar, av\u00e2nd o minte, putem s\u0103 ne g\u00e2ndim \u0219i s\u0103 \u00eencerc\u0103m s\u0103 identific\u0103m rulourile \"slabe\" pentru a fi eliminate. Exist\u0103 mai multe op\u021biuni:<\/p>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/openreview.net\/pdf?id=rJqFGTslg\">Cea mai mic\u0103 m\u0103sur\u0103 L1 sau low_magnitude_pruning.<\/a><\/noindex>. Ideea este c\u0103 convolu\u021biile cu valori mici ale greut\u0103\u021bilor contribuie pu\u021bin la decizia final\u0103. <\/li>\n<li>Cea mai mic\u0103 m\u0103sur\u0103 L1 av\u00e2nd \u00een vedere media \u0219i devia\u021bia standard. Complet\u0103m cu evaluarea caracterului distribu\u021biei.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1512.08571\">Mascararea convolu\u021biilor \u0219i excluderea celor cu un impact mai mic asupra preciziei finale<\/a><\/noindex>. O defini\u021bie mai exact\u0103 a convolu\u021biilor insignifiante, dar care necesit\u0103 mult timp \u0219i resurse. <\/li>\n<li>Altele <\/li>\n<\/ol>\n<p><\/p>\n<p>Fiecare op\u021biune are dreptul la via\u021b\u0103 \u0219i are propriile caracteristici de implementare. Aici vom discuta op\u021biunea cu cea mai mic\u0103 m\u0103sur\u0103 L1<\/p>\n<p><\/p>\n<h3 id=\"ruchnoy-process-dlya-yolov3\">Proces manual pentru YOLOv3<\/h3>\n<p><\/p>\n<p>Arhitectura ini\u021bial\u0103 con\u021bine blocuri reziduale. Dar, oric\u00e2t de eficiente ar fi pentru re\u021belele ad\u00e2nci, ne vor crea unele dificult\u0103\u021bi. Problema este c\u0103 nu putem elimina convolu\u021biile cu indici diferi\u021bi \u00een aceste straturi:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tehnica Jedi de reducere a re\u021belelor convolu\u021bionale \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/d516ab886a28d62a34e6a934fdd62c12.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Prin urmare, vom defini straturile din care putem elimina liber convolu\u021biile:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tehnica Jedi de reducere a re\u021belelor convolu\u021bionale \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/f9b69d9900d641e1d5835db9cc749189.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Acum s\u0103 construim ciclul de lucru:<\/p>\n<p><\/p>\n<ol>\n<li>Extragem activ\u0103rile<\/li>\n<li>Estim\u0103m c\u00e2t de multe s\u0103 elimin\u0103m <\/li>\n<li>Elimin\u0103m<\/li>\n<li>\u00cenv\u0103\u021b\u0103m timp de 10 epoci cu LR=1e-4 <\/li>\n<li>Test\u0103m <\/li>\n<\/ol>\n<p><\/p>\n<p>Este util s\u0103 extragem convolu\u021biile pentru a evalua ce parte putem elimina \u00eentr-un anumit pas. Exemple de extragere:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tehnica Jedi de reducere a re\u021belelor convolu\u021bionale \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/cd8202e6ce1aa0cc59fbdc4bd8562427.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vedem c\u0103 aproape peste tot 5% din convolu\u021bii au o norm\u0103 L1 foarte sc\u0103zut\u0103 \u0219i le putem elimina. La fiecare pas, aceast\u0103 extragere s-a repetat \u0219i s-a evaluat din ce straturi \u0219i c\u00e2te putem elimina. <\/p>\n<p><\/p>\n<p>\u00centregul proces a fost finalizat \u00een 4 pa\u0219i (aici \u0219i \u00een toat\u0103 parte cu numere pentru RTX 2060 Super):<\/p>\n<p><\/p>\n<table>\n<thead>\n<tr>\n<th>Pasul<\/th>\n<th>mAp75<\/th>\n<th>Num\u0103rul de parametri, mii<\/th>\n<th>Dimensiunea re\u021belei, mb<\/th>\n<th>Fa\u021b\u0103 de ini\u021bial, %<\/th>\n<th>Timpul de rulare, ms<\/th>\n<th>Condi\u021bia de t\u0103iere<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>0<\/td>\n<td>0.9656<\/td>\n<td>60<\/td>\n<td>241<\/td>\n<td>100<\/td>\n<td>180<\/td>\n<td>\u2014<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>0.9622<\/td>\n<td>55<\/td>\n<td>218<\/td>\n<td>91<\/td>\n<td>175<\/td>\n<td>5% din total<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>0.9625<\/td>\n<td>50<\/td>\n<td>197<\/td>\n<td>83<\/td>\n<td>168<\/td>\n<td>5% din total<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>0.9633<\/td>\n<td>39<\/td>\n<td>155<\/td>\n<td>64<\/td>\n<td>155<\/td>\n<td>15% pentru straturile cu 400+ convolu\u021bii<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>0.9555<\/td>\n<td>31<\/td>\n<td>124<\/td>\n<td>51<\/td>\n<td>146<\/td>\n<td>10% pentru straturile cu 100+ convolu\u021bii<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p>La pasul 2, a ap\u0103rut un efect pozitiv \u2014 dimensiunea batch-ului a crescut la 4, ceea ce a accelerat considerabil procesul de re\u00eenv\u0103\u021bare.<br \/>\nLa pasul 4, procesul a fost oprit, deoarece re\u00eenv\u0103\u021barea prelungit\u0103 nu a ridicat mAp75 la valorile anterioare.<br \/>\n\u00cen cele din urm\u0103, am reu\u0219it s\u0103 acceler\u0103m inferen\u021ba cu <strong>15%<\/strong>, s\u0103 reducem dimensiunea cu<strong> 35% <\/strong>\u0219i s\u0103 nu pierdem din precizie. <\/p>\n<p><\/p>\n<h3 id=\"avtomatizaciya-dlya-bolee-prostyh-arhitektur\">Automatizarea pentru arhitecturi mai simple<\/h3>\n<p><\/p>\n<p>Pentru arhitecturi mai simple ale re\u021belelor (f\u0103r\u0103 blocuri condi\u021bionale de tip add, concatenate \u0219i rezidual), este suficient s\u0103 ne orient\u0103m asupra proces\u0103rii tuturor straturilor convolu\u021bionale \u0219i s\u0103 automatiz\u0103m procesul de eliminare a convolu\u021biilor.<\/p>\n<p><\/p>\n<p>Aceast\u0103 variant\u0103 am implementat-o <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/PaginDm\/keras-L1-pruning\">aici<\/a><\/noindex>.<br \/>\nTotul este simplu: ave\u021bi nevoie doar de func\u021bia de pierdere, optimizer \u0219i generatoare de batch-uri:<\/p>\n<p><\/p>\n<pre><code class=\"python\">import pruning\nfrom keras.optimizers import Adam\nfrom keras.utils import Sequence\n\ntrain_batch_generator = BatchGenerator...\nscore_batch_generator = BatchGenerator...\n\nopt = Adam(lr=1e-4)\npruner = pruning.Pruner(\"config.json\", \"categorical_crossentropy\", opt)\n\npruner.prune(train_batch, valid_batch)<\/code><\/pre>\n<p><\/p>\n<p>Dac\u0103 este necesar, pute\u021bi modifica parametrii configura\u021biilor:<\/p>\n<p><\/p>\n<pre><code class=\"json\">{\n    \"input_model_path\": \"model.h5\",\n    \"output_model_path\": \"model_pruned.h5\",\n    \"finetuning_epochs\": 10, # num\u0103rul de epoci pentru antrenamentul \u00eentre pa\u0219ii de pruning\n    \"stop_loss\": 0.1, # pierdere pentru oprirea procesului\n    \"pruning_percent_step\": 0.05, # parte din convs de \u0219ters la fiecare pas de pruning\n    \"pruning_standart_deviation_part\": 0.2 # deplasare pentru a limita partea de pruning\n}<\/code><\/pre>\n<p><\/p>\n<p>De asemenea, a fost implementat\u0103 o restric\u021bie pe baza devia\u021biei standard. Scopul este de a limita partea eliminat\u0103, excluz\u00e2nd rulourile cu m\u0103suri L1 deja \"suficiente\":<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tehnica Jedi de reducere a re\u021belelor convolu\u021bionale \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/c2733d01a4d5b6e9a97a1e683d87ff45.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Astfel, permitem eliminarea doar a convolu\u021biilor slabe din distribu\u021biile asem\u0103n\u0103toare celei drepte \u0219i nu influen\u021b\u0103m eliminarea din distribu\u021biile asem\u0103n\u0103toare celei st\u00e2ngi:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tehnica Jedi de reducere a re\u021belelor convolu\u021bionale \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/a9c9bee6322d268026ffb6713fc0bc86.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pe m\u0103sur\u0103 ce distribu\u021bia se apropie de normal\u0103, coeficientul pruning_standart_deviation_part poate fi ales din:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tehnica Jedi de reducere a re\u021belelor convolu\u021bionale \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/efee3eda6b8263de42e8f52541a3e949.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nRecomand o toleran\u021b\u0103 de 2 sigma. Sau se poate s\u0103 nu se \u021bin\u0103 cont de aceast\u0103 particularitate, l\u0103s\u00e2nd valoarea &lt; 1.0.<\/p>\n<p><\/p>\n<p>La ie\u0219ire, ob\u021binem un grafic al dimensiunii re\u021belei, pierderilor \u0219i timpului de rulare a re\u021belei pe tot parcursul testului, normalizate la 1.0. De exemplu, aici dimensiunea re\u021belei a fost redus\u0103 aproape la jum\u0103tate f\u0103r\u0103 pierderi de calitate (o re\u021bea convolu\u021bional\u0103 mic\u0103 cu 100k parametri):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tehnica Jedi de reducere a re\u021belelor convolu\u021bionale \u2013 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/1048ac38b12c753e54c8d8a2dc1dc394.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Viteza de rulare este supus\u0103 fluktuatiilor normale \u0219i practic nu s-a schimbat. Acest lucru are o explica\u021bie:<\/p>\n<p><\/p>\n<ol>\n<li>Num\u0103rul de convolu\u021bii se schimb\u0103 de la confortabil (32, 64, 128) la cele mai pu\u021bin convenabile pentru pl\u0103cile video \u2014 27, 51 etc. Aici pot gre\u0219i, dar cel mai probabil acest lucru influen\u021beaz\u0103.<\/li>\n<li>Arhitectura nu este lat\u0103, dar este secven\u021bial\u0103. Reduc\u00e2nd l\u0103\u021bimea, nu afect\u0103m ad\u00e2ncimea. Astfel, reducem \u00eenc\u0103rcarea, dar nu schimb\u0103m viteza.<\/li>\n<\/ol>\n<p><\/p>\n<p>Prin urmare, \u00eembun\u0103t\u0103\u021birea s-a tradus \u00een reducerea sarcinii CUDA cu 20-30% \u00een timpul rul\u0103rii, dar nu \u00een reducerea timpului de rulare<\/p>\n<p><\/p>\n<h3 id=\"itogi\">Concluzii<\/h3>\n<p><\/p>\n<p>S\u0103 reflect\u0103m. Am analizat 2 variante de pruning \u2014 pentru YOLOv3 (c\u00e2nd trebuie s\u0103 lucr\u0103m manual) \u0219i pentru re\u021bele cu arhitecturi mai simple. Se observ\u0103 c\u0103 \u00een ambele cazuri se poate ob\u021bine o reducere a dimensiunii re\u021belei \u0219i o accelerare f\u0103r\u0103 pierderi de precizie. Rezultatele sunt:<\/p>\n<p><\/p>\n<ul>\n<li>Reducerea dimensiunii<\/li>\n<li>Accelerarea rul\u0103rii<\/li>\n<li>Reducerea sarcinii CUDA<\/li>\n<li>Ca urmare, ecologicitatea (Optimiz\u0103m utilizarea viitoare a resurselor computa\u021bionale. Undeva, se bucur\u0103 cineva <noindex><a rel=\"nofollow\" href=\"https:\/\/meduza.io\/feature\/2019\/12\/12\/kto-takaya-greta-tunberg-i-pochemu-ona-stala-chelovekom-goda-zhurnal-time\">Greta Thunberg<\/a><\/noindex>)<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"appendix\">Appendix<\/h3>\n<p><\/p>\n<ul>\n<li>Dup\u0103 pasul de pruning, se poate continua cu cuantizarea (de exemplu, cu TensorRT)<\/li>\n<li>Tensorflow ofer\u0103 posibilit\u0103\u021bi pentru <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/model_optimization\/guide\/pruning\/pruning_with_keras\">low_magnitude_pruning<\/a><\/noindex>. Func\u021bioneaz\u0103.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/PaginDm\/keras-L1-pruning\">Repository-ul<\/a><\/noindex> vreau s\u0103 dezvolt \u0219i voi fi bucuros s\u0103 primesc ajutor<\/li>\n<\/ul>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/482050\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u043e\u0431\u043e\u0439 \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u2014 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u0411\u0435\u0440\u0435\u0448\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 YOLOv3 \u0438 \u0434\u043e\u043e\u0431\u0443\u0447\u0430\u0435\u0448\u044c. \u0422\u043e\u0447\u043d\u043e\u0441\u0442\u044c(mAp75) \u0431\u043e\u043b\u044c\u0448\u0435 0.95. \u041d\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u0432\u0441\u0451 \u0435\u0449\u0435 \u043d\u0438\u0437\u043a\u0430\u044f. \u0427\u0435\u0440\u0442. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043e\u0431\u043e\u0439\u0434\u0451\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439 \u043a\u0432\u0430\u043d\u0442\u0438\u0437\u0430\u0446\u0438\u044e. \u0410 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c Model Pruning \u2014 \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u0438\u0435 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u0441\u0435\u0442\u0438 \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f Inference \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u2014 \u043e\u0442\u043a\u0443\u0434\u0430, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438 \u043a\u0430\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-54494","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0435\u0440\u0435\u0434 \u0442\u043e\u0431\u043e\u0439 \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.\" \/>\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\/ro\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\u0414\u0436\u0435\u0434\u0430\u0439\u0441\u043a\u0430\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u2014 pruning | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0435\u0440\u0435\u0434 \u0442\u043e\u0431\u043e\u0439 \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning\" \/>\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=\"2019-12-26T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:30+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\udd47Tehnica Jedi de reducere a re\u021belelor convolu\u021bionale \u2014 pruning | ProHoster","description":"\u00cen fa\u021ba ta, din nou, o sarcin\u0103.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\u0414\u0436\u0435\u0434\u0430\u0439\u0441\u043a\u0430\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0440\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u2014 pruning | ProHoster","og:description":"\u041f\u0435\u0440\u0435\u0434 \u0442\u043e\u0431\u043e\u0439 \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u0434\u0430\u0447\u0430.","og:url":"https:\/\/prohoster.info\/ro\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","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":"2019-12-26T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:30+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54494","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":"2026-01-24 11:34:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:29:04","updated":"2026-01-24 11:34:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/54494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=54494"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/54494\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=54494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=54494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=54494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}