
-> FNN에서는 한 층의 모든 노드가 다음 층의 모든 노드와 연결됨
-> 각 연결에는 가중치가 있으며, 학습 알고리즘을 통해 학습되어야 함
ex) 64 X 64 픽셀의 grayscale(흑백) 이미지를 입력으로 할 경우
각 픽셀은 0~255사이의 값으로 표현
64 x 64 x 1 = 4096(행 x 열 x 채널)개의 값
FNN의 입력층 : 4096개의 노드를 가짐
다음 층이 500개의 노드를 가진다면, 완전 연결 구조이므로 4096 x 500 = 2048000개의 가중치가 필요함
ex) 64 x 64 픽셀의 컬러 이미지의 경우
64 x 64 x 3 = 12288개의 값으로 표현
가중치는 12288 x 500 = 6144000개
-> 복잡한 문제를 해결하기 위해 FNN에서는 여러 개의 Hidden layer가 필요함 -> 가중치가 너무 많아지는 문제 발생
-> 가중치가 너무 많아지면, 탐색 공간의 차원이 증가하여 학습이 더 어려워지고, 학습에 더 많은 시간과 자원이 소모되고, overfitting의 가능성이 증가함

-> 2D 이미지가 입력층에서 1D 벡터로 표현되어 데이터의 공간적 관계(spatial relationship)가 무시됨
1959년, Hubel과 Wiesel은 뇌의 시각 피질이 시각 정보를 처리하는 방식을 이해하기 위해 실험을 진행
고양이 앞에서 밝은 선을 움직이면서 시각 피질의 뉴런 활동을 기록
▪ Hubel과 Wiesel은 1981년에 노벨상을 수상
▪ 복합 세포와 단순 세포에서 영감을 받아, Fukushima는 1980년에 Neocognitron을 제안
-> 계층적 신경망으로, 일본어 손글씨 인식에 사용됨
-> 최초의 CNN이었으며 자체 학습 알고리즘을 가짐
▪ 1989년에 LeCun은 역전파(backpropagation)를 통해 학습되는 CNN을 제안
▪ CNN은 ImageNet 챌린지에서 다른 모델들을 능가하면서 인기를 얻음
-> 객체 분류 및 탐지 대회
-> 수백 개의 객체 범주와 수백만 개의 이미지로 구성
-> 2010년부터 현재까지 매년 개최
-> AlexNet (2012), ZFNet (2013), GoogLeNet & VGG (2014), ResNet (2015)
: 28 x 28 픽셀의 grayscale 이미지의 경우, 2D 형태로 28 x 28 행렬로 입력됨
-> FNN과 달리 입력을 1차원 벡터로 "Flatten"하지 않음!
-> 공간적 관계를 더 쉽게 포착 가능


: 여러 filters(kernels)로 구성
: 2D 이미지에 대한 filter도 2D

-> 5x5 이미지

-> 3x3 필터

-> 픽셀값에 필터값을 곱해서 모두 더함
: 5x5, 3x3 등 다양하게 설정 가능
: 너무 큰 크기는 피하는 게 좋음 (학습 알고리즘이 필터 값(가중치)을 학습해야 하기 때문)
: 짝수보다 홀수 크기가 선호됨 (출력 픽셀 주위에 모든 입력 픽셀이 고르게 배치되는 좋은 기하학적 특성이 있음, 중심 픽셀 존재, 대칭성 존재)
: 필터가 위치하는 영역
: 3x3 필터를 5x5 이미지에 적용하면 3x3 이미지가 만들어지므로, 이미지 크기가 감소됨
-> 이미지 크기를 그대로 유지하려면 Padding을 사용함

-> 1x1 padding인 경우
: 필터를 오른쪽 or 아래로 몇 픽셀씩 이동할지를 결정하는 값

-> stride 2인 경우
: 컨볼루션 과정에서 필터의 수용 영역(Receptive Field)을 확장하는 기법
: 필터가 한 번에 더 넓은 범위의 픽셀을 처리할 수 있도록 해주는 방법
-> 더 많은 공간적 정보를 고려하면서, 필터의 크기나 계산량을 크게 늘리지 않고 이미지를 처리할 수 O

-> Dilation rate : 2 (커널 사이의 간격)

- A Stack of causal convolution layer

- A stack of dilated causal convolutional layer
-> 파형 모델링(waveform modeling)에서 필터의 수용 영역을 효과적으로 확장함

: 필터를 전체 이미지에 적용한 후, 비선형성을 도입하기 위해 출력에 활성화 함수를 적용함
-> CNN에서 선호되는 활성화 함수는 ReLU
-> ReLU는 양수인 출력 값을 그대로 두고, 음수인 값은 0으로 대체함


