El producto de un tensor de tipo numérico y un tensor de tipo booleano

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. 

Supongo que te gusta

Origin blog.csdn.net/weixin_48747603/article/details/127335867
Recomendado
Clasificación