CNN (Convolutional Neural Network)
- Convolution Layer
- 네트워크가 비전 태스크를 수행하는 데에 유용한 Feature들을 학습할 수 있도록 함
- Filter(=Kernel): Input Image를 특정 크기의 Filter를 이용하여 탐색하면서 Convolution 연산을 시행하여 Filter 영역에 대한 특징을 추출
- Stride (S): Filter를 얼마만큼의 간격으로 움직이는 지를 나타냄
- Padding(P): Feature Map의 크기를 일정 수준으로 유지하기 위해서 임의의 값을 넣은 Pixel을 얼마나 추가했는지를 나타냄
- Zero Padding: 0으로 채운 Pixel을 주변에 채워 넣는 것 - Activation Function
- 네트워크에 비선형성을 가해주는 역할을 함
→ Convolution 연산 결과 1차 함수를 얻게 되므로, Convolution Layer만으로는 선형적인 모델만 만들 수 있게 됨
→ 따라서 Convolution 연산을 거친 뒤 비선형성을 지닌 함수(=Activation Function)를 통과시켜준다면, 복잡한 문제도 풀 수 있는 고차 함수 모델을 만들 수 있게 됨 - Pooling Laye
- Feature Map에 Spatial Aggregation을 시켜줌
AlexNet
- CNN 기반 딥러닝 모델의 시초
- 구조
- Convolution - Pooling - Batch Normalization의 구조
- 8개의 레이어를 가짐
- Convolution Layer
- Activation Function
- ReLU가 가장 좋은 성능을 보여 도입 ! - Pooling Layer
- Overlapping Pooling을 했을 때 그렇지 않은 경우 (F=2, S=2)보다 좋은 성능을 보였다고 함 - Local Response Normalization (LRN)
- Lateral Inhibition 현상: 강하게 활성화된 뉴런이 다른 뉴런의 값을 억제하는 현상
- 너무 강하게 활성화된 뉴런이 있을 경우 주변 뉴런들에 대해서 Normalization 진행
- Normalize를 통해 강하게 활성화된 뉴런의 값을 감소시켜, 특정 뉴런만 활성화되는 것을 막음
- 이후에는 Batch Normalization을 주로 사용 - Overfitting 방지
- Overfitting : 학습 데이터에 너무 과적합(Overfitting)되어 학습되는 경우를 말함
- Overfitting된 모델의 경우 학습 데이터에 대해서는 좋은 성능을 나타내지만, 학습 데이터에서 본 적 없는 테스트 데이터에 대해서는 매우 낮은 성능을 보이게 됨
- 학습 데이터에서 보지 않은 데이터에 대해서 좋은 성능을 보이는 일반화(Generalization)가 잘 된 모델을 만드는 것이 궁극적인 목표이므로 Overfitting을 피하기 위한 방법들이 필요함 - Data Augmentation
- 학습 데이터에 변형(Augmentation)을 가해서 좀 더 다양성을 지닌 데이터로 학습될 수 있도록 하는 방법 - Dropout
- 뉴런 중 일부를 일정 비율(p)로 생략하면서 학습을 진행하는 방법
- 몇몇 뉴런의 값을 0으로 바꾸어서 학습 시에 영향을 미치지 못하도록 만들어 일정 뉴런의 값에 치중해 학습되는 것을 방지함
- Dropout은 학습 시에만 행해지고, 테스트를 할 때는 모든 뉴런을 사용함
VGGNet
- Small Filters, Deeper Networks
- 3x3 conv 세 개가 7x7 conv 하나와 비슷한 효과 (=effective receptive field)
- 또한 더 적은 파라미터로 구현 가능함
- C가 레이어 당 채널 수일 때, 3 * (32C 2 ) vs 72C 2
- 하지만 더 많은 레이어를 쌓았을 때 non-linearities를 높일 수 있음
ResNet
- 구조
- Efficiency of ResNet
- Residual Connection
- 깊은 네트워크일수록 Optimization이 어렵다
- Overfitting은 학습 데이터에서는 좋은 성능을 나타내지만, 테스트 데이터에서는 매우 낮은 성능을 보이는 것을 말함
- 그러므로 Training Error와 Test Error 모두 높은 Deep Plain Model의 경우 Overfitting으로 인한 현상이라고 보기 어려움
- 깊은 모델일수록 더 풍부한 Feature에 대해서 학습할 수 있다는 장점이 있음에도 불구하고 성능이 오르지 않은 것은 깊은 모델의 경우 Optimization이 더 어렵기 때문에 발생한 문제라고 해석할 수 있음
- Identity Mapping
- 쌓여진 레이어가 그 다음 레이어에 바로 Optimize되는 것이 아니라 Residual Mapping에 Optimize되도록 만듦
- 추가적인 파라미터도 필요하지 않으며, Shortcut Connection만 추가되기 때문에 복잡한 곱셈 연산도 필요하지 않다는 장점을 지니고 있음
- 모델 F(x)는 F(x) = H(x) 가 되는 방향으로 optimize됨 - Bottleneck Layer
- 깊은 네트워크의 단점
- Convolution layer를 연속해서 쌓을 때 Feature Map의 Dimension(=Channel)을 커지거나 유지시키면서 다양한 특징에 대한 학습이 가능하도록 함
- Channel의 수가 늘어난다는 것은, Convolution 연산 시 필요한 Filter의 수가 많아진다는 것을 의미하기 때문
- 하지만 계속해서 Channel의 수가 늘어날 경우 모델이 깊어질수록 연산에 필요한 파라미터 수가 급격하게 늘어나기 때문에 학습에 어려움이 생기게 됨
- 1x1 Conv의 효과
- 3x3 Convolution Layer Input과 Output 간의 dimension을 맞추는 데에 사용됨
- Input과 Output간의 채널 수를 맞추면서도 모델의 파라미터 수는 크게 늘리지 않을 수 있게 됨 - Batch Normalization
- Input들이 잘 Normalize 되어 있지 않음 (Bias가 클 수 있다)
- 특정 레이어에서 매우 큰 Weight를 가지게 될 수 있음
- 따라서 Input이 각 레이어마다 일정하게 scale 되어 계산될 수 있도록 하는 장치가 필요함
- Deep Network가 잘 학습될 수 있도록 함
- Gradient Flow를 개선시킴
- 더 빠르게 Converge될 수 있도록 함
- 학습 시 Regularization을 한 것 같은 효과를 얻을 수 있음
- 좀 더 Robust한 모델이 될 수 있도록 하는 데에 기여함
- ResNet에서는 모든 Convolution Layer 이후에 Batch Normalization을 해줌 (Conv - BN - ReLU 의 구조)
- 과정 - Input (x)의 shape = N x D
- Learnable Scale and Shift Parameter (γ, β)의 shape = D
- 즉 γ = σ, β = μ가 되도록 학습함
EfficientNet
- Baseline Model
- MBConv Block = Mobile inverted Bottleneck Convolution (MBConv)
- Depthwise Separable Convolution: Depthwise conv + Pointwise conv
- Squeeze and Excitation: Feature를 압축했다가 증폭하는 과정을 통해 Feature의 중요도를 재조정 함
- Squeeze : Global Average Pooling 등을 사용하여 1x1xC 크기로 압축하는 과정 → 각 채널의 중요한 정보만 담고 있을 수 있도록 압축한 것
- Depthwise conv + Pointwise conv : 두 개의 FC layer를 더해주어 각 채널들의 중요도를 추출함 → 이를 기존 Feature Map에 곱해주게 되면, 채널의 중요도가 학습된 새로운 Feature Map을 얻을 수 있음 - Baseline Model Scaling
-> Baseline Model을 기반으로 다양하게 Scale up한 모델들 중 가장 효율적인 모델을 찾는다 !
- FLOPS vs. Accuracy Trade-off Curve
- 깊은 모델의 필요성 : Resolution이 커지면, 더 큰 Receptive Field가 필요하므로 더 많은 Layer들을 쌓은 깊은 모델이 높은 정확도를 보임
- 더 넓은 Channel의 필요성 : 더 큰 Resolution를 사용하게 되면 이미지의 디테일들, 즉 High Frequency Information에 대한 정보도 포함되어 있다는 장점이 있는데, 이를 효과적으로 사용하기 위해서는 더 큰 Width를 가진 Channel이 필요함 - Compound Scaling
- Channel Width를 늘리기
- 모델의 Depth를 늘리기
- Input Image의 해상도 높이기
- Individual Scaling: 깊이, 넓이, 그리고 해상도를 각각 독립적으로 scaling하는 방법
- Compound Scaling: 깊이, 넓이, 그리고 해상도를 동시에 scaling하는 방법
- Compound Coefficient : uniformly scales network width, depth, and resolution in a principled way
- 아래 식에서 상수이며, small grid search를 통해 결정됨
- 계산량은 깊이에 비례하고, 나머지 넓이와 해상도의 경우 그 제곱에 비례하므로 아래와 같은 비율로 결정
- 모델의 Hyperparameter를 업데이트 하는 방법
- 먼저 ϕ=1로 고정하고, α, β, γ에 대해서 small grid search 수행
- 그 결과, α=1.2, β=1.1, γ=1.15로 α⋅β2 ⋅γ2≈2 라는 결과를 얻음
- 다음으로 α, β, γ를 찾은 값으로 고정한 뒤, ϕ를 변화시키며 모델 전체의 크기를 scaling함 - EfficientNet의 결과
CNN vs. 고전 컴퓨터 비전
- 고전 컴퓨터 비전
- 고전 컴퓨터 비전에서의 Filter
- Sobel Filter: 정해진 Sobel Kernel을 통해 x 방향과 y 방향으로 변화율을 계산하여 엣지를 검출하게 되며, 학습 가능하지 않음. - 현대의 컴퓨터 비전
- 학습 가능한 Filter의 등장
- 고전 컴퓨터 비전의 방법만으로는 성능이 좋지 않거나 해결이 불가능했던 태스크들을 할 수 있게 됨
- CNN = Convolutional Neural Network
- Convolution Filter: 현대에 들어서는 Convolution 연산을 통해 산출한 결과를 정답지(Ground Truth, GT)와 비교하여 오차를 줄여나가는 방식 등으로 계속 업데이트 되는 학습 가능한 필터를 많이 사용하게 됨. - 학습 가능한 파라미터
- 학습 가능한 파라미터들을 가진 레이어 예시
- Convolution Layer
- Batch Normalization Layer
- Fully Connected Layer
- 학습 가능하지 않은 레이어 예시
- Activation Layer
- Pooling Layer
CNN Layer
- CNN 모델의 구성
- Convolution Block: Convolution Layer → Batch normalization Layer → Activation Layer
- Pooling Layer - Convolution Layer
- 네트워크가 비전 태스크를 수행하는 데에 유용한 Feature들을 학습할 수 있도록 함
- Convolution Layer를 여러개 쌓는 경우, 뒤 레이어의 결괏값 하나를 만드는데 사용되는 이미지의 범위가 넓어진다
- Convolution Layer의 초반 Layer의 경우 edge와 같은 low-level feature를 주로 학습하게 되고, 후반 Layer의 경우 shape과 같은 high-level feature를 주로 학습하게 됨 - Batch Normalization
- Deep network가 잘 학습될 수 있도록 함
- Gradient flow를 개선시킴
- 더 빠르게 converge될 수 있도록 함
- 학습 시 regularization을 한 것 같은 효과를 얻을 수 있음
- 좀 더 robust한 모델이 될 수 있도록 하는 데에 기여함 (즉, overfitting을 방지하는 데에 도움을 줌)
- 보통 Convolution Layer 다음, 그리고 Activation Layer 전에 Batch Normalization을 해줌 - Activation Layer
- 모델에 비선형성을 부여해 주기 위해서 사용됨
- 선형 함수의 Layer들로만 구성될 경우 여러 개를 쌓더라도 선형 함수 하나로 표현될 수 있는 모델이 될 뿐이기 때문에, 깊은 네트워크의 장점을 살릴 수 없게 됨
- Sigmoid : [0, 1] 사이의 값으로 변경해 줌
- Gradient 값이 kill 되는 현상이 생길 수 있음 (e.g. σ(x)의 값이 0에 가깝거나 1에 가까운 값일 경우)
- Sigmoid를 거친 결과는 0에 centroid되어 있지 않음 (항상 양수 값만 가짐)
- Exponential 함수를 계산해야 하므로 cost가 높음
- Tanh : [-1, 1] 사이의 값으로 변경해 줌
- 여전히 gradient 값이 kill 되는 현상이 생길 수 있음
- Tanh를 거친 결과는 0에 centroid되어 있음
- ReLU : 음수면 0, 양수면 입력 그대로
- 양수의 값을 가질 경우 gradient가 kill되지 않음
- Computational cost가 매우 적음
- Sigmoid나 tanh 함수보다 매우 빠르게 수렴함 (e.g. 대략 6배 빠름)
- ReLU를 거친 결과는 zero-centroid가 아님
- 음수값을 가질 경우 gradient가 0이므로 update 되지 않음
- Leaky ReLU : 음수면 입력의 1/10, 양수면 입력 그대로
- 양수의 값을 가질 경우 gradient가 kill되지 않음
- Computational cost가 매우 적음
- Sigmoid나 tanh 함수보다 매우 빠르게 수렴함 (e.g. 대략 6배 빠름)
- ReLU를 거친 결과는 zero-centroid가 아님
- 음수값을 가질 경우 gradient가 0이므로 update 되지 않음 - Pooling Layer
- Feature Map에 Spatial Aggregation을 시켜줌
- 모델의 파라미터 수를 줄여줌
- 더 넓은 Receptive Field를 볼 수 있게 해줌
- Max Pooling vs. Average Pooling
- Max Pooling의 단점: 정보의 손실이 일어날 수 있음
- Average Pooling의 단점: 중요한 정보가 희석될 수 있음
CAM (Class Activation Mapping)
- Fully Connected Layer (FC Layer)의 단점: Flatten하는 과정을 거치기 때문에 Pixel의 위치 정보를 잃게 됨
- Global Average Pooling: Flatten하는 대신 Global Average Pooling을 거친 것으로, Feature Map 하나 당 하나의 특징 변수(Fk)로 변환하게 됨.
- 구조
- FC layer 대신 GAP을 수행하여 각 클래스로 분류될 확률에 영향을 미친 객체의 좌표 (x,y)를 추출할 수 있음
- 결과
- Global Average Pooling (GAP): 각 Feature Map에서 전체적인 특징들을 찾아내게 되어 Localization 능력이 좋음
- Global Max Pooling (GMP): 각 Feature Map 에서 가장 값이 큰 값을 추출하는 방법으로, Feature Map에서 뚜렷한 특징들만 찾아내게 되어 Localization 능력이 GAP보다는 낮다고 함
Grad-CAM (Gradient-weighted Class Activation Map)
'Study > 컴퓨터비전 CV' 카테고리의 다른 글
Object Detection (1) | 2025.01.03 |
---|---|
Image Classification (0) | 2025.01.03 |
컴퓨터 비전 모델 구조 (0) | 2024.12.23 |
Computer Vision-고전 컴퓨터 비전 (0) | 2024.12.23 |
Computer Vision_Classification (4) | 2024.12.23 |