Converter.py InputQNormalizeFold optimizer 에러 관련 문의

안녕하세요. 저는 현재 Arcface를 NPU를 통해 동작 시키려고 시도 중입니다. converter를 사용하여 컨버터 중 계속 같은 과정에서 에러가 발생해 진행하지 못하고 있는 상황입니다.


위 화면은 에러 화면입니다. inputQnormalizeFold optimizer에서 문제가 발생하는데 이유를 모르겠습니다. 도움 부탁드립니다.

아래는 시도한 명령과 현재 컨버팅 시도 중인 모델 onnx 파일 링크 입니다.
python EnlightSDK/converter.py ./sample/archface.onnx --type unknown --mean 0.5 0.5 0.5 --std 0.5 0.5 0.5 --omit-post-process --dataset Custom --dataset-root my_dataset_path --enable-track

위의 내용은 주말 간 해결하였으나, 해결 못한 것이 있어 추가적으로 문의 드립니다.
python EnlightSDK/converter.py ./sample/archface.onnx --type unknown --mean 0.5 0.5 0.5 --std 0.5 0.5 0.5 --omit-post-process --dataset Custom --dataset-root my_dataset_path --enable-track
위 명령으로 컨버팅 시도 중
[WARN] Mismatch layer.dims and tensor.shape ([512, 1, 1] vs [512, 1, 512])
아래 경고가 발생합니다.
현재 Output Layer중 Reshape를 통한 차원 축소가 이상하게 이루어 지고 있는 것 같습니다.
batch_size를 1이라 가정했을때 output shape는 (1,512)가 나오는 것을 pytorch 모델과 onnx 모델 변환 이전 과정에서는 확인했으나, converter를 거치는 과정에서 문제가 발생하는 것 같습니다.

혹시 제가 놓친 부분이 있다면 알려주시면 감사하겠습니다.

  • 혹시 Gather나 Shape가 문제가 되는 것 같아,

    batch_size를 고정하여 제거해봤지만 그대로 인것을 확인하였습니다.

안녕하세요.
확인 후 답변 드리겠습니다.

감사합니다.

1 Like

안녕하세요.
해당 문의에 답변 드립니다.
SE( = GlobalAveragePool → … Mul) 레이어 구조는 지원하지 않습니다.

감사합니다.

답변 감사합니다. 추가적으로 몇가지 더 여쭙습니다.
BatchNormalization2D를 사용할 때, 특정 신경망 구조에서만 적합하게 동작하는지 궁금합니다. Batchnormalization2D 사용 시 Batchnormal2d → Conv2d 순서로 배치하면,

Start InputQNormalizeFold optimizer
Traceback (most recent call last):
File “EnlightSDK/converter.py”, line 668, in
main()
File “EnlightSDK/converter.py”, line 644, in main
model = prepare_model(args)
File “EnlightSDK/converter.py”, line 134, in prepare_model
net = optimizer.optimize(net)
File “”, line 41, in optimize
File “”, line 98, in apply
File “”, line 44, in apply
RuntimeError: The size of tensor a (3) must match the size of tensor b (64) at non-singleton dimension 1

위 에러가 발생합니다.
제 생각으로는 Conv->BatchNormal->Activation 순서로 레이어를 구성할 경우 하나로 묶이게 되어 이런 현상이 발생하는 것 같은데 이를 피할 수는 없을까요?

또한 제 경우에는 Batchnormalization 추가 시 변환 과정에서 양자 손실이 급격히 증가하는 것 같은데 정상적인 상황인지도 궁금합니다.

안녕하세요.

BN → Conv2d 순으로 신경망이 구성 되어 있더라도, SW Toolkit에서 처리 되야 합니다.

신경망과 converter 옵션을 전달해 주시면 확인해 보겠습니다.

감사합니다.