- Single channel 2D convolution
: (B, 1, H, W) 로 표기 가능
B : Batch size(한 번에 모델로 입력되는 데이터(이미지) 개수)
1 : Channel 수
H : 이미지의 Height(픽셀 수)
W : 이미지의 Width(픽셀 수)
- Triple channel 2D convolution
: (B, 3, H, W) 로 표기 가능

: 다중 채널 2D 필터의 출력은 단일 채널 2D 이미지임
-> 여러 필터를 적용하면 다중 채널 2D 이미지가 생성됨
ex) 입력 이미지가 28 x 28 x 3 (행 x 열 x 채널)일 경우
3 x 3 필터에 1 x 1 패딩을 적용하면 28 x 28 x 1 이미지를 얻음
이와 같은 필터를 15개 적용하면, 28 x 28 x 15 이미지를 얻음
-> 입력 데이터의 채널 수가 적더라도 더 많은 필터를 적용하면, 출력에서 채널 수를 늘릴 수 있음
-> 필터를 쌓아서 여러 개의 출력 채널을 만들면, 모델이 입력 데이터에서 더 다양한 특징을 추출할 수 있게 되어, 더 복잡한 패턴이나 정보를 학습할 수 있게 됨
: 입력의 공간적 차원을 줄이기 위해 다운 샘플링을 수행함
-> 이를 통해서 파라미터의 수가 감소함
-> 학습 시간/계산을 줄여줌
-> overfitting의 가능성을 줄여줌
작은 구역으로 분할: 입력 데이터(특징 맵)를 작은 구역으로 나눔. 보통 2x2 크기의 구역을 사용.
최대값 선택: 각 구역에서 가장 큰 값을 선택하여 출력으로 반환. 예를 들어, 2x2 구역에서 4개의 값 중 가장 큰 값을 선택.
다운샘플링: 이렇게 구역별로 최대값을 선택함으로써, 출력 데이터의 크기를 줄이고 중요한 특징을 유지.


: CNN의 마지막 층
: 이전 층의 모든 노드를 이 완전 연결 층과 연결함
-> 이미지 분류를 담당하는 층



-> 필터의 커널 가중치는 학습 중에 업데이트됨

: 이미지나 비디오 내에서 객체 감지 및 위치 찾기

- You Only Look Once (YOLO) [2016]


- Deep Learning based Objective Detection (AlexNet~)

- YOLO-World [2024]




: ImageNet Classification을 위한 Deep Convolutional Neural Networks
-> ReLU 비선형성
-> 데이터 증강(Augmentation)
-> Dropout

: ImageNet 프로젝트는 시각적 객체 인식 소프트웨어 연구에 사용되도록 설계된 대규모 시각 데이터베이스
: 1400만 장 이상의 이미지가 프로젝트에 의해 수작업으로 주석 처리되었으며, 그 중 최소 100만 장의 이미지에는 객체가 포함된 경계 상자(bounding box)도 제공
: 2010년부터 ImageNet 데이터셋은 이미지 분류 및 객체 탐지의 벤치마크로 사용되는 ImageNet 대규모 시각 인식 챌린지(ILSVRC)에서 사용되고 있음
-> 이 챌린지는 약 100만 장의 이미지와 1,000개의 카테고리로 구성된 ImageNet의 하위 집합을 사용함
-> 입력 이미지의 카테고리를 예측하도록 학습됨

* ILSVRC 2010
: 약 100만 장의 이미지와 1,000개의 카테고리로 구성된 ImageNet의 하위 집합을 사용
: 수백만 개의 이미지에서 수천 개의 객체를 학습하려면, 큰 학습 용량을 가진 모델이 필요함
-> CNN은 연결과 파라미터가 훨씬 적기 때문에 훈련하기 더 쉬움
-> CNN의 비용이 많이 들지만, GPU가 CNN 훈련을 촉진함

<CNN이 강력한 이유>
* 지역 불변성(Local Invariance)
-> 합성곱 필터가 입력 이미지를 슬라이딩하면서, 우리가 찾고자 하는 객체의 정확한 위치는 크게 중요하지 않음
-> 위치 무관성: 필터는 이미지 전체를 탐색하면서 특징을 찾기 때문에, 특징이 이미지의 어느 위치에 있든지 그 패턴이 발견됨!
* 구성적 특성(Compositionality)
-> 사람들은 세상을 그 구성 요소들의 합으로 이해함
-> 사건은 여러 행동으로 구성되고, 객체는 여러 부분으로 나눌 수 있으며, 이 문장은 일련의 단어들로 구성됨
-> CNN의 계층 구조 → 큰 표현 능력을 제공
CNN은 여러 계층(layer)으로 이루어져 있는데, 하위 계층은 단순한 특징을, 상위 계층은 더 복잡한 특징을 학습함
ex)
첫 번째 계층은 단순한 엣지(선, 모서리)를 감지
다음 계층에서는 여러 엣지를 결합하여 모양이나 패턴을 인식
더 높은 계층에서는 이 모양들이 결합되어 특정 객체(예: 얼굴, 동물)를 인식
: Convolutional layer 5개 + Fully-connected layer 3개
: Sigmoid와 Tanh 함수는 gradient가 거의 0이 되는 문제를 일으키지만, ReLU는 그렇지 않음

