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)
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)
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)
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)
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)