# Codeblock 8 class Darknet53(nn.Module): def __init__(self): super().__init__() self.convolutional0 = Convolutional(in_channels=3, out_channels=32, kernel_size=3) self.convolutional1 = Convolutional(in_channels=32, out_channels=64, kernel_size=3, stride=2) self.residuals0 = nn.ModuleList([Residual(num_channels=64) for _ in range(1)]) self.convolutional2 = Convolutional(in_channels=64, out_channels=128, kernel_size=3, stride=2) self.residuals1 = nn.ModuleList([Residual(num_channels=128) for _ in range(2)]) self.convolutional3 = Convolutional(in_channels=128, out_channels=256, kernel_size=3, stride=2) self.residuals2 = nn.ModuleList([Residual(num_channels=256) for _ in range(8)]) self.convolutional4 = Convolutional(in_channels=256, out_channels=512, kernel_size=3, stride=2) self.residuals3 = nn.ModuleList([Residual(num_channels=512) for _ in range(8)]) self.convolutional5 = Convolutional(in_channels=512, out_channels=1024, kernel_size=3, stride=2) self.residuals4 = nn.ModuleList([Residual(num_channels=1024) for _ in range(4)]) def forward(self, x): print(f'original\t\t: {x.size()}\n') x = self.convolutional0(x) print(f'after convolutional0\t: {x.size()}') x = self.convolutional1(x) print(f'after convolutional1\t: {x.size()}\n') for i in range(len(self.residuals0)): x = self.residuals0[i](x) print(f'after residuals0 #{i}\t: {x.size()}') x = self.convolutional2(x) print(f'\nafter convolutional2\t: {x.size()}\n') for i in range(len(self.residuals1)): x = self.residuals1[i](x) print(f'after residuals1 #{i}\t: {x.size()}') x = self.convolutional3(x) print(f'\nafter convolutional3\t: {x.size()}\n') for i in range(len(self.residuals2)): x = self.residuals2[i](x) print(f'after residuals2 #{i}\t: {x.size()}') branch0 = x.clone() #(1) x = self.convolutional4(x) print(f'\nafter convolutional4\t: {x.size()}\n') for i in range(len(self.residuals3)): x = self.residuals3[i](x) print(f'after residuals3 #{i}\t: {x.size()}') branch1 = x.clone() #(2) x = self.convolutional5(x) print(f'\nafter convolutional5\t: {x.size()}\n') for i in range(len(self.residuals4)): x = self.residuals4[i](x) print(f'after residuals4 #{i}\t: {x.size()}') return branch0, branch1, x #(3)