반응형

CNN 18

[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] convolutional layer 출력 크기 계산하는 함수 만들기

CNN 모델을 구축하다보면 conv layer의 출력값 계산을 실수하여 모델이 오류가 발생하는 경우가 종종 있습니다. 실수를 방지하기 위해 conv layer의 출력값을 계산해주는 함수입니다. import torch.nn as nn import numpy as np # define the helper function def findConv2dOutShape(H_in, W_in, conv, pool=2): # get conv arguments kernel_size = conv.kernel_size stride = conv.stride padding = conv.padding dilation = conv.dilation H_out = np.floor((H_in + 2*padding[0] - dilation[..

[PyTorch] CNN 신경망 구축하고 MNIST 데이터셋으로 학습하기

PyTorch Computer Vision Cookbook 을 공부하고 정리한 포스팅입니다. colab 환경에서 MNIST 데이터를 활용해 간단한 CNN 신경망을 구축하고 학습, 평가까지 진행해 보도록 하겠습니다! 이번 포스팅에서는 다음 순서로 진행됩니다. MNIST 데이터셋 불러오고 전처리 CNN 모델 구축 loss function과 optimizer 정의 학습 및 평가 모델 파라미터 저장 및 불러오기 데이터 전처리 우선 구글 colab에 마운트를 해줍니다. from google.colab import drive drive.mount('cookbook') CUDA를 확인하고 device를 지정합니다. import torch if torch.cuda.is_available(): device = torch..

[논문 리뷰] SPPnet (2014) 리뷰, Spatial Pyramid Pooling Network

이번에 리뷰할 논문은 SPPnet 'Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition' 입니다. SPPnet 등장 배경 SPPnet은 CNN 구조가 고정된 입력 이미지 크기를 입력으로 취하는 데에서 발생한 문제점을 개선하기 위해 고안되었습니다. 기존 CNN은 고정된 입력 크기를 맞춰주기 위해서 crop, wrap을 적용합니다. 참고로, crop과 warp은 classification에서는 data augmentation, detection에서는 region proposal을 입력 사이즈에 맞춰주기 위해 이용합니다. crop과 warp을 적용하면 문제점이 발생합니다. crop을 적용하면 crop된 구역만 CNN을 통과..

[논문 리뷰] AlexNet(2012) 리뷰와 파이토치 구현

딥러닝 논문 읽고 파이토치로 구현하기 시리즈 1. [논문 리뷰] LeNet-5 (1998), 파이토치로 구현하기 이번에 읽어볼 논문은 'ImageNet Classification with Deep Convilutional Neural Networks'(AlexNet) 입니다. AlexNet 컴퓨터 비전 분야의 '올림픽'이라 할 수 있는 ILSVRC(ImageNet Large-Scale Visual Recognition Challenge)의 2012년 대회에서 AlexNet이 Top 5 test error 기준 15.4%를 기록해 2위(26.2%)를 큰 폭으로 따돌리고 1위를 차지했습니다. (Top 5 test error란 모델이 예측한 최상위 5개 범주 가운데 정답이 없는 경우의 오류율을 말합니다.) 이..

[논문 리뷰] LeNet-5 (1998), 파이토치로 구현하기

가장 기본적인 CNN 구조인 LeNet-5 논문을 읽어보고 파이토치로 직접 구현해보면서 CNN에 대한 이해도를 높여보겠습니다. LeNet-5은 1998년 Yann LeCun의 논문 'Gradient-Based Learning Applied to Document Recognition' 에 담겨있는 CNN 신경망의 구조를 의미합니다. 위 논문은 46page에 달하는 논문으로 문자 인식 업무에 CNN이 효과적인 이유에 대해 기술되어 있어, 읽어본다면 CNN에 대한 이해도를 높일 수 있을 것이라고 생각 합니다. 이제, 논문을 요약해보고 PyTorch로 구현해보겠습니다. 1. LeNet-5 등장 배경 LeNet-5은 Yann LeCun이 손으로 적힌 우편 번호를 전통적인 방법보다 효율적으로 확인하기 위해 고안된 ..

[Pytorch] 5. 파이토치로 합성곱 신경망(CNN) 구축하기

