def __init__(self, use_cuda=False, threshold=0.001, patch_size=19): super(AffineShapeEstimator, self).__init__() self.threshold = threshold self.use_cuda = use_cuda self.PS = patch_size self.gx = nn.Conv2d(1, 1, kernel_size=(1, 3), padding=(0, 1), bias=False) self.gx.weight.data = torch.from_numpy( np.array([[[[0.5, 0, -0.5]]]], dtype=np.float32)) self.gy = nn.Conv2d(1, 1, kernel_size=(3, 1), padding=(1, 0), bias=False) self.gy.weight.data = torch.from_numpy( np.array([[[[0.5], [0], [-0.5]]]], dtype=np.float32)) self.gk = torch.from_numpy( CircularGaussKernel(kernlen=patch_size, circ_zeros=True).astype(np.float32)) self.gk = Variable(self.gk, requires_grad=False) if use_cuda: self.gk = self.gk.cuda() return
def extract_patches(self, scale_pyramid, LAFs, pyr_idxs, level_idxs, PS = 19, gauss_mask = False, use_cuda = False): patches_list = [] if gauss_mask: mask = torch.from_numpy(CircularGaussKernel(kernlen = PS, circ_zeros = False).astype(np.float32)) mask = Variable(mask) if use_cuda: mask = mask.cuda() for i in range(len(scale_pyramid)): cur_idxs = pyr_idxs == i #torch.nonzero((pyr_idxs == i).data) for j in range(1, len(level_idxs) - 1): cur_lvl_idxs = torch.nonzero(((level_idxs == j) * cur_idxs).data) if len(cur_lvl_idxs.size()) == 0: continue curr_aff = LAFs[cur_lvl_idxs.view(-1), :,:] grid = torch.nn.functional.affine_grid(curr_aff, torch.Size((cur_lvl_idxs.size(0), 1, PS, PS))) patches_list.append(torch.nn.functional.grid_sample(scale_pyramid[i][j].expand(curr_aff.size(0), scale_pyramid[i][0].size(1), scale_pyramid[i][0].size(2), scale_pyramid[i][0].size(3)), grid)) patches = torch.cat(patches_list, dim = 0) if gauss_mask: patches = patches * mask.unsqueeze(0).unsqueeze(0).expand(patches.size(0),1,PS,PS) return patches
def __init__(self, mrSize=3.0, patch_size=None): super(OrientationDetector, self).__init__() if patch_size is None: patch_size = 32 self.PS = patch_size self.bin_weight_kernel_size, self.bin_weight_stride = self.get_bin_weight_kernel_size_and_stride( self.PS, 1) self.mrSize = mrSize self.num_ang_bins = 36 self.gx = nn.Conv2d(1, 1, kernel_size=(1, 3), bias=False) self.gx.weight.data = torch.from_numpy( np.array([[[[0.5, 0, -0.5]]]], dtype=np.float32)) self.gy = nn.Conv2d(1, 1, kernel_size=(3, 1), bias=False) self.gy.weight.data = torch.from_numpy( np.array([[[[0.5], [0], [-0.5]]]], dtype=np.float32)) self.angular_smooth = nn.Conv1d(1, 1, kernel_size=3, padding=1, bias=False) self.angular_smooth.weight.data = torch.from_numpy( np.array([[[0.33, 0.34, 0.33]]], dtype=np.float32)) self.gk = 10. * torch.from_numpy( CircularGaussKernel(kernlen=self.PS).astype(np.float32)) self.gk = Variable(self.gk, requires_grad=False) return
def __init__(self, threshold = 0.001, patch_size = 19): super(AffineShapeEstimator, self).__init__() self.threshold = threshold; self.PS = patch_size self.gx = nn.Conv2d(1, 1, kernel_size=(1,3), bias = False) self.gx.weight.data = torch.from_numpy(np.array([[[[-1, 0, 1]]]], dtype=np.float32)) self.gy = nn.Conv2d(1, 1, kernel_size=(3,1), bias = False) self.gy.weight.data = torch.from_numpy(np.array([[[[-1], [0], [1]]]], dtype=np.float32)) self.gk = torch.from_numpy(CircularGaussKernel(kernlen = self.PS, sigma = (self.PS / 2) /3.0).astype(np.float32)) self.gk = Variable(self.gk, requires_grad=False) return
def __init__(self, PS=16): super(BaumResNetEll, self).__init__() self.features = nn.Sequential( nn.Conv2d(1, 16, kernel_size=3, padding=1, bias=False), nn.BatchNorm2d(16, affine=False), nn.ReLU(), nn.Conv2d(16, 32, kernel_size=3, stride=2, padding=1, bias=False), nn.BatchNorm2d(32, affine=False), nn.ReLU(), nn.Conv2d(32, 32, kernel_size=3, stride=1, padding=1, bias=False), nn.BatchNorm2d(32, affine=False), nn.ReLU(), nn.Conv2d(32, 64, kernel_size=3, stride=2, padding=1, bias=False), nn.BatchNorm2d(64, affine=False), nn.ReLU(), nn.Dropout(0.1), nn.Conv2d(64, 3, kernel_size=4, bias=True), nn.Tanh()) self.PS = PS self.features.apply(weights_init) self.gx = nn.Conv2d(1, 1, kernel_size=(1, 3), bias=False) self.gx.weight.data = torch.from_numpy( np.array([[[[0.5, 0, -0.5]]]], dtype=np.float32)) self.gy = nn.Conv2d(1, 1, kernel_size=(3, 1), bias=False) self.gy.weight.data = torch.from_numpy( np.array([[[[0.5], [0], [-0.5]]]], dtype=np.float32)) self.gxx = nn.Conv2d(1, 1, kernel_size=(1, 3), bias=False) self.gxx.weight.data = torch.from_numpy( np.array([[[[1.0, -2.0, 1.0]]]], dtype=np.float32)) self.gyy = nn.Conv2d(1, 1, kernel_size=(3, 1), bias=False) self.gyy.weight.data = torch.from_numpy( np.array([[[[1.0], [-2.0], [1.0]]]], dtype=np.float32)) self.gk = torch.from_numpy( CircularGaussKernel(kernlen=PS, circ_zeros=False).astype(np.float32)) self.gk = Variable(self.gk, requires_grad=False) return
def calculate_weights(self, sigma): kernel = CircularGaussKernel(sigma=sigma, circ_zeros=False) h, w = kernel.shape halfSize = float(h) / 2. self.pad = int(np.floor(halfSize)) return torch.from_numpy(kernel.astype(np.float32)).view(1, 1, h, w)