반응형

Image processing/Deep-learning 18

Albumentations 이미지 Augmentation API 소개

이미지 증강방법은 딥러닝이나 컴퓨터 비전에서 학습된 모델의 퀄리티를 향상하기 위해 사용되는 방법이며, 기존 학습데이터를 이용하여 새로운 데이터를 생성하는 목적을 가지고 있다. Pytorch, Tensorflow등 다양한 프레임워크에서 사용 가능하며 pixel-level transforms, spatial-level transforms 등의 70개 연산을 지원한다. 또한, 데이터 타입(RGB-images, grayscale images, multispectral image, segmentation masks, bounding boxes, and keypoints)등 에서 이용 가능한다. Semantic segmentation on the Inria dataset Medical imaging Object d..

[Pytorch] torch.backends.cudnn.benchmark do?

torch.backends.cudnn.benchmark 코드는 True와 False로 설정할 수 있다. 이 코드의 역할은 다음과 같다. 내장된 cudnn 자동 튜너를 활성화하여, 하드웨어에 맞게 사용할 최상의 알고리즘(텐서 크기나 conv 연산에 맞게?)을 찾는다. 입력 이미지 크기가 자주 변하지 않는다면, 초기 시간이 소요되지만 일반적으로 더 빠른 런타임의 효과를 볼 수 있다. 그러나, 입력 이미지 크기가 반복될 때마다 변경된다면 런타임성능이 오히려 저하될 수 있다. https://discuss.pytorch.org/t/what-does-torch-backends-cudnn-benchmark-do/5936/7 What does torch.backends.cudnn.benchmark do? Does it..

Depth-wise Separable Convolution

기존 컨볼루션 연산은 두가지 분리 가능한 컨볼루션으로 나눌수 있다. 이러한 Separable 연산은 MobileNet이나 Xception 등에서 사용된다. Spatial Separable Convolution, Depth-wise Separable Convolution Spatial Separable Convolution(Depthwise) : 하나의 컨볼루션 연산을 공간적으로 나눈 방법이다. 예를 들어 3x3 컨볼루션 연산은 9 곱셈으로 한번의 컨볼루션 연산을 수행하는 대신, 동일한 효과를 얻기 위해 3x1, 1x3 곱셉으로 두번의 컨볼루션을 수행합니다. 곱셈이 적을수록 계산 복잡성이 줄어들고 수행 속도가 더 빠르다. 연산량의 비교 필터의 크기 : K, 입력의 채널 수 : C, 결과 채널 수 : M 기..

Deep Learning model 학습 Tip 정리

[참고 링크] 1. http://karpathy.github.io/2019/04/25/recipe/2. https://pcc.cs.byu.edu/2017/10/02/practical-advice-for-building-deep-neural-networks/ 단순히 해석한 글이며, 학습방법에 대한 견해는 다를 수 있으니 참고만 해주세요~ Building Deep Learning Model 1. 데이터와 하나가 되기 첫번째 단계는 데이터의 분포를 이해하고 패턴을 확인하는 것입니다. 데이터의 불균형(imblance), 편향(bias), 이미지와 라벨(label)등을 확인하는 것은 적용시킬 Deep learning model을 찾는데 도움이 됩니다. 예를들어, 이미지에서 찾아야 하는 정보가 Local 혹은 Gl..

[Deep Learning] GAN 학습에서의 문제점

참고자료 : https://ratsgo.github.io/generative%20model/2017/12/20/gan/ https://towardsdatascience.com/gan-ways-to-improve-gan-performance-acf37f9f59b 블로그들을 참고하여 나름 정리하였습니다. GAN의 경우 생성기와 분류기의 경쟁적 학습에 의해 그럴듯한 가짜 데이터를 만든다는 이론적배경은 그럴듯 하다. 그러나, 실제 데이터를 이용하여 학습 할 경우 몇가지 문제점이 생긴다. Mode Collapsing 학습에서 클래스가 여러 개인 실제 데이터의 분포를 따라가지 않고, 특정 데이터에 강하게 몰리는 현상이다. 즉, 다양성을 잃어버리는 현상이다. 모델은 손실 값만을 줄이려고 학습하기 때문에, 전체 데이터..

