CNN에는 이미지 크기를 줄이는 연산뿐이 아니라 이미지 크기를 키우는 연산도 필요하다. 여기서 이미지 크기를 키우는 연산을 업샘플링이라고 하며, 주로 이미지 생성이나 세그멘테이션 모델에서 사용한다.
Generator
잠재 벡터를 고차원의 이미지로 변환하며 저차원에서 고차원으로 데이터를 변환하는 방법이다. 잠재 벡터를 가지고 이미지를 생성할 수 있다.
Segmentation
segmentation은 이미지 영역을 분할하는 방법으로, 각 영역에 속하는 픽셀들을 영역을 나타내는 클래스로 분류한다. segmetatiion은 보통 다운샘플링과 업샘플링으로 구성되는데, 다운 샘플링 단계에서는 이미지 특징을 학습하고 업 샘플링 단계에서는 학습된 특징을 이용하여 픽셀 단위로 클래스를 분류해 나간다.
CNN에서는 언풀링(unpooling)이나 트랜스포즈 콘벌루션(transposed convolution)과 같은 방법으로 업샘플링 연산을 수행한다.
언풀링
언풀링은 풀링의 반대 연산으로, 요약된 통계 데이터를 요약하기 전 크기의 데이터로 복구하는 연산이다.
바늘방석 언풀링
바늘 방석(bed of nails) 언풀링은 2x2 영역의 첫 번째 픽셀은 원래의 값으로 채우고 나머지 픽셀은 0으로 채우는 방법이다.
최근접 이웃 언풀링
최근접 이웃(nearest neighbor) 언풀링은 첫 번째 픽셀은 원래의 값으로 채우고, 나머지 픽셀에는 가장 가까운 이웃인 첫 번째 픽셀과 같은 값으로 채우는 방법이다. 블록 같은 값을 가지고 전체 이미지에 블록 같은 패턴이 생긴다.
맥스 언풀링
맥스(max)언풀링은 다운 샘플링과 업샘플링이 대칭을 이루는 모델 구조에서만 사용할 수 있다. 맥스 풀링을 할 때 최댓값 위치를 기억해 두었다가 언풀링 시 기억해 둔 위치로 값을 복원시키는 방법이다. 복원 후 나머지는 0으로 채운다.
트랜스포즈 콘벌루션
언풀링 방식은 사전에 정의된 규칙에 따라 업샘플링을 하지만 이런 규칙이 모든 경우에 적합한 방식은 아니다. 때에 따라 업샘플링 필터를 학습해야 할 수도 있다.
트랜스포즈 콘벌루션은 업샘플링 필터도 학습하도록 만든 방법이다.
이미지의 첫 번째 픽셀과 트랜스포즈 콘벌루션 필터를 곱해서 3x3 출력 이미지 영역을 생성하고 다음 이미지의 두 번째 픽셀도 같은 과정을 반복하여 2칸 이동한 위치로 3x3 출력을 내보낸다.
4x4 이미지로 맞추기 위해 1픽셀을 삭제하고 겹쳐지는 부분의 픽셀값을 더해준다.
바둑판무늬 문제
위의 방법으로 트랜스포즈 콘벌루션을 진행하면 겹쳐지는 부분이 바둑판 처럼 보이게 된다. 이렇게 되면 학습에 방해를 주기 때문에 스트라이트를 조절해야한다. 콘벌루션 필터의 나누기 2를 한 값을 주면 2번씩 겹치기 때문에 바둑판 무늬가 생기지 않는다.
행렬곱
콘벌루션 행렬의 전치 행렬로 연산을 표현할 수 있고 1차원 트랜스포즈 콘벌루션 연산 결과가 행렬곱 형태로 변환한 트랜스포즈 콘벌루션 연산 결과와 같다는 것을 확인해보자.
전치행렬
슬라이딩 과정을 행렬로 표현하면 다음과 같이 대각선 모양을 가지는 행렬을 표현할 수 있다.
'Vision' 카테고리의 다른 글
CLIP 모델 활용 및 학습 (0) | 2023.12.12 |
---|---|
[CNN] 개선된 convolution 연산 (0) | 2023.01.26 |
[CNN] CNN의 성질 (0) | 2023.01.26 |
[CNN] 서브샘플링 Subsampling (0) | 2023.01.25 |
[CNN] CNN의 구조 (0) | 2023.01.25 |