En mi tesis de maestría, estoy investigando sobre transfer learning en un caso de uso específico, un detector de señales de tráfico implementado como un Detector de un solo disparo con una red base VGG16 para clasificación. La investigación se centra en el problema de tener un detector que esté bien entrenado e interfiera en el conjunto de datos de señales de tráfico para el que fue entrenado (utilicé el conjunto de datos de detección de señales de tráfico de Bélgica), pero cuando se trata de usar el detector en otro país (Alemania, Austria, Italia, España,...) las señales de tráfico se ven más o menos diferentes lo que resulta en una cierta pérdida no deseada. Para obtener una visión general sobre este tema, recomendaría el artículo de wikipedia
\~ la siguiente sección es sobre mis preguntas de investigación ~
Entonces, teniendo un par de ejemplos de señales de tráfico en el nuevo país, ¿es mejor
- ajustar finamente la red
- transferir el aprendizaje de la red y congelar algunas de las capas de convolución
- (como comparación) aprender el nuevo país desde cero
Incluso el primer detector (el entrenado desde cero en el completo conjunto de datos de Bélgica), ¿tiene alguna ventaja en cargar pesos preentrenados de modelos publicados de Zoos (por ejemplo VGG16/COCO) y luego ajustar/fine-tunear basado en esto?
Ahora, ¿qué estoy preguntando aquí? He implementado mi detector no por mi cuenta, sino basado en un puerto original SSD a Keras/Tensorflow (desde aquí) y ya lo he entrenado con diferentes variaciones (Bélgica desde cero, preentrenado con MS COCO, Transferencia a Alemania, Convolución congelada, ajuste fino a Alemania) y después de semanas de entrenamiento ahora puedo decir que Bélgica con pesos aleatorios desde cero está convergiendo más rápido (después de solo 40 épocas/2 días mi función de pérdida personalizada de SSD ha disminuido a un valor de 3) mientras que todas las demás variaciones necesitan mucho más tiempo, más épocas y la pérdida nunca baja de un valor de 9.
También encontré pesos preentrenados para clasificación de señales de tráfico con VGG16 que pensé deberían ser la base ideal para el transfer learning en este tema, pero este detector fue el peor hasta ahora (la pérdida se estancó en 11, incluso cuando se cambia la tasa de aprendizaje y después de 100 épocas se sobreajustó).
Parece que el transfer learning o el ajuste fino en estos detectores no tiene ninguna ventaja en absoluto. Es probable que esté haciendo algo mal o que no entienda el propósito del transfer learning correctamente (pensé que debería acelerar el aprendizaje, ya que la mayoría de las capas no son entrenables y, por lo tanto, no se realiza ningún cálculo).
No sé si esta es la plataforma adecuada para discutir sobre este tema, quizás conozcas un canal de slack o gitter al que pertenezca esto. Simplemente no sé si estoy atascado, o si estoy haciendo algo terriblemente mal.