[ONNX] pytorch 모델을 ONNX로 변환하고 실행하기
·
💻 Programming/AI & ML
ONNX (Open Neural Network eXchange) ONNX는 기계 학습 모델을 표현하기 위해 만들어진 오픈 포맷으로 ONNX 런타임은 여러 다양한 플랫폼과 하드웨어(윈도우, 리눅스, 맥을 비롯한 플랫폼 뿐만 아니라 CPU, GPU 등의 하드웨어)에서 효율적인 추론을 가능하게 한다. 때문에 다양한 프레임워크와의 연계가 필요할 때 ONNX를 사용한다. (pytorch ↔︎ tensorflow ↔︎ caffe2 ↔︎ MXNet ↔︎ ...) *참고 https://pytorch.org/docs/stable/onnx.html https://tutorials.pytorch.kr/advanced/super_resolution_with_onnxruntime.html ONNX 예제 1. Pytorch 모델..
[pytorch] pytorch 모델 로드 중 Missing key(s) in state_dict 에러
·
💻 Programming/AI & ML
pytorch로 딥러닝 모델을 저장하고 불러올 때 Missing key(s) in state_dict 라는 런타임 에러가 발생하는 경우가 종종 있다. 대부분 딥러닝 모델과 불러온 모델 웨이트의 키값이 맞지 않아서 발생하는 오류인데, 모델과 모델 웨이트가 서로 짝이 아닌 경우에 발생하고 간혹 그렇지 않은 경우에도 해당 에러가 발생해서 우리를 괴롭힌다... ㅎ 그 때 아래와 같이 torch.load로 모델의 state dict를 불러오고 디버깅을 해서 state dict의 키값을 확인해보면 정확하게 문제를 파악할 수 있다. model_path = './model.pth' model_state_dict = torch.load(model_path) 위 첫 번째 캡처를 보면 모델 state dict에 모델 웨이트..
[python] OpenCV, PIL, Numpy, PyTorch 타입 분석, 타입 변환 정리
·
💻 Programming/Computer Vision
# PIL RGB 타입으로 이미지 읽음 torchvision.transforms 모듈에서 지원하는 데이터 타입이 PIL의 Image array 이므로 pytorch 프레임워크 사용시 PIL 로 이미지를 로딩하는 방식을 많이 사용 numpy array 인덱싱 불가능 → 상황에 따라 numpy array로 바꾸기 위한 작업 필요 사이즈 확인시 .size() 메서드로 확인 가능한데, (W,H)로 출력됨. 하지만, numpy array 로 변환시 (H,W,C)로 나오니까 주의. 즉, .size()로 확인 시에만 (W,H)로 나오는 것. from PIL import Image image = Image.open("image.jpg").convert('RGB') image.show() image.save("saved..
[pytorch] COCO Data Format 전용 Custom Dataset 생성
·
💻 Programming/AI & ML
Object Detection과 Segmentation 에서 흔히 사용되는 COCO dataformat 전용 Customdataset을 생성하는 방법을 소개한다. 흔히 알고 있는 COCO 데이터셋이 있고, 많은 데이터셋들이 COCO data format 을 따르는데, 이러한 데이터셋을 사용하기 위해 Customdataset을 구성하는 방법과 COCO API 인 Pycocotools 사용법을 설명한다. COCO Data Format Detection task에서는 Bounding box의 위치와 class label이 필요하고 segmentation task 에서는 segment mask 정보가 필요하다. 이러한 annotation 정보들은 json 형태로 제공되고, JSON 파일에는 Info, Licen..
[pytorch] model 에 접근하기, 특정 layer 변경하기
·
💻 Programming/AI & ML
pytorch 모델에 접근하고 특정 layer 또는 layer 내부의 모듈을 변경하는 방법을 정리한다. - 예시 모델 : resnet50 import torch.nn as nn import torchvision.models as models model = models.resnet50(pretrained=True) 1. self.named_parameters() for name, param in model.layer1.named_parameters(): print(name,param.shape,sep=" ") 2. self.named_children() for name,ch in model.layer1.named_children(): print("name :",name) print("child :", ch..
[pytorch] Custom dataset, dataloader 만들기
·
💻 Programming/AI & ML
* dataset 폴더 구조 minc2500 ├─images │ ├─brick │ │ ├─brick_000000.jpg │ │ ├─brick_000001.jpg │ │ ├─... │ ├─carpet │ │ ├─carpet_000000.jpg │ │ ├─... │ ├─... │ │ ├─... │ │ ├─... ... ... ... ├─labels │ ├─train1.txt │ ├─train2.txt │ ├─... │ ├─test1.txt │ ├─test2.txt │ └─... import os import os.path import torch import torch.utils.data as data from PIL import Image from torchvision import transforms imp..