Ejemplo n.º 1
0
 def forward_latency(self, size):
     c_in, h_in, w_in = size
     if self.slimmable:
         assert c_in == make_divisible(self.C_in * self.ratio[0])
         c_out = make_divisible(self.C_out * self.ratio[1])
     else:
         assert c_in == self.C_in, "c_in %d, self.C_in%d"%(c_in, self.C_in)
         c_out = self.C_out
     if self.stride == 1:
         h_out = h_in; w_out = w_in
     else:
         h_out = h_in // 2; w_out = w_in // 2
     name = "BasicResidual_H%d_W%d_Cin%d_Cout%d_stride%d_dilation%d"%(h_in, w_in, c_in, c_out, self.stride, self.dilation)
     if name in latency_lookup_table:
         latency = latency_lookup_table[name]
     else:
         print("not found in latency_lookup_table:", name)
         latency = BasicResidual._latency(h_in, w_in, c_in, c_out, self.kernel_size, self.stride, self.dilation, self.groups)
         latency_lookup_table[name] = latency
         np.save(table_file_name, latency_lookup_table)
     return latency, (c_out, h_out, w_out)
Ejemplo n.º 2
0
 def forward_latency(self, size):
     c_in, h_in, w_in = size
     if self.slimmable:
         assert c_in == make_divisible(self.C_in * self.ratio[0])
         c_out = make_divisible(self.C_out * self.ratio[1])
     else:
         assert c_in == self.C_in
         c_out = self.C_out
     if self.stride == 1:
         h_out = h_in; w_out = w_in
     else:
         h_out = h_in // 2; w_out = w_in // 2
     name = "SkipConnect_H%d_W%d_Cin%d_Cout%d_stride%d"%(h_in, w_in, c_in, c_out, self.stride)
     if name in latency_lookup_table:
         latency = latency_lookup_table[name]
     else:
         print("not found in latency_lookup_table:", name)
         latency = SkipConnect._latency(h_in, w_in, c_in, c_out, self.stride)
         latency_lookup_table[name] = latency
         np.save(table_file_name, latency_lookup_table)
     return latency, (c_out, h_out, w_out)
Ejemplo n.º 3
0
    def forward_flops(self, size, quantize=False):
        c_in, h_in, w_in = size
        if self.slimmable:
            assert c_in == make_divisible(self.C_in * self.ratio[0]), "c_in %d, self.C_in * self.ratio[0] %d"%(c_in, self.C_in * self.ratio[0])
            c_out = make_divisible(self.C_out * self.ratio[1])
        else:
            assert c_in == self.C_in, "c_in %d, self.C_in %d"%(c_in, self.C_in)
            c_out = self.C_out
        if self.stride == 1:
            h_out = h_in; w_out = w_in
        else:
            h_out = h_in // 2; w_out = w_in // 2
        name = "SkipConnect_H%d_W%d_Cin%d_Cout%d_stride%d"%(h_in, w_in, c_in, c_out, self.stride)
        if name in flops_lookup_table:
            flops = flops_lookup_table[name]
        else:
            print("not found in flops_lookup_table:", name)
            flops = SkipConnect._flops(h_in, w_in, c_in, c_out, self.stride)
            flops_lookup_table[name] = flops
            np.save(table_file_name, flops_lookup_table)
        # if quantize:
        #     flops /= 4

        return flops, (c_out, h_out, w_out)
Ejemplo n.º 4
0
    def forward_flops(self, size, quantize=False):
        c_in, h_in, w_in = size
        if self.slimmable:
            assert c_in == make_divisible(self.C_in * self.ratio[0]), "c_in %d, self.C_in * self.ratio[0] %d"%(c_in, self.C_in * self.ratio[0])
            c_out = make_divisible(self.C_out * self.ratio[1])
        else:
            assert c_in == self.C_in, "c_in %d, self.C_in %d"%(c_in, self.C_in)
            c_out = self.C_out
        if self.stride == 1:
            h_out = h_in; w_out = w_in
        else:
            h_out = h_in // 2; w_out = w_in // 2
        name = "ConvTranspose2dNorm_H%d_W%d_Cin%d_Cout%d_kernel%d_stride%d"%(h_in, w_in, c_in, c_out, self.kernel_size, self.stride)
        if name in flops_lookup_table:
            flops = flops_lookup_table[name]
        else:
            print("not found in flops_lookup_table:", name)
            flops = ConvTranspose2dNorm._flops(h_in, w_in, c_in, c_out, self.kernel_size, self.stride, self.padding, self.dilation, self.groups, self.bias)
            flops_lookup_table[name] = flops
            np.save(table_file_name, flops_lookup_table)
        # if quantize:
        #     flops /= 4

        return flops, (c_out, h_out, w_out)
Ejemplo n.º 5
0
    def forward_flops(self, size, quantize=False):
        c_in, h_in, w_in = size
        if self.slimmable:
            c_out = make_divisible(self.C_out * self.ratio[1])
        else:
            c_out = self.C_out
        if self.stride == 1:
            h_out = h_in; w_out = w_in
        else:
            h_out = h_in // 2; w_out = w_in // 2
        name = "DwsBlock_H%d_W%d_Cin%d_Cout%d_kernel%d_stride%d"%(h_in, w_in, c_in, c_out, self.kernel_size, self.stride)
        if name in flops_lookup_table:
            flops = flops_lookup_table[name]
        else:
            print("not found in flops_lookup_table:", name)
            flops = DwsBlock._flops(h_in, w_in, c_in, c_out, self.kernel_size, self.stride, self.dilation, self.groups)
            flops_lookup_table[name] = flops
            np.save(table_file_name, flops_lookup_table)
        # if quantize:
        #     ratio_dws = 3*3 / (3*3 + self.C_out)
        #     flops = ratio_dws * flops + (1-ratio_dws) * flops / 4

        return flops, (c_out, h_out, w_out)