인공지능/공부

딥러닝개론 정리 2 - Convolution, CNN, 합성곱

이게될까 2024. 4. 22. 21:10
728x90
728x90

공간 데이터(이미지)를 FCN하기 위해 1차원으로 변환하는 순간 형상정보가 분산 되기 때문에 패턴 인식이 어렵다.
또한 파라미터의 개수, 연산량의 기하급수적으로 증가하기 때문에 이미지 데이터 처리에 FCN은 별로다

시신경 시스템을 모방하였다. -> 계층적으로 합성곱을 진행한다.

입력 데이터 - Width * Height * Depth(채널)

수용영역 - filter의 크기에 따라 달라진다.

activation map = convolution연산의 결과로 만들어지는 이미지
feature map = 합성곱 연산 결과만 한것 (activation function x)

서브 샘플링 - 데이터를 낮은 빈도로 샘플링 했을 때 샘플을 근사하는 연산
데이터가 이미지면 이미지 크기를 줄이는 연산이 되어 다운 샘플링이라고도 부른다.
pooling, stride

출력 크기 = (입력 - 필터)/스트라이드 +1

출력 크기 = (입력 + 2 * 패딩 - 필터)/스트라이드 +1

convolution 성질
1. 일부 영역만 연결되어 있고 나머지는 연결이 있는 희소 연결 성질을 가진다.
weight 수가 확 준다.
2. 파라미터 공유하는 성질을 가진다. -> 메모리와 계산이 극적으로 감소한다.
3. 이동 등변성 - 데이터가 이동하더라도 convolution으로 추출된 feature는 똑같다.

Convolution 한계
1. 파라미터 수와 계산량이 많다.
채널 수가 늘어나면 가중 합산하기 때문에 계산량이 많아진다.
2. 죽은 채널이 발생해도 알기 어렵다.
죽은 채널은 특징이 생성되지 않기 때문에 의미 없는 연산과 성능 하락으로 이어진다.
3. 여러 채널에 대한 한꺼번에 연산하므로 공간 특징과 채널 특지이 구분되지 않는다.
채널 간 상관관계가 낮은 채널은 마치 잡음과 같아 학습 속도를 떨어뜨린다.

수용 영역 넓히기 = filter 사이즈 증가 or 깊이 늘리기 or 서브 샘플링 layer 추가
BUT 파라미터와 계산량이 많아지거나 공간 특징이 손실된다. -> 팽창 convolution -filter 간격을 띄운다.

filter size가 1*1인 필터 - 점별 콘볼루션
채널 수를 변경하여 여러 가지 특성을 동시에 뽑는다.
독립적인 특성을 보여줄지 알 수 없기 때문에 조절하는데 사용

그룹 콘볼루션 - input과 filter의 채널을 여러 그룹으로 나눠서 각각 convolution연산한다.
파라미터와 계산이 절약되며 채널간에 상관 관계를 갖는 구조를 학습할 수 있다.

깊이별 콘볼루션 - 모든 채널을 나눠서 각각 한개씩 필터 연산 뒤 다시 합친다.
기존 연산이 채널별 공간 특징을 학습할 수 없으므로 공간 특징을 살릴 수 있도록 채널별로 연산을 진행 후 다시 결합한다.
큰 굴곡, 세부 디테일을 나눠서 볼 수 있다.

깊이별 분리 콘볼루션 = 깊이별 conv + 점별 conv
공간 특징과 채널 특징을 별도로 학습하며 기존보다 8~ 9배 정도 계산량 감소한다.

셔플 그룹 conv -
그룹 conv는 같은 채널 그룹 안에서만 정보가 흐르지 그룹 간 정보를 교환하지 않는다.
-> 그룹 간 채널을 섞는 방식으로 채널 그룹 간 정보를 교환하여 표현을 강화한다.

공간 분리 conv - 필터를 가로방향, 세로방향으로 나눠서 진행(인셉션 V3,V4)
계산량을 낮출 순 있지만 모든 filter를 인수분해할 순 없는 만큼 최적해가 아닌 준 최적해를 찾을 수 있다.

upsampling - 이미지를 키우는 연산. 생성형, segmentation
downsampling(encoding) -> latent space -> upsampling(decoding)

unpooling - 사이즈 늘리는 pooling
바늘 방석 언 풀링 - 첫번째 픽셀만 채우고 나머진 0으로 채우는 법
최근접 이웃 언풀링 - 동일한 값으로 채우기
max unpooling - 풀링할 때 기록한 최댓값 위치로 보내고 나머진 0으로 채운다.

transpose conv - upsampling할 때 사용되는 conv 연산
겹쳐진 부분의 픽셀값이 더해지면서 바둑판 무늬가 생길 수 있는데 스트라이드와 필터 조절을 통해 같은 횟수로 겹치도록 해야한다.

컨볼루션(Convolution)과 크로스-코릴레이션(Cross-correlation)은 신호 처리, 이미지 처리, 딥러닝 등 다양한 분야에서 사용되는 두 가지 수학적 연산입니다. 두 연산은 유사하게 보일 수 있지만, 기본적인 차이점이 있습니다.

1. 컨볼루션 (Convolution)

컨볼루션은 신호나 이미지 등 두 함수를 결합하여 새로운 함수를 생성하는 수학적 연산입니다. 컨볼루션은 주로 시스템의 출력을 찾거나 신호를 필터링하는 데 사용됩니다. 컨볼루션의 핵심적인 단계 중 하나는 하나의 함수를 반전시키고 다른 함수 위를 이동하면서 두 함수의 겹치는 부분의 적분을 계산하는 것입니다.

수학적으로, 두 함수 ( f )와 ( g )의 컨볼루션은 다음과 같이 표현됩니다:

2. 크로스-코릴레이션 (Cross-correlation)

크로스-코릴레이션은 두 신호 간의 유사성을 측정하는 데 주로 사용됩니다. 이 연산은 신호나 이미지 분석에서 패턴 인식, 신호 동기화 등에 활용됩니다. 크로스-코릴레이션은 컨볼루션과 유사하지만, 하나의 함수를 반전시키지 않습니다.

수학적으로, 두 함수 ( f )와 ( g )의 크로스-코릴레이션은 다음과 같이 표현됩니다:

주요 차이점

  • 반전(Flip): 컨볼루션은 하나의 함수를 시간 축이나 공간 축에 대해 뒤집습니다(반전). 크로스-코릴레이션에서는 반전 과정이 없습니다.
  • 용도: 컨볼루션은 시스템의 출력을 계산하거나 신호를 필터링하는 데 사용되며, 크로스-코릴레이션은 두 신호 간의 유사성을 측정하는 데 사용됩니다.

딥러닝에서의 사용

딥러닝, 특히 합성곱 신경망(CNN)에서는 "컨볼루션"이라는 용어가 사용되지만, 실제 수행되는 연산은 대부분 크로스-코릴레이션입니다. 여기서는 학습 가능한 필터(커널)를 입력 데이터에 적용하여 특징을 추출하는데, 필터가 반전되지 않습니다. 이러한 이유로, 딥러닝 커뮤니티에서는 이 연산을 종종 "컨볼루션"으로 부르며, 이는 엄밀히 말해 크로스-코릴레이션에 가깝습니다.

 

728x90