basic
- simpleNN
- cnn&vgg
- ResNet
- RNN
- Unet-imageSegmentation
- autoEncoder-1D
- autoEncoder-2D
- auto_coloring
- lstm generator
vision
semi-supervised learning
tmi
- Conv2d 이후 이미지 크기 =
$\lfloor{(W-K+2P)/S}\rfloor+ 1$ (W=이전 이미지 사이즈, K=커널 사이즈, S=스트라이드, P=패딩) - Conv2d 이후에도 이미지 크기가 같게하는 조건
- nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1, stride=1) # stride는 1이 디폴트
- 증명식 =>
$(X-3+2)/1+1 = X$
- Conv2d 이후에 이미지 크기가 1/2이 되는 조건
- nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=2, padding=1)
- 증명식 =>
$(X-3+2)/2+1=\lfloor{X/2+1/2}\rfloor=X/2$
- upsampling에 사용되는 Transposed Convolution
- nn.ConvTranspose2d()
- 이후의 이미지 크기 =
$S(W-1)+K-2P$
- ConvTranspose2d 이후에도 이미지 크기가 같게하는 조건
- nn.ConvTranspose2d(in_channels, out_channels, kernel_size=3, stride=1, padding=1)
- 증명식 =>
$1(X-1)+3-2=X$
- ConvTranspose2d 이후에 이미지의 크기가(한 변의 길이가) 두 배가 되게하는 조건
- nn.Conv2d(in, out, kernel_size=2, stride=2)
- 증명식 =>
$2(X-1)+2-0=2X$
- 시계열 신경망(RNN, LSTM, GRU) 매개변수 이해
- input_size: 입력 X의 특징(features) 개수
- hidden_size: hidden state h의 개수
- num_layers: (num_layers=1 기본) n개의 RNN을 쌓음
tip
- LAB: 각각 밝기, 나머지 AB는 컬러 축 (automatic_coloring에서 사용됨)
import cv2 import numpy as np from torch.utils.data.dataset import Dataset def rgb2lab(rgb): return cv2.cvtColor(rgb, cv2.COLOR_RGB2LAB) def lab2rgb(lab): return cv2.cvtColor(lab, cv2.COLOR_LAB2RGB)
- LAB 이미지의 shape은 (height, width, channels)인데, pytorch에서 사용하기 좋은 (C, H, W)로 바꾼다.
lab.transpose((2, 0, 1)).astype(np.float32)
- 자동채색 모델(let there be color)을 학습할 때 LAB 이미지가 사용되는데, 과정은 다음과 같다.
- img(rgb) -> lab 변환
- L, AB로 분리
- input: L -> output: AB
- L과 AB를 concatenation
- lab -> rgb 이미지 변환
- 출력해서 확인해보기
- RuntimeError: stack expects each tensor to be equal size, but got [3, 128, 128] at entry 0 and [1, 128, 128] at entry 20
- 데이터를 가지고 훈련하기 전, 데이터의 타입, 형식이 무엇인지를 알아야 할 필요가 있다.
- 잘 정제되지 않은 이미지 데이터의 경우 32bit(4채널), 8bit(1채널) jpg도 있을 수 있어 차원이 안맞는 경우가 발생한다.
- 32bit 이미지: 각 픽셀당 32비트(4바이트)의 정보를 사용하여 이미지를 표현한다. 기본 RGB에 알파 투명도 A가 추가되어 RGBA로 불린다.
- 이미지의 타입이 다름에 의해 생기는 오류를 방지하기 위해 다음 코드를 통해 통일시켜준다.
img = Image.open(images) if img.mode == 'RGBA': img = img.convert('RGB') if img.size(0) == 1: img = img.expand(3, -1, -1)
