# Codeblock 13b def forward(self, x): ############################################### # Backbone. branch0, branch1, x = self.darknet53(x) #(1) print(f'branch0\t\t\t: {branch0.size()}') print(f'branch1\t\t\t: {branch1.size()}') print(f'x\t\t\t: {x.size()}\n') ############################################### # Flow to 13x13 detection head. x = self.conv0(x) print(f'after conv0\t\t: {x.size()}') x = self.conv1(x) print(f'after conv1\t\t: {x.size()}') x = self.conv2(x) print(f'after conv2\t\t: {x.size()}') x = self.conv3(x) print(f'after conv3\t\t: {x.size()}') x = self.conv4(x) print(f'after conv4\t\t: {x.size()}') large_obj = self.detection_head_large_obj(x) print(f'large object detection\t: {large_obj.size()}\n') ############################################### # Flow to 26x26 detection head. x = self.conv5(x) print(f'after conv5\t\t: {x.size()}') x = self.upsample0(x) print(f'after upsample0\t\t: {x.size()}') x = torch.cat([x, branch1], dim=1) print(f'after concatenate\t: {x.size()}') x = self.conv6(x) print(f'after conv6\t\t: {x.size()}') x = self.conv7(x) print(f'after conv7\t\t: {x.size()}') x = self.conv8(x) print(f'after conv8\t\t: {x.size()}') x = self.conv9(x) print(f'after conv9\t\t: {x.size()}') x = self.conv10(x) print(f'after conv10\t\t: {x.size()}') medium_obj = self.detection_head_medium_obj(x) print(f'medium object detection\t: {medium_obj.size()}\n') ############################################### # Flow to 52x52 detection head. x = self.conv11(x) print(f'after conv11\t\t: {x.size()}') x = self.upsample1(x) print(f'after upsample1\t\t: {x.size()}') x = torch.cat([x, branch0], dim=1) print(f'after concatenate\t: {x.size()}') x = self.conv12(x) print(f'after conv12\t\t: {x.size()}') x = self.conv13(x) print(f'after conv13\t\t: {x.size()}') x = self.conv14(x) print(f'after conv14\t\t: {x.size()}') x = self.conv15(x) print(f'after conv15\t\t: {x.size()}') x = self.conv16(x) print(f'after conv16\t\t: {x.size()}') small_obj = self.detection_head_small_obj(x) print(f'small object detection\t: {small_obj.size()}\n') ############################################### # Return prediction tensors. return large_obj, medium_obj, small_obj