Comprensión simple de la pérdida BCE ponderada y la pérdida IoU ponderada en la segmentación de objetivos pequeños

Estas dos funciones de pérdida son del artículo "F³Net: Fusion, Feedback and Focus for Salient Object Detection", que se utilizan para tratar el problema de los objetivos pequeños . Para la Pérdida BCE tradicional, existen los siguientes tres problemas:

  • Simplemente promedia el BCE de cada píxel, ignorando la estructura del objeto de destino
  • Para objetivos pequeños, la pérdida de toda la imagen estará dominada por la clase de fondo, lo que dificultará el aprendizaje del primer plano.
  • Los loxels de borde de los objetos son muy propensos a la clasificación errónea y no se les debe dar un peso similar al de otros loxels.

La solución, por supuesto, es ponderar píxeles en diferentes ubicaciones. Específicamente, el lugar con mayor peso debe ser la posición de borde del lugar, y cuanto más lejos del borde, más bajo es. Entonces, ¿cómo implementar este proceso de ponderación de una manera "no simple y grosera"? La expresión de pérdida BCE ponderada del artículo es la siguiente: L wbces = − ∑ i = 1 H ∑ j = 1 W ( 1 + γ α ij ) ∑ l = 0 1 1 ( gijs = l ) log ⁡ P r ( pijs = l ∣ Ψ ) ∑ yo = 1 H ∑ j = 1 W γ α ij L_{wbce}^s=-\frac{\sum_{i=1}^H \sum_{j=1}^W\left(1+ \gamma \alpha_{ij}\right) \sum_{l=0}^1 \mathbf{1}\left(g_{ij}^s=l\right) \log \mathbf{P r}\left(p_ {ij }^s=l \mid \Psi\right)}{\sum_{i=1}^H \sum_{j=1}^W \gamma \alpha_{ij}}Lw b ces=yo = 1Hj = 1Wc unyoyo = 1Hj = 1W( 1+c unyo)l = 011( gramoyos=yo )iniciar sesiónPR( pagyos=yosal .).Aquí α ij \alpha_{ij}ayoSe refiere al peso del píxel en la posición (i, j). Si no se pondera, es equivalente a α ij \alpha_{ij}ayoconstantemente 1.

Independientemente de las otras partes de la fórmula, enfócate en α ij \alpha_{ij}ayo是如何计算的:α ijs = ∣ ∑ metro , norte ∈ A ijgmns ∑ metro , norte ∈ A ij 1 − gijs ∣ \alpha_{ij}^s=\left|\frac{\sum_{m, n \in A_ {ij}} g_{mn}^s}{\sum_{m, n \in A_{ij}} 1}-g_{ij}^s\right|ayos= metro , norte Ayo1metro , norte AyogramoMinnesotasgramoyos Entre ellos gijs g_{ij}^sgramoyosRepresenta el verdadero valor de la posición (i, j) (1 o 0, correspondiente al primer plano o al fondo), A ij A_{ij}AyoIndica los píxeles alrededor de (i, j).

Tomamos algunos valores especiales para discutir. Supongamos gmns g_{mn}^sgramoMinnesotasAmbos son 0, gijs g_{ij}^sgramoyosEs 1, lo que significa que el píxel actual es el primer plano y los píxeles circundantes son el fondo, que es un objetivo pequeño y se le debe dar un peso alto. Del mismo modo, si gmns g_{mn}^sgramoMinnesotasAmbos son 0, gijs g_{ij}^sgramoyosTambién es 0, lo que indica que la ubicación actual y las ubicaciones circundantes son fondos, lo que corresponde a un peso bajo. Los pesos se visualizan de la siguiente manera: como
inserte la descripción de la imagen aquí
puede ver, los pesos cerca del borde tienen sobrepeso (rojo), mientras que los píxeles alejados del borde se ponen a cero. Hasta cierto punto, se puede entender que este es un método consciente de los límites que no requiere una entrada explícita de información de borde.

A continuación, mire la pérdida de IoU ponderada. Cabe señalar que el concepto de IoU es naturalmente adecuado para tratar con objetivos pequeños, por lo que la ponderación de IoU Loss es puramente para unificar el concepto, y su expresión es la siguiente: L wiou s = 1 − ∑ i = 1 H ∑ j = 1 W ( gtijs ∗ pijs ) ∗ ( 1 + γ α ijs ) ∑ yo = 1 H ∑ j = 1 W ( gtijs + pijs − gtijs ∗ pijs ) ∗ ( 1 + γ α ijs ) L_{\text {wiou }}^s=1- \frac{\sum_{i=1}^H \sum_{j=1}^W\left(g t_{ij}^s * p_{ij}^s\right) *\ izquierda(1+\gamma \ alpha_{ij}^s\right)}{\sum_{i=1}^H \sum_{j=1}^W\left(g t_{ij}^s+p_{ij }^sg t_{ij} ^s * p_{ij}^s\right) *\left(1+\gamma \alpha_{ij}^s\right)}Lquieres s=1yo = 1Hj = 1W( g tyos+pagyosg tyospagyos)( 1+c unyos)yo = 1Hj = 1W( g tyospagyos)( 1+c unyos)Lo que necesita especial atención aquí es que ( 1 + γ α ijs ) \left(1+\gamma \alpha_{ij}^s\right) en el numerador y el denominador( 1+c unyos) no se puede reducir directamente, porque no es una constante, sino un valor que cambiará a medida que cambie (i, j). La idea de la fórmula anterior sigue siendo que los píxeles más cercanos al borde contribuyan más al cálculo del IOU.

El código se implementa de la siguiente manera:

def structure_loss(pred, mask):
    weit = 1 + 5*torch.abs(F.avg_pool2d(mask, kernel_size=31, stride=1, padding=15) - mask)
    wbce = F.binary_cross_entropy_with_logits(pred, mask, reduce='none')
    wbce = (weit*wbce).sum(dim=(2, 3)) / weit.sum(dim=(2, 3))

    pred = torch.sigmoid(pred)
    inter = ((pred * mask)*weit).sum(dim=(2, 3))
    union = ((pred + mask)*weit).sum(dim=(2, 3))
    wiou = 1 - (inter + 1)/(union - inter+1)
    return (wbce + wiou).mean()

Cabe señalar que la entrada pred aquí (es decir, la salida de la red) no necesita ser procesada por sigmoid por adelantado, porque sigmoid ya se ha realizado en la función. Al usarlo, debe evitar la situación de repetir el sigmoide dos veces.

La función de pérdida involucra dos hiperparámetros, uno es α ij \alpha_{ij}ayoEl valor ponderado de γ \gammac.c \gammaγ es 0, lo que significa que no hay ponderación;γ \gammaCuanto mayor sea γ , más depende la red deα ij \alpha_{ij}ayoPara ponderar diferentes posiciones, la diferencia de peso de las diferentes posiciones de píxeles será mayor. En el código γ = 5 \gamma=5C=5 _

El otro es Aij A_{ij}AyoLa definición específica de "píxeles circundantes" en el código usa F.avg_pool2d para la agrupación promedio.

Supongo que te gusta

Origin blog.csdn.net/qq_40714949/article/details/128998685
Recomendado
Clasificación