반응형

Python/PyTorch 공부 70

[PyTorch] PyTorch에서 제공하는 ResNet을 불러와 마지막 FC layer 수정하기

안녕하세요! 이번 포스팅에서는 PyTorch에서 제공하는 ResNet을 불러오고, 마지막 FC layer를 수정하는 방법을 살펴보겠습니다. import torch.nn as nn from torch.nn import functional as F from .utils_resnet import resnet18 class FaceNet_ResNet18(nn.Module): def __init__(self, embedding_dimension=128, pretrained=False): super().__init__() self.model = resnet18(pretrained=pretrained) # embedding input_features_fc_layer = self.model.fc.in_features ..

[PyTorch] 모델 중간 레이어에서 특징 추출하기(get the intermediate features from the model)

이번 포스팅에서는 모델의 중간 레이어에서 특징을 추출하는 방법을 살펴보겠습니다. ㅎㅎ pretrained VGG19을 불러오고, 파라미터를 freeze 합니다. # pretrained VGG19를 불러옵니다 import torchvision.models as models device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model_vgg = models.vgg19(pretrained=True).features.to(device).eval() # 파라미터를 freeze 합니다. for param in model_vgg.parameters(): param.requires_grad_(False) 모델의 중간 레이어의 특징을 얻는 함수를..

[PyTorch] pretrained VGG 불러오고, 파라미터 freeze 하기

안녕하세요! 이번 포스팅에서는 pretrained VGG net을 불러오고, 모델의 파라미터 freeze를 하는 방법을 알아보겠습니다 ㅎㅎ!! 우선 pretrained VGG19를 불러옵니다. # pretrained VGG19를 불러옵니다 import torchvision.models as models device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model_vgg = models.vgg19(pretrained=True).features.to(device).eval() 파라미터를 freeze 합니다. # 파라미터를 freeze 합니다. for param in model_vgg.parameters(): param.requires..

[PyTorch] ShuffleSplit와 subset 함수를 사용하여 dataset 분할하기

안녕하세요! 이번 포스팅은 sklearn 패키지에서 제공하는 ShuffleSplit과 torch.utils.data의 Subset 함수를 사용하여 데이터셋을 분할하도록 하겠습니다. shufflesplit 함수는 데이터셋 인덱스를 무작위로 사전에 설정한 비율로 분할합니다. 즉, 4:1 로 분할하고 싶은 경우에 무작위 인덱스로 4:1 비율로 분할합니다. subset 함수로 데이터셋을 생성하면 부모 set이 업데이트(transformation)된 경우에 subset도 함께 업데이트 됩니다. 제가 사용하는 데이터셋은 999개의 이미지로 구성됩니다. train 0.8, test 0.2로 분할하겠습니다. # split the data into two groups # trian 0.8, test 0.2 from sk..

[PyTorch] skimage모듈 mark_boundaries 함수를 사용하여 segmentation 경계 표시하기

안녕하세요! 이번 포스팅에서는 skimage 모듈의 mark_boundaries 함수를 사용하여 senmentation 경계 표시하는 법을 살펴보겠습니다 ㅎㅎ ! mark_boundaries 함수를 사용하면, 이미지와 마스크 파일을 하나로 결합하여, 이미지 내에서 마스크 경계 부분만 표시합니다. 아래 사진이 예시입니다 ㅎㅎ 우선 필요한 라이브러리를 import 합니다. import os import numpy as np import matplotlib.pyplot as plt from PIL import Image from scipy import ndimage as ndi from skimage.segmentation import mark_boundaries 데이터 셋을 다운로드 받습니다. https:/..

Google Colab에 파일 업로드하기

안녕하세요! 이번 포스팅에서는 Google Colab에 파일 업로드 하는 방법을 살펴보겠습니다. 자꾸 까먹어서 기록합니다 ㅎㅎ!! 우선, 파일을 저장하고 싶은 디렉토리로 이동합니다. 저는 root 디렉토리에 data 디렉토리를 생성하여 해당 디렉토리에 파일을 업로드 하겠습니다. cd /root !mkdir data cd /root/data/ 디렉토리를 생성했고, 해당 디렉토리로 이동했습니다. 이제 파일을 업로드 하겠습니다. from google.colab import files file_uploaded = files.upload() 위 코드를 실행하면 아래와 같은 창이 나옵니다. 파일 선택후 업로드하면 됩니다 ㅎㅎ

[PyTorch] Albumentations 모듈 사용해서 이미지 transformation 적용하기.

안녕하세요 ㅎㅎ 오늘은 Albumentations 모듈을 사용해서 이미지 transformation을 정의하고, 데이터셋에 적용하겠습니다. Albumentations 모듈은 torchvision.transformer 보다 빠르게 작동하며, object detection task에서 이미지를 transform 적용하면 바운딩 박스도 함께 transform 되도록 할 수 있습니다. 즉, 아주 아주 편리합니다 ㅎㅎ 우선 albumentations 모듈을 설치합니다. # install transformation package !pip install -U albumentations 커스텀 데이터셋을 생성합니다. 저의 경우에는 VOC dataset을 사용했습니다. class VOCDataset(Dataset): d..

[PyTorch] 가중치 초기화 함수 정의하고 모델에 적용하기

안녕하세요! 가중치 초기화 함수를 정의하고 모델에 적용해보도록 하겠습니다. 자꾸 까먹어서 작성합니다ㅎㅎ! 가중치 초기화 함수를 정의하는 방법은 (1) 모델 구현 코드 내에 가중치 초기화 함수 정의하여 사용하기, (2) 모델을 생성한 뒤에 가중치 초기화 함수 정의하여 사용하기. 두 가지 방법이 있습니다. 개인적으로 (2) 번 방법이 편하여 2번 방법을 작성하겠습니다. 우선 구현한 모델을 생성해야 합니다. 저는 현재 gan을 공부하는 중이므로 discriminator, generator 두 개를 구현했습니다 ㅎㅎ model_dis = Discriminator().to(device) model_gen = Generator(params).to(device) 가중치 초기화 함수를 정의합니다. 값은 제가 임의로 설..

[PyTorch] PyTorch에서 제공하는 VOC dataset 불러와서 사용하기

voc dataset을 pytorch에서 제공하는 사실을 알고 계셨나요?! 저는 최근에 알게 되었는데요..ㅎㅎ 알기 전까지 많은 삽질을 했습니다..! pytorch에서 제공하는 voc dataset을 활용하는 방법에 대해 정리한 게시글이 없어서 한번 정리해보도록 하겠습니다! object detection을 공부하시는 분들에게 많은 도움이 됬으면 합니다. dataset을 불러오고, transforms를 적용한 뒤에 dataloader를 생성해보도록 하겠습니다. 필요한 라이브러리를 import 합니다. from torchvision.datasets import VOCDetection from PIL import Image, ImageDraw, ImageFont from torchvision.transform..

[PyTorch] torch.bernoulli 를 활용한 Stochastic depth 학습

안녕하세요! torch.bernoulli 함수를 활용해서 Stochastic depth 학습 하는 법을 알아보겠습니다. 이 포스팅은 stochastic depth 학습을 구현하는 법을 잊을까봐 기록합니다. 아래 class는 efficientnet에서 사용하는 bottlenet 입니다. class BottleNeck(nn.Module): expand = 6 def __init__(self, in_channels, out_channels, kernel_size, stride=1, se_ratio=4, p=0.5): super().__init__() self.p = torch.tensor(p).float() if stride == 1 else torch.tensor(1).float() self.residual..

반응형