Computer Vision

    [Pytorch] ONNX export할 때 RuntimeError: step!=1 is currently not supported 에러 해결 방법

    torch.onnx.export할 때 RuntimeError: step!=1 is currently not supported 에러 해결 방법 서론 아래 코드와 같이 모델을 onnx로 변환하고자 했는데 import torch import torch.onnx model = get_net(False) params = torch.load("/home/slrnd/test/00.work/BDD/YOLOP/runs/BddDataset/_2023-09-15-11-11/final_state.pth", map_location="cpu") model.load_state_dict(params) model.cpu() params = model.state_dict() torch.save(params, "./net.prm", pi..

    자주 쓸 것 같은 CV 꿀팁들 정리

    동영상 초단위로 구간 나누어 저장 $ ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:20 -c copy output.mp4 경로 선언 및 정렬 dirpath = "/media/sldev1/T7/DMS2/" filepath = glob.glob(dirpath+'*.mp4') filepath = sorted(filepath ,key=lambda s: int(re.findall(r'\d+', s)[3])) # re.findall에 주목 re.findall에서 [3]은 4번째 숫자 모임(?)이다. # 이런 경로가 있다면, /media/sldev1/T7/DMS2/01. 조랭이떡_1201.mp4 만약 위와같은 경로가 있다면, print(re.findall(r'\d+', s))의 출력은..

    [딥러닝] mAP(mean Average Precision)이란?

    엊그제 주간업무회의 도중에 A가 B에게 말했습니다. "이건 mAP가 아니라 IoU 아닌가요? 제대로 적은거 맞나요?!" 저는 뭔지 몰라서 조용히 있었습니다... (변명하자면,, 제 파트가 아니였어요ㅠ_ㅠ) 이제는.. IoU, mAP관련 이야기가 나오면 "그 수치는 mAP가 아니라 IoU죠!" 라고 말하는 멋쟁이가 되기 위해 공부했습니다. 여러분에게 쉽게 설명드릴테니 우리 같이 멋쟁이가 되어 봅시다!! : ) 우선, mAP에 대해서 이해하기 전에, 우리는 총 3가지 개념을 먼저 알아야 이해가 수월합니다. IoU + Confusion Matrix(TP, FN, FP, TN) Precision Recall IoU 포스팅을 통해서 IoU + Confusion Matrix(TP, FN, FP, TN)에 대해 이해..

    [딥러닝] IoU(Intersection over Union)란?

    엊그제 주간업무회의 도중에 A가 B에게 말했습니다. "이건 mAP가 아니라 IoU 아닌가요? 제대로 적은거 맞나요?!" 저는 뭔지 몰라서 조용히 있었습니다... (변명하자면,, 제 파트가 아니였어요ㅠ_ㅠ) 이제는.. IoU, mAP관련 이야기가 나오면 "그 수치는 mAP가 아니라 IoU죠!" 라고 말하는 멋쟁이가 되기 위해 공부했습니다. 여러분에게 쉽게 설명드릴테니 우리 같이 멋쟁이가 되어 봅시다!! : ) 목차 : Why IoU? 왜, IoU를 사용하는지? What IoU? 그래서, IoU가 뭔데? Where IoU? 알겠어, 어디에 쓰는데? 1. Why IoU? IoU의 개념과 정의를 알아보기 전에, 우선, IoU를 왜?! 사용하는지 짚고 넘어가볼께요. IoU는 쉽게 말해서 "도구"예요. 우리가 객체..

    [Error] AttributeError: module 'torch.nn' has no attribute 'Conv2D' 해결 방법

    멍청한 실수를 했지만.. 반복하지 않기 위해 기록하고자 한다. AttributeError: module 'torch.nn' has no attribute 'Conv2D' 속성에러 : torch.nn이라는 모듈에는 Conv2D라는 속성이 없다. 이상하다.. 분명히 고쳤는데 왜 안될까...라고 생각하고 디버깅을 했다. (pointwise가 틀렸다고 나와있는데도 못 알아차렸다..) class Depthwise(nn.Module): def __init__(self, in_channels, out_channels, stride=1): super().__init__() self.depthwise = nn.Sequential( nn.Conv2d(in_channels, in_channels, 3, stride=stri..

    [모델 계산량] FLOPs 계산하는 방법 (How to calculate model FLOPs?)

    임베디드 환경에 딥러닝 모델을 올리는 것을 " 포팅(Porting) " 이라고 한다. 포팅할 때 가장 중요한 것은, 해당 모델 FLOPs를 고려해야한다는 것이다. 예를 들어 Ambarella사의 CV22에 딥러닝 모델을 포팅하기 위해서는 최대 3~4 GFLOPs가 허용치이다. FLOPs가 포팅에 절대적인 기준은 아니지만, 엄청 중요한 기준이 된다는 것은 확실하다. 그러므로 우리는 FLOPs를 자체적으로 계산할 줄 알아야한다. 그래서!!! 아래 내용을 한 문장으로 먼저 요약하자면... pthflops를 사용 하면 된다! " pthflops " install 하기 https://github.com/1adrianb/pytorch-estimate-flops GitHub - 1adrianb/pytorch-esti..

    [모델 계산량] FLOPS, FLOPs 개념 및 차이점

    딥러닝에서 모델 계산량(FLOPS, FLOPs) 은 모델이 얼마나 연산량이 많은지, 얼마나 효율적인지를 나타내는 지표임. 아래 내용을 한 문장으로 요약하자면, FLOPS is a unit of speed. FLOPs is a unit of amount. FLOPs (FLoating point OPerations) 기억하기 위한 키워드 : " 연 산 량 " 실제 계산량을 나타내는 단위 ex) 모델 A vs 모델 B 비교 중이라면, FLOPs가 큰 모델일수록 많은 연산량 요구 = 모델의 결과(output) 생성이 느릴 가능성 ▲ ex) 클라우드 환경에서 큰 FLOPs의 모델을 계속 학습한다면, 비용 증가 가능성 ▲ 모델 전체가 얼마나 많은 floating point(부동 소수점)을 연산하는지를 나타내는 지표..

    [Pytorch] 제공된 데이터 불러오는 방법 (feat. CIFAR10)

    Pytorch에는 여러 데이터를 제공합니다. (mnist, cirfar... 등등) 그래서 파이토치에서 제공하는 데이터들을 불러와서 전처리하는 시퀀스가 어떻게 되는지에 대한 숲과 나무를 보는 포스팅을 하고자합니다. 여러 데이터들 중에서 CIFAR10을 불러오는 코드를 하나하나 분석하면서 실습 하겠습니다. 현업에서는 이렇게 정제되어있는 데이터셋을 사용하지 않고 커스텀 데이터 셋을 사용하지만, 일련의 시퀀스를 경험한 뒤에 커스텀 데이터 셋을 load하고 변환시키는 것이 효율적인 학습 방법이라고 생각합니다. 전체코드 import torch import torchvision import torchvision.transforms as tr from torch.utils.data import DataLoader, ..

    [Pytorch] 튜플 안에 텐서와 정수형, Tensor and int in tuple

    Pytorch Fashion MNIST 공부하면서 궁금한 점. 해결. figure = plt.figure(figsize=(9,9)) # plt.figure()는 맨 처음 나오는 경우가 많은데, figure()은 figure인스턴스를 생성하는데 그 역할은 이미지 전체의 영역을 확보하는 것이다. cols, rows = 3,3 for i in range(1, cols * rows + 1): #1부터 (3*3+1 -1)=9까지 반복 sample_idx = torch.randint(len(training_data), size=(1,)).item() #torch.randint = 주어진 범위 내의 정수를 균등하게 생성, 자료형은 torch.float32 img, label = training_data[sample_..

    [머신러닝] 데이터 관련 개념 이해하기 - 확장판

    검증용 데이터는 모델의 성능 평가를 위해 존재하는 것이 아니라, 모델의 성능을 '조정'하기 위해 존재한다. 더보기 더 정확하게는 과적합 유무 판단 및 하이퍼 파라미터 튜닝을 위해 존재한다. 하이퍼 파라미터는 '모델의 성능에 영향을 주는 매개변수' 이며, 가중치, 편향 등의 변수를 매개변수 라고 한다. 더보기 더 정확하게는 하이퍼 파라미터는 '사용자 설정 변수'이며, 매개변수는 '모델이 학습하는 과정에서 얻어지는 값'이다. 즉, 사용자가 '매개 변수'를 바꾸는 등의 행동 못한다. 훈련 데이터는 문제지, 검증 데이터는 모의고사, 테스트 데이터는 최종 평가인 '수능'이다. train data로 모델 훈련시키고, Validation data를 사용해서 정확도를 검증하며 하이퍼파라미터를 튜닝하고, 하이퍼 파라미터..