Recientemente, estaba estudiando el cálculo de la función de pérdida en el código fuente de yolov5. En la función build_targets, hay un fragmento de código sobre la eliminación de la caja gt con una relación de aspecto excesivamente grande con el ancla especificada. El código es el siguiente:
if nt:
# Matches
r = t[..., 4:6] / anchors[:, None] # wh ratio
j = torch.max(r, 1 / r).max(2)[0] < self.hyp['anchor_t'] # compare
t = t[j] # filter 过滤
Entre ellos, la oración t=t[j] no está muy clara, pero se puede ver en el código que j es un tensor compuesto de Verdadero y Falso, así que escribí algunas líneas de código para verificar el resultado. (De hecho, puede comprender la función de esta línea de código al observar la forma de t en la depuración)
import torch
j = torch.tensor([True, True, False, False])
t = torch.tensor([1, 2, 3, 4])
t = t[j]
print(t)
El resultado de la operación es el siguiente:
Se puede ver que j juega un papel de filtrado y se utiliza para filtrar el valor efectivo de t.