[Deep Learning] 딥러닝 디버깅 툴 Tensorwatch

참고 자료 Github : https://github.com/microsoft/tensorwatch Youtube : https://www.youtube.com/watch?v=MSWCQ9lRA1Y&feature=youtu.be&list=PL0oFI08O71gKEXITQ7OG2SCCXkrtid7Fq Facebook : https://ko-kr.facebook.com/groups/TensorFlowKR/permalink/937082699966122/ "기교가 끝나는 순간 예술이 시작된다" 딥러닝은 내가 가지고 있는 데이터를 가지고 최신 네트워크에 적용해서 단순히 정답을 얻어내는 것이 아니다. 디버깅을 통해 점진적으로 발전시켜가는 것이다. "블랙박스에 맡기는 것이 아니라 하나씩 처방해 가는 것이다", 이 말에..

[Deep Learning] 배치 정규화

참고자료 : [1] https://shuuki4.wordpress.com/2016/01/13/batch-normalization-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EA%B5%AC%ED%98%84/ [2] https://astralworld58.tistory.com/65 배치 정규화 배치 정규화는 Gradient Vanishing/Exploding과 같은 문제를 해결하기 위해 나온 방법이다. 지금까지는 이 문제를 활성화 함수(ReLU, Tanh, Sigmoid 등)의 변화, 가중치 초기화 방법, 작은 학습률등으로 해결했지만 이 논문에서는 가중치 초기값이나 학습률에 의존하지 않고 전체적으로 해결하고자 하였다. 미니 배치(mini-batch) 단위로 학습 바로 전,후 데이터를 정규화 하는 ..

딥러닝 모델 경량화 기술

참고자료 [1] 경량 딥러닝 기술 동향, ETRI 2019, 이용주, 문용혁, 박준용, 민옥기, DOI: 10.22648/ETRI.2019.J.340205 최근 GPU기반의 컴퓨팅 기술을 활용하여 다양한 딥러닝 모델이 만들어지고 있다. 하지만, 실제 디바이스나 IoT 센서에서 활용하기에는 모델이 무겁고 연산량이 많다. 경량 딥러닝 연구는 기존의 학습된 모델의 정확도를 유지하면서 크기가 작고 연산을 간소화하는 기술로 알고리즘 자체를 효율적으로 설계하거나 만들어진 모델의 파라미터를 줄이는 방법으로 나뉜다. 경량 알고리즘 : 컨볼루션 신경망의 경우, 주로 합성곱 연산량을 줄이기 위한 방법을 사용한다. Resnet, Densenet : 기존 신경망 모델 구조에서 단일 층별 정보만을 사용하는 것이 아닌 다양한 계..

[Deep Learning] 훈련, 검증 정확도를 통한 최적 모델얻기

참고 자료 : http://aikorea.org/cs231n/neural-networks-3/ 훈련/ 검증 정확도는 학습 시 최적의 모델을 얻기 위해 참고해야 하는 또다른 지표이다. 이 그래프는 훈련데이터에 과도하게 피팅된 과적합(Over-fitting) 중인지 발견할 수 있다. 빨간색 : 학습 데이터에 대한 정확도, 초록색 : 검증 데이터 정확도(약한 오버피팅), 파란색 : 검증 데이터 정확도(강한 오버피팅) 파란색 그래프는 빨간색 그래프(훈련 그래프)에 비하여 매우 낮은 검증 정확도를 보이고 있으며, 강한 오버피팅임을 보여주고 있다. 어느 시점 이후에 검증 정확도가 급격하게 떨어졌는지 확인함으로써, 최적의 모델 값을 찾을 수 있다. 또한, 정규화(Regularization)방법 - (L2 Loss, ..

[Deep Learning] 손실 함수를 통한 학습률 최적화 방법

