본문 바로가기

카테고리 없음

딥러닝을 OpenCV에서 쉽게 쓰자

난 주로 Pytorch를 쓴다. 근데 문제는 torch에서 개발한 모델파일을 C, C## 등 다른 플랫폼에서 쓰고싶다.

물론 ONNX, Torchscript가 있지만 이상하게 손이 안간다.

 

그러던 와중 Openpose 예제를 찾아보다 놀랐다.

OpenCV에서 tf의 모델을 가져와서 돌리는거다! 심지어 import tensorflow도 안하고!!!

이게 뭐여! 하고 보니 신세계였다. 

 

아래 예제는 pytorch 모델을 onnx로 변형 후 opencv에서 읽어오는 예제이다.

모델을 .eval() 모드로 바꾼 후 예시 입력과 함께 onnx로 변형한다.

 

그 후 cv에서 cv2.dnn.readNet()을 이용하여 가져온다.

근데 이 때 caffe, TF, torch, Darknet, onnx 모두 가능하다!!!

하나하나 다 확인은 해보지못했다.

하지만 구지 pytorch 모델을 onnx로 변형 안해도 되고

이를 다른곳에서 opencv만 설치해서 간단하게 쓸 수 있을거 같다 

 

import torch

tmp_model.eval()
dummy_input = torch.randn(1, 3, 256, 256)
torch.onnx.export(tmp_model, dummy_input, "crnn.onnx", verbose=True)

import cv2
net=cv2.dnn.readNet("crnn.onnx")