예제 #1
0
    def test_rectangular(self):
        t = torch.Tensor([[[
            [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
            [0.0, 0.0, 0.1, 0.0, 0.0, 0.0],
            [0.0, 0.1, 0.6, 0.1, 0.0, 0.0],
            [0.0, 0.0, 0.1, 0.0, 0.0, 0.0],
        ]]])

        actual = average_loss(variance_reg_losses(t, 2.0))
        self.assertEqual(28.88, actual.item())
예제 #2
0
    def test_exact(self):
        t = torch.Tensor([[[
            [0.0, 0.0, 0.0, 0.0],
            [0.0, 0.0, 0.1, 0.0],
            [0.0, 0.1, 0.6, 0.1],
            [0.0, 0.0, 0.1, 0.0],
        ]]])

        actual = average_loss(variance_reg_losses(Variable(t), 2.0))
        self.assertEqual(28.88, actual.data[0])
예제 #3
0
def test_variance_rectangular():
    t = torch.Tensor([[[
        [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
        [0.0, 0.0, 0.1, 0.0, 0.0, 0.0],
        [0.0, 0.1, 0.6, 0.1, 0.0, 0.0],
        [0.0, 0.0, 0.1, 0.0, 0.0, 0.0],
    ]]])

    actual = average_loss(variance_reg_losses(t, 2.0))
    assert actual.item() == 28.88
예제 #4
0
    def test_batch(self):
        t = torch.Tensor([[[
            [0.0, 0.0, 0.0, 0.0],
            [0.0, 0.0, 0.1, 0.0],
            [0.0, 0.1, 0.6, 0.1],
            [0.0, 0.0, 0.1, 0.0],
        ]],
                          [[
                              [0.0, 0.0, 0.0, 0.0],
                              [0.0, 0.2, 0.0, 0.0],
                              [0.1, 0.5, 0.1, 0.0],
                              [0.0, 0.1, 0.0, 0.0],
                          ]]])

        actual = average_loss(variance_reg_losses(t, 2.0))
        self.assertEqual(28.54205, actual.item())
예제 #5
0
def test_variance_batch():
    t = torch.Tensor([[[
        [0.0, 0.0, 0.0, 0.0],
        [0.0, 0.0, 0.1, 0.0],
        [0.0, 0.1, 0.6, 0.1],
        [0.0, 0.0, 0.1, 0.0],
    ]],
                      [[
                          [0.0, 0.0, 0.0, 0.0],
                          [0.0, 0.2, 0.0, 0.0],
                          [0.1, 0.5, 0.1, 0.0],
                          [0.0, 0.1, 0.0, 0.0],
                      ]]])

    actual = average_loss(variance_reg_losses(t, 2.0))
    assert actual.item() == approx(28.54205)
예제 #6
0
 def test_3d(self):
     t = torch.Tensor([[[[
         [0.000035, 0.000002, 0.000000],
         [0.009165, 0.000570, 0.000002],
         [0.147403, 0.009165, 0.000035],
     ],
                         [
                             [0.000142, 0.000009, 0.000000],
                             [0.036755, 0.002285, 0.000009],
                             [0.591145, 0.036755, 0.000142],
                         ],
                         [
                             [0.000035, 0.000002, 0.000000],
                             [0.009165, 0.000570, 0.000002],
                             [0.147403, 0.009165, 0.000035],
                         ]]]])
     actual = average_loss(variance_reg_losses(Variable(t), 0.6))
     self.assertEqual(0.18564102213775013, actual.data[0])
예제 #7
0
    def _calculate_reg_loss(self, target_var, reg, hm_var, hm_sigma):
        # Convert sigma (aka standard deviation) from pixels to normalized units
        sigma = (2.0 * hm_sigma / hm_var.size(-1))

        # Apply a regularisation term relating to the shape of the heatmap.
        if reg == 'var':
            reg_loss = dsntnn.variance_reg_losses(hm_var, sigma, )
        elif reg == 'kl':
            reg_loss = dsntnn.kl_reg_losses(hm_var, target_var, sigma)
        elif reg == 'js':
            reg_loss = dsntnn.js_reg_losses(hm_var, target_var, sigma)
        # elif reg == 'mse':

            # reg_loss = dsntnn.mse_reg_losses(hm_var, target_var, sigma, mask_var)
        else:
            reg_loss = 0

        return reg_loss
예제 #8
0
def test_variance_3d():
    t = torch.Tensor([[[[
        [0.000035, 0.000002, 0.000000],
        [0.009165, 0.000570, 0.000002],
        [0.147403, 0.009165, 0.000035],
    ],
                        [
                            [0.000142, 0.000009, 0.000000],
                            [0.036755, 0.002285, 0.000009],
                            [0.591145, 0.036755, 0.000142],
                        ],
                        [
                            [0.000035, 0.000002, 0.000000],
                            [0.009165, 0.000570, 0.000002],
                            [0.147403, 0.009165, 0.000035],
                        ]]]])
    actual = average_loss(variance_reg_losses(t, 0.6))
    assert actual.item() == approx(0.18564102213775013)
예제 #9
0
import torch
import numpy

from dsntnn import variance_reg_losses

if __name__ == "__main__":
    b, c, h, w = 5, 1, 256, 512
    batch = torch.rand(b, c, h, w)
    heatmaps = torch.nn.Softmax(dim=2)(
        batch.reshape(b, c, -1)
    ).reshape(b, c, h, w)
    var_loss = variance_reg_losses(heatmaps, 1.5)
    print(var_loss)