TensorRT를 이용하는 방법으로는 1. 컨테이너 이용 2. 데비안 설치가 있는데 환경이 꼬이면 답이 없기 때문에 컨테이너를 이용했다. 컨테이너를 이용하기 전에 로컬환경에 당연히 도커가 설치되어있어야하고, 컨테이너 환경에서 gpu를 사용하기 위해 nvidia-docker 설정을 해야하고 NGC를 이용가능한 상태여야한다. Nvidia Docker Installation (Native GPU Support) Build and run Docker containers leveraging NVIDIA GPUs - NVIDIA/nvidia-docker github.com Preparing To Use Docker Containers - NVIDIA Docs Note: Starting with DGX release..
TensorRT는 만들 딥러닝 모델을 최적하하고, 모델의 크기를 줄이거나 gpu 환경에 최적화시켜 계산 속도를 높이는 등의 목적을 위해 사용하는 Nvidia에서 개발한 SDK로 딥러닝 모델의 배포를 위해 쓰인다. TensorRT의 WorkFlow는 다음과 같다 TensorRT를 처음 접하자마자 이 그림을 보면 이해가 안될 수 있지만 어느정도 해보고나서 본다면 워크플로우가 아주 잘 설명된 그림인 것을 알 수 있다. TensorFlow나 Pytorch 등 다양한 프레임워크를 지원한다. 나는 pytorch로 빌드한 모델을 Onnx모델로 먼저 변환한 후 onnx를 다시 TensorRT 모델로 바꾸었다. ONNX 변환은 일반적으로 ONNX 모델을 TensorRT 엔진으로 자동 변환하는 가장 성능이 좋은 방법이다...
파이토치는 모델을 .pt 또는 .pth 확장자를 사용하여 모델을 저장한다. 모델을 저장하는 방법은 두 가지가 있다. 전체 모델을 저장하거나 파라미터만 저장한다. 전체 모델을 저장하면 모델 파일의 사이즈가 커지지만 다른 파일에서 불러올 때 모델 구조에 대해서 미리 선언해주지 않아도 통째로 불러올 수가 있다. 파라미터마 저장하면 모델 파일의 사이즈가 작아지지만 파라미터를 불러오기 전에 동일하게 모델을 선언해주고 그 모델에 파라미터를 대입해주어야한다. 1. 전체 모델 저장 및 로드 # 저장 torch.save(model, 'save/to/path/model.pt') # 로드 model = torch.load('load/from/path/model.pt') 2. 파라미터 저장 및 로드 # 저장 torch.sav..
*.pt 모델을 *.onnx로 변환하고 최종적으로 tensorRT *.engine 까지 변환하는 테스트를 위해 파이토치 공부하는 겸 모델을 하나 빌드하기로 했다. 간단하게 CNN 레이어 몇 개 해서 간단한 모델을 작성해볼 수 있지만, 이건 해봤고 pretrained net 가지고와서 finetuning 하는 건 torch로 안해봐서 해보기로 했다. 사용할 데이터 셋은 torchvision dataset에서 제공해주는 CIFAR10 import import torch from torch import nn import torch.nn.functional as F from torch.utils.data import Dataset, DataLoader from torchvision import datasets ..
yolov7으로 evolve 하는데 에러가 났다. Index Error: index 30 is out of bounds for axis 0 with size 30 yolov7의 train.py evolve 부분을 확인 yolov5 train.py 582~606 yolov7 train.py 664~688, error line 687 플로우는 거의 동일한데 hyp, meta의 값들이나 중간 중간 변수들을 선언해주는 내용이 달랐고, 조금씩 다르다보니 for문을 돌리는 과정에서 인덱스가 안 맞는것 같았다. 깃헙 이슈에서도 이미 같은 문제를 찾은 사람들이 있었고 https://github.com/WongKinYiu/yolov7/issues/999 IndexError: index 30 is out of bounds..
iterater를 사용하면 iterable 객체를 반복적으로 접근할 수 있다. 하지만 한 사이클을 모두 반복하여 접근한 후에는 다시 처음으로 돌아가지 않고 접근이 끝난다. one = [1,2,3,4,5] one_iter = iter(one) for i in range(6): print(next(one_iter)) itertool - cycle itertool 모듈의 cycle 메소드를 이용하면 이터러블 객체에 무한히 반복하여 접근할 수 있다. from itertools import cycle one = cycle([1,2,3,4,5]) for i in range(100): print(next(one))