반응형

과거의 Tensorflow로 짜둔 모델을 Pytorch로 새롭게 훈련하지 않고 wegiht과 bias를 가져와서 변환을 해보고자 했습니다.
(2022.07.05 기준) 아직 테스트는 진행하지 못함. 추후에 샘플 모델 변환 테스트를 진행 후 코드를 추가로 올리도록 하겠습니다.
(2022.07.12 기준) Tensorflow -> ONNX -> Pytorch Test 완료


1. 직접 weight, bias 변경

https://blog.pingpong.us/torch-to-tf-tf-to-torch/

  1. 내부에서 사용하는 모델들을 PyTorch, TensorFlow 버전으로 재작성

    1. 일단 모델 구조와 코드를 맞춰야 함

      idea: sklearn metric, preprocessing 사용하기 (변경해야할 코드 최소화)

      How to Convert from Keras/Tensorflow to PyTorch

  2. 모델의 모든 가중치를 변환해주는 코드를 추가 작성

    1. TF와 Torch의 weight shape이 다름 → Transpose 하기
    2. numpy로 변형 후 적용!
    3. 각각 구현체의 순서가 다를 경우 분해 혹은 합쳐서 변형해야함…(이게 고될듯)
  • ex code (euni 조금 변형)

      # from TensorFlow Model to PyTorch Model
      # tf_module의 weight를 torch_module의 weight에 적용하는 예시
      tf_weights = tf_model.get_weights()[0]
      tf_biases = tf_model.get_weights()[1]
    
      ## TF와 Torch의 weight shape이 다름 → Transpose 하기
      torch_model.weight.data = torch.from_numpy(tf_weights)
      torch_model.bias.data = torch.from_numpy(tf_biases)
      # from PyTorch Model to TensorFlow Model
      weight = torch_model.state_dict()["weight"].detach().numpy()
      bias = torch_model.state_dict()["bias"].detach().numpy()
    
      ## TF와 Torch의 weight shape이 다름 → Transpose 하기
      tf_model.set_weights([weight, bias])

2. ONNX를 이용하는 방법

https://learnopencv.com/pytorch-to-tensorflow-model-conversion/

https://miro.medium.com
그림 출처: https://miro.medium.com

반응형

+ Recent posts