{"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\/it\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","title":{"rendered":"Tecnica Jedi per ridurre le reti convoluzionali \u2014 pruning","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Tecnica Jedi per ridurre le reti convoluzionali \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/cca85b86c64843707a2167a7fed19867.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hai di nuovo un compito di rilevamento degli oggetti. La priorit\u00e0 \u00e8 la velocit\u00e0 di funzionamento con una precisione accettabile. Prendi l'architettura YOLOv3 e continua l'addestramento. La precisione (mAp75) deve essere superiore a 0,95. Ma la velocit\u00e0 di elaborazione \u00e8 ancora bassa. Cavolo. <\/p>\n<p><\/p>\n<p>Oggi eviteremo la quantizzazione. Sotto il titolo analizzeremo <strong>Potatura del Modello<\/strong> \u2014 rimozione delle parti ridondanti della rete per accelerare l'inferenza senza perdita di precisione. In modo chiaro \u2014 da dove, quanto e come \u00e8 possibile rimuovere. Vedremo come farlo manualmente e dove \u00e8 possibile automatizzare. Alla fine \u2014 un repository su keras.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"vvedenie\">Introduzione<\/h3>\n<p><\/p>\n<p>Nel mio precedente lavoro, a Macroscop di Perm, ho sviluppato un'abitudine \u2014 controllare sempre il tempo di esecuzione degli algoritmi. E il tempo di elaborazione delle reti va sempre verificato attraverso un filtro di adeguatezza. Di solito, le soluzioni all'avanguardia non superano questo filtro, e questo mi ha portato alla Potatura. <\/p>\n<p><\/p>\n<p>La Potatura \u00e8 un tema vecchio, di cui si \u00e8 parlato nelle <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=eZdOkDtYMoo\">lezioni di Stanford<\/a><\/noindex> nel 2017. L'idea principale \u00e8 ridurre la dimensione della rete addestrata senza perdita di precisione rimuovendo diversi nodi. Sembra interessante, ma raramente sento parlare del suo utilizzo. Probabilmente mancano implementazioni, non ci sono articoli in lingua russa, o semplicemente tutti considerano la potatura un segreto e tacciono.<br \/>\nMa andiamo a esaminare<\/p>\n<p><\/p>\n<h3 id=\"vzglyad-v-biologiyu\">Uno sguardo alla biologia<\/h3>\n<p><\/p>\n<p>Mi piace quando nel Deep Learning entrano idee provenienti dalla biologia. A loro, come all'evoluzione, si pu\u00f2 dare fiducia (sapevi che la ReLU \u00e8 molto simile a <noindex><a rel=\"nofollow\" href=\"http:\/\/www.gatsby.ucl.ac.uk\/~lmate\/biblio\/dayanabbott.pdf\">una funzione di attivazione dei neuroni nel cervello<\/a><\/noindex>?) <\/p>\n<p><\/p>\n<p>Il processo di Potatura del Modello \u00e8 anche vicino alla biologia. La reazione della rete pu\u00f2 essere paragonata alla plasticit\u00e0 del cervello. Ci sono alcuni esempi interessanti nel libro <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\">di Norman Doidge<\/a><\/noindex>:<\/p>\n<p><\/p>\n<ol>\n<li>Il cervello di una donna che aveva solo met\u00e0 da quando \u00e8 nata ha riprogrammato se stesso per svolgere le funzioni della met\u00e0 mancante<\/li>\n<li>Un ragazzo si \u00e8 sparato a una parte del cervello responsabile della vista. Col tempo, altre parti del cervello hanno assunto queste funzioni. (non proviamo a ripetere)<\/li>\n<\/ol>\n<p><\/p>\n<p>Cos\u00ec anche dal tuo modello puoi rimuovere alcune convoluzioni deboli. In casi estremi, le convoluzioni rimanenti possono aiutare a sostituire quelle rimosse. <\/p>\n<p><\/p>\n<h3 id=\"lyubish-transfer-learning-ili-uchish-s-nulya\">Preferisci il Transfer Learning o inizi da zero?<\/h3>\n<p><\/p>\n<p><strong>Opzione numero uno.<\/strong> Stai utilizzando il Transfer Learning su Yolov3. Retina, Mask-RCNN o U-Net. Ma nella maggior parte dei casi non \u00e8 necessario riconoscere 80 classi di oggetti, come nel COCO. Nella mia pratica, ci si limita a 1-2 classi. Si pu\u00f2 supporre che l'architettura per 80 classi sia eccessiva. Si fa pensare che sia necessario ridurre l'architettura. Inoltre, vorremmo farlo senza perdere i pesi pre-addestrati esistenti.<\/p>\n<p><\/p>\n<p><strong>Opzione numero due.<\/strong> Forse hai molti dati e risorse di calcolo o hai semplicemente bisogno di un'architettura super personalizzata. Non importa. Ma stai addestrando la rete da zero. L'ordine abituale \u00e8 osservare la struttura dei dati, scegliere un'architettura ECCESSIVA in termini di potenza e applicare il dropout per evitare il sovraccarico. Ho visto dropout a 0.6, Karl. <\/p>\n<p><\/p>\n<p>In entrambi i casi, \u00e8 possibile ridurre la rete. Ci siamo motivati. Ora andiamo a capire cos'\u00e8 il pruning.<\/p>\n<p><\/p>\n<h3 id=\"obschiy-algoritm\">Algoritmo generale<\/h3>\n<p><\/p>\n<p>Abbiamo deciso che possiamo rimuovere le convoluzioni. Questo sembra piuttosto semplice:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tecnica Jedi per ridurre le reti convoluzionali \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/1c01fa318d08550c9738c88d52e36b2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Rimuovere qualsiasi convoluzione \u00e8 uno stress per la rete, che di solito porta anche a un certo aumento dell'errore. Da un lato, questo aumento dell'errore \u00e8 un indicatore di quanto correttamente stiamo rimuovendo le convoluzioni (ad esempio, un grande aumento indica che stiamo facendo qualcosa di sbagliato). Ma un piccolo aumento \u00e8 del tutto accettabile e spesso pu\u00f2 essere corretto con un successivo leggero riaddestramento con un LR ridotto. Aggiungiamo un passaggio di riaddestramento:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tecnica Jedi per ridurre le reti convoluzionali \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/d51df9606d65fd4e7e80209743f761c3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ora dobbiamo capire quando vogliamo fermare il nostro ciclo LearningPruning. Ci possono essere varianti esotiche, quando dobbiamo ridurre la rete a una certa dimensione e velocit\u00e0 di esecuzione (ad esempio, per dispositivi mobili). Tuttavia, la variante pi\u00f9 comune \u00e8 quella di continuare il ciclo finch\u00e9 l'errore non supera un certo limite. Aggiungiamo una condizione:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tecnica Jedi per ridurre le reti convoluzionali \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/9032018847833b54402124a29d3acbb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Quindi, l'algoritmo diventa chiaro. Rimane da capire come determinare le convoluzioni da rimuovere.<\/p>\n<p><\/p>\n<h3 id=\"poisk-udalyaemyh-svertok\">Ricerca delle convoluzioni da rimuovere<\/h3>\n<p><\/p>\n<p>Dobbiamo rimuovere alcune compressioni. Rompere a tutta forza e \"eliminare\" qualsiasi cosa \u00e8 un'idea sbagliata, anche se funzioner\u00e0. Ma se si \u00e8 in grado di pensare, si pu\u00f2 considerare di identificare e rimuovere le compressioni \"deboli\". Ci sono diverse opzioni:<\/p>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/openreview.net\/pdf?id=rJqFGTslg\">La misura L1 minima o low_magnitude_pruning<\/a><\/noindex>. L'idea \u00e8 che le convoluzioni con valori di peso piccoli contribuiscono poco alla decisione finale. <\/li>\n<li>La misura L1 pi\u00f9 piccola tenendo conto della media e della deviazione standard. Completiamo con la valutazione della natura della distribuzione.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1512.08571\">Mascheramento delle convoluzioni e esclusione delle meno influenti sulla precisione finale<\/a><\/noindex>. Una definizione pi\u00f9 precisa delle convoluzioni insignificanti, ma piuttosto costosa in termini di tempo e risorse. <\/li>\n<li>Altri <\/li>\n<\/ol>\n<p><\/p>\n<p>Ognuno delle opzioni ha diritto di esistere e le proprie peculiarit\u00e0 di implementazione. Qui considereremo l'opzione con la misura L1 pi\u00f9 piccola<\/p>\n<p><\/p>\n<h3 id=\"ruchnoy-process-dlya-yolov3\">Processo manuale per YOLOv3<\/h3>\n<p><\/p>\n<p>Nell'architettura originale ci sono blocchi residuali. Ma per quanto possano essere fantastici per le reti profonde, ci daranno un po' fastidio. Il problema \u00e8 che non si possono rimuovere le convoluzioni con indici diversi in questi strati:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tecnica Jedi per ridurre le reti convoluzionali \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/d516ab886a28d62a34e6a934fdd62c12.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Quindi evidenzieremo gli strati da cui possiamo rimuovere liberamente le convoluzioni:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tecnica Jedi per ridurre le reti convoluzionali \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/f9b69d9900d641e1d5835db9cc749189.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ora costruiremo un ciclo di lavoro:<\/p>\n<p><\/p>\n<ol>\n<li>Esportiamo le attivazioni<\/li>\n<li>Calcoliamo quanto tagliare <\/li>\n<li>Tagliamo<\/li>\n<li>Alleniamo per 10 epoche con LR=1e-4 <\/li>\n<li>Testiamo <\/li>\n<\/ol>\n<p><\/p>\n<p>Esportare le convoluzioni \u00e8 utile per valutare quale parte possiamo rimuovere in un certo passaggio. Esempi di esportazione:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tecnica Jedi per ridurre le reti convoluzionali \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/cd8202e6ce1aa0cc59fbdc4bd8562427.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vediamo che praticamente ovunque il 5% delle convoluzioni ha una L1 norm molto bassa e possiamo eliminarle. In ogni passaggio tale esportazione \u00e8 stata ripetuta e sono state valutate da quali strati e quanto si poteva tagliare. <\/p>\n<p><\/p>\n<p>L'intero processo si \u00e8 svolto in 4 passaggi (qui e ovunque i numeri sono per RTX 2060 Super):<\/p>\n<p><\/p>\n<table>\n<thead>\n<tr>\n<th>Passaggio<\/th>\n<th>mAp75<\/th>\n<th>Numero di parametri, mln<\/th>\n<th>Dimensione della rete, mb<\/th>\n<th>Dall'originale, %<\/th>\n<th>Tempo di esecuzione, ms<\/th>\n<th>Condizione di potatura<\/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>&#8212;<\/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% di tutti<\/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% di tutti<\/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% per strati con 400+ convoluzioni<\/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% per strati con 100+ convoluzioni<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p>Al secondo passaggio \u00e8 emerso un effetto positivo \u2014 \u00e8 riuscito a contenere un batch size di 4 in memoria, accelerando notevolmente il processo di riaddestramento.<br \/>\nNel quarto passaggio il processo \u00e8 stato interrotto, poich\u00e9 anche un lungo riaddestramento non ha sollevato mAp75 ai vecchi valori.<br \/>\nIn definitiva, siamo riusciti ad accelerare l'inferenza di <strong>15%<\/strong>, ridurre la dimensione di<strong> 35% <\/strong>e non perdere in precisione. <\/p>\n<p><\/p>\n<h3 id=\"avtomatizaciya-dlya-bolee-prostyh-arhitektur\">Automazione per architetture pi\u00f9 semplici<\/h3>\n<p><\/p>\n<p>Per architetture di rete pi\u00f9 semplici (senza blocchi addizionali, concatenati e residuali) \u00e8 possibile orientarsi verso l'elaborazione di tutti gli strati convoluzionali e automatizzare il processo di rimozione delle convoluzioni.<\/p>\n<p><\/p>\n<p>Ho implementato tale opzione <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/PaginDm\/keras-L1-pruning\">qui<\/a><\/noindex>.<br \/>\n\u00c8 tutto molto semplice: hai solo bisogno della funzione di perdita, dell'ottimizzatore e dei generatori di batch:<\/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>Se necessario, puoi modificare i parametri della configurazione:<\/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, # il numero di epoche per l'addestramento tra i passaggi di potatura\n    \"stop_loss\": 0.1, # perdita per fermare il processo\n    \"pruning_percent_step\": 0.05, # parte delle convoluzioni da eliminare ad ogni passaggio di potatura\n    \"pruning_standart_deviation_part\": 0.2 # scostamento per limitare la parte di potatura\n}<\/code><\/pre>\n<p><\/p>\n<p>In aggiunta, \u00e8 stata implementata una restrizione basata sulla deviazione standard. L'obiettivo \u00e8 limitare la parte rimossa, escludendo le compressioni con gi\u00e0 \"sufficienti\" misure L1:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tecnica Jedi per ridurre le reti convoluzionali \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/c2733d01a4d5b6e9a97a1e683d87ff45.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In questo modo, permettiamo di rimuovere solo le convoluzioni deboli da distribuzioni simili a quella destra e di non influire sulla rimozione da distribuzioni simili a quella sinistra:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tecnica Jedi per ridurre le reti convoluzionali \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/a9c9bee6322d268026ffb6713fc0bc86.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Con l'avvicinarsi della distribuzione a una normale, il coefficiente pruning_standart_deviation_part pu\u00f2 essere scelto da:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tecnica Jedi per ridurre le reti convoluzionali \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/efee3eda6b8263de42e8f52541a3e949.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nRaccomando un'affidabilit\u00e0 di 2 sigma. Oppure non fare riferimento a questa caratteristica, lasciando il valore &lt; 1.0.<\/p>\n<p><\/p>\n<p>Il risultato finale \u00e8 un grafico delle dimensioni della rete, della perdita e del tempo di esecuzione della rete su tutto il test, normalizzato a 1.0. Ad esempio, qui la dimensione della rete \u00e8 stata ridotta quasi della met\u00e0 senza perdita di qualit\u00e0 (una piccola rete convoluzionale con 100k pesi):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Tecnica Jedi per ridurre le reti convoluzionali \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/1048ac38b12c753e54c8d8a2dc1dc394.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La velocit\u00e0 di esecuzione \u00e8 soggetta a fluttuazioni normali e praticamente non \u00e8 cambiata. Questo ha una spiegazione:<\/p>\n<p><\/p>\n<ol>\n<li>Il numero di convoluzioni cambia da comodi (32, 64, 128) a meno comodi per le schede grafiche \u2014 27, 51 e cos\u00ec via. Potrei sbagliarmi, ma probabilmente questo influisce.<\/li>\n<li>L'architettura non \u00e8 ampia, ma sequenziale. Riducendo la larghezza, non tocchiamo la profondit\u00e0. Questo riduce il carico, ma non cambia la velocit\u00e0.<\/li>\n<\/ol>\n<p><\/p>\n<p>Pertanto, il miglioramento si \u00e8 tradotto in una riduzione del carico CUDA durante l'esecuzione del 20-30%, ma non in una riduzione dei tempi di esecuzione.<\/p>\n<p><\/p>\n<h3 id=\"itogi\">Conclusioni<\/h3>\n<p><\/p>\n<p>Riflettiamo. Abbiamo considerato 2 opzioni di potatura \u2014 per YOLOv3 (quando \u00e8 necessario lavorare manualmente) e per reti con architetture pi\u00f9 semplici. \u00c8 evidente che in entrambi i casi si pu\u00f2 ottenere una riduzione della dimensione della rete e un'accelerazione senza perdita di precisione. Risultati:<\/p>\n<p><\/p>\n<ul>\n<li>Riduzione della dimensione<\/li>\n<li>Accelerazione dell'esecuzione<\/li>\n<li>Riduzione del carico CUDA<\/li>\n<li>Di conseguenza, ecocompatibilit\u00e0 (Ottimizziamo il futuro utilizzo delle risorse computazionali. Da qualche parte una <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\">Appendice<\/h3>\n<p><\/p>\n<ul>\n<li>Dopo il passaggio di potatura, si pu\u00f2 anche procedere con la quantizzazione (ad esempio con TensorRT)<\/li>\n<li>Tensorflow offre opportunit\u00e0 per <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/model_optimization\/guide\/pruning\/pruning_with_keras\">low_magnitude_pruning<\/a><\/noindex>. Funziona.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/PaginDm\/keras-L1-pruning\">Repository<\/a><\/noindex> Voglio sviluppare e sar\u00f2 felice di ricevere aiuto<\/li>\n<\/ul>\n<p>Fonte: <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.1.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\/it\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Tecnica Jedi di riduzione delle reti convoluzionali \u2014 potatura | ProHoster","description":"Hai di nuovo un compito da svolgere.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/54494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=54494"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/54494\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=54494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=54494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=54494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}