Interpretación de la función de pérdida focal de pérdida

prefacio

La pérdida focal es una función de pérdida de uso común en el campo de la detección de objetivos. Fue propuesta por He Kaiming en la red RetinaNet. Resuelve el  problema del desequilibrio extremo de muestras positivas y negativas  y el aprendizaje de muestras difíciles de clasificar en la detección de objetivos. 

Nombre del artículo: Pérdida focal para la detección de objetos densos

Tabla de contenido

¿Qué es el desequilibrio extremo de la muestra positiva y negativa?

Problema de desequilibrio de muestra de dos etapas

Problema de desequilibrio de muestra de una etapa

Función de pérdida de entropía cruzada

Pérdida Focal

Implementación de código Pytorch


¿Qué es el desequilibrio extremo de la muestra positiva y negativa?

El algoritmo de detección de objetivos generará una gran cantidad de cuadros ancla (anchor boxes) para ubicar el objetivo, pero la cantidad de objetivos reales (muestras positivas) en una imagen es muy pequeña, y una gran cantidad de cuadros ancla están en el área de fondo (muestras negativas), lo que conduce a un desequilibrio extremo entre muestras positivas y negativas.

En términos simples, la muestra positiva es que el cuadro de anclaje previsto enmarca el objetivo real; la muestra negativa es que el cuadro de anclaje previsto no enmarca el objetivo real, pero enmarca el fondo. Debido a la pequeña cantidad de muestras positivas y demasiados datos de muestras negativas, las muestras positivas y negativas están extremadamente desequilibradas.

Problema de desequilibrio de muestra de dos etapas

Primero mire el cuadro de anclaje en el RPN Cada punto de los mapas de características está equipado con 9 cuadros de anclaje como el cuadro de detección inicial. Aunque el marco de detección obtenido de esta manera es muy impreciso, la posición del marco de detección se puede corregir más tarde mediante una regresión de cuadro delimitador.

 A continuación se presenta la caja de anclaje de 9 cajas de anclaje, primero mire su forma:

 Deje que el tamaño de los mapas de características sea W*H, luego hay un total de W*H*9 cuadros de anclaje. (W: ancho de los mapas de características; H: altura de los mapas de características).

El método de dos etapas genera cuadros candidatos en la primera etapa. RPN solo distingue el fondo simple y el primer plano del cuadro de anclaje, y no distingue las categorías. Después de esta ronda de procesamiento, la mayoría de los cuadros de anclaje que pertenecen al fondo se filtran, lo que reduce en gran medida el desequilibrio entre las muestras positivas y negativas del cuadro de anclaje.

Nota: solo mitigar el desequilibrio de la muestra no resuelve el desequilibrio de la muestra. Al mismo tiempo, en la segunda etapa, se utiliza el muestreo heurístico (como una proporción de muestras positivas y negativas de 1:3) u OHEM para aliviar aún más el problema del desequilibrio entre las muestras positivas y negativas.

La red que utiliza el mecanismo de la caja de anclaje suele tener un problema de desequilibrio de muestras.

Problema de desequilibrio de muestra de una etapa

Para mejorar la velocidad de detección, el método de una etapa abandona la etapa de generación de casillas candidatas y clasifica directamente la casilla ancla con subdivisiones más difíciles, y carece del proceso de selección de la casilla ancla.

Mirando el ejemplo, se predicen muchas cajas, pero muy pocas cajas contienen objetos correctamente.

Función de pérdida de entropía cruzada

¿Por qué introducir la función de pérdida de entropía cruzada? La clasificación generalmente usa la entropía cruzada, y la pérdida focal también se mejora en función de la entropía cruzada.Permítanme presentarles primero el principio de la entropía cruzada, que facilitará la comprensión de la pérdida focal.

Función de pérdida de entropía cruzada de dos categorías, la fórmula se define de la siguiente manera:

 ahora se define de la siguiente manerap_{t}

 La función de pérdida deformada se obtiene de la siguiente manera:

Pérdida Focal

Debido al problema del desequilibrio extremo entre muestras positivas y negativas, el uso directo de la función de pérdida de entropía cruzada no da buenos resultados. Por lo tanto, primero equilibre la entropía cruzada.

Generalmente, para resolver el problema del desequilibrio de categorías, \alpha _{i} se agrega un factor de peso ∈ [0, 1] antes de cada categoría en la función de pérdida para coordinar el desequilibrio de categorías. Definida de p_{t}manera similar \alpha _{t}, se obtiene la función de pérdida de entropía cruzada equilibrada de clasificación binaria :

