Exemple #1
0
    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
Exemple #4
0
 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
Exemple #6
0
 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)