RKNN에서 일반적인 data input은 NHWC 포맷으로 [batch, height, width, channel] 순서로 Input을 넣도록 되어 있습니다.
따라서 배치 단위로 inference가 가능한 RKNN 모델을 만들기 위해서는 ONNX 파일 export 할 때 부터 배치 사이즈를 지정해 주어야 합니다.
Example : PIDNET
이 코드 45번째 줄을 보면 다음과 같이 input을 지정해 주고 있습니다.
input = torch.randn(1, 3, 1024, 2048).cuda()
이 모델은 [batch, channel, width height] 단위로 받고 있기 때문에 가장 첫 번째 인자를 원하는 배치 크기로 변경해줍니다.
Dynamic_axis
ONNX파일에서 Dynamic_axis 옵션을 활용하여 여러 개의 batch size를 지원하도록 export할 수도 있지만, 그렇게 export한 onnx 파일을 rknn으로 변환하려고 하면 다음과 같은 에러 메시지를 마주하게 됩니다.
E load_onnx: The input shape ['batch_size', 3, 720, 1280] of 'input' is not support!
Please set the 'inputs' / 'input_size_list' parameters of 'rknn.load_onnx', or set the 'dyanmic_input' parameter of 'rknn.config' to fix the input shape!
I ===================== WARN(0) =====================
E rknn-toolkit2 version: 2.0.0b9+fc0fbe23
E load_onnx: Traceback (most recent call last):
File "rknn/api/rknn_log.py", line 309, in rknn.api.rknn_log.error_catch_decorator.error_catch_wrapper
File "rknn/api/rknn_base.py", line 1477, in rknn.api.rknn_base.RKNNBase.load_onnx
File "rknn/api/rknn_base.py", line 688, in rknn.api.rknn_base.RKNNBase._create_ir_and_inputs_meta
File "rknn/api/rknn_log.py", line 95, in rknn.api.rknn_log.RKNNLog.e
ValueError: The input shape ['batch_size', 3, 720, 1280] of 'input' is not support!
Please set the 'inputs' / 'input_size_list' parameters of 'rknn.load_onnx', or set the 'dyanmic_input' parameter of 'rknn.config' to fix the input shape!