{"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\/novosti-interneta\/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 operativa mantenendo una precisione accettabile. Utilizzi l'architettura YOLOv3 e fai un ulteriore addestramento. La precisione (mAp75) \u00e8 superiore a 0,95. Ma la velocit\u00e0 di esecuzione \u00e8 ancora bassa. Accidenti. <\/p>\n<p><\/p>\n<p>Oggi eviteremo la quantizzazione. Sotto il post daremo uno sguardo a <strong>Model Pruning<\/strong> \u2014 potatura delle parti ridondanti della rete per velocizzare l'Inference senza perdita di precisione. In modo visivo \u2014 da dove, quanto e come possiamo rimuovere. Analizzeremo come farlo manualmente e dove possiamo 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 presso Macroscop a Perm, ho acquisito un'abitudine: monitorare sempre i tempi di esecuzione degli algoritmi. E i tempi di esecuzione delle reti devono sempre essere controllati tramite un filtro di adeguatezza. Di solito, i modelli state-of-the-art non superano questo filtro, il che mi ha portato al Pruning. <\/p>\n<p><\/p>\n<p>Il Pruning \u00e8 un tema vecchio, di cui si parlava nelle <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=eZdOkDtYMoo\">lezioni di Stanford<\/a><\/noindex> del 2017. L'idea principale \u00e8 quella di ridurre le dimensioni di una rete addestrata senza perdere precisione attraverso la rimozione di vari nodi. Sembra interessante, ma raramente sento parlare del suo utilizzo. Forse mancano implementazioni, non ci sono articoli in russo o semplicemente tutti considerano il pruning come un know-how e tacciono.<br \/>\nMa andiamo a esplorare<\/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 si introducono idee derivate dalla biologia. A queste, come all'evoluzione, ci si pu\u00f2 fidare (sapevi che ReLU \u00e8 molto simile alla <noindex><a rel=\"nofollow\" href=\"http:\/\/www.gatsby.ucl.ac.uk\/~lmate\/biblio\/dayanabbott.pdf\">funzione di attivazione dei neuroni nel cervello<\/a><\/noindex>?) <\/p>\n<p><\/p>\n<p>Il processo di Model Pruning \u00e8 anch'esso vicino alla biologia. La reazione della rete qui 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, nata con solo met\u00e0, ha riprogrammato se stesso per eseguire le funzioni della met\u00e0 mancante.<\/li>\n<li>Un ragazzo si \u00e8 sparato in testa, colpendo la parte del cervello responsabile della vista. Col tempo, altre parti del cervello hanno preso in carico tali funzioni. (non cerchiamo di ripetere)<\/li>\n<\/ol>\n<p><\/p>\n<p>Cos\u00ec puoi rimuovere parte delle convoluzioni dalla tua modella. In casi estremi, le convoluzioni rimanenti potranno sostituire quelle rimosse. <\/p>\n<p><\/p>\n<h3 id=\"lyubish-transfer-learning-ili-uchish-s-nulya\">Preferisci il Transfer Learning o addestri da zero?<\/h3>\n<p><\/p>\n<p><strong>Opzione numero uno.<\/strong> Utilizzi il Transfer Learning su Yolov3. Retina, Mask-RCNN o U-Net. Ma molto spesso non abbiamo bisogno di riconoscere 80 classi di oggetti, come nel COCO. Nella mia esperienza, ci limitiamo a 1-2 classi. Si potrebbe supporre che l'architettura per 80 classi sia eccessiva qui. Il pensiero di ridurre l'architettura si impone. Inoltre, si desidera fare ci\u00f2 senza perdere i pesi pre-addestrati esistenti.<\/p>\n<p><\/p>\n<p><strong>Opzione numero due.<\/strong> Potresti avere molti dati e risorse computazionali o semplicemente una architettura super personalizzata. Non importa. Ma stai addestrando la rete da zero. L'ordine abituale \u00e8 analizzare la struttura dei dati, selezionare un'architettura sovrabbondante in potenza e spingere i dropout contro il sovra-adattamento. Ho visto dropout a 0,6, Carl. <\/p>\n<p><\/p>\n<p>In entrambi i casi la rete pu\u00f2 essere ridotta. Ti abbiamo motivato. Ora andiamo a capire che cos'\u00e8 la potatura.<\/p>\n<p><\/p>\n<h3 id=\"obschiy-algoritm\">Algoritmo generale<\/h3>\n<p><\/p>\n<p>Abbiamo deciso che possiamo rimuovere convoluzioni. Sembra abbastanza 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 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 lieve aumento \u00e8 piuttosto accettabile e spesso viene eliminato con un successivo leggero riaddestramento con un LR ridotto. Aggiungiamo un passo per il 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 interrompere il nostro ciclo Learning&lt;-&gt;Pruning. Qui possono esserci 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 continuare il ciclo finch\u00e9 l'errore non supera i limiti accettabili. 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. Resta 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 alcuni involtini. Andare a rompere e 'abbattere' qualsiasi cosa \u00e8 una cattiva idea, anche se funzioner\u00e0. Ma se si usa la testa, si pu\u00f2 pensare e provare a isolare per la rimozione gli involtini 'deboli'. Ci sono diverse opzioni:<\/p>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/openreview.net\/pdf?id=rJqFGTslg\">Minimo L1 o low_magnitude_pruning<\/a><\/noindex>. L'idea \u00e8 che le convoluzioni con valori di pesi bassi contribuiscono poco alla decisione finale. <\/li>\n<li>Minimo L1 con medio e deviazione standard. Completiamo la valutazione della distribuzione.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1512.08571\">Mascheramento delle convoluzioni ed 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>Altre <\/li>\n<\/ol>\n<p><\/p>\n<p>Ognuna delle opzioni ha diritto di esistere e le proprie caratteristiche di implementazione. Qui analizzeremo l'opzione con il minimo L1.<\/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 residui. Ma per quanto possano essere utili per le reti profonde, possono darci qualche problema. La difficolt\u00e0 sta nel non poter 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>Pertanto, evidenziamo 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 creiamo un ciclo di lavoro:<\/p>\n<p><\/p>\n<ol>\n<li>Scarichiamo le attivazioni<\/li>\n<li>Stabiliamo 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>Scaricare le convoluzioni \u00e8 utile per valutare quale parte possiamo rimuovere in un determinato passo. Esempi di scarico:<\/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>Osserviamo che quasi ovunque il 5% delle convoluzioni ha una norma L1 molto bassa e possiamo rimuoverle. A ogni passo, questo scarico veniva ripetuto e veniva effettuata una valutazione di quali strati e quanto si poteva rimuovere. <\/p>\n<p><\/p>\n<p>L'intero processo si \u00e8 svolto in 4 passi (qui e ovunque i numeri sono per RTX 2060 Super):<\/p>\n<p><\/p>\n<table>\n<thead>\n<tr>\n<th>Passo<\/th>\n<th>mAp75<\/th>\n<th>Numero di parametri, mln<\/th>\n<th>Dimensione della rete, mb<\/th>\n<th>Dall'iniziale, %<\/th>\n<th>Tempo di esecuzione, ms<\/th>\n<th>Condizione di pruning<\/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% del totale<\/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% del totale<\/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 oltre 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 oltre 100 convoluzioni<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p>Al secondo passo \u00e8 emerso un effetto positivo: \u00e8 riuscito a far entrare nella memoria un batch size di 4, che ha notevolmente accelerato il processo di riaddestramento.<br \/>\nNel quarto passo, il processo si \u00e8 fermato, poich\u00e9 anche un lungo riaddestramento non ha aumentato il mAp75 ai valori precedenti.<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 condizionali add, concatenate e residual) \u00e8 possibile orientarsi al trattamento di tutti gli strati convoluzionali e automatizzare il processo di rimozione delle convoluzioni.<\/p>\n<p><\/p>\n<p>Questa opzione l'ho implementata <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/PaginDm\/keras-L1-pruning\">qui<\/a><\/noindex>.<br \/>\n\u00c8 semplice: a voi serve solo la funzione di perdita, l'ottimizzatore e i 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>\u00c8 possibile modificare i parametri di configurazione se necessario:<\/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'allenamento tra i passi di pruning\n    \"stop_loss\": 0.1, # perdita per fermare il processo\n    \"pruning_percent_step\": 0.05, # parte delle convoluzioni da eliminare a ogni passo di pruning\n    \"pruning_standart_deviation_part\": 0.2 # limite per la parte di pruning\n}<\/code><\/pre>\n<p><\/p>\n<p>\u00c8 stata inoltre implementata una limitazione basata sulla deviazione standard. L'obiettivo \u00e8 limitare la parte da rimuovere, escludendo gli involtini 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 dalle distribuzioni simili a quella di destra, senza influenzare la rimozione dalle distribuzioni simili a quella di 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>Avvicinandosi a una distribuzione 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 \/>\nConsiglio di utilizzare una tolleranza di 2 sigma. Oppure si pu\u00f2 non fare riferimento a questa caratteristica, mantenendo il valore &lt; 1.0.<\/p>\n<p><\/p>\n<p>In output, arriva un grafico della dimensione della rete, delle perdite e del tempo di esecuzione della rete durante tutto il test, normalizzati a 1.0. Ad esempio, qui la dimensione della rete \u00e8 stata ridotta di quasi la 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 normali fluttuazioni e in sostanza non \u00e8 cambiata. Ci\u00f2 ha una spiegazione:<\/p>\n<p><\/p>\n<ol>\n<li>Il numero di convoluzioni cambia da valori possibili (32, 64, 128) a valori non cos\u00ec comodi per le schede grafiche \u2014 27, 51 ecc. Potrei sbagliarmi, ma \u00e8 probabile che questo influisca.<\/li>\n<li>L'architettura non \u00e8 ampia, ma sequenziale. Riducendo la larghezza, non tocchiamo la profondit\u00e0. Di conseguenza, riduciamo il carico senza modificare 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 dal 20 al 30%, ma non in una riduzione del tempo di esecuzione.<\/p>\n<p><\/p>\n<h3 id=\"itogi\">Risultati<\/h3>\n<p><\/p>\n<p>Riflettiamo. Abbiamo esaminato 2 opzioni di pruning \u2014 per YOLOv3 (quando \u00e8 necessario lavorare manualmente) e per reti con architetture pi\u00f9 semplici. \u00c8 evidente che in entrambi i casi si possono ottenere dimensioni di rete inferiori e velocizzazione senza perdere precisione. Risultati:<\/p>\n<p><\/p>\n<ul>\n<li>Riduzione delle dimensioni<\/li>\n<li>Accelerazione dell'esecuzione<\/li>\n<li>Riduzione del carico CUDA<\/li>\n<li>Di conseguenza, sostenibilit\u00e0 (Optimize utilization of computational resources. Celebrates one <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 passo di pruning \u00e8 possibile effettuare anche 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 sarei 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-novosti-interneta"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.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\/novosti-interneta\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.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\/novosti-interneta\/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 per ridurre le reti convoluzionali \u2014 pruning | ProHoster","description":"Hai di nuovo un compito da svolgere.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/novosti-interneta\/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\/novosti-interneta\/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}]}}