참고 자료 : http://aikorea.org/cs231n/neural-networks-3/ 손실함수는 신경망이 학습할 수 있도록 나타내는 지표를 의미하며, 모델의 출력 값과 정답 값 간의 오차를 말한다. 딥러닝 모델에 대한 학습을 진행하다 보면, 학습률(Learning Rate)에 따라서 전역 최적값이나 지역 최적값에 도달하게 된다. 왼쪽 그림은 학습률에 따른 에폭 당 손실함수를 나타낸다. 적당한 학습률은 전역 최적 손실값을 얻기 때문에 낮은 값으로 수렴하게 되고, 너무 낮거나 높을 경우 지역 최적값에 빠지게 된다. 오른쪽 그림은 적당한 손실함수의 형태를 보이고 있으며, 위아래로 진동하는 이유는 배치 사이즈가 너무 낮기 때문이다. 그 이유는 모든 데이터에 대하여 그래디언트 업데이트가 수행되면 손실 함..

NMS(Non-Maximum Supression)

참고 자료 [1] https://ballentain.tistory.com/12 [2] https://study-grow.tistory.com/27 [3] https://dyndy.tistory.com/275 [4] https://towardsdatascience.com/non-maximum-suppression-nms-93ce178e177c Non-Maximum suppression는 영상처리 분야에서 엣지(edge)를 얇게 만들어주는 것을 말한다. 중심 픽셀을 기준으로 8방향의 픽셀 값들을 비교하여 중심픽셀이 가장 클 경우 그대로 두고 아닐 경우 제거해 주는 과정입니다. 쉽게 말해서, 영상안의 edge가 뭉개져 있을때 더욱 선명한 선을 찾기 위해 수행하는 과정이다. 이와 비슷하게 딥러닝의 객체 탐지 분..

[Deep Learning] 선형 회귀(Linear Regression)

