def __init__(self, num_anchors, num_classes): super(YoloBody, self).__init__() # backbone self.backbone = darknet53(None) self.conv1 = make_three_conv([512, 1024], 1024) self.SPP = SpatialPyramidPooling() self.conv2 = make_three_conv([512, 1024], 2048) self.upsample1 = Upsample(512, 256) self.conv_for_P4 = conv2d(512, 256, 1) self.make_five_conv1 = make_five_conv([256, 512], 512) self.upsample2 = Upsample(256, 128) self.conv_for_P3 = conv2d(256, 128, 1) self.make_five_conv2 = make_five_conv([128, 256], 256) # 3*(5+num_classes)=3*(5+20)=3*(4+1+20)=75 # 4+1+num_classes final_out_filter2 = num_anchors * (5 + num_classes) self.yolo_head3 = yolo_head([256, final_out_filter2], 128) self.down_sample1 = conv2d(128, 256, 3, stride=2) self.make_five_conv3 = make_five_conv([256, 512], 512) # 3*(5+num_classes)=3*(5+20)=3*(4+1+20)=75 final_out_filter1 = num_anchors * (5 + num_classes) self.yolo_head2 = yolo_head([512, final_out_filter1], 256) self.down_sample2 = conv2d(256, 512, 3, stride=2) self.make_five_conv4 = make_five_conv([512, 1024], 1024) # 3*(5+num_classes)=3*(5+20)=3*(4+1+20)=75 final_out_filter0 = num_anchors * (5 + num_classes) self.yolo_head1 = yolo_head([1024, final_out_filter0], 512)
def __init__(self, num_anchors, num_classes): super(YoloBody, self).__init__() # ---------------------------------------------------# # 生成CSPdarknet53的主干模型 # 获得三个有效特征层,他们的shape分别是: # 52,52,256 # 26,26,512 # 13,13,1024 # ---------------------------------------------------# self.draw_features = False self.backbone = darknet53(None) self.conv1 = make_three_conv([512, 1024], 1024) self.SPP = SpatialPyramidPooling() self.conv2 = make_three_conv([512, 1024], 2048) self.upsample1 = Upsample(512, 256) self.conv_for_P4 = conv2d(512, 256, 1) self.make_five_conv1 = make_five_conv([256, 512], 512) self.upsample2 = Upsample(256, 128) self.conv_for_P3 = conv2d(256, 128, 1) self.make_five_conv2 = make_five_conv([128, 256], 256) # 3*(5+num_classes) = 3*(5+20) = 3*(4+1+20)=75 final_out_filter2 = num_anchors * (5 + num_classes) self.yolo_head3 = yolo_head([256, final_out_filter2], 128) self.down_sample1 = conv2d(128, 256, 3, stride=2) self.make_five_conv3 = make_five_conv([256, 512], 512) # 3*(5+num_classes) = 3*(5+20) = 3*(4+1+20)=75 final_out_filter1 = num_anchors * (5 + num_classes) self.yolo_head2 = yolo_head([512, final_out_filter1], 256) self.down_sample2 = conv2d(256, 512, 3, stride=2) self.make_five_conv4 = make_five_conv([512, 1024], 1024) # 3*(5+num_classes)=3*(5+20)=3*(4+1+20)=75 final_out_filter0 = num_anchors * (5 + num_classes) self.yolo_head1 = yolo_head([1024, final_out_filter0], 512)
def __init__(self, num_anchors, num_classes): super(YoloBody, self).__init__() # backbone self.backbone = darknet53(None) self.conv1 = make_three_conv([512, 1024], 1024) self.SPP = SpatialPyramidPooling() self.conv2 = make_three_conv([512, 1024], 2048) self.upsample1 = Upsample(512, 256) self.conv_for_P4 = conv2d(512, 256, 1) self.make_five_conv1 = make_five_conv([256, 512], 512) self.upsample2 = Upsample(256, 128) self.conv_for_P3 = conv2d(256, 128, 1) self.make_five_conv2 = make_five_conv([128, 256], 256) """ YOLO Head 1. 在特征利用部分,YoloV4提取多特征层进行目标检测,一共提取三个特征层,分别位于中间层,中下层,底层, 三个特征层的 shape 分别为(76,76,256)、(38,38,512)、(19,19,1024) 2. 输出层的 shape 分别为(19,19,75),(38,38,75),(76,76,75),最后一个维度为 75 是因为该图是基于voc数据集的,它的类为20种, YoloV4 只有针对每一个特征层存在 3 个先验框,所以最后维度为 3x25; 如果使用的是coco训练集,类则为80种,最后的维度应该为255 = 3x85,三个特征层的shape为(19,19,255),(38,38,255),(76,76,255) """ # 3*(5+num_classes)=3*(5+20)=3*(4+1+20)=75 # 4+1+num_classes final_out_filter2 = num_anchors * (5 + num_classes) self.yolo_head3 = yolo_head([256, final_out_filter2], 128) self.down_sample1 = conv2d(128, 256, 3, stride=2) self.make_five_conv3 = make_five_conv([256, 512], 512) # 3*(5+num_classes)=3*(5+20)=3*(4+1+20)=75 # 5+num_classes = 4+1+num_classes final_out_filter1 = num_anchors * (5 + num_classes) self.yolo_head2 = yolo_head([512, final_out_filter1], 256) self.down_sample2 = conv2d(256, 512, 3, stride=2) self.make_five_conv4 = make_five_conv([512, 1024], 1024) # 3*(5+num_classes)=3*(5+20)=3*(4+1+20)=75 final_out_filter0 = num_anchors * (5 + num_classes) self.yolo_head1 = yolo_head([1024, final_out_filter0], 512)
def __init__(self, anchors_mask, num_classes): super(YoloBody, self).__init__() #---------------------------------------------------# # 生成CSPdarknet53的主干模型 # 获得三个有效特征层,他们的shape分别是: # 52,52,256 # 26,26,512 # 13,13,1024 #---------------------------------------------------# self.backbone = darknet53(None) self.conv1 = make_three_conv([512,1024],1024) self.SPP = SpatialPyramidPooling() self.conv2 = make_three_conv([512,1024],2048) self.upsample1 = Upsample(512,256) self.conv_for_P4 = conv2d(512,256,1) self.make_five_conv1 = make_five_conv([256, 512],512) self.upsample2 = Upsample(256,128) self.conv_for_P3 = conv2d(256,128,1) self.make_five_conv2 = make_five_conv([128, 256],256) # 3*(5+num_classes) = 3*(5+20) = 3*(4+1+20)=75 self.yolo_head3 = yolo_head([256, len(anchors_mask[0]) * (5 + num_classes)],128) self.down_sample1 = conv2d(128,256,3,stride=2) self.make_five_conv3 = make_five_conv([256, 512],512) # 3*(5+num_classes) = 3*(5+20) = 3*(4+1+20)=75 self.yolo_head2 = yolo_head([512, len(anchors_mask[1]) * (5 + num_classes)],256) self.down_sample2 = conv2d(256,512,3,stride=2) self.make_five_conv4 = make_five_conv([512, 1024],1024) # 3*(5+num_classes)=3*(5+20)=3*(4+1+20)=75 self.yolo_head1 = yolo_head([1024, len(anchors_mask[2]) * (5 + num_classes)],512)