Usando un clasificador CNN previamente entrenado y aplíquelo en un conjunto de datos de imagen diferente

11

¿Cómo optimizaría un pre-entrenado neural network para aplicarlo a un problema separado? ¿Agregaría más capas al modelo previamente entrenado y lo probaría en su conjunto de datos?

Por ejemplo, si la tarea fuera utilizar una CNN para clasificar grupos de fondos de pantalla , estoy seguro de que no funcionaría clasificar directamente de una red pre-entrenada entrenada en imágenes de gatos y perros, a pesar de que ambos son clasificadores de imágenes.

Sid
fuente

Respuestas:

15

Leer: ¿Cuándo el aprendizaje de transferencia es desventajoso? (Gracias a @media) (me parece muy informativo, así que lo agregué aquí para que esta respuesta sea completa ...)

Responda a su pregunta ... (comienza aquí)

Transferir aprendizaje es lo que estás buscando.

  • Cuando se nos da una tarea de aprendizaje profundo, digamos, una que involucra entrenar una red neuronal convolucional (Covnet) en un conjunto de datos de imágenes, nuestro primer instinto sería entrenar la red desde cero. Sin embargo, en la práctica, las redes neuronales profundas como Covnet tienen una gran cantidad de parámetros, a menudo en el rango de millones. El entrenamiento de un Covnet en un conjunto de datos pequeño (uno que es más pequeño que el número de parámetros) afecta en gran medida la capacidad del Covnet para generalizar, a menudo resulta en un sobreajuste.

  • Por lo tanto, con mayor frecuencia en la práctica, uno afinaría las redes existentes que están entrenadas en un gran conjunto de datos como ImageNet (imágenes etiquetadas 1.2M) al continuar entrenando (es decir, ejecutando la propagación inversa) en el conjunto de datos más pequeño que tenemos. Siempre que nuestro conjunto de datos no sea drásticamente diferente en contexto al conjunto de datos original (por ejemplo, ImageNet), el modelo previamente entrenado ya habrá aprendido características que son relevantes para nuestro propio problema de clasificación.

¿Cuándo ajustar los modelos?

  • En general, si nuestro conjunto de datos no es drásticamente diferente en contexto del conjunto de datos en el que se entrena el modelo pre-entrenado, deberíamos ir a un ajuste fino. La red pre-entrenada en un conjunto de datos grande y diverso como ImageNet captura características universales como curvas y bordes en sus primeras capas, que son relevantes y útiles para la mayoría de los problemas de clasificación.

  • Por supuesto, si nuestro conjunto de datos representa un dominio muy específico, por ejemplo, imágenes médicas o caracteres escritos a mano en chino, y que no se pueden encontrar redes previamente capacitadas en dicho dominio, deberíamos considerar capacitar la red desde cero.

  • Otra preocupación es que si nuestro conjunto de datos es pequeño, ajustar la red pre-entrenada en un conjunto de datos pequeño podría llevar a un sobreajuste, especialmente si las últimas capas de la red son capas completamente conectadas, como en el caso de la red VGG. Hablando desde mi experiencia, si tenemos unos pocos miles de muestras sin procesar, con las estrategias comunes de aumento de datos implementadas (traducción, rotación, volteo, etc.), el ajuste fino generalmente nos dará un mejor resultado.

  • Si nuestro conjunto de datos es realmente pequeño, digamos menos de mil muestras, un mejor enfoque es tomar la salida de la capa intermedia antes de las capas completamente conectadas como características (características de cuello de botella) y entrenar un clasificador lineal (por ejemplo, SVM) encima de eso. SVM es particularmente bueno para trazar límites de decisión en un pequeño conjunto de datos.

Técnicas de ajuste fino

A continuación se presentan algunas pautas generales para la implementación de ajustes:

  • La práctica común es truncar la última capa (capa softmax) de la red pre-entrenada y reemplazarla con nuestra nueva capa softmax que sea relevante para nuestro propio problema. Por ejemplo, la red pre-entrenada en ImageNet viene con una capa softmax con 1000 categorías.

  • Si nuestra tarea es una clasificación en 10 categorías, la nueva capa softmax de la red será de 10 categorías en lugar de 1000 categorías. Luego ejecutamos la propagación en la red para ajustar los pesos previamente entrenados. Asegúrese de realizar una validación cruzada para que la red pueda generalizar bien.

  • Use una tasa de aprendizaje menor para entrenar la red. Como esperamos que los pesos pre-entrenados sean bastante buenos en comparación con los pesos inicializados aleatoriamente, no queremos distorsionarlos demasiado rápido y demasiado. Una práctica común es hacer que la tasa de aprendizaje inicial sea 10 veces menor que la utilizada para el entrenamiento de scratch.

  • También es una práctica común congelar los pesos de las primeras capas de la red pre-entrenada. Esto se debe a que las primeras capas capturan características universales como curvas y bordes que también son relevantes para nuestro nuevo problema. Queremos mantener esos pesos intactos. En cambio, haremos que la red se centre en aprender características específicas del conjunto de datos en las capas posteriores.

En este caso, debe entrenarlos nuevamente, ya que si no me equivoco, los fondos de pantalla no son una clase de modelos Image-net. No será difícil construir un modelo desde cero para hacerlo (preferiblemente uno más superficial lo hará). también hazlo aquí ..)

La fuente de mi respuesta es la traducción de estos cursos increíbles.

Para lecturas adicionales,

Aditya
fuente
Si solo está haciendo extracción de características, como si no estuviera ajustando ninguna de las capas. ¿Hay alguna razón para reemplazar la última capa densa con un clasificador lineal? ¿Por qué no mantenerlo como una nueva capa densa y simplemente volver a entrenar mientras se mantienen congeladas todas las capas inferiores? ¿Es solo porque entrenar un clasificador lineal será más rápido que entrenar una nueva capa densa?
CMCDragonkai
1
Para la extracción de características, no es necesario agregar capas, pero se agregan pocas capas como Agrupación y cambio de tamaño de forma para que coincidan con las atenuaciones y posiblemente reduzcan los valores intermedios; Seguramente es más rápido entrenar un modelo lineal que un NN, pero puede probar ambos y ver qué funciona mejor para su caso de uso; Descongelar la última capa densa y volver a entrenar con pocas capas adicionales para que coincida con su problema en cuestión es una práctica común
Aditya