from net.yolov3 import Yolo
from PIL import Image, ImageDraw
import numpy as np
import torch, copy, time
def sigmoid(x):
temporary = 1 + torch.exp(-x)
return 1.0 / temporary
def get_boxes(output, anchors):
h = output.size(2)
w = output.size(3)
output = output.view(3, 85, h, w).permute(0,2,3,1)
tc = torch.sigmoid(output[..., 4])
cl = torch.sigmoid(output[..., 5:])
clv, cli = torch.max(cl,-1)
mask = tc * clv > 0.9
cli = cli[mask].unsqueeze(-1)
tx = torch.sigmoid(output[..., 0][mask])
ty = torch.sigmoid(output[..., 1][mask])
tw = torch.exp(output[..., 2][mask])
th = torch.exp(output[..., 3][mask])
FloatTensor = torch.cuda.FloatTensor if tx.is_cuda else torch.FloatTensor
grid_x, grid_y = torch.meshgrid(torch.linspace(0,w-1,w), torch.linspace(0,h-1,h))
grid_x = grid_x.repeat(3,1,1)[mask].type(FloatTensor)
grid_y = grid_y.repeat(3,1,1)[mask].type(FloatTensor)
tx = ((tx+grid_y) / w).unsqueeze(-1)
ty = ((ty+grid_x) / h).unsqueeze(-1)
aw = torch.Tensor(anchors[0::2]).view(3,1).repeat(1,h*w).view(3,h,w)[mask].type(FloatTensor)
ah = torch.Tensor(anchors[1::2]).view(3,1