def __init__(self, num_class=2, deploy=False, width_multiplier=[0.75, 0.75, 0.75, 2.5], num_blocks=[2, 4, 14, 1], override_groups_map=None): super(FusionNet, self).__init__() self.deploy = deploy self.cur_layer_idx = 1 self.in_planes = 384 self.override_groups_map = override_groups_map or dict() assert 0 not in self.override_groups_map self.color_moudle = Net(num_class=num_class, is_first_bn=True) self.depth_moudle = Net(num_class=num_class, is_first_bn=True) self.ir_moudle = Net(num_class=num_class, is_first_bn=True) self.color_SE = SEModule(128,reduction=16) self.depth_SE = SEModule(128,reduction=16) self.ir_SE = SEModule(128,reduction=16) self.res_0 = self._make_layer(BasicBlock, 384, 256, 2, stride=2) self.res_1 = self._make_layer(BasicBlock, 256, 512, 2, stride=2) # self.res_0 = self._make_RepVGG_layer(384, num_blocks[2], stride=2) # self.res_1 = self._make_RepVGG_layer(int(512 * width_multiplier[3]), num_blocks[3], stride=2) self.fc = nn.Sequential(nn.Dropout(0.5), # nn.Linear(int(512 * width_multiplier[3]), 256), nn.Linear(int(512), 256), nn.ReLU(inplace=True), nn.Linear(256, num_class))
def __init__(self, num_class=2, modality='fusion'): super(FusionNet, self).__init__() # Net是model_baseline中的net,返回 # logit.shape: torch.Size([batch_size, 2]) # logit.shape: torch.Size([batch_size, 300]) # fea.shape: torch.Size([batch_size, 512]) self.modality = modality if self.modality == 'fusion': self.color_moudle = Net(num_class=num_class, is_first_bn=True) self.depth_moudle = Net(num_class=num_class, is_first_bn=True) self.ir_moudle = Net(num_class=num_class, is_first_bn=True) # SEModule,输入channels和reduction,这个channel要和前一个网络的输出维度一致 self.color_SE = SEModule(128, reduction=16) self.depth_SE = SEModule(128, reduction=16) self.ir_SE = SEModule(128, reduction=16) # 采用resnet的方式创建两个层 self.res_0 = self._make_layer(BasicBlock, 384, 256, 2, stride=2) else: self.color_moudle = Net(num_class=num_class, is_first_bn=True) self.color_SE = SEModule(128, reduction=16) self.res_0 = self._make_layer(BasicBlock, 128, 256, 2, stride=2) self.res_1 = self._make_layer(BasicBlock, 256, 512, 2, stride=2) self.fc = nn.Sequential(nn.Dropout(0.5), nn.Linear(512, 256), nn.ReLU(inplace=True), nn.Linear(256, num_class))
def __init__(self, num_class=2): super(FusionNet, self).__init__() self.color_moudle = Net(num_class=num_class, is_first_bn=True) self.depth_moudle = Net(num_class=num_class, is_first_bn=True) self.ir_moudle = Net(num_class=num_class, is_first_bn=True) self.res_0 = self._make_layer(BasicBlock, 384, 256, 2, stride=2) self.res_1 = self._make_layer(BasicBlock, 256, 512, 2, stride=2) self.fc = nn.Sequential(nn.Dropout(0.5), nn.Linear(512, 256), nn.ReLU(inplace=True), nn.Linear(256, num_class))
def get_model(model_name, num_class,is_first_bn): if model_name == 'baseline': from model.model_baseline import Net elif model_name == 'model_A': from model.FaceBagNet_model_A import Net elif model_name == 'model_B': from model.FaceBagNet_model_B import Net elif model_name == 'model_C': from model.FaceBagNet_model_C import Net net = Net(num_class=num_class,is_first_bn=is_first_bn) return net
def run_check_net(): batch_size = 32 C, H, W = 3, 128, 128 num_class = 2 input = np.random.uniform(0, 1, (batch_size, C, H, W)).astype(np.float32) truth = np.random.choice(num_class, batch_size).astype(np.float32) #------------ input = torch.from_numpy(input).float().cuda() truth = torch.from_numpy(truth).long().cuda() input = to_var(input) truth = to_var(truth) #--- criterion = softmax_cross_entropy_criterion net = Net(num_class).cuda() net.set_mode('backup') print(net) logit = net.forward(input) loss = criterion(logit, truth)
def run_check_net(): num_class = 2 net = Net(num_class) print(net)
def run_check_net(): num_class = 2 x = torch.rand(36, 9, 48, 48) net = Net(num_class) output = net.forward(x)