def __init__(self, classes=65):
        super(SuperEvent, self).__init__()

        self.classes = classes
        self.dropout = nn.Dropout(0.7)
        self.add_module('d', self.dropout)

        self.super_event = tsf.TSF(3)
        self.add_module('sup', self.super_event)
        self.super_event2 = tsf.TSF(3)
        self.add_module('sup2', self.super_event2)


        # we have 2xD*3
        # we want to learn a per-class weighting
        # to take 2xD*3 to D*3
        self.cls_wts = nn.Parameter(torch.Tensor(classes))
        
        self.sup_mat = nn.Parameter(torch.Tensor(1, classes, 1024))
        stdv = 1./np.sqrt(1024+1024)
        self.sup_mat.data.uniform_(-stdv, stdv)

        self.per_frame = nn.Conv3d(1024, classes, (1,1,1))
        self.per_frame.weight.data.uniform_(-stdv, stdv)
        self.per_frame.bias.data.uniform_(-stdv, stdv)
        self.add_module('pf', self.per_frame)
예제 #2
0
    def __init__(self, inp, classes=8):
        super(Hierarchy, self).__init__()

        self.classes = classes
        self.dropout = nn.Dropout()
        self.add_module('d', self.dropout)

        self.super_event = tsf.TSF(3)
        self.add_module('sup', self.super_event)
        self.super_event2 = tsf.TSF(3)
        self.add_module('sup2', self.super_event2)

        # we have 2xD
        # we want to learn a per-class weighting
        # to take 2xD to D
        self.cls_wts = nn.Parameter(torch.Tensor(classes))

        self.sup_mat = nn.Parameter(torch.Tensor(1, classes, inp))
        stdv = 1. / np.sqrt(inp + inp)
        self.sup_mat.data.uniform_(-stdv, stdv)

        self.sub_event1 = TGM(inp, 16, 5, c_in=1, c_out=8, soft=False)
        self.sub_event2 = TGM(inp, 16, 5, c_in=8, c_out=8, soft=False)
        self.sub_event3 = TGM(inp, 16, 5, c_in=8, c_out=8, soft=False)

        self.h = nn.Conv1d(inp + 1 * inp + classes, 512, 1)
        self.classify = nn.Conv1d(512, classes, 1)
        self.inp = inp