Python torch.atan2() Examples
The following are 30
code examples of torch.atan2().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
torch
, or try the search function
.
Example #1
Source File: box.py From retinanet-examples with BSD 3-Clause "New" or "Revised" License | 6 votes |
def delta2box_rotated(deltas, anchors, size, stride): 'Convert deltas from anchors to boxes' anchors_wh = anchors[:, 2:4] - anchors[:, :2] + 1 ctr = anchors[:, :2] + 0.5 * anchors_wh pred_ctr = deltas[:, :2] * anchors_wh + ctr pred_wh = torch.exp(deltas[:, 2:4]) * anchors_wh pred_sin = deltas[:, 4] pred_cos = deltas[:, 5] m = torch.zeros([2], device=deltas.device, dtype=deltas.dtype) M = (torch.tensor([size], device=deltas.device, dtype=deltas.dtype) * stride - 1) clamp = lambda t: torch.max(m, torch.min(t, M)) return torch.cat([ clamp(pred_ctr - 0.5 * pred_wh), clamp(pred_ctr + 0.5 * pred_wh - 1), torch.atan2(pred_sin, pred_cos)[:, None] ], 1)
Example #2
Source File: common.py From ggcnn with BSD 3-Clause "New" or "Revised" License | 6 votes |
def post_process_output(q_img, cos_img, sin_img, width_img): """ Post-process the raw output of the GG-CNN, convert to numpy arrays, apply filtering. :param q_img: Q output of GG-CNN (as torch Tensors) :param cos_img: cos output of GG-CNN :param sin_img: sin output of GG-CNN :param width_img: Width output of GG-CNN :return: Filtered Q output, Filtered Angle output, Filtered Width output """ q_img = q_img.cpu().numpy().squeeze() ang_img = (torch.atan2(sin_img, cos_img) / 2.0).cpu().numpy().squeeze() width_img = width_img.cpu().numpy().squeeze() * 150.0 q_img = gaussian(q_img, 2.0, preserve_range=True) ang_img = gaussian(ang_img, 2.0, preserve_range=True) width_img = gaussian(width_img, 1.0, preserve_range=True) return q_img, ang_img, width_img
Example #3
Source File: modules.py From TTS-Cube with Apache License 2.0 | 6 votes |
def forward(self, input_data): num_batches, _, num_samples = input_data.size() self.num_samples = num_samples forward_transform = F.conv1d(input_data, self.forward_basis, stride=self.hop_length, padding=self.filter_length) cutoff = int((self.filter_length / 2) + 1) real_part = forward_transform[:, :cutoff, :] imag_part = forward_transform[:, cutoff:, :] magnitude = torch.sqrt(real_part**2 + imag_part**2) phase = torch.autograd.Variable(torch.atan2(imag_part.data, real_part.data)) return magnitude, phase
Example #4
Source File: graph_model.py From VQA2.0-Recent-Approachs-2018.pytorch with MIT License | 6 votes |
def forward(self, b): ''' Input: b: bounding box [batch, num_obj, 4] (x1,y1,x2,y2) Output: pseudo_coord [batch, num_obj, num_obj, 2] (rho, theta) ''' batch_size, num_obj, _ = b.shape centers = (b[:,:,2:] + b[:,:,:2]) * 0.5 relative_coord = centers.view(batch_size, num_obj, 1, 2) - \ centers.view(batch_size, 1, num_obj, 2) # broadcast: [batch, num_obj, num_obj, 2] rho = torch.sqrt(relative_coord[:,:,:,0]**2 + relative_coord[:,:,:,1]**2) theta = torch.atan2(relative_coord[:,:,:,0], relative_coord[:,:,:,1]) new_coord = torch.cat((rho.unsqueeze(-1), theta.unsqueeze(-1)), dim=-1) return new_coord
Example #5
Source File: data_utils.py From LearnTrajDep with MIT License | 6 votes |
def rotmat2quat_torch(R): """ Converts a rotation matrix to quaternion batch pytorch version ported from the corresponding numpy method above :param R: N * 3 * 3 :return: N * 4 """ rotdiff = R - R.transpose(1, 2) r = torch.zeros_like(rotdiff[:, 0]) r[:, 0] = -rotdiff[:, 1, 2] r[:, 1] = rotdiff[:, 0, 2] r[:, 2] = -rotdiff[:, 0, 1] r_norm = torch.norm(r, dim=1) sintheta = r_norm / 2 r0 = torch.div(r, r_norm.unsqueeze(1).repeat(1, 3) + 0.00000001) t1 = R[:, 0, 0] t2 = R[:, 1, 1] t3 = R[:, 2, 2] costheta = (t1 + t2 + t3 - 1) / 2 theta = torch.atan2(sintheta, costheta) q = Variable(torch.zeros(R.shape[0], 4)).float().cuda() q[:, 0] = torch.cos(theta / 2) q[:, 1:] = torch.mul(r0, torch.sin(theta / 2).unsqueeze(1).repeat(1, 3)) return q
Example #6
Source File: HandCraftedModules.py From affnet with MIT License | 6 votes |
def forward(self, x, return_rot_matrix = False): gx = self.gx(F.pad(x, (1,1,0, 0), 'replicate')) gy = self.gy(F.pad(x, (0,0, 1,1), 'replicate')) mag = torch.sqrt(gx * gx + gy * gy + 1e-10) if x.is_cuda: self.gk = self.gk.cuda() mag = mag * self.gk.unsqueeze(0).unsqueeze(0).expand_as(mag) ori = torch.atan2(gy,gx) o_big = float(self.num_ang_bins) *(ori + 1.0 * math.pi )/ (2.0 * math.pi) bo0_big = torch.floor(o_big) wo1_big = o_big - bo0_big bo0_big = bo0_big % self.num_ang_bins bo1_big = (bo0_big + 1) % self.num_ang_bins wo0_big = (1.0 - wo1_big) * mag wo1_big = wo1_big * mag ang_bins = [] for i in range(0, self.num_ang_bins): ang_bins.append(F.adaptive_avg_pool2d((bo0_big == i).float() * wo0_big, (1,1))) ang_bins = torch.cat(ang_bins,1).view(-1,1,self.num_ang_bins) ang_bins = self.angular_smooth(ang_bins) values, indices = ang_bins.view(-1,self.num_ang_bins).max(1) angle = -((2. * float(np.pi) * indices.float() / float(self.num_ang_bins)) - float(math.pi)) if return_rot_matrix: return self.get_rotation_matrix(angle) return angle
Example #7
Source File: HandCraftedModules.py From affnet with MIT License | 6 votes |
def forward(self, x, return_rot_matrix = False): gx = self.gx(F.pad(x, (1,1,0, 0), 'replicate')) gy = self.gy(F.pad(x, (0,0, 1,1), 'replicate')) mag = torch.sqrt(gx * gx + gy * gy + 1e-10) if x.is_cuda: self.gk = self.gk.cuda() mag = mag * self.gk.unsqueeze(0).unsqueeze(0).expand_as(mag) ori = torch.atan2(gy,gx) o_big = float(self.num_ang_bins) *(ori + 1.0 * math.pi )/ (2.0 * math.pi) bo0_big = torch.floor(o_big) wo1_big = o_big - bo0_big bo0_big = bo0_big % self.num_ang_bins bo1_big = (bo0_big + 1) % self.num_ang_bins wo0_big = (1.0 - wo1_big) * mag wo1_big = wo1_big * mag ang_bins = [] for i in range(0, self.num_ang_bins): ang_bins.append(F.adaptive_avg_pool2d((bo0_big == i).float() * wo0_big, (1,1))) ang_bins = torch.cat(ang_bins,1).view(-1,1,self.num_ang_bins) ang_bins = self.angular_smooth(ang_bins) values, indices = ang_bins.view(-1,self.num_ang_bins).max(1) angle = -((2. * float(np.pi) * indices.float() / float(self.num_ang_bins)) - float(math.pi)) if return_rot_matrix: return self.get_rotation_matrix(angle) return angle
Example #8
Source File: math.py From torchkbnufft with MIT License | 6 votes |
def complex_sign(t, dim=0): """Complex sign function value, complex dimension is dim. Args: t (tensor): A tensor where dimension dim is the complex dimension. dim (int, default=0): An integer indicating the complex dimension. Returns: tensor: The complex sign of t. """ assert t.shape[dim] == 2 signt = torch.atan2(t.select(dim, 1), t.select(dim, 0)) signt = imag_exp(signt, dim=dim) return signt
Example #9
Source File: dataset.py From pytorch-asr with GNU General Public License v3.0 | 6 votes |
def __call__(self, wav): with torch.no_grad(): # STFT data = torch.stft(wav, n_fft=self.nfft, hop_length=self.window_shift, win_length=self.window_size, window=self.window) data /= self.window.pow(2).sum().sqrt_() #mag = data.pow(2).sum(-1).log1p_() #ang = torch.atan2(data[:, :, 1], data[:, :, 0]) ## {mag, phase} x n_freq_bin x n_frame #data = torch.cat([mag.unsqueeze_(0), ang.unsqueeze_(0)], dim=0) ## FxTx2 -> 2xFxT data = data.transpose(1, 2).transpose(0, 1) return data # transformer: frame splitter
Example #10
Source File: utils_torch_filter.py From ai-imu-dr with MIT License | 6 votes |
def to_rpy(Rot): """Convert a rotation matrix to RPY Euler angles.""" pitch = torch.atan2(-Rot[2, 0], torch.sqrt(Rot[0, 0]**2 + Rot[1, 0]**2)) if isclose(pitch, np.pi / 2.): yaw = pitch.new_zeros(1) roll = torch.atan2(Rot[0, 1], Rot[1, 1]) elif isclose(pitch, -np.pi / 2.): yaw = pitch.new_zeros(1) roll = -torch.atan2(Rot[0, 1], Rot[1, 1]) else: sec_pitch = 1. / pitch.cos() yaw = torch.atan2(Rot[1, 0] * sec_pitch, Rot[0, 0] * sec_pitch) roll = torch.atan2(Rot[2, 1] * sec_pitch, Rot[2, 2] * sec_pitch) return roll, pitch, yaw
Example #11
Source File: tools.py From RotationContinuity with MIT License | 6 votes |
def compute_euler_angles_from_rotation_matrices(rotation_matrices): batch=rotation_matrices.shape[0] R=rotation_matrices sy = torch.sqrt(R[:,0,0]*R[:,0,0]+R[:,1,0]*R[:,1,0]) singular= sy<1e-6 singular=singular.float() x=torch.atan2(R[:,2,1], R[:,2,2]) y=torch.atan2(-R[:,2,0], sy) z=torch.atan2(R[:,1,0],R[:,0,0]) xs=torch.atan2(-R[:,1,2], R[:,1,1]) ys=torch.atan2(-R[:,2,0], sy) zs=R[:,1,0]*0 out_euler=torch.autograd.Variable(torch.zeros(batch,3).cuda()) out_euler[:,0]=x*(1-singular)+xs*singular out_euler[:,1]=y*(1-singular)+ys*singular out_euler[:,2]=z*(1-singular)+zs*singular return out_euler #input batch*4 #output batch*4
Example #12
Source File: tools.py From RotationContinuity with MIT License | 6 votes |
def compute_euler_angles_from_rotation_matrices(rotation_matrices): batch=rotation_matrices.shape[0] R=rotation_matrices sy = torch.sqrt(R[:,0,0]*R[:,0,0]+R[:,1,0]*R[:,1,0]) singular= sy<1e-6 singular=singular.float() x=torch.atan2(R[:,2,1], R[:,2,2]) y=torch.atan2(-R[:,2,0], sy) z=torch.atan2(R[:,1,0],R[:,0,0]) xs=torch.atan2(-R[:,1,2], R[:,1,1]) ys=torch.atan2(-R[:,2,0], sy) zs=R[:,1,0]*0 out_euler=torch.autograd.Variable(torch.zeros(batch,3).cuda()) out_euler[:,0]=x*(1-singular)+xs*singular out_euler[:,1]=y*(1-singular)+ys*singular out_euler[:,2]=z*(1-singular)+zs*singular return out_euler #input batch*4 #output batch*4
Example #13
Source File: polar.py From pytorch_geometric with MIT License | 6 votes |
def __call__(self, data): (row, col), pos, pseudo = data.edge_index, data.pos, data.edge_attr assert pos.dim() == 2 and pos.size(1) == 2 cart = pos[col] - pos[row] rho = torch.norm(cart, p=2, dim=-1).view(-1, 1) theta = torch.atan2(cart[..., 1], cart[..., 0]).view(-1, 1) theta = theta + (theta < 0).type_as(theta) * (2 * PI) if self.norm: rho = rho / (rho.max() if self.max is None else self.max) theta = theta / (2 * PI) polar = torch.cat([rho, theta], dim=-1) if pseudo is not None and self.cat: pseudo = pseudo.view(-1, 1) if pseudo.dim() == 1 else pseudo data.edge_attr = torch.cat([pseudo, polar.type_as(pos)], dim=-1) else: data.edge_attr = polar return data
Example #14
Source File: test_trigonometrics.py From heat with MIT License | 5 votes |
def test_arctan2(self): float32_y = torch.randn(30, device=self.device.torch_device) float32_x = torch.randn(30, device=self.device.torch_device) float32_comparison = torch.atan2(float32_y, float32_x) float32_arctan2 = ht.arctan2(ht.array(float32_y), ht.array(float32_x)) self.assertIsInstance(float32_arctan2, ht.DNDarray) self.assertEqual(float32_arctan2.dtype, ht.float32) self.assertTrue(torch.allclose(float32_arctan2._DNDarray__array, float32_comparison)) float64_y = torch.randn(30, dtype=torch.float64, device=self.device.torch_device) float64_x = torch.randn(30, dtype=torch.float64, device=self.device.torch_device) float64_comparison = torch.atan2(float64_y, float64_x) float64_arctan2 = ht.arctan2(ht.array(float64_y), ht.array(float64_x)) self.assertIsInstance(float64_arctan2, ht.DNDarray) self.assertEqual(float64_arctan2.dtype, ht.float64) self.assertTrue(torch.allclose(float64_arctan2._DNDarray__array, float64_comparison)) # Rare Special Case with integers int32_x = ht.array([-1, +1, +1, -1]) int32_y = ht.array([-1, -1, +1, +1]) int32_comparison = ht.array([-135.0, -45.0, 45.0, 135.0], dtype=ht.float64) int32_arctan2 = ht.arctan2(int32_y, int32_x) * 180 / ht.pi self.assertIsInstance(int32_arctan2, ht.DNDarray) self.assertEqual(int32_arctan2.dtype, ht.float64) self.assertTrue(ht.allclose(int32_arctan2, int32_comparison)) int16_x = ht.array([-1, +1, +1, -1], dtype=ht.int16) int16_y = ht.array([-1, -1, +1, +1], dtype=ht.int16) int16_comparison = ht.array([-135.0, -45.0, 45.0, 135.0], dtype=ht.float32) int16_arctan2 = ht.arctan2(int16_y, int16_x) * 180.0 / ht.pi self.assertIsInstance(int16_arctan2, ht.DNDarray) self.assertEqual(int16_arctan2.dtype, ht.float32) self.assertTrue(ht.allclose(int16_arctan2, int16_comparison))
Example #15
Source File: box_torch_ops.py From second.pytorch with MIT License | 5 votes |
def bev_box_decode(box_encodings, anchors, encode_angle_to_vector=False, smooth_dim=False): """box decode for VoxelNet in lidar Args: boxes ([N, 7] Tensor): normal boxes: x, y, z, w, l, h, r anchors ([N, 7] Tensor): anchors """ xa, ya, wa, la, ra = torch.split(anchors, 1, dim=-1) if encode_angle_to_vector: xt, yt, wt, lt, rtx, rty = torch.split( box_encodings, 1, dim=-1) else: xt, yt, wt, lt, rt = torch.split(box_encodings, 1, dim=-1) # xt, yt, zt, wt, lt, ht, rt = torch.split(box_encodings, 1, dim=-1) diagonal = torch.sqrt(la**2 + wa**2) xg = xt * diagonal + xa yg = yt * diagonal + ya if smooth_dim: lg = (lt + 1) * la wg = (wt + 1) * wa else: lg = torch.exp(lt) * la wg = torch.exp(wt) * wa if encode_angle_to_vector: rax = torch.cos(ra) ray = torch.sin(ra) rgx = rtx + rax rgy = rty + ray rg = torch.atan2(rgy, rgx) else: rg = rt + ra return torch.cat([xg, yg, wg, lg, rg], dim=-1)
Example #16
Source File: pytorch_sift.py From affnet with MIT License | 5 votes |
def forward(self, x): gx = self.gx(F.pad(x, (1,1,0, 0), 'replicate')) gy = self.gy(F.pad(x, (0,0, 1,1), 'replicate')) mag = torch.sqrt(gx **2 + gy **2 + 1e-10) ori = torch.atan2(gy,gx + 1e-8) if x.is_cuda: self.gk = self.gk.cuda() else: self.gk = self.gk.cpu() mag = mag * self.gk.expand_as(mag) o_big = (ori +2.0 * math.pi )/ (2.0 * math.pi) * float(self.num_ang_bins) bo0_big = torch.floor(o_big) wo1_big = o_big - bo0_big bo0_big = bo0_big % self.num_ang_bins bo1_big = (bo0_big + 1) % self.num_ang_bins wo0_big = (1.0 - wo1_big) * mag wo1_big = wo1_big * mag ang_bins = [] for i in range(0, self.num_ang_bins): ang_bins.append(self.pk((bo0_big == i).float() * wo0_big + (bo1_big == i).float() * wo1_big)) ang_bins = torch.cat(ang_bins,1) ang_bins = ang_bins.view(ang_bins.size(0), -1) ang_bins = L2Norm()(ang_bins) ang_bins = torch.clamp(ang_bins, 0.,float(self.clipval)) ang_bins = L2Norm()(ang_bins) return ang_bins
Example #17
Source File: trigonometrics.py From heat with MIT License | 5 votes |
def arctan2(x1, x2): """ Element-wise arc tangent of ``x1/x2`` choosing the quadrant correctly. Returns a new ``DNDarray`` with the signed angles in radians between vector (``x2``,``x1``) and vector (1,0) Parameters ---------- x1 : DNDarray y-coordinates x2 : DNDarray x-coordinates. If ``x1.shape!=x2.shape``, they must be broadcastable to a common shape (which becomes the shape of the output). Returns ------- DNDarray Examples -------- >>> x = ht.array([-1, +1, +1, -1]) >>> y = ht.array([-1, -1, +1, +1]) >>> ht.arctan2(y, x) * 180 / ht.pi tensor([-135.0000, -45.0000, 45.0000, 135.0000], dtype=torch.float64) """ # Cast integer to float because torch.atan2() only supports integer types on PyTorch 1.5.0. x1 = x1.astype(types.promote_types(x1.dtype, types.float)) x2 = x2.astype(types.promote_types(x2.dtype, types.float)) return binary_op(torch.atan2, x1, x2)
Example #18
Source File: encoder.py From oft with MIT License | 5 votes |
def _decode_angles(self, angle_offsets, peaks): cos, sin = torch.unbind(angle_offsets, 1) return torch.atan2(sin, cos)[peaks]
Example #19
Source File: architectures.py From affnet with MIT License | 5 votes |
def forward(self, input, return_A_matrix = False): x = self.features(self.input_norm(input)).view(-1,5) angle = torch.atan2(x[:,3], x[:,4]+1e-8); rot = get_rotation_matrix(angle) return torch.bmm(rot, torch.cat([torch.cat([x[:,0:1].view(-1,1,1), x[:,1:2].view(x.size(0),1,1).contiguous()], dim = 2), x[:,1:3].view(-1,1,2).contiguous()], dim = 1))
Example #20
Source File: stft.py From TTS-Cube with Apache License 2.0 | 5 votes |
def transform(self, input_data): num_batches = input_data.size(0) num_samples = input_data.size(1) self.num_samples = num_samples # similar to librosa, reflect-pad the input input_data = input_data.view(num_batches, 1, num_samples) input_data = F.pad( input_data.unsqueeze(1), (int(self.filter_length / 2), int(self.filter_length / 2), 0, 0), mode='reflect') input_data = input_data.squeeze(1) forward_transform = F.conv1d( input_data, Variable(self.forward_basis, requires_grad=False), stride=self.hop_length, padding=0) cutoff = int((self.filter_length / 2) + 1) real_part = forward_transform[:, :cutoff, :] imag_part = forward_transform[:, cutoff:, :] magnitude = torch.sqrt(real_part**2 + imag_part**2) phase = torch.autograd.Variable( torch.atan2(imag_part.data, real_part.data)) return magnitude, phase
Example #21
Source File: architectures.py From affnet with MIT License | 5 votes |
def forward(self, input, return_A_matrix = False): x = self.features(self.input_norm(input)).view(-1,3) angle = torch.atan2(x[:,1], x[:,2]+1e-8); rot = get_rotation_matrix(angle) tilt = torch.exp(1.8 * F.tanh(x[:,0])) tilt_matrix = torch.eye(2).unsqueeze(0).repeat(input.size(0),1,1) if x.is_cuda: tilt_matrix = tilt_matrix.cuda() tilt_matrix[:,0,0] = torch.sqrt(tilt) tilt_matrix[:,1,1] = 1.0 / torch.sqrt(tilt) return rectifyAffineTransformationUpIsUp(torch.bmm(rot, tilt_matrix)).contiguous()
Example #22
Source File: architectures.py From affnet with MIT License | 5 votes |
def forward(self, input, return_A_matrix = False): x = self.features(self.input_norm(input)).view(-1,5) rot = get_rotation_matrix(torch.atan2(x[:,3], x[:,4]+1e-8)) if input.is_cuda: return torch.bmm(rot, torch.cat([torch.cat([x[:,0:1].view(-1,1,1), torch.zeros(x.size(0),1,1).cuda()], dim = 2), x[:,1:3].view(-1,1,2).contiguous()], dim = 1)) else: return torch.bmm(rot, torch.cat([torch.cat([x[:,0:1].view(-1,1,1), torch.zeros(x.size(0),1,1)], dim = 2), x[:,1:3].view(-1,1,2).contiguous()], dim = 1))
Example #23
Source File: architectures.py From affnet with MIT License | 5 votes |
def forward(self, input, return_A_matrix = False): x = self.features(self.input_norm(input)).view(-1,5) angle = torch.atan2(x[:,3], x[:,4]+1e-8); rot = get_rotation_matrix(angle) return torch.bmm(rot, torch.cat([torch.cat([x[:,0:1].view(-1,1,1), x[:,1:2].view(x.size(0),1,1).contiguous()], dim = 2), x[:,1:3].view(-1,1,2).contiguous()], dim = 1))
Example #24
Source File: architectures.py From affnet with MIT License | 5 votes |
def forward(self, input, return_rot_matrix = False): xy = self.features(self.input_norm(input)) angle = torch.atan2(xy[:,0] + 1e-8, xy[:,1]+1e-8); if return_rot_matrix: return get_rotation_matrix(-angle) return angle
Example #25
Source File: architectures.py From affnet with MIT License | 5 votes |
def forward(self, input, return_rot_matrix = True): xy = self.features(self.input_norm(input)).view(-1,2) angle = torch.atan2(xy[:,0] + 1e-8, xy[:,1]+1e-8); if return_rot_matrix: return get_rotation_matrix(angle) return angle
Example #26
Source File: architectures.py From affnet with MIT License | 5 votes |
def forward(self, input, return_rot_matrix = False): xy = self.features(self.input_norm(input)) angle = torch.atan2(xy[:,0] + 1e-8, xy[:,1]+1e-8); if return_rot_matrix: return get_rotation_matrix(-angle) return angle
Example #27
Source File: architectures.py From affnet with MIT License | 5 votes |
def forward(self, input, return_rot_matrix = True): xy = self.features(self.input_norm(input)).view(-1,2) angle = torch.atan2(xy[:,0] + 1e-8, xy[:,1]+1e-8); if return_rot_matrix: return get_rotation_matrix(angle) return angle
Example #28
Source File: pytorch_sift.py From affnet with MIT License | 5 votes |
def forward(self, x): gx = self.gx(F.pad(x, (1,1,0, 0), 'replicate')) gy = self.gy(F.pad(x, (0,0, 1,1), 'replicate')) mag = torch.sqrt(gx **2 + gy **2 + 1e-10) ori = torch.atan2(gy,gx + 1e-8) if x.is_cuda: self.gk = self.gk.cuda() else: self.gk = self.gk.cpu() mag = mag * self.gk.expand_as(mag) o_big = (ori +2.0 * math.pi )/ (2.0 * math.pi) * float(self.num_ang_bins) bo0_big = torch.floor(o_big) wo1_big = o_big - bo0_big bo0_big = bo0_big % self.num_ang_bins bo1_big = (bo0_big + 1) % self.num_ang_bins wo0_big = (1.0 - wo1_big) * mag wo1_big = wo1_big * mag ang_bins = [] for i in range(0, self.num_ang_bins): ang_bins.append(self.pk((bo0_big == i).float() * wo0_big + (bo1_big == i).float() * wo1_big)) ang_bins = torch.cat(ang_bins,1) ang_bins = ang_bins.view(ang_bins.size(0), -1) ang_bins = L2Norm()(ang_bins) ang_bins = torch.clamp(ang_bins, 0.,float(self.clipval)) ang_bins = L2Norm()(ang_bins) return ang_bins
Example #29
Source File: HandCraftedModules.py From affnet with MIT License | 5 votes |
def forward(self, x, return_rot_matrix = False): gx = self.gx(F.pad(x, (1,1,0, 0), 'replicate')) gy = self.gy(F.pad(x, (0,0, 1,1), 'replicate')) mag = torch.sqrt(gx * gx + gy * gy + 1e-10) if x.is_cuda: self.gk = self.gk.cuda() mag = mag * self.gk.unsqueeze(0).unsqueeze(0).expand_as(mag) ori = torch.atan2(gy,gx) o_big = float(self.num_ang_bins) *(ori + 1.0 * math.pi )/ (2.0 * math.pi) bo0_big = torch.floor(o_big) wo1_big = o_big - bo0_big bo0_big = bo0_big % self.num_ang_bins bo1_big = (bo0_big + 1) % self.num_ang_bins wo0_big = (1.0 - wo1_big) * mag wo1_big = wo1_big * mag ang_bins = [] for i in range(0, self.num_ang_bins): ang_bins.append(F.adaptive_avg_pool2d((bo0_big == i).float() * wo0_big, (1,1))) ang_bins = torch.cat(ang_bins,1).view(-1,1,self.num_ang_bins) ang_bins = self.angular_smooth(ang_bins) values, indices = ang_bins.view(-1,self.num_ang_bins).max(1) angle = -((2. * float(np.pi) * indices.float() / float(self.num_ang_bins)) - float(math.pi)) if return_rot_matrix: return self.get_rotation_matrix(angle) return angle
Example #30
Source File: architectures.py From affnet with MIT License | 5 votes |
def forward(self, input, return_A_matrix = False): x = self.features(self.input_norm(input)).view(-1,5) angle = torch.atan2(x[:,3], x[:,4]+1e-8); rot = get_rotation_matrix(angle) return torch.bmm(rot, torch.cat([torch.cat([x[:,0:1].view(-1,1,1), x[:,1:2].view(x.size(0),1,1).contiguous()], dim = 2), x[:,1:3].view(-1,1,2).contiguous()], dim = 1))