• 目标检测 YOLOv5 - 模型的样子


    目标检测 YOLOv5 - 模型的样子

    flyfish


    版本: YOLOv5:v5
    以yolov5s.pt为例查看模型的样子

    开始加载模型文件

    yolov5s.pt
    def attempt_load(weights, map_location=None):
    模型内容如下

    ckpt: {
    	'epoch': -1,
    	'best_fitness': array([0.37287]),
    	'training_results': None,
    	'model': Model(
    		(model): Sequential(
    			(0): Focus(
    				(conv): Conv(
    					(conv): Conv2d(12, 32, kernel_size = (3, 3), stride = (1, 1), padding = (1, 1), bias = False)
    					(bn): BatchNorm2d(32, eps = 0.001, momentum = 0.03, affine = True, track_running_stats = True)
    					(act): SiLU()
    				)
    			)	
    			......
    			(24): Detect(
    				(m): ModuleList(
    					(0): Conv2d(128, 255, kernel_size = (1, 1), stride = (1, 1))
    					(1): Conv2d(256, 255, kernel_size = (1, 1), stride = (1, 1))
    					(2): Conv2d(512, 255, kernel_size = (1, 1), stride = (1, 1))
    				)
    			)
    		)
    	),
    	'optimizer': None,
    	'wandb_id': None
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    模型的层

    具体哪一层可以通过model.model[下标]的形式获取。负数表示倒着获取

    倒数第一层
    model.model[-1]

    Detect(
      (m): ModuleList(
        (0): Conv2d(128, 255, kernel_size=(1, 1), stride=(1, 1))
        (1): Conv2d(256, 255, kernel_size=(1, 1), stride=(1, 1))
        (2): Conv2d(512, 255, kernel_size=(1, 1), stride=(1, 1))
      )
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    倒数第二层
    model.model[-2]

    
    C3(
      (cv1): Conv(
        (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))
        (act): SiLU(inplace=True)
      )
      (cv2): Conv(
        (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))
        (act): SiLU(inplace=True)
      )
      (cv3): Conv(
        (conv): Conv2d(512, 512, kernel_size=(1, 1), stride=(1, 1))
        (act): SiLU(inplace=True)
      )
      (m): Sequential(
        (0): Bottleneck(
          (cv1): Conv(
            (conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU(inplace=True)
          )
          (cv2): Conv(
            (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (act): SiLU(inplace=True)
          )
        )
      )
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    模型的属性

    for name,value in vars(model).items():
            print('%s=%s'%(name,value))
    
    • 1
    • 2

    例如获取类别名称model.names
    可以获取的属性包括以下内容

    training = False
    _parameters = OrderedDict()
    _buffers = OrderedDict()
    _non_persistent_buffers_set = set()
    _backward_hooks = OrderedDict()
    _forward_hooks = OrderedDict()
    _forward_pre_hooks = OrderedDict()
    _state_dict_hooks = OrderedDict()
    _load_state_dict_pre_hooks = OrderedDict()
    _modules = OrderedDict([('model', Sequential(
    	(0): Focus(
    		(conv): Conv(
    			(conv): Conv2d(12, 32, kernel_size = (3, 3), stride = (1, 1), padding = (1, 1))
    			(act): SiLU(inplace = True)
    		)
    	)
    ......
    	(24): Detect(
    		(m): ModuleList(
    			(0): Conv2d(128, 255, kernel_size = (1, 1), stride = (1, 1))
    			(1): Conv2d(256, 255, kernel_size = (1, 1), stride = (1, 1))
    			(2): Conv2d(512, 255, kernel_size = (1, 1), stride = (1, 1))
    		)
    	)
    ))])
    yaml = {
    	'nc': 80,
    	'depth_multiple': 0.33,
    	'width_multiple': 0.5,
    	'anchors': [
    		[10, 13, 16, 30, 33, 23],
    		[30, 61, 62, 45, 59, 119],
    		[116, 90, 156, 198, 373, 326]
    	],
    	'backbone': [
    		[-1, 1, 'Focus', [64, 3]],
    		[-1, 1, 'Conv', [128, 3, 2]],
    		[-1, 3, 'C3', [128]],
    		[-1, 1, 'Conv', [256, 3, 2]],
    		[-1, 9, 'C3', [256]],
    		[-1, 1, 'Conv', [512, 3, 2]],
    		[-1, 9, 'C3', [512]],
    		[-1, 1, 'Conv', [1024, 3, 2]],
    		[-1, 1, 'SPP', [1024, [5, 9, 13]]],
    		[-1, 3, 'C3', [1024, False]]
    	],
    	'head': [
    		[-1, 1, 'Conv', [512, 1, 1]],
    		[-1, 1, 'nn.Upsample', ['None', 2, 'nearest']],
    		[
    			[-1, 6], 1, 'Concat', [1]
    		],
    		[-1, 3, 'C3', [512, False]],
    		[-1, 1, 'Conv', [256, 1, 1]],
    		[-1, 1, 'nn.Upsample', ['None', 2, 'nearest']],
    		[
    			[-1, 4], 1, 'Concat', [1]
    		],
    		[-1, 3, 'C3', [256, False]],
    		[-1, 1, 'Conv', [256, 3, 2]],
    		[
    			[-1, 14], 1, 'Concat', [1]
    		],
    		[-1, 3, 'C3', [512, False]],
    		[-1, 1, 'Conv', [512, 3, 2]],
    		[
    			[-1, 10], 1, 'Concat', [1]
    		],
    		[-1, 3, 'C3', [1024, False]],
    		[
    			[17, 20, 23], 1, 'Detect', ['nc', 'anchors']
    		]
    	],
    	'ch': 3
    }
    save = [4, 6, 10, 14, 17, 20, 23]
    names = ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign',
    		 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella',
    		 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard',
    		 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange',
    		 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 
    		 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 
    		 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush']
    stride = tensor([8., 16., 32.])
    nc = 80
    hyp = {
    	'lr0': 0.01,
    	'lrf': 0.2,
    	'momentum': 0.937,
    	'weight_decay': 0.0005,
    	'warmup_epochs': 3.0,
    	'warmup_momentum': 0.8,
    	'warmup_bias_lr': 0.1,
    	'box': 0.05,
    	'cls': 0.3,
    	'cls_pw': 1.0,
    	'obj': 0.7,
    	'obj_pw': 1.0,
    	'iou_t': 0.2,
    	'anchor_t': 4.0,
    	'fl_gamma': 0.0,
    	'hsv_h': 0.015,
    	'hsv_s': 0.7,
    	'hsv_v': 0.4,
    	'degrees': 0.0,
    	'translate': 0.1,
    	'scale': 0.9,
    	'shear': 0.0,
    	'perspective': 0.0,
    	'flipud': 0.0,
    	'fliplr': 0.5,
    	'mosaic': 1.0,
    	'mixup': 0.01
    }
    gr = 1.0
    class_weights = tensor([1.20752e-02, ......, 2.12184e+00, 6.56878e-01, 1.56888e+01, 1.59711e+00
    ], dtype = torch.float64)
    _is_full_backward_hook = None
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118

    模块的名称以及模块本身

    代码

    
    for name, module in model.named_modules():
        print(name)
    
    • 1
    • 2
    • 3

    这里只输出名字

    model
    model.0
    model.0.conv
    model.0.conv.conv
    model.0.conv.act
    model.1
    model.1.conv
    model.1.act
    ......
    model.22
    model.23
    model.23.cv1
    model.23.cv1.conv
    model.23.cv1.act
    model.23.cv2
    model.23.cv2.conv
    model.23.cv2.act
    model.23.cv3
    model.23.cv3.conv
    model.23.cv3.act
    model.23.m
    model.23.m.0
    model.23.m.0.cv1
    model.23.m.0.cv1.conv
    model.23.m.0.cv1.act
    model.23.m.0.cv2
    model.23.m.0.cv2.conv
    model.23.m.0.cv2.act
    model.24
    model.24.m
    model.24.m.0
    model.24.m.1
    model.24.m.2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    模型的权重

    代码

     list(model.parameters())[0]
    
    • 1

    内容

    Parameter containing:
    tensor([[[[-2.73007e-01, -1.44108e+00, -1.18709e+00],
              [-3.13122e-01, -9.47540e-01, -7.23963e-01],
              [ 4.31564e-01,  2.05478e+00,  1.50800e+00]],
    
    ......
    
             [[ 8.07673e-01,  1.51624e+00,  2.86977e-01],
              [-1.81044e+00, -1.48112e+00, -6.51210e-01],
              [-5.19720e-01, -1.99577e-01,  1.39392e-01]]]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    模型权重的名字和权重

    代码

    list(model.named_parameters())
    
    • 1

    model.0.conv.conv.weight是名字

    ('model.0.conv.conv.weight', Parameter containing:
    tensor([[[[-2.73007e-01, -1.44108e+00, -1.18709e+00],
              [-3.13122e-01, -9.47540e-01, -7.23963e-01],
              [ 4.31564e-01,  2.05478e+00,  1.50800e+00]],
    
    ......
             [[ 8.07673e-01,  1.51624e+00,  2.86977e-01],
              [-1.81044e+00, -1.48112e+00, -6.51210e-01],
              [-5.19720e-01, -1.99577e-01,  1.39392e-01]]]]))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    完整的model

    Model(
      (model): Sequential(
        (0): Focus(
          (conv): Conv(
            (conv): Conv2d(12, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
            (act): SiLU()
          )
        )
        (1): Conv(
          (conv): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))
          (act): SiLU()
        )
        (2): C3(
          (cv1): Conv(
            (conv): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv2): Conv(
            (conv): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv3): Conv(
            (conv): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (m): Sequential(
            (0): Bottleneck(
              (cv1): Conv(
                (conv): Conv2d(32, 32, kernel_size=(1, 1), stride=(1, 1))
                (act): SiLU()
              )
              (cv2): Conv(
                (conv): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
                (act): SiLU()
              )
            )
          )
        )
        (3): Conv(
          (conv): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))
          (act): SiLU()
        )
        (4): C3(
          (cv1): Conv(
            (conv): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv2): Conv(
            (conv): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv3): Conv(
            (conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (m): Sequential(
            (0): Bottleneck(
              (cv1): Conv(
                (conv): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1))
                (act): SiLU()
              )
              (cv2): Conv(
                (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
                (act): SiLU()
              )
            )
            (1): Bottleneck(
              (cv1): Conv(
                (conv): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1))
                (act): SiLU()
              )
              (cv2): Conv(
                (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
                (act): SiLU()
              )
            )
            (2): Bottleneck(
              (cv1): Conv(
                (conv): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1))
                (act): SiLU()
              )
              (cv2): Conv(
                (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
                (act): SiLU()
              )
            )
          )
        )
        (5): Conv(
          (conv): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))
          (act): SiLU()
        )
        (6): C3(
          (cv1): Conv(
            (conv): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv2): Conv(
            (conv): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv3): Conv(
            (conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (m): Sequential(
            (0): Bottleneck(
              (cv1): Conv(
                (conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))
                (act): SiLU()
              )
              (cv2): Conv(
                (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
                (act): SiLU()
              )
            )
            (1): Bottleneck(
              (cv1): Conv(
                (conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))
                (act): SiLU()
              )
              (cv2): Conv(
                (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
                (act): SiLU()
              )
            )
            (2): Bottleneck(
              (cv1): Conv(
                (conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))
                (act): SiLU()
              )
              (cv2): Conv(
                (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
                (act): SiLU()
              )
            )
          )
        )
        (7): Conv(
          (conv): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))
          (act): SiLU()
        )
        (8): SPP(
          (cv1): Conv(
            (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv2): Conv(
            (conv): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (m): ModuleList(
            (0): MaxPool2d(kernel_size=5, stride=1, padding=2, dilation=1, ceil_mode=False)
            (1): MaxPool2d(kernel_size=9, stride=1, padding=4, dilation=1, ceil_mode=False)
            (2): MaxPool2d(kernel_size=13, stride=1, padding=6, dilation=1, ceil_mode=False)
          )
        )
        (9): C3(
          (cv1): Conv(
            (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv2): Conv(
            (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv3): Conv(
            (conv): Conv2d(512, 512, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (m): Sequential(
            (0): Bottleneck(
              (cv1): Conv(
                (conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))
                (act): SiLU()
              )
              (cv2): Conv(
                (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
                (act): SiLU()
              )
            )
          )
        )
        (10): Conv(
          (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))
          (act): SiLU()
        )
        (11): Upsample(scale_factor=2.0, mode=nearest)
        (12): Concat()
        (13): C3(
          (cv1): Conv(
            (conv): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv2): Conv(
            (conv): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv3): Conv(
            (conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (m): Sequential(
            (0): Bottleneck(
              (cv1): Conv(
                (conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))
                (act): SiLU()
              )
              (cv2): Conv(
                (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
                (act): SiLU()
              )
            )
          )
        )
        (14): Conv(
          (conv): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))
          (act): SiLU()
        )
        (15): Upsample(scale_factor=2.0, mode=nearest)
        (16): Concat()
        (17): C3(
          (cv1): Conv(
            (conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv2): Conv(
            (conv): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv3): Conv(
            (conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (m): Sequential(
            (0): Bottleneck(
              (cv1): Conv(
                (conv): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1))
                (act): SiLU()
              )
              (cv2): Conv(
                (conv): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
                (act): SiLU()
              )
            )
          )
        )
        (18): Conv(
          (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))
          (act): SiLU()
        )
        (19): Concat()
        (20): C3(
          (cv1): Conv(
            (conv): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv2): Conv(
            (conv): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv3): Conv(
            (conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (m): Sequential(
            (0): Bottleneck(
              (cv1): Conv(
                (conv): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1))
                (act): SiLU()
              )
              (cv2): Conv(
                (conv): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
                (act): SiLU()
              )
            )
          )
        )
        (21): Conv(
          (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1))
          (act): SiLU()
        )
        (22): Concat()
        (23): C3(
          (cv1): Conv(
            (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv2): Conv(
            (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (cv3): Conv(
            (conv): Conv2d(512, 512, kernel_size=(1, 1), stride=(1, 1))
            (act): SiLU()
          )
          (m): Sequential(
            (0): Bottleneck(
              (cv1): Conv(
                (conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))
                (act): SiLU()
              )
              (cv2): Conv(
                (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
                (act): SiLU()
              )
            )
          )
        )
        (24): Detect(
          (m): ModuleList(
            (0): Conv2d(128, 255, kernel_size=(1, 1), stride=(1, 1))
            (1): Conv2d(256, 255, kernel_size=(1, 1), stride=(1, 1))
            (2): Conv2d(512, 255, kernel_size=(1, 1), stride=(1, 1))
          )
        )
      )
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288
    • 289
    • 290
    • 291
    • 292
    • 293
    • 294
    • 295
    • 296
    • 297
    • 298
    • 299
    • 300
    • 301
    • 302
    • 303
    • 304
    • 305
    • 306
    • 307
    • 308
    • 309
    • 310
    • 311
    • 312
    • 313
    • 314
    • 315
    • 316
    • 317
    • 318

    完整模型图片展示

    图片较大,可下载看
    在这里插入图片描述

  • 相关阅读:
    基于SSM的商品管理系统
    【Python 零基础入门】变量 & 数据类型
    PCL 基于全局最大一致点集进行点云配准
    【iDRAC】突破错误信息壁垒,利用iDRAC提高效率
    Nginx反向代理配置POST请求的nginx.conf相关配置
    B端系统从0到1:有几步,其中需求分析要做啥?
    Android项目使用gradle配置新旧方式对比
    5、基础算法
    程序员不撰写代码注释和文档的十大理由
    ASP.NET Core 6框架揭秘实例演示[20]:“数据保护”框架基于文件的密钥存储
  • 原文地址:https://blog.csdn.net/flyfish1986/article/details/126875365