딥러닝

터미널에서 onnx 내부구조 알아내기

제갈티 2025. 1. 23. 15:56

onnxruntime 으로 알아내기

  • $ pip3 install onnx onnxruntime
  • $ python -c "import onnx; model = onnx.load('resnet18.onnx'); print(onnx.helper.printable_graph(model.graph))"


결과:

PS C:\Users\qkdlt\Downloads> python -c "import onnx; model = onnx.load('resnet18.onnx'); print(onnx.helper.printable_graph(model.graph))"
graph torch-jit-export (
%input.1[FLOAT, 1x3x224x224]
) initializers (
%head.weight[FLOAT, 10x512]
%head.bias[FLOAT, 10]
%200[FLOAT, 64x3x7x7]
%201[FLOAT, 64]
%203[FLOAT, 64x64x3x3]
%204[FLOAT, 64]
%206[FLOAT, 64x64x3x3]
%207[FLOAT, 64]
%209[FLOAT, 64x64x3x3]
%210[FLOAT, 64]
%212[FLOAT, 64x64x3x3]
%213[FLOAT, 64]
%215[FLOAT, 128x64x3x3]
%216[FLOAT, 128]
%218[FLOAT, 128x128x3x3]
%219[FLOAT, 128]
%221[FLOAT, 128x64x1x1]
%222[FLOAT, 128]
%224[FLOAT, 128x128x3x3]
%225[FLOAT, 128]
%227[FLOAT, 128x128x3x3]
%228[FLOAT, 128]
%230[FLOAT, 256x128x3x3]
%231[FLOAT, 256]
%233[FLOAT, 256x256x3x3]
%234[FLOAT, 256]
%236[FLOAT, 256x128x1x1]
%237[FLOAT, 256]
%239[FLOAT, 256x256x3x3]
%240[FLOAT, 256]
%242[FLOAT, 256x256x3x3]
%243[FLOAT, 256]
%245[FLOAT, 512x256x3x3]
%246[FLOAT, 512]
%248[FLOAT, 512x512x3x3]
%249[FLOAT, 512]
%251[FLOAT, 512x256x1x1]
%252[FLOAT, 512]
%254[FLOAT, 512x512x3x3]
%255[FLOAT, 512]
%257[FLOAT, 512x512x3x3]
%258[FLOAT, 512]
%262[INT64, 3]
) {
%199 = Conv[dilations = [1, 1], group = 1, kernel_shape = [7, 7], pads = [3, 3, 3, 3], strides = [2, 2]](%input.1, %200, %201)
%125 = Relu(%199)
%126 = MaxPool[ceil_mode = 0, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [2, 2]](%125)
%202 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [1, 1]](%126, %203, %204)
%129 = Relu(%202)
%205 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [1, 1]](%129, %206, %207)
%132 = Add(%205, %126)
%133 = Relu(%132)
%208 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [1, 1]](%133, %209, %210)
%136 = Relu(%208)
%211 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [1, 1]](%136, %212, %213)
%139 = Add(%211, %133)
%140 = Relu(%139)
%214 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [2, 2]](%140, %215, %216)
%143 = Relu(%214)
%217 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [1, 1]](%143, %218, %219)
%220 = Conv[dilations = [1, 1], group = 1, kernel_shape = [1, 1], pads = [0, 0, 0, 0], strides = [2, 2]](%140, %221, %222)
%148 = Add(%217, %220)
%149 = Relu(%148)
%223 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [1, 1]](%149, %224, %225)
%152 = Relu(%223)
%226 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [1, 1]](%152, %227, %228)
%155 = Add(%226, %149)
%156 = Relu(%155)
%229 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [2, 2]](%156, %230, %231)
%159 = Relu(%229)
%232 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [1, 1]](%159, %233, %234)
%235 = Conv[dilations = [1, 1], group = 1, kernel_shape = [1, 1], pads = [0, 0, 0, 0], strides = [2, 2]](%156, %236, %237)
%164 = Add(%232, %235)
%165 = Relu(%164)
%238 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [1, 1]](%165, %239, %240)
%168 = Relu(%238)
%241 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [1, 1]](%168, %242, %243)
%171 = Add(%241, %165)
%172 = Relu(%171)
%244 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [2, 2]](%172, %245, %246)
%175 = Relu(%244)
%247 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [1, 1]](%175, %248, %249)
%250 = Conv[dilations = [1, 1], group = 1, kernel_shape = [1, 1], pads = [0, 0, 0, 0], strides = [2, 2]](%172, %251, %252)
%180 = Add(%247, %250)
%181 = Relu(%180)
%253 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [1, 1]](%181, %254, %255)
%184 = Relu(%253)
%256 = Conv[dilations = [1, 1], group = 1, kernel_shape = [3, 3], pads = [1, 1, 1, 1], strides = [1, 1]](%184, %257, %258)
%187 = Add(%256, %181)
%188 = Relu(%187)
%196 = Reshape(%188, %262)
%197 = ReduceMean[axes = [2], keepdims = 0](%196)
%198 = Gemm[alpha = 1, beta = 1, transB = 1](%197, %head.weight, %head.bias)
return %198
}
PS C:\Users\qkdlt\Downloads>