이전 포스팅에서 torch.nn 모듈을 사용해서 기본적인 신경망을 구축해보았습니다. 이번에는 파이토치를 사용하여 합성곱 신경망(CNN)을 구축하는 방법을 알아보겠습니다. CNN 으로 넘어가기 이제 3개의 합성곱 계층(convolutional layers)을 지닌 신경망을 구축해보겠습니다. 이전 섹션에서 어떤 함수도 모델의 형식에 대해 가정하지 않기 때문에, 수정 없이 CNN을 훈련하기 위해 이전 코드를 사용할 수 있습니다. 합성곱 계층으로서 Pytorch의 사전 정의된 Conv2d 클래스를 사용할 것입니다. 각 합성곱 뒤에 ReLU가 있습니다. 마지막에는 평균 풀링(average pooling)을 수행합니다. (view 는 numpy의 reshape 의 pytorch 버전입니다.) class Mnist_..

카테고리 없음 2020.12.09

[딥러닝] 신경망의 층을 깊게 하는 것의 중요성

사이토고키의 을 공부하고 정리해보았습니다. 층을 깊게 하는 것의 중요성 층을 깊게 하는 것의 중요성은 ILSVRC로 대표되는 대규모 이미지 인식 대회의 결과에서 파악할 수 있습니다. 이 대회에서 최근 상위를 차지한 기법 대부분은 딥러닝 기반이며, 그 경향은 신경망을 더 깊게 만드는 방향으로 가고 있습니다. 층의 깊이에 비례해 정확도가 좋아지는 것입니다. 층을 깊게 할 때의 이점은 다음과 같습니다. 1. 신경망의 매개변수 수가 줄어듭니다. 층을 깊게 한 신경망은 깊지 않은 경우보다 적은 매개변수로 같은(혹은 그 이상) 수준의 표현력을 달성할 수 있습니다. 합성곱 연산에서의 필터 크기에 주목해 생각해보면 쉽게 이해할 수 있습니다. 예를 보겠습니다. 아래 그림은 5X5 필터로 구성된 합성곱 계층입니다. 여기에..

[딥러닝] CNN에서 정확도를 높이는 방법 - 데이터 확장(data augmentation)

사이토고키의 을 공부하고 정리해보았습니다. 데이터 확장 - data augmentation 데이터 확장은 입력 이미지(훈련 이미지)를 알고리즘을 동원해 '인위적'으로 확장합니다. 아래 그림과 같이 입력 이미지를 회전하거나 세로로 이동하는 등 미세한 변화를 주어 이미지 개수를 늘리는 것입니다. 이는 데이터가 몇 개 없을 때 특히 효과적인 수단입니다. 데이터 확장은 다양한 방법으로 이미지를 확장할 수 있습니다. 예를 들어 이미지 일부를 잘라내는 crop이나 좌우를 뒤집는 flip 등이 있습니다. 일반적인 이미지에는 밝기 등의 외형 변화나 확대, 축소 등의 스케일 변화도 효과적입니다. 데이터 확장을 동원해 훈련 이미지의 개수를 늘릴 수 있다면 딥러닝의 인식 수준을 개선할 수 있습니다. 데이터 확장을 위한 파이..

[딥러닝] 합성곱 신경망(CNN) - CNN 구현하기

사이토고키의 을 공부하고 정리해보았습니다. [딥러닝] 합성곱 신경망(CNN) - 풀링 계층 구현하기 사이토고키의 을 공부하고 정리해보았습니다. 을 공부하고 정리해보았습니다. 을 공부하고 정리해보았습니다. 을 공부하고 정리해보았습니다. 을 공부하고 정리�� deep-learning-study.tistory.com 이전 포스팅에서 풀링 계층을 구현해보았습니다. 합성곱 신경망을 구현하는 방법을 공부해보겠습니다. CNN 구현하기 합성곱 계층과 풀링 계층을 구현했으니, 이 계층들을 조합하여 손글씨 숫자를 인식하는 CNN을 조립해보겠습니다. 여기에서는 다음과 같은 CNN을 구현합니다. "Convolution - ReLU - Pooling - Affine - ReLU - Affine - Softmax' 우선 Simp..

반응형