{"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\/es\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","title":{"rendered":"T\u00e9cnica Jedi para reducir redes convolucionales \u2014 pruning","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"T\u00e9cnica Jedi para reducir redes convolucionales \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/cca85b86c64843707a2167a7fed19867.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ante ti est\u00e1 de nuevo la tarea de detecci\u00f3n de objetos. La prioridad es la velocidad de trabajo con una precisi\u00f3n aceptable. Utilizas la arquitectura YOLOv3 y la ajustas. La precisi\u00f3n (mAp75) es mayor a 0.95. Pero la velocidad de procesamiento sigue siendo baja. Maldita sea. <\/p>\n<p><\/p>\n<p>Hoy evitaremos la cuantizaci\u00f3n. Y en el siguiente apartado abordaremos <strong>Model Pruning<\/strong> \u2014 el recorte de partes redundantes de la red para acelerar la inferencia sin p\u00e9rdida de precisi\u00f3n. Visualmente, de d\u00f3nde, cu\u00e1nto y c\u00f3mo se puede recortar. Analizaremos c\u00f3mo hacerlo manualmente y d\u00f3nde se puede automatizar. Al final, un repositorio en keras.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"vvedenie\">Introducci\u00f3n<\/h3>\n<p><\/p>\n<p>En mi trabajo anterior, en Macroscop de Perm, adquir\u00ed un h\u00e1bito: siempre prestar atenci\u00f3n al tiempo de ejecuci\u00f3n de los algoritmos. Y el tiempo de procesamiento de las redes siempre se verifica a trav\u00e9s de un filtro de adecuaci\u00f3n. Por lo general, los \u00faltimos avances en producci\u00f3n no superan este filtro, lo que me llev\u00f3 al Pruning. <\/p>\n<p><\/p>\n<p>El Pruning es un tema antiguo, del que se habl\u00f3 en <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=eZdOkDtYMoo\">las conferencias de Stanford<\/a><\/noindex> en 2017. La idea principal es reducir el tama\u00f1o de la red entrenada sin p\u00e9rdida de precisi\u00f3n mediante la eliminaci\u00f3n de varios nodos. Suena genial, pero rara vez escucho sobre su aplicaci\u00f3n. Probablemente faltan implementaciones, no hay art\u00edculos en ruso o simplemente todos consideran el pruning como un secreto y no dicen nada.<br \/>\nPero vamos a analizarlo.<\/p>\n<p><\/p>\n<h3 id=\"vzglyad-v-biologiyu\">Una mirada a la biolog\u00eda<\/h3>\n<p><\/p>\n<p>Me gusta cuando en Deep Learning se incorporan ideas provenientes de la biolog\u00eda. A ellas, al igual que a la evoluci\u00f3n, se les puede confiar (\u00bfsab\u00edas que ReLU es muy similar a <noindex><a rel=\"nofollow\" href=\"http:\/\/www.gatsby.ucl.ac.uk\/~lmate\/biblio\/dayanabbott.pdf\">la funci\u00f3n de activaci\u00f3n de las neuronas en el cerebro?<\/a><\/noindex>?) <\/p>\n<p><\/p>\n<p>El proceso de Model Pruning tambi\u00e9n se asemeja a la biolog\u00eda. La reacci\u00f3n de la red aqu\u00ed se puede comparar con la plasticidad del cerebro. Hay un par de ejemplos interesantes en el 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\">de Norman Doidge.<\/a><\/noindex>:<\/p>\n<p><\/p>\n<ol>\n<li>El cerebro de una mujer que naci\u00f3 con solo una mitad reprogram\u00f3 por s\u00ed mismo para cumplir las funciones de la mitad que falta.<\/li>\n<li>Un chico se dispar\u00f3 en la parte del cerebro responsable de la visi\u00f3n. Con el tiempo, otras partes del cerebro asumieron esas funciones. (no intentamos repetirlo)<\/li>\n<\/ol>\n<p><\/p>\n<p>As\u00ed tambi\u00e9n se puede recortar parte de las convoluciones d\u00e9biles de tu modelo. En \u00faltima instancia, las convoluciones restantes ayudar\u00e1n a reemplazar las recortadas. <\/p>\n<p><\/p>\n<h3 id=\"lyubish-transfer-learning-ili-uchish-s-nulya\">\u00bfTe gusta el Transfer Learning o aprendes desde cero?<\/h3>\n<p><\/p>\n<p><strong>Opci\u00f3n n\u00famero uno.<\/strong> Est\u00e1s utilizando Transfer Learning en Yolov3. Retina, Mask-RCNN o U-Net. Pero, a menudo, no necesitamos reconocer 80 clases de objetos, como en COCO. En mi experiencia, todo se limita a 1-2 clases. Se puede suponer que la arquitectura para 80 clases aqu\u00ed es excesiva. Surge la idea de que la arquitectura necesita reducirse. Adem\u00e1s, me gustar\u00eda hacerlo sin perder los pesos preentrenados existentes.<\/p>\n<p><\/p>\n<p><strong>La opci\u00f3n n\u00famero dos.<\/strong> Tal vez tengas muchos datos y recursos computacionales o simplemente necesites una arquitectura altamente personalizada. No importa. Pero est\u00e1s entrenando la red desde cero. El orden habitual es observar la estructura de los datos, seleccionar una arquitectura SOBREDIMENSIONADA en t\u00e9rminos de potencia y aplicar dropout para evitar el sobreajuste. He visto dropouts de 0.6, Carl. <\/p>\n<p><\/p>\n<p>En ambos casos, se puede reducir la red. Nos han motivado. Ahora vamos a aclarar qu\u00e9 es la reducci\u00f3n pruning.<\/p>\n<p><\/p>\n<h3 id=\"obschiy-algoritm\">Algoritmo general<\/h3>\n<p><\/p>\n<p>Hemos decidido que podemos eliminar convoluciones. Esto parece bastante simple:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00e9cnica Jedi para reducir redes convolucionales \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/1c01fa318d08550c9738c88d52e36b2d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Eliminar cualquier convoluci\u00f3n es un estr\u00e9s para la red, que generalmente conlleva un aumento en el error. Por un lado, este aumento en el error es un indicador de cu\u00e1n correctamente estamos eliminando las convoluciones (por ejemplo, un gran aumento indica que estamos haciendo algo mal). Pero un peque\u00f1o aumento es perfectamente aceptable y a menudo se corrige con un ligero reentrenamiento utilizando un LR bajo. A\u00f1adimos un paso de reentrenamiento:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00e9cnica Jedi para reducir redes convolucionales \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/d51df9606d65fd4e7e80209743f761c3.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ahora necesitamos entender cu\u00e1ndo queremos detener nuestro ciclo LearningPruning. Aqu\u00ed pueden haber variantes ex\u00f3ticas, donde necesitamos reducir la red a un tama\u00f1o y velocidad de ejecuci\u00f3n espec\u00edficos (por ejemplo, para dispositivos m\u00f3viles). Sin embargo, la opci\u00f3n m\u00e1s com\u00fan es continuar el ciclo hasta que el error supere el umbral permitido. A\u00f1adimos una condici\u00f3n:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00e9cnica Jedi para reducir redes convolucionales \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/9032018847833b54402124a29d3acbb1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>As\u00ed que el algoritmo se vuelve claro. Ahora queda desglosar c\u00f3mo determinar las convoluciones que se eliminar\u00e1n.<\/p>\n<p><\/p>\n<h3 id=\"poisk-udalyaemyh-svertok\">B\u00fasqueda de convoluciones eliminables<\/h3>\n<p><\/p>\n<p>Necesitamos eliminar algunos envoltorios. Romperlos sin m\u00e1s y \"disparar\" cualquier envoltura es una mala idea, aunque funcione. Pero dado que tenemos cabeza, podemos pensar y tratar de identificar las envolturas \"d\u00e9biles\" para eliminarlas. Hay varias opciones:<\/p>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/openreview.net\/pdf?id=rJqFGTslg\">La menor medida L1 o low_magnitude_pruning<\/a><\/noindex>. La idea de que las convoluciones con valores de peso bajos tienen una contribuci\u00f3n m\u00ednima en la decisi\u00f3n final. <\/li>\n<li>La menor medida L1 teniendo en cuenta la media y la desviaci\u00f3n est\u00e1ndar. Complementado con una evaluaci\u00f3n de la naturaleza de la distribuci\u00f3n.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1512.08571\">Enmascaramiento de convoluciones y exclusi\u00f3n de las que menos influyen en la precisi\u00f3n final.<\/a><\/noindex>. Definici\u00f3n m\u00e1s precisa de convoluciones insignificantes, pero muy costosa en tiempo y recursos. <\/li>\n<li>Otros <\/li>\n<\/ol>\n<p><\/p>\n<p>Cada una de las opciones tiene derecho a existir y sus caracter\u00edsticas de implementaci\u00f3n. Aqu\u00ed consideraremos la opci\u00f3n con la menor medida L1.<\/p>\n<p><\/p>\n<h3 id=\"ruchnoy-process-dlya-yolov3\">Proceso manual para YOLOv3.<\/h3>\n<p><\/p>\n<p>La arquitectura original contiene bloques residuales. Pero por muy buenos que sean para redes profundas, nos dificultan un poco. La complicaci\u00f3n es que no se pueden eliminar las convoluciones con diferentes \u00edndices en estas capas:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00e9cnica Jedi para reducir redes convolucionales \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/d516ab886a28d62a34e6a934fdd62c12.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Por lo tanto, identificaremos las capas de las que podemos eliminar libremente las convoluciones:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00e9cnica Jedi para reducir redes convolucionales \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/f9b69d9900d641e1d5835db9cc749189.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ahora construimos un ciclo de trabajo:<\/p>\n<p><\/p>\n<ol>\n<li>Extracci\u00f3n de activaciones.<\/li>\n<li>Establecemos cu\u00e1nto recortar. <\/li>\n<li>Recortamos.<\/li>\n<li>Entrenamos durante 10 \u00e9pocas con LR=1e-4. <\/li>\n<li>Probamos <\/li>\n<\/ol>\n<p><\/p>\n<p>Es \u00fatil extraer las convoluciones para evaluar qu\u00e9 parte podemos eliminar en un paso determinado. Ejemplos de extracci\u00f3n:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00e9cnica Jedi para reducir redes convolucionales \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/cd8202e6ce1aa0cc59fbdc4bd8562427.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vemos que pr\u00e1cticamente en todas partes el 5% de las convoluciones tienen una norma L1 muy baja y podemos eliminarlas. En cada paso, se repiti\u00f3 esta extracci\u00f3n y se evalu\u00f3 de qu\u00e9 capas y cu\u00e1nto se pod\u00eda recortar. <\/p>\n<p><\/p>\n<p>Todo el proceso se llev\u00f3 a cabo en 4 pasos (aqu\u00ed y en todas partes los n\u00fameros son para RTX 2060 Super):<\/p>\n<p><\/p>\n<table>\n<thead>\n<tr>\n<th>Paso<\/th>\n<th>mAp75<\/th>\n<th>N\u00famero de par\u00e1metros, millones.<\/th>\n<th>Tama\u00f1o de la red, MB.<\/th>\n<th>De la original, %<\/th>\n<th>Tiempo de ejecuci\u00f3n, ms.<\/th>\n<th>Condici\u00f3n de recorte.<\/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% de todos.<\/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% de todos.<\/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% para capas con m\u00e1s de 400 convoluciones.<\/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% para capas con m\u00e1s de 100 convoluciones.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p>En el paso 2, se agreg\u00f3 un efecto positivo: el tama\u00f1o del lote 4 entr\u00f3 en la memoria, lo que aceler\u00f3 considerablemente el proceso de reentrenamiento.<br \/>\nEn el paso 4, el proceso se detuvo, ya que incluso un largo reentrenamiento no elevaba el mAp75 a los antiguos valores.<br \/>\nAl final, se logr\u00f3 acelerar el inferencia en <strong>15%<\/strong>, reducir el tama\u00f1o en<strong> 35% <\/strong>y no perder precisi\u00f3n. <\/p>\n<p><\/p>\n<h3 id=\"avtomatizaciya-dlya-bolee-prostyh-arhitektur\">Automatizaci\u00f3n para arquitecturas m\u00e1s simples.<\/h3>\n<p><\/p>\n<p>Para arquitecturas de red m\u00e1s simples (sin bloques condicionales de adici\u00f3n, concatenaci\u00f3n y residuales), es bastante posible orientarse en el procesamiento de todas las capas convolucionales y automatizar el proceso de recorte de convoluciones.<\/p>\n<p><\/p>\n<p>Esta opci\u00f3n la implement\u00e9. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/PaginDm\/keras-L1-pruning\">aqu\u00ed<\/a><\/noindex>.<br \/>\nEs simple: solo necesita la funci\u00f3n de p\u00e9rdida, optimizador y generadores de lotes:<\/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>Si es necesario, se pueden cambiar los par\u00e1metros de la configuraci\u00f3n:<\/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, # el n\u00famero de \u00e9pocas para entrenar entre los pasos de poda\n    \"stop_loss\": 0.1, # p\u00e9rdida para detener el proceso\n    \"pruning_percent_step\": 0.05, # parte de las convoluciones a eliminar en cada paso de poda\n    \"pruning_standart_deviation_part\": 0.2 # desplazamiento para limitar la parte de poda\n}<\/code><\/pre>\n<p><\/p>\n<p>Adem\u00e1s, se ha implementado una restricci\u00f3n basada en la desviaci\u00f3n est\u00e1ndar. El objetivo es limitar la parte eliminada, excluyendo las envolturas que ya tienen medidas L1 \"suficientes\":<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00e9cnica Jedi para reducir redes convolucionales \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/c2733d01a4d5b6e9a97a1e683d87ff45.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De esta forma, permitimos eliminar solo las convoluciones d\u00e9biles de distribuciones similares a la derecha y no influir en la eliminaci\u00f3n de distribuciones similares a la izquierda:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00e9cnica Jedi para reducir redes convolucionales \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/a9c9bee6322d268026ffb6713fc0bc86.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Al acercarse la distribuci\u00f3n a la normal, el coeficiente pruning_standart_deviation_part se puede ajustar a:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00e9cnica Jedi para reducir redes convolucionales \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/efee3eda6b8263de42e8f52541a3e949.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nRecomiendo un margen de 2 sigmas. O se puede no considerar esta caracter\u00edstica, dejando el valor &lt; 1.0.<\/p>\n<p><\/p>\n<p>Al final se obtiene un gr\u00e1fico del tama\u00f1o de la red, la p\u00e9rdida y el tiempo de ejecuci\u00f3n de la red a lo largo de toda la prueba, normalizados a 1.0. Por ejemplo, aqu\u00ed el tama\u00f1o de la red se redujo casi a la mitad sin p\u00e9rdida de calidad (una peque\u00f1a red convolucional con 100k par\u00e1metros):<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"T\u00e9cnica Jedi para reducir redes convolucionales \u2014 pruning\" src=\"\/wp-content\/uploads\/2019\/12\/1048ac38b12c753e54c8d8a2dc1dc394.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La velocidad de ejecuci\u00f3n est\u00e1 sujeta a fluctuaciones normales y pr\u00e1cticamente no ha cambiado. Esto tiene una explicaci\u00f3n:<\/p>\n<p><\/p>\n<ol>\n<li>El n\u00famero de convoluciones cambia de convenientes (32, 64, 128) a no tan convenientes para las tarjetas gr\u00e1ficas \u2014 27, 51, etc. Aqu\u00ed podr\u00eda estar equivocado, pero lo m\u00e1s probable es que esto impacte.<\/li>\n<li>La arquitectura no es amplia, pero es secuencial. Al reducir el ancho, no tocamos la profundidad. De esta manera, reducimos la carga, pero no cambiamos la velocidad.<\/li>\n<\/ol>\n<p><\/p>\n<p>Por lo tanto, la mejora se tradujo en una reducci\u00f3n de la carga de CUDA durante la ejecuci\u00f3n de 20-30%, pero no en la reducci\u00f3n del tiempo de ejecuci\u00f3n.<\/p>\n<p><\/p>\n<h3 id=\"itogi\">Resultados<\/h3>\n<p><\/p>\n<p>Reflexionemos. Hemos considerado 2 opciones de poda \u2014 para YOLOv3 (cuando se tiene que trabajar manualmente) y para redes con arquitecturas m\u00e1s simples. Se observa que en ambos casos se puede lograr una reducci\u00f3n del tama\u00f1o de la red y un aumento de la velocidad sin p\u00e9rdida de precisi\u00f3n. Resultados:<\/p>\n<p><\/p>\n<ul>\n<li>Reducci\u00f3n de tama\u00f1o<\/li>\n<li>Aceleraci\u00f3n de la ejecuci\u00f3n<\/li>\n<li>Reducci\u00f3n de la carga de CUDA<\/li>\n<li>Como consecuencia, sostenibilidad (Optimizamos el uso futuro de recursos computacionales. En alg\u00fan lugar, una est\u00e1 contenta <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\">Anexo<\/h3>\n<p><\/p>\n<ul>\n<li>Despu\u00e9s del paso de poda, se puede ajustar la cuantizaci\u00f3n (por ejemplo, con TensorRT)<\/li>\n<li>Tensorflow ofrece oportunidades para <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/model_optimization\/guide\/pruning\/pruning_with_keras\">low_magnitude_pruning<\/a><\/noindex>. Funciona.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/PaginDm\/keras-L1-pruning\">Repositorio<\/a><\/noindex> quiero desarrollarme y estar\u00e9 encantado de recibir ayuda<\/li>\n<\/ul>\n<p>Fuente: <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 - 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\/es\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47T\u00e9cnica Jedi de reducci\u00f3n de redes convolucionales \u2014 poda | ProHoster","description":"Tienes nuevamente la tarea.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/news\/dzhedajskaya-tehnika-umensheniya-svertochnyh-setej-pruning","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/54494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=54494"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/54494\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=54494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=54494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=54494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}