선형 회귀(Linear Regression)는 주어진 데이터 x에 해당하는 목표값 y를 예측하는 문제를 해결하는 데 주로 사용됩니다.예를 들어, 투자한 시간에 대비하는 성적을 예측하는 문제나 사람의 몸무게를 통해 키를 예측하는 문제처럼 현실적인 문제를 선형적으로 데이터를 처리하여 해결하는 경우가 많습니다. ex 1) x = [1,2,3] y = [3,5,7] 과 같은 데이터가 있다고 할때, x의 값이 4이면 y는 어떤값을 가지게 될까?ex 2) x를 공부한 시간, y는 성적이라 할때 x의 값이 5이면 y는 어떤 값을 가지게 될까? 이러한 문제들은 간단한 선형회귀모델을 추론하여 해결할수 있습니다. 1. x와 y를 추론하기 위해 가설(Hypothesis)을 세운다. H(w,b) = wx+b2. 임의의 값 (..

[Deep Learning] 입력 데이터에서 데이터 정규화를 하는 이유

입력 데이터에 대하여 데이터 정규화(Normalization)를 하는 이유 신경망의 학습을 빠르게 할수 있는 하나의 기법은 입력데이터를 정규화 하는 것이다. 초기 입력데이터의 산포도가 1번 그래프와 같다고 가정해보자. 데이터를 3과 같이 정규화 하기 위해 다음과 같은 과정을 거치게 된다. 먼저, 평균을 빼는 것이다. 1번의 그래프는 2와 같이 0으로 옮겨지게 된다.다음으로, 분포를 일정하게 해준다. 2번 그래프에서 x1의 범위가 x2의 범위보다 비 정상적으로 크기 때문이다.결과적으로 3과 같은 데이터 분포를 얻게 된다.이와 같은 과정을 학습데이터 뿐만 아니라, 테스트 데이터에도 동일하게 적용해야 한다. 그렇다면, 왜 입력 특성을 정규화 해야하는 것일까? 비용함수에 대한 정의는 다음과 같다. 그래프는 최적..

[Pytorch] 선형 레이어와 비선형 레이어

참고 자료[1] Pytorch로 시작하는 딥러닝, 비슈누 수브라마니안 지음, 김태완 옮김 딥러닝 학습과정 선형 레이어선형 레이어는 여러가지 이름으로 불린다. 다른 프레임워크에서는 덴스 레이어(dense Layer) 또는 연결 레이어(Fully Connected Layer)라고 부르기도 한다. 다수의 복수 레이어를 사용한다는 개념은 각 레이어 마다 입력 데이터의 패턴을 학습하고, 다음 레이어는 앞에서 학습한 패턴을 기반으로 학습을 이어나간다는 것이다. 그러나, 단순히 선형 레이어를 연속으로 여러 개 쌓게 되면 1개 선형 레이어로 간단하게 표현된 학습 결과와 같다. Y = 2(3X) - 2개의 선형 레이어Y = 6(X) - 1개의 선형 레이어 이러한 문제를 해결하기 위해, 여러 비선형 함수를 사용하게 되며 ..

[Deep Learning] 확률적 경사 하강법(Stochastic Gradient Descent)

참고 자료 [1] https://light-tree.tistory.com/133 딥러닝 용어정리, MGD(Mini-batch gradient descent), SGD(stochastic gradient descent)의 차이 제가 공부한 내용을 정리한 글입니다. 제가 나중에 다시 볼려고 작성한 글이다보니 편의상 반말로 작성했습니다. 잘못된 내용이 있다면 지적 부탁드립니다. 감사합니다. MGD(Mini-batch gradient descent), SGD(st.. light-tree.tistory.com [2] https://twinw.tistory.com/247 수식과 코드로 보는 경사하강법(SGD,Momentum,NAG,Adagrad,RMSprop,Adam,AdaDelta) 1. 개요 가중치를 조절하는 ..

[Deep Learning] 배치 경사 하강법(Batch Gradient Decent)

참고자료 [1] https://ruder.io/optimizing-gradient-descent/index.html#gradientdescentvariants An overview of gradient descent optimization algorithms Gradient descent is the preferred way to optimize neural networks and many other machine learning algorithms but is often used as a black box. This post explores how many of the most popular gradient-based optimization algorithms such as Momentum, Adagr..

[Pytorch] 딥러닝 신경망에서 사용되는 기본 구조

참고 자료 [1] Pytorch로 시작하는 딥러닝, 비슈누 수브라마니안 지음, 김태완 옮김 신경망에서 기본 블록으로 사용되는 주요 컴포넌트를 구현해 보았으며, 대부분의 딥러닝 구조는 이러한 큰 틀을 벗어나지 않는다. 각각의 의미를 파악하고, 구조에 대해 미리 학습해보자. 1. 첫 신경망에서의 데이터 준비, 데이터 로딩 2. 학습 파라미터 생성 3. 신경망 모델(네트워크 구현, 오차함수, 신경망 최적화(옵티마이저)) 1. 첫 신경망에서의 데이터 준비, 데이터 로딩 첫 신경망 코드에서 get_data 함수는 변수 2개를 다음과 같이 생성합니다. def get_data(): train_x = np.asarray([1.1,2.2,3,4,5,6,7,8.999,9.555]) train_y = np.asarray([..

[Pytorch] 차원에 따른 Tensor

참고 자료[1] Pytorch로 시작하는 딥러닝, 비슈누 수브라마니안 지음, 김태완 옮김Pytorch는 데이터를 추상화 하는 Tensor와 Variable 을 제공. Tensor는 파이썬의 numpy 배열과 유사한 클래스를 의미하며, GPU 에서 향상된 성능을 제공하기 때문에 딥 러닝(Deep learning)에서는 Tensor의 형태로 데이터를 변환하여 사용한다.Tensor의 유형 및 연산1. 스칼라(Scalar) : 0차원 Tensor로, 단순하게 하나의 값만 존재한다. 2. 벡터(Vector) : 1차원 Tensor로, 1차원 배열을 의미한다.3. 행렬(Matrix) : 2차원 Tensor로, 행렬의 의미한다.4. 3차원 Tensor : 이미지와 같은 여러 형렬을 결합한 데이터를 의미한다. 이미지의..

반응형