반응형

Python/PyTorch 공부 70

[PyTorch] Swish 활성화 함수 정의해서 사용하기

안녕하세요! PyTorch로 Swish 함수를 정의해서 사용하는 법을 알아보겠습니다ㅎㅎ Swish 함수는 깊은 신경망에서 ReLU보다 좋은 성능을 나타내는데요, 실제로 EfficientNet은 Swish 활성화 함수를 사용하고 MobileNetV3은 Swish 함수를 수정해서 h-Swish 함수를 사용하고 있습니다. 이 Swish 함수는 파이토치 공식 문서에서 명령어를 제공하고 있지 않아 직접 정의해서 사용해야 합니다. 아래와 같이 Swish 함수 클래스를 정의할 수 있습니다. # Swish activation function class Swish(nn.Module): def __init__(self): super().__init__() self.sigmoid = nn.Sigmoid() def forwa..

[PyTorch] YOLOv3 학습을 위한 VOC2007 커스텀 데이터셋 생성하기

COCO dataset은 용량이 너무 크기 때문에 구글 코랩에서 YOLOv3을 학습시키는데에 무리가 있습니다. 여러번 시도했지만.. 실패했네요ㅎㅎ 그래서 저용량의 VOC2007 dataset을 가져왔습니다! VOC2007 dataset을 다운로드 받고, 커스텀 데이터셋을 생성하여 바운딩박스 출력값이 (class, cx, cy, w, h)되도록 만들겠습니다. 구글 코랩을 마운트 합니다. from google.colab import drive drive.mount('yolov3') dataset을 다운로드 받고 압축을 풀어줍니다. 다운로드 받을 디렉토리 경로를 잘 설정해줘야 합니다. !mkdir train !mkdir test !wget http://pjreddie.com/media/files/VOCtrai..

[PyTorch] 러닝 레이트 스케쥴러(Learning Rate Scheduler) ReducedLROnPlateau 함수

파이토치는 learning late scheduler로 ReduceLROnPlateau 함수를 제공합니다. ReduceLROnPlatea 함수는 val_loss가 향상되지 않고 정체되어 있으면 learning late를 factor배로 감소시킵니다. # define a learning rate schedule from torch.optim.lr_scheduler import ReduceLROnPlateau lr_scheduler = ReduceLROnPlateau(opt, mode='min', factor=0.5, patience=20, verbose=1) # try it out for i in range(100): lr_scheduler.step(1) patience를 20으로 설정했기 때문에, 20 ..

[PyTorch] Single Object Detection 모델 생성하기

Single object detection을 위한 간단한 모델을 생성하겠습니다. convolutional layer, pooling layer, skip connection을 활용한 모델입니다. # implement the model class import torch.nn as nn import torch.nn.functional as F # define the bulk of the model class class Net(nn.Module): def __init__(self, params): super(Net, self).__init__() C_in, H_in, W_in = params['input_shape'] init_f = params['initial_filters'] num_outputs = pa..

[PyTorch] 커스텀 데이터셋(custom dataset) 생성하기

AMD dataset을 사용하여 custom dataset을 생성해보겠습니다. AMD dataset은 amd.grand-challenge.org/ 여기에서 다운로드 받으실 수 있습니다. # create the training and validation datasets and the data loaders from torch.utils.data import Dataset from PIL import Image class AMD_dataset(Dataset): def __init__(self, path2data, transform, trans_params): pass def __len__(self): # return size of dataset return len(self.labels) def __getit..

[PyTorch] data augmentation(resize, flip, shift, brightness, contrast, gamma) 함수 정의하기

파이토치로 data augmentation 함수를 정의해보겠습니다. transformation.Compose 함수로 정의하면 쉽게 data augmentation을 사용할 수 있지만, 이 경우에 모든 dataset에 적용이 됩니다. custum dataset을 train과 val로 나눈뒤에 각각에 다른 transformation을 적용하기 위해 함수를 정의해서 사용합니다. 이번 포스팅에서 정의할 data augmentation은 resize, horizontally flip, vertically flip, shift, brightness, contrast, gamma, scale label) 입니다. 1. 이미지 resize 이미지를 resize 해줌과 동시에 label도 갱신해줘야 합니다. import..

[PyTorch] 이미지 크기와 바운딩박스 좌표를 resize 하는 함수 정의

image transformation을 수행함과 동시에 바운딩 박스 좌표(labels)도 갱신시켜줘야 합니다. 이미지의 크기를 변경하면 객체의 위치도 변경되기 때문에 바운딩 박스 좌표도 그에 맞게 변경하는 함수를 정의하겠습니다. AMD dataset은 AMD, Non-AMD 두 종류의 이미지가 있으며 크기가 다릅니다. 크기를 256x256으로 고정시키고, 그에 따라 바운딩박스의 중심 좌표(label)도 갱신시키는 함수를 정의해보겠습니다. AMD와 Non-AMD 이미지 입니다. 둘의 크기는 다르므로 256x256 크기로 일치시켜주겠습니다. import torchvision.transforms.functional as TF # create a data transformation pipeline for sin..

[PyTorch] single object image 분석

안녕하세요! Grand Challenge 에서 제공하는 ADM dataset으로 데이터를 분석해보도록 하겠습니다! amd.grand-challenge.org/ 여기에서 회원가입한 후 대회에 참가하면 dataset을 다운로드 할 수 있습니다..ㅎㅎ AMD dataset은 안구의 중심와(Fovea) 이미지와 Fovea의 중앙 위치(label)로 이루어져 있습니다. 우선, 다운로드 받은 label 엑셀 파일을 pandas로 불러와 확인해보겠습니다. import os import pandas as pd # loading Fovea_location.xlsx path2data = '/content/cookbook/MyDrive/data' path2labels = os.path.join(path2data, 'Trai..

[PyTorch] ResNet, pre-trained 모델 불러오기

이번 포스팅에서 ResNet pre-trained model을 불러오도록 하겠습니다. pre-trained model 불러오기 작업환경은 google colab에서 진행했습니다. 1. pre-trained model을 불러옵니다. # load resnet18 with the pre-trained weights from torchvision import models import torch resnet18_pretrained = models.resnet18(pretrained=True) print(resnet18_pretrained) 2. output layer를 현재 data에 맞게 수정합니다. # change the output layer to 10 classes num_classes = 10 num_f..

[PyTorch] 이미지 픽셀의 평균, 표준편차를 계산하여 정규화하기

dataset에 있는 이미지의 평균과 표준편차를 계산하여 정규화(normalize) 해보겠습니다. 1. 데이터셋을 불러옵니다. 저는 torchvision에서 제공하는 STL-10 dataset을 사용했습니다. train dataset을 불러와서 train_ds에 저장합니다. # loading training data from torchvision import datasets import torchvision.transforms as transforms import os path2data = '/data' # if not exists the path, make the path if not os.path.exists(path2data): os.mkdir(path2data) data_transformer = ..

반응형