def forward(self, x, task_idx: int = -1): x = F.pad(x, pad=(3, 3, 3, 3), mode='constant', value=0) # other modes are reflect, replicate, constant x = self.conv1(x) x = self.bn1(x) x = self.relu(x) # x = F.pad(x, (0,1,0,1), 'constant', 0) self.x_prelayer1 = self.maxpool(x) # (64,64,64) if self.bsp: self.x_layer1 = forward_sequential(self.x_prelayer1, self.layer1, task_idx) self.x_layer2 = forward_sequential(self.x_layer1, self.layer2, task_idx) self.x_layer3 = forward_sequential(self.x_layer2, self.layer3, task_idx) self.x_layer4 = forward_sequential(self.x_layer3, self.layer4, task_idx) x = forward_sequential(self.x_layer4, self.compress1, task_idx) else: self.x_layer1 = self.layer1(self.x_prelayer1) # (256,32,32) self.x_layer2 = self.layer2(self.x_layer1) # (512,16,16) self.x_layer3 = self.layer3(self.x_layer2) # (1024,16,16) self.x_layer4 = self.layer4(self.x_layer3) # (2048,16,16) x = self.compress1(self.x_layer4) # (8,16,16) if self.final_act: x = self.compress_bn(x) x = self.relu1(x) if self.normalize_outputs: x = self.groupnorm(x) return x
def forward(self, x, time: int = -1): out = F.relu(self.bn1(self.conv1(x))) if self.bsp: # bsp mode out = forward_sequential(out, self.layer1, time) out = forward_sequential(out, self.layer2, time) out = forward_sequential(out, self.layer3, time) else: out = self.layer1(out) out = self.layer2(out) if self.final_act: out = self.layer3(out) else: for i in range(6): out = self.layer3[i](out) basic_block = self.layer3[6] block_input = out out = F.relu(basic_block.bn1(basic_block.conv1(out))) # out = basic_block.bn2(basic_block.conv2(out)) out = basic_block.conv2(out) out += basic_block.shortcut(block_input) # out = F.relu(out) out = F.avg_pool2d(out, out.size()[3]) out = out.view(out.size(0), -1) return out
def forward(self, x, task_idx: int = -1): out = F.relu(self.bn1(self.conv1(x))) if self.bsp: # bsp mode out = forward_sequential(out, self.layer1, task_idx) out = forward_sequential(out, self.layer2, task_idx) out = forward_sequential(out, self.layer3, task_idx) else: out = self.layer1(out) out = self.layer2(out) out = self.layer3(out) out = F.avg_pool2d(out, out.size()[3]) out = out.view(out.size(0), -1) out = self.linear(out) return out
def forward(self, x, task_idx:int=-1): if self.bsp: x = forward_sequential(x, self.conv1, task_idx) x = forward_sequential(x, self.conv2, task_idx) x = forward_sequential(x, self.conv3, task_idx) x = forward_sequential(x, self.conv5, task_idx) else: x = self.conv1(x) x = self.conv2(x) x = self.conv3(x) if self.final_act: x = self.conv5(x) else: x = self.conv5[0](x) if self.use_residual: res = self.residual(x) x = x + res return x
def forward(self, x, task_idx:int=-1, cache={}): x0 = x if self.bsp: x = forward_sequential(x, self.conv1, task_idx) x = forward_sequential(x, self.conv2, task_idx) else: x = self.conv1(x) x = self.conv2(x) if self.use_residual: x = x + self.residual(x0) x2 = x if self.bsp: x = forward_sequential(x, self.conv3, task_idx) x = forward_sequential(x, self.conv4, task_idx) x = forward_sequential(x, self.conv5, task_idx) x = x + forward_sequential(x2, self.skip, task_idx) else: x = self.conv3(x) x = self.conv4(x) if self.final_act: x = self.conv5(x) else: x = self.conv5[0](x) x = x + self.skip(x2) # x = self.conv5(x) # if self.final_act: # x = x + self.skip(x2) # else: # x = x + self.skip[0](x2) if self.normalize_outputs: x = self.groupnorm(x) return x
def forward(self, x, time): residual = x out = self.conv1(x, time) out = self.bn1(out) out = self.relu(out) # out = F.pad(out, pad=(1,1,1,1), mode='constant', value=0) # other modes are reflect, replicate out = self.conv2(out, time) out = self.bn2(out) out = self.relu(out) out = self.conv3(out, time) out = self.bn3(out) if self.downsample is not None: residual = forward_sequential(x, self.downsample, time) out += residual out = self.relu(out) return out
def forward(self, x, time): out = F.relu(self.bn1(self.conv1(x, time))) out = self.bn2(self.conv2(out, time)) out += forward_sequential(x, self.shortcut, time) out = F.relu(out) return out