pytorch graph

Han Hanju·2021년 6월 27일
0
post-thumbnail

pytorch model을 가시적으로 보는 방법

  • 제가 자주 사용하는 두가지 방법만 소개하겠습니다.

1. torchinfo를 이용한 방법

  • 설치
pip install torchinfo
  • python
dummy_data = torch.zeros(2,3,800,800, dtype=torch.float32)
summary(backbone, input_size=(2, 3, 800, 800))
  • 결과화면
==========================================================================================
Layer (type:depth-idx)                   Output Shape              Param #
==========================================================================================
ResNetBackbone                           --                        --
├─Conv2d: 1-1                            [2, 64, 400, 400]         9,408
├─BatchNorm2d: 1-2                       [2, 64, 400, 400]         128
├─ReLU: 1-3                              [2, 64, 400, 400]         --
├─MaxPool2d: 1-4                         [2, 64, 200, 200]         --
├─Sequential: 1-5                        [2, 256, 200, 200]        --
│    └─Bottleneck: 2-1                   [2, 256, 200, 200]        --
│    │    └─Conv2d: 3-1                  [2, 64, 200, 200]         4,096
│    │    └─BatchNorm2d: 3-2             [2, 64, 200, 200]         128
│    │    └─ReLU: 3-3                    [2, 64, 200, 200]         --
│    │    └─Conv2d: 3-4                  [2, 64, 200, 200]         36,864
│    │    └─BatchNorm2d: 3-5             [2, 64, 200, 200]         128
│    │    └─ReLU: 3-6                    [2, 64, 200, 200]         --
│    │    └─Conv2d: 3-7                  [2, 256, 200, 200]        16,384
│    │    └─BatchNorm2d: 3-8             [2, 256, 200, 200]        512
│    │    └─Sequential: 3-9              [2, 256, 200, 200]        16,896
│    │    └─ReLU: 3-10                   [2, 256, 200, 200]        --
│    └─Bottleneck: 2-2                   [2, 256, 200, 200]        --
│    │    └─Conv2d: 3-11                 [2, 64, 200, 200]         16,384
│    │    └─BatchNorm2d: 3-12            [2, 64, 200, 200]         128
│    │    └─ReLU: 3-13                   [2, 64, 200, 200]         --
│    │    └─Conv2d: 3-14                 [2, 64, 200, 200]         36,864
│    │    └─BatchNorm2d: 3-15            [2, 64, 200, 200]         128
│    │    └─ReLU: 3-16                   [2, 64, 200, 200]         --
│    │    └─Conv2d: 3-17                 [2, 256, 200, 200]        16,384
│    │    └─BatchNorm2d: 3-18            [2, 256, 200, 200]        512
│    │    └─ReLU: 3-19                   [2, 256, 200, 200]        --
│    └─Bottleneck: 2-3                   [2, 256, 200, 200]        --
│    │    └─Conv2d: 3-20                 [2, 64, 200, 200]         16,384
│    │    └─BatchNorm2d: 3-21            [2, 64, 200, 200]         128
│    │    └─ReLU: 3-22                   [2, 64, 200, 200]         --
│    │    └─Conv2d: 3-23                 [2, 64, 200, 200]         36,864
│    │    └─BatchNorm2d: 3-24            [2, 64, 200, 200]         128
│    │    └─ReLU: 3-25                   [2, 64, 200, 200]         --
│    │    └─Conv2d: 3-26                 [2, 256, 200, 200]        16,384
│    │    └─BatchNorm2d: 3-27            [2, 256, 200, 200]        512
│    │    └─ReLU: 3-28                   [2, 256, 200, 200]        --
├─Sequential: 1-6                        [2, 512, 100, 100]        --
│    └─Bottleneck: 2-4                   [2, 512, 100, 100]        --
│    │    └─Conv2d: 3-29                 [2, 128, 200, 200]        32,768
│    │    └─BatchNorm2d: 3-30            [2, 128, 200, 200]        256
│    │    └─ReLU: 3-31                   [2, 128, 200, 200]        --
│    │    └─Conv2d: 3-32                 [2, 128, 100, 100]        147,456
│    │    └─BatchNorm2d: 3-33            [2, 128, 100, 100]        256
│    │    └─ReLU: 3-34                   [2, 128, 100, 100]        --
│    │    └─Conv2d: 3-35                 [2, 512, 100, 100]        65,536
│    │    └─BatchNorm2d: 3-36            [2, 512, 100, 100]        1,024
│    │    └─Sequential: 3-37             [2, 512, 100, 100]        132,096
│    │    └─ReLU: 3-38                   [2, 512, 100, 100]        --
│    └─Bottleneck: 2-5                   [2, 512, 100, 100]        --
│    │    └─Conv2d: 3-39                 [2, 128, 100, 100]        65,536
│    │    └─BatchNorm2d: 3-40            [2, 128, 100, 100]        256
│    │    └─ReLU: 3-41                   [2, 128, 100, 100]        --
│    │    └─Conv2d: 3-42                 [2, 128, 100, 100]        147,456
│    │    └─BatchNorm2d: 3-43            [2, 128, 100, 100]        256
│    │    └─ReLU: 3-44                   [2, 128, 100, 100]        --
│    │    └─Conv2d: 3-45                 [2, 512, 100, 100]        65,536
│    │    └─BatchNorm2d: 3-46            [2, 512, 100, 100]        1,024
│    │    └─ReLU: 3-47                   [2, 512, 100, 100]        --
│    └─Bottleneck: 2-6                   [2, 512, 100, 100]        --
│    │    └─Conv2d: 3-48                 [2, 128, 100, 100]        65,536
│    │    └─BatchNorm2d: 3-49            [2, 128, 100, 100]        256
│    │    └─ReLU: 3-50                   [2, 128, 100, 100]        --
│    │    └─Conv2d: 3-51                 [2, 128, 100, 100]        147,456
│    │    └─BatchNorm2d: 3-52            [2, 128, 100, 100]        256
│    │    └─ReLU: 3-53                   [2, 128, 100, 100]        --
│    │    └─Conv2d: 3-54                 [2, 512, 100, 100]        65,536
│    │    └─BatchNorm2d: 3-55            [2, 512, 100, 100]        1,024
│    │    └─ReLU: 3-56                   [2, 512, 100, 100]        --
│    └─Bottleneck: 2-7                   [2, 512, 100, 100]        --
│    │    └─Conv2d: 3-57                 [2, 128, 100, 100]        65,536
│    │    └─BatchNorm2d: 3-58            [2, 128, 100, 100]        256
│    │    └─ReLU: 3-59                   [2, 128, 100, 100]        --
│    │    └─Conv2d: 3-60                 [2, 128, 100, 100]        147,456
│    │    └─BatchNorm2d: 3-61            [2, 128, 100, 100]        256
│    │    └─ReLU: 3-62                   [2, 128, 100, 100]        --
│    │    └─Conv2d: 3-63                 [2, 512, 100, 100]        65,536
│    │    └─BatchNorm2d: 3-64            [2, 512, 100, 100]        1,024
│    │    └─ReLU: 3-65                   [2, 512, 100, 100]        --
├─Sequential: 1-7                        [2, 1024, 50, 50]         --
│    └─Bottleneck: 2-8                   [2, 1024, 50, 50]         --
│    │    └─Conv2d: 3-66                 [2, 256, 100, 100]        131,072
│    │    └─BatchNorm2d: 3-67            [2, 256, 100, 100]        512
│    │    └─ReLU: 3-68                   [2, 256, 100, 100]        --
│    │    └─Conv2d: 3-69                 [2, 256, 50, 50]          589,824
│    │    └─BatchNorm2d: 3-70            [2, 256, 50, 50]          512
│    │    └─ReLU: 3-71                   [2, 256, 50, 50]          --
│    │    └─Conv2d: 3-72                 [2, 1024, 50, 50]         262,144
│    │    └─BatchNorm2d: 3-73            [2, 1024, 50, 50]         2,048
│    │    └─Sequential: 3-74             [2, 1024, 50, 50]         526,336
│    │    └─ReLU: 3-75                   [2, 1024, 50, 50]         --
│    └─Bottleneck: 2-9                   [2, 1024, 50, 50]         --
│    │    └─Conv2d: 3-76                 [2, 256, 50, 50]          262,144
│    │    └─BatchNorm2d: 3-77            [2, 256, 50, 50]          512
│    │    └─ReLU: 3-78                   [2, 256, 50, 50]          --
│    │    └─Conv2d: 3-79                 [2, 256, 50, 50]          589,824
│    │    └─BatchNorm2d: 3-80            [2, 256, 50, 50]          512
│    │    └─ReLU: 3-81                   [2, 256, 50, 50]          --
│    │    └─Conv2d: 3-82                 [2, 1024, 50, 50]         262,144
│    │    └─BatchNorm2d: 3-83            [2, 1024, 50, 50]         2,048
│    │    └─ReLU: 3-84                   [2, 1024, 50, 50]         --
│    └─Bottleneck: 2-10                  [2, 1024, 50, 50]         --
│    │    └─Conv2d: 3-85                 [2, 256, 50, 50]          262,144
│    │    └─BatchNorm2d: 3-86            [2, 256, 50, 50]          512
│    │    └─ReLU: 3-87                   [2, 256, 50, 50]          --
│    │    └─Conv2d: 3-88                 [2, 256, 50, 50]          589,824
│    │    └─BatchNorm2d: 3-89            [2, 256, 50, 50]          512
│    │    └─ReLU: 3-90                   [2, 256, 50, 50]          --
│    │    └─Conv2d: 3-91                 [2, 1024, 50, 50]         262,144
│    │    └─BatchNorm2d: 3-92            [2, 1024, 50, 50]         2,048
│    │    └─ReLU: 3-93                   [2, 1024, 50, 50]         --
│    └─Bottleneck: 2-11                  [2, 1024, 50, 50]         --
│    │    └─Conv2d: 3-94                 [2, 256, 50, 50]          262,144
│    │    └─BatchNorm2d: 3-95            [2, 256, 50, 50]          512
│    │    └─ReLU: 3-96                   [2, 256, 50, 50]          --
│    │    └─Conv2d: 3-97                 [2, 256, 50, 50]          589,824
│    │    └─BatchNorm2d: 3-98            [2, 256, 50, 50]          512
│    │    └─ReLU: 3-99                   [2, 256, 50, 50]          --
│    │    └─Conv2d: 3-100                [2, 1024, 50, 50]         262,144
│    │    └─BatchNorm2d: 3-101           [2, 1024, 50, 50]         2,048
│    │    └─ReLU: 3-102                  [2, 1024, 50, 50]         --
│    └─Bottleneck: 2-12                  [2, 1024, 50, 50]         --
│    │    └─Conv2d: 3-103                [2, 256, 50, 50]          262,144
│    │    └─BatchNorm2d: 3-104           [2, 256, 50, 50]          512
│    │    └─ReLU: 3-105                  [2, 256, 50, 50]          --
│    │    └─Conv2d: 3-106                [2, 256, 50, 50]          589,824
│    │    └─BatchNorm2d: 3-107           [2, 256, 50, 50]          512
│    │    └─ReLU: 3-108                  [2, 256, 50, 50]          --
│    │    └─Conv2d: 3-109                [2, 1024, 50, 50]         262,144
│    │    └─BatchNorm2d: 3-110           [2, 1024, 50, 50]         2,048
│    │    └─ReLU: 3-111                  [2, 1024, 50, 50]         --
│    └─Bottleneck: 2-13                  [2, 1024, 50, 50]         --
│    │    └─Conv2d: 3-112                [2, 256, 50, 50]          262,144
│    │    └─BatchNorm2d: 3-113           [2, 256, 50, 50]          512
│    │    └─ReLU: 3-114                  [2, 256, 50, 50]          --
│    │    └─Conv2d: 3-115                [2, 256, 50, 50]          589,824
│    │    └─BatchNorm2d: 3-116           [2, 256, 50, 50]          512
│    │    └─ReLU: 3-117                  [2, 256, 50, 50]          --
│    │    └─Conv2d: 3-118                [2, 1024, 50, 50]         262,144
│    │    └─BatchNorm2d: 3-119           [2, 1024, 50, 50]         2,048
│    │    └─ReLU: 3-120                  [2, 1024, 50, 50]         --
├─Sequential: 1-8                        [2, 2048, 25, 25]         --
│    └─Bottleneck: 2-14                  [2, 2048, 25, 25]         --
│    │    └─Conv2d: 3-121                [2, 512, 50, 50]          524,288
│    │    └─BatchNorm2d: 3-122           [2, 512, 50, 50]          1,024
│    │    └─ReLU: 3-123                  [2, 512, 50, 50]          --
│    │    └─Conv2d: 3-124                [2, 512, 25, 25]          2,359,296
│    │    └─BatchNorm2d: 3-125           [2, 512, 25, 25]          1,024
│    │    └─ReLU: 3-126                  [2, 512, 25, 25]          --
│    │    └─Conv2d: 3-127                [2, 2048, 25, 25]         1,048,576
│    │    └─BatchNorm2d: 3-128           [2, 2048, 25, 25]         4,096
│    │    └─Sequential: 3-129            [2, 2048, 25, 25]         2,101,248
│    │    └─ReLU: 3-130                  [2, 2048, 25, 25]         --
│    └─Bottleneck: 2-15                  [2, 2048, 25, 25]         --
│    │    └─Conv2d: 3-131                [2, 512, 25, 25]          1,048,576
│    │    └─BatchNorm2d: 3-132           [2, 512, 25, 25]          1,024
│    │    └─ReLU: 3-133                  [2, 512, 25, 25]          --
│    │    └─Conv2d: 3-134                [2, 512, 25, 25]          2,359,296
│    │    └─BatchNorm2d: 3-135           [2, 512, 25, 25]          1,024
│    │    └─ReLU: 3-136                  [2, 512, 25, 25]          --
│    │    └─Conv2d: 3-137                [2, 2048, 25, 25]         1,048,576
│    │    └─BatchNorm2d: 3-138           [2, 2048, 25, 25]         4,096
│    │    └─ReLU: 3-139                  [2, 2048, 25, 25]         --
│    └─Bottleneck: 2-16                  [2, 2048, 25, 25]         --
│    │    └─Conv2d: 3-140                [2, 512, 25, 25]          1,048,576
│    │    └─BatchNorm2d: 3-141           [2, 512, 25, 25]          1,024
│    │    └─ReLU: 3-142                  [2, 512, 25, 25]          --
│    │    └─Conv2d: 3-143                [2, 512, 25, 25]          2,359,296
│    │    └─BatchNorm2d: 3-144           [2, 512, 25, 25]          1,024
│    │    └─ReLU: 3-145                  [2, 512, 25, 25]          --
│    │    └─Conv2d: 3-146                [2, 2048, 25, 25]         1,048,576
│    │    └─BatchNorm2d: 3-147           [2, 2048, 25, 25]         4,096
│    │    └─ReLU: 3-148                  [2, 2048, 25, 25]         --
==========================================================================================
Total params: 23,508,032
Trainable params: 23,508,032
Non-trainable params: 0
Total mult-adds (G): 104.26
==========================================================================================
Input size (MB): 15.36
Forward/backward pass size (MB): 4536.32
Params size (MB): 94.03
Estimated Total Size (MB): 4645.71
==========================================================================================

2. Netron을 이용한 방법

dummy_data = torch.zeros(2,3,800,800, dtype=torch.float32)
torch.onnx.export(backbone, dummy_data, 'output2.onnx')
  • 결과화면

Reference

https://lynnshin.tistory.com/54?category=941325
https://lynnshin.tistory.com/55?category=941325

profile
Data Analytics Engineer

0개의 댓글

관련 채용 정보