<ReLU의 장점>
-> 다른 활성화 함수에 비해 계산이 단순, Gradient vanishing 문제가 적음, 뉴런의 희소성(Sparsity)을 촉진하여 더 빠른 학습 속도와 효율적인 가중치 업데이트를 가능하게 함!

: AlexNet은 데이터 증강 기법을 사용하여 입력 데이터를 인위적으로 다양하게 변형함
-> 이미지 자르기, 수평 반전, 색상 변화 등으로 학습 데이터셋이 풍부해져, 모델이 특정 패턴에 과도하게 맞춰지는 것(Overfitting)을 방지하고, 일반화 성능을 향상시킴!
: 학습 중에 신경망에서 뉴런(과 그 연결)을 무작위로 제거하는 것
-> Overfitting을 크게 줄이고, 다른 정규화 기법들보다 큰 성능 향상을 제공함
<ILSVRC 2010>
-> CNN이 이전의 방법들을 능가함
<ILSVRC 2012>
-> 깊은 CNN(Deep CNN)이 얕은 CNN(Shallow CNN) 모델보다 더 나은 성능을 보임

▪ 대규모 데이터셋(1500만 개 이미지, 22,000개 카테고리)으로 모델을 사전 학습시킴.
-> ILSVRC 2012에서 사전 학습된 모델을 미세 조정(Fine-tuning)하는 것은 성능을 향상시킴 (오류율 감소함)

: ILSVRC 2014 1위
-> 계산 예산을 유지하면서도 네트워크의 깊이와 너비를 증가시킬 수 있도록 신중하게 설계된 디자인 덕분에 달성함
-> 22 layers의 deep networks

-> deep neural networks의 성능을 향상시키는 가장 간단한 방법
-> 이는 특히 대량의 레이블이 지정된 학습 데이터가 주어졌을 때, 더 높은 품질의 모델을 학습시키는 쉽고 안전한 방법
<제한점>
-> 더 큰 크기는 일반적으로 더 많은 파라미터 수를 의미하며, 네트워크가 커질수록 overfitting에 취약함 (특히 training set에서 레이블이 지정된 예시의 수가 제한적인 경우)
-> 계산 자원의 사용량이 급격하게 증가함
: 1x1, 3x3, 5x5 합성곱(Multiple Convolutions)을 동시에 적용하고, Max Pooling도 포함시켜 다양한 크기의 특징을 동시에 추출할 수 있도록 설계됨
: 다양한 크기의 필터는 입력 데이터에서 다른 형태의 국부적인 특징(다양한 특징)을 추출함

: Gradient vanishing 문제를 줄이기 위해 사용됨

-> 보조 분류기를 통해 중간 층에서도 손실이 계산되므로, 깊은 층으로부터의 역전파 신호가 약해지지 않고 더 강한 기울기가 전달됨
: ILSVRC 2014 2등
: 19 layer deep networks
: 3x3 크기의 작은 합성곱 필터만을 사용
-> 대규모 이미지 인식에서 합성곱 신경망의 깊이가 정확도에 미치는 영향을 조사하는 것
-> 주요 기여는 아주 작은(3x3) 합성곱 필터를 사용하는 아키텍처를 통해 깊이를 증가시키며 네트워크를 철저히 평가한 것

- 2개의 3x3 합성곱을 사용하는 것이 5x5 합성곱을 사용하는 것보다 더 효율적
- 5x5 = 25
- 2x(3x3) = 18
-> 작은 커널 크기를 사용하는 것이 훨씬 더 쉽고 더 효율적이며, 더 깊은 CNN을 구축하는 데 유리함
- 더 깊은 합성곱 신경망으로 나아감
-> GoogLeNet [2014] : 22 layers
-> VGGNet [2014] : 19 layers
-> AlexNet [2012] : 8 layers
아키텍처
-> ReLU 활성화 함수
-> 1x1 합성곱을 사용하여 채널 수 감소
-> 3x3 합성곱을 사용하여 더 효율적인 필터 구성(더 큰 커널 대신)
정규화 방법
-> 데이터 증강(Data Augmentation)
-> Dropout