La entropía cruzada equilibrada utiliza la importancia de \alfaequilibrar muestras positivas y negativas , pero no distingue entre muestras difíciles y fáciles .  

 Entonces, el gran desequilibrio entre clases hará que la pérdida de entropía cruzada se vea afectada durante el entrenamiento. La pérdida por clasificación errónea de muestras fácilmente clasificables representa la gran mayoría de la pérdida total y domina el gradiente. Sobre la base de equilibrar la función de pérdida de entropía cruzada, Focal Loss agrega un factor de ajuste para reducir el peso de las muestras fáciles de clasificar y se enfoca en el entrenamiento de muestras difíciles.Se define de la siguiente manera:

 \alfaLos pesos ayudan a lidiar con el desequilibrio de clases.

 Entre ellos, (1-p_{t})^{\gamma}se encuentra el factor de ajuste , \gama≥ 0 es un parámetro de enfoque ajustable , la siguiente figura muestra \gama la curva de pérdida focal a diferentes valores de ∈ [0, 5]

γLa forma de la curva de control. γCuanto mayor sea el valor, menor será la pérdida de las muestras de buena clasificación, y podemos enfocar el modelo en aquellas muestras que son difíciles de clasificar. Un valor grande amplía el γrango de muestras que obtienen una pérdida pequeña. Al mismo tiempo, γ=0en ese momento , esta expresión degeneró en Cross Entropy Loss (pérdida de entropía cruzada).

En el gráfico anterior, la línea "azul" representa la pérdida de entropía cruzada. El eje X es la "probabilidad predicha para ser la etiqueta verdadera" (llamémoslo pt por simplicidad). El eje Y es el valor de la pérdida Focal y la pérdida CE después de un punto dado.

Como puede verse en la imagen, cuando la probabilidad de que el modelo prediga la etiqueta verdadera es de alrededor de 0,6, la pérdida de entropía cruzada sigue siendo de alrededor de 0,5. Por lo tanto, para reducir la pérdida durante el entrenamiento, nuestro modelo tendrá que predecir la etiqueta verdadera con mayor probabilidad. En otras palabras, la pérdida de entropía cruzada requiere que el modelo tenga mucha confianza en sus propias predicciones. Pero esto también puede tener un impacto negativo en el rendimiento del modelo.

El modelo de aprendizaje profundo se volverá demasiado confiado, por lo que la capacidad de generalización del modelo disminuirá.

Cuando se usa Focal Loss con γ>1, puede reducir la pérdida de entrenamiento de "muestras bien clasificadas" o "modelos de predicción con alta probabilidad de corrección", pero para "ejemplos difíciles de clasificar", como aquellos con una probabilidad prevista de menos de 0,5, no reducirá demasiado la pérdida. 

Funciones de pérdida focal:

  1. Cuando es muy pequeña (la muestra es difícil de dividir, independientemente de que la puntuación sea correcta), el factor de ajuste se aproxima a 1, y el peso de la muestra en la función de pérdida no se ve afectado; cuando es grande (la muestra es fácil de dividir, independientemente de que la puntuación sea correcta), el factor de ajuste se acerca a 0, y el peso de la muestra en la función de pérdida cae mucho
  2. El parámetro de enfoque puede ajustar el grado de reducción en el peso de muestras fáciles de clasificar, cuanto mayor sea el peso, mayor será la reducción

Al analizar las características de la función de pérdida focal, se puede ver que la función de pérdida reduce el peso de las muestras fáciles de clasificar y se enfoca en las muestras difíciles de clasificar.
 

Código para implementar  Pytorch

class WeightedFocalLoss(nn.Module):
    "Non weighted version of Focal Loss"    
    def __init__(self, alpha=.25, gamma=2):
            super(WeightedFocalLoss, self).__init__()        
            self.alpha = torch.tensor([alpha, 1-alpha]).cuda()        
            self.gamma = gamma
            
    def forward(self, inputs, targets):
            BCE_loss = F.binary_cross_entropy_with_logits(inputs, targets, reduction='none')        
            targets = targets.type(torch.long)        
            at = self.alpha.gather(0, targets.data.view(-1))        
            pt = torch.exp(-BCE_loss)        
            F_loss = at*(1-pt)**self.gamma * BCE_loss        
            return F_loss.mean()

Artículo de referencia 1: https://blog.csdn.net/qq_38675397/article/details/106496333

Artículo de referencia 2: https://amaarora.github.io/2020/06/29/FocalLoss.html

Supongo que te gusta

Origin blog.csdn.net/qq_41204464/article/details/122671175
Recomendado
Clasificación