본문 바로가기
소프트웨어/머신러닝

머신러닝 7주차

by 도지선다형 2025. 3. 12.

💡 사물을 감지하거나 음성을 인식하는 일 등을 인간이 쉽게 할 수 있는 이유는?

 - > 사람의 지각이 주로 의식의 영역 밖, 즉 뇌의 특별한 시각, 청각, 그리고 다른 감각 기관에서 일어난다는 사실

 

 

시각피질 구조

시각 피질 안의 많은 뉴런이 작은 국부 수용장을 가짐 -> 뉴런들이 시야의 일부 범위 안에 있는 시각 자극에만 반응한다는 뜻

 

 

시각 피질 연구에서 합성곱 신경망으로 점진적으로 진화.

LeNet-5 구조가 생김. 이 구조는 합성곱 층과 풀링 층이라는 새로운 구성 요소가 포함되어있음.

 

 

합성곱 층

  • CNN의 가장 중요한 구성 요소
  • 첫 번째 합성곱 층의 뉴런은 합성곱 층 뉴런의 수용장 안에 있는 픽셀에만 연결
  • 두 번째 합성곱 층에 있는 각 뉴런은 첫 번째 층의 작은 사각 영역 안에 위치한 뉴런에 연결
  • 이런 구조는 네트워크가 첫 번째 은닉 층에서는 작은 저수준 특성에 집중하고, 그 다음 은닉 층에서는 더 큰 고수준 특성으로 조합해 나가도록 도와줌.

 

  • 위의 사진처럼 수용장 사이에 간격을 두어 큰 입력 층을 훨씬 작은 층에 연결하는 것도 가능.
  • 이렇게 하면 모델의 계산 복잡도가 줄어든다.
  • 스트라이드 : 한 수용장과 다음 수용장 사이의 수평 또는 수직 방향 스텝 크기

 

필터

뉴런의 가중치는 수용장 크기의 작은 이미지로 표현

층의 전체 뉴런에 적용된 하나의 필터는 하나의 특성 맵을 만들고, 이 맵은 필터를 가장 크게 활성화시키는 이미지의 영역을 강조한다.

 

 

여러 가지 특성 맵 쌓기

  • 실제 합성곱 층은 여러 가지 필터를 가지고 필터마다 하나의 특성 맵을 출력하므로 3D로 표현하는 것이 더 정확하다.
  • 각 특성 맵의 픽셀은 하나의 뉴런에 해당하고 하나의 특성 맵 안에서는 모든 뉴런이 같은 파라미터를 공유하지만, 다른 특성 맵에 있는 뉴런은 다른 파라미터를 사용한다.
  • ⭐하나의 합성곱 층이 입력에 여러 필터를 동시에 적용하여 입력에 있는 여러 특성을 감지할 수 있다.
  • 입력 이미지는 컬러 채널마다 하나씩 여러 서브 층으로 구성되기도 한다.

 

 

메모리 요구 사항

  • CNN에 관련된 또 하나의 문제는 합성곱 층이 많은 양의 RAM을 필요로 한다
  • ❗추론을 할 때 하나의 층이 점유하고 있는 RAM은 다음 층의 계산이 완료되자마자 해제될 수 있다. 그러므로 연속된 두 개의 층에서 필요로 하는 만큼의 RAM만 가지고 있으면 된다. 하지만 훈련하는 동안에는 정방향에서 계산했던 모든 값이 역방향을 위해 보전되어야한다. 그래서 각 층에서 필요한 RAM 양의 전체 합만큼 RAM이 필요하다.

 

 

풀링 층

  • 목적 : 게산량과 메모리 사용량, 파라미터 수를 줄이기 위해 입력 이미지의 부표본을 만드는 것
  • 풀링 층의 각 뉴런은 이전 층의 작은 사각 영역의 수용장 안에 있는 뉴런의 출력과 연결 되어있음.
  • 크기, 스트라이드, 패딩 유형을 지정해야 함.
  • 풀링 뉴런은 가중치가 없음. 즉 최대나 평균 같은 합산 함수를 사용해 입력값을 더하는 것이 전부이다.
  • 널리 사용되는 풀링 층 : 최대 풀링 층

 

  • 최대 풀링은 작은 변화에도 일정 수준의 불변성을 만들어줌.
  • 이미지 A와 B에서 최대 풀링 층의 출력은 동일하다. 이것이 이동 불변성이다.
  • CNN에서 몇 개 층마다 최대 풀링 층을 추가하면 전체적으로 일정 수준의 이동 불변성을 얻을 수 있다.
  • 또한 최대 풀링은 회전과 확대, 축소에 대해 약간의 불변성을 제공한다.
  • 최대 풀링의 단점은 매우 파괴적이라는 것이다...
  • 최대 풀링은 의미없는 없는 것은 모두 제거하고 가장 큰 특징만 유지함. 그렇기에 다음 층이 조금 더 명확한 신호로 작업할 수 있음.
  • 평균 풀링보다 강력한 이동 불변성을 제공하고 연산 비용이 조금 덜 든다.

 

 

전역 평균 풀링 층

  • 각 특성 맵의 평균을 계산한다. = 각 샘플의 특성 맵마다 하나의 숫자를 출력한다는 의미
  • 이는 출력 층 직전에 유용하게 쓰인다.

 

CNN 구조

  • 전형적인 CNN 구조는 합성곱 층을 몇 개 쌓고, 그 다음에 풀링 층을 쌓고, 그 다음에 또 합성곱 층을 몇 개 더 쌓고, 그 다음에 다시 풀링 층을 쌓는 식이다.
  • 네트워크를 통과하여 진행할수록 이미지는 점점 작아지지만 합성곱 층 때문에 일반적으로 점점 더 깊어진다.
  • 맨 위층에는 몇 개의 완전 연결 층으로 구성된 일반적인 피드포워드 신경망이 추가되고 마지막 층에서 예측을 출력한다.

 

LeNet-5

  • 가장 널리 알려진 CNN 구조
  • 이 모델은 패션 MNIST구조와 매우 비슷
  • 합성곱 층과 풀링 층을 쌓고 밀집 층이 뒤따름.
  • 최신 분류 CNN과 가장 크게 차이나는 점은 활성화 함수일 것이다.
  • ReLU를 사용하고 RBF 대신에 소프트맥스를 사용

 

AlexNet

  • 더 크고 깊을 뿐만 아니라 LeNet-5와 비슷하다.
  • 처음으로 합성곱 층 위에 풀링층을 쌓지 않고 바로 합성곱 층끼리 쌓았음.
  • 과대적합을 줄이기 위해 저자들은 두 가지 규제 기법을 사용했음.
    1. 훈련하는 동안 F9과 F10의 출력에 드롭아웃을 50% 비율로 적용
    2. 훈련 이미지를 랜덤하게 여러 간격으로 이동하거나 수평으로 뒤집고 조명을 바꾸는 식으로 데이터 증식을 수행
  • C1과 C3층의 ReLU 단계 후에 바로 LRN이라 부르는 경쟁적인 정규화 단계를 사용
  • 가장 강하게 활성화된 뉴런이 다른 특성 맵에 있는 같은 위치의 뉴런을 억제함.

 

데이터 증식

  • 진짜 같은 훈련 샘플을 인공적으로 생성하여 훈련 세트의 크기를 늘림.
  • 과대적합을 줄이므로 규제 기법으로 사용할 수 있음.
  • 생성된 샘플은 가능한 진짜에 가까워야함.
  • 이상적으로는 증식된 훈련 세트에서 이미지를 뽑았을 때 증식된 것인지 아닌지를 구분 할 수 없어야 함

 

GoogLeNet

  • 인셉션 모듈이라는 서브 네트워크를 가지고 있어서 GoogLeNet이 이전의 구조보다 훨씬 효과적으로 파라미터를 사용
  • 네트워크가 이전 CNN보다 훨씬 깊음.
  • 모든 층은 스트라이드 1과 "same" 패딩을 사용하므로 출력의 높이와 너비가 모두 입력과 같음.
  • 이렇게 하면 모든 출력을 깊이 연결 층에서 깊이 방향으로 연결할 수 있음.

 

💡 왜 인셉션 모듈이 1 X 1 커널의 합성곱 층을 가질까? 이 층의 목적은 ? 

  1. 깊이 차원을 따라 놓인 패턴을 잡을 수 있음.
  2. 병목 층의 역할을 담당함. 연산 비요ㅛㅇ과 파라미터 개수를 줄여 훈련 속도를 높이고 일반화 성능을 향상
  3. 더 복잡한 패턴을 감지할 수 있는 한 개의 강력한 합성곱 층처럼 작동

 

GoogLeNet의 실제 구조

  • 네트워크를 하나로 길게 쌓은 구조
  • 모든 합성곱 층은 ReLU 활성화 함수를 사용

14-15 설명

  • 초기 두 개의 층에서 계산량을 줄이기 위해 이미지의 높이와 너비를 4배씩 축소 (면적 기준 16배 감소). 첫 번째 층에서는 7×7 크기의 커널을 사용하여 정보를 최대한 유지함.
  • LRN(Local Response Normalization) 층을 사용하여 이전 층에서 다양한 특성을 학습하도록 구성. 이후 두 개의 합성곱 층 중 첫 번째 층은 병목층 역할을 수행.
  • 다시 한 번 LRN 층을 적용하여 이전 층이 다양한 패턴을 학습하도록 만듦.
  • 최대 풀링(Max Pooling) 층을 사용하여 계산 속도를 높이기 위해 이미지의 높이와 너비를 2배씩 줄임.
  • 9개의 인셉션 모듈을 연속적으로 연결하여 차원 감소 및 속도 향상을 도모.
  • 전역 평균 풀링(Global Average Pooling) 층을 사용하여 각 특성 맵의 평균값을 출력. 이 과정에서 공간 방향 정보가 손실되지만, 분류 작업에서는 문제가 되지 않음.
  • 마지막으로 드롭아웃(Dropout) 층을 적용한 후, 1,000개 클래스에 대한 유닛과 Softmax 활성화 함수를 사용하여 최종 확률값을 출력.

 

VGGNet

  • 2개 또는 3개의 합성곱 층 뒤에 풀링 층이 나오고 다시 2개 또는 3개의 합성곱 층과 풀링 층이 등장하는 식
  • 마지막 밀집 네트워크 2개의 은닉 층과 출력 층으로 이루어짐
  • VGGNet은 많은 개수의 필터를 사용하지만 3X3 필터만 사용

 

ResNet

  • 더 적은 파라미터를 사용해 점점 더 깊은 네트워크로 컴퓨터 비전 모델을 구서ㅓㅇ하는 일반적인 트렌드를 만듦.
  • 이런 깊은 네트워크를 훈련시킬 수 있는 핵심 요소는 스킵 연결
  • 어떤 층에 주입되는 신호가 상위 층의 출력에도 더해짐.
  • 만약 입력 x를 네트워크의 출력에 더한다면 네트워크는 h(x) 대신 f(x) = h(x) - x를 학습, 이를 잔차 학습이라 함.

 

  • 신경망을 초기화 할 때는 가중치가 0에 가깝기 때문에 네트워크도 0에 가까운 값을 출력.
  • 스킵 연결을 추가하면 이 네트워크는 입력과 같은 값을 출력
  • 초기에는 항등 함수를 모델링

  • 스킵 연결 덕분에 입력 신호가 전체 네트워크에 손쉽게 영향을 미치게 됨.
  • 심층 잔차 네트워크는 스킵 연결을 가진 작은 신경망이 잔차 유닛을 쌓은 것을 볼 수 있음.
  • 이 구조는 GoogLeNet과 똑같이 시작하고 종료함. 다만 중간에 단순한 잔차 유닛을 매우 깊게 쌓은 것 뿐이다.

 

Xception

  • GoogLeNet과 ResNet의 아이디어를 합쳤지만 인셉션 모듈은 깊이별 분리 합성곱 층이라는 특별한 층으로 대체
  • 분리 합성곱 층은 입력 채널마다 하나의 공간 필터만 가지기 때문에 입력 층과 같이 채널이 너무 적은 층 다음에 사용하는 것을 피해야 함.
  • Xception 구조는 2개의 일반 합성곱 층으로 시작
  • 이 구조의 나머지는 분리 합성곱만 사용
  • 거기에 몇 개의 최대 풀링 층과 전형적인 마지막 층들을 사용
  • 인셉션 모듈은 1x1 필터를 사용한 합성곱 층을 포함
  • 이 층은 채널 사이 패턴만 감지
  • 하지만 이 위에 놓인 합성곱 층은 공간과 채널 패턴을 모두 감지하는 일반적인 합성곱 층
  • 따라서 인셉션 모듈을 일반 합성곱 층과 분리 합성곱 층의 중간 형태로 생각할 수 있음.

 

SENet

  • 인셉션 네트워크와 ResNet을 확장한 버전을 각각 SE-Inception과 SE-ResNet이라고 부름
  • SENet은 원래 구조에 있는 모든 인셉션 모듈이나 모든 잔차 유닛에 SE 블록이라는 작은 신경망을 추가하여 성능을 향상

  • SE 블록이 추가된 부분의 유닛의 출력을 깊이 차원에 초점을 맞추어 분석함.
  • 어떤 특성이 일반적으로 동시에 가장 크게 활성화되는지 학습한 다음, 이 정보를 사용하여 특성 맵을 보정

  • 하나의 SE 블록은 3개의 층으로 구성
  • 전역 평균 풀링 층과 ReLU 활성화 함수를 사용하는 밀집 은닉 층, 시그모이드 활성화 함수를 사용하는 밀집 출력 층

 

주목할만한 다른 구조들

 

  • ResNeXt: ResNet을 확장한 구조로, 그룹화된 병렬 합성곱(Grouped Convolution) 방식을 사용해 성능을 향상시키면서도 계산량을 효율적으로 유지하는 네트워크.
  • DenseNet: 각 레이어가 이전 모든 레이어의 출력을 직접 받아들이는 연결(Dense Connectivity) 방식을 사용하여 파라미터 수를 줄이고 특징 전달을 극대화하는 네트워크.
  • MobileNet: 깊이별 분리 합성곱(Depthwise Separable Convolution)을 활용하여 연산량을 줄이고 모바일 및 임베디드 환경에서 높은 효율성을 가지는 경량 네트워크.
  • CSPNet: 네트워크의 특성 맵을 부분적으로 분할하여 처리한 후 다시 합치는 방식으로 연산량을 줄이고 성능을 향상시키는 Cross Stage Partial Network 구조.
  • EfficientNet: 모델 크기, 해상도, 깊이를 균형 있게 조정하는 복합 계수(Compound Scaling)를 적용하여 성능을 극대화하면서도 연산량을 최소화한 네트워크.

 

올바른 CNN 구조 선택

  • 정확도, 모델 크기, CPU의 추론 속도, GPU에서 추론 속도 등에 따라 달라짐.
  • ❗모델이 클수록 일반적으로 정확도가 높지만 항상 그렇지는 않습니다.

 

 

 

객체 탐지

  • 객체 탐지 : 하나의 이미지에서 여러 물체를 분류하고 위치를 추정하는 작업
  • 이 CNN은 일반적으로 클래스 확률과 바운딩 박스 외에도 객체성 점수를 예측하도록 훈련된다.
  • 객체성 점수 : 이미지의 중앙부에 실제 객체가 있는지에 대한 추정 확률
  • 객체성 점수 값은 이진 분류 출력이므로 하나의 유닛과 시그모이드 활성화 함수를 가진 밀집 출력 층을 사용하고 이진 크로스 엔트로피 손실로 훈련하여 만들 수 있음.

 

NMS : 불필요한 바운딩 박스를 제거하기 위해 진행하는 사후 처리 방법

  1. 먼저 객체성 점수가 일정 임곗값보다 낮은 바운딩 박스를 모두 삭제한다. CNN이 해당 위치에 객체가 없다고 믿기 때문에 이런 바운딩 박스는 쓸모가 없다.
  2. 남은 바운딩 박스에서 객체성 점수가 가장 높은 바운딩 박스를 찾고 이 박스와 많이 중첩된 다른 바운딩 박스를 모두 제거한다.
  3. 더는 제거할 바운딩 박스가 없을때까지 2.를 반복한다.
  • 이런 객체 탐지 방식은 꽤 잘 작동하지만 CNN을 여러 번 실행시켜야 하므로 많이 느리다.
  • 완전 합성곱 신경망을 사용하면 CNN을 훨씬 바르게 이미지에 슬라이딩 시킬 수 있다.

 

완전 합성곱 신경망

  • 네트워크의 역할 : 밀집 층은 특정 입력 크기를 기대하지만 합성곱 층은 어떤 크기의 이미지도 처리할 수 있음. FCN은 합성곱 층만 가지므로 어떤 크기의 이미지에서도 훈련하고 실행 할 수 있음

 

YOLO

  • 빠르고 정확한 객체 탐지 구조
  • 실시간으로 비디오에 적용할 수 있음.
  • 객체 탐지를 한 번의 신경망 실행으로 수행하는 고속·고효율 실시간 객체 탐지 모델. 전체 이미지를 한 번에 처리하여 빠른 속도로 객체 위치와 클래스 예측이 가능함.

 

mAP : 객체 탐지에서 널리 사용되는 평가 지표

  • 재현율에서의 최대 정밀도를 계산하는 것
  • 그런 다음 이 최대 정밀도를 평균함. -> 이게 평균 정밀도(AP)
  • 두 개 이상의 클래스가 있을 대 각 클래스에 대해 AP를 계산한 다음 평균 AP를 계산한 것이 mAP이다.

 

 

객체 추적

  • 가장 널리 사용되는 객체 추적 시스템은 DeepSORT
  • 고전적인 알고리즘과 딥러닝의 조합을 기반으로 함.

간단한 추적 과정 설명

  • 객체가 일정한 속도로 움직인다고 가정, 칼만 필터를 사용해 이전에 감지된 객체의 가장 가능성이 높은 현재 위치를 추정합니다.
  • 딥러닝 모델을 사용하여 새로운 탐지 결과와 기존 추적 객체 간의 유사성을 측정한다.
  • 헝가리 알고리즘을 사용해 새로운 탐지 대상을 기존 추적 객체에 매핑한다. 이 알고리즘은 탐지된 결과와 추적 객체의 예측 위치 사이의 거ㅓ리를 최소화하는 동시에 외관상의 불일치를 최소화하는 매핑 조합을 효율적으로 찾음.

 

시맨틱 분할

각 픽셀은 픽셀이 속한 객체의 클래스로 분류된다.

CNN은 이미지의 왼쪽 아래 어딘가에 사람이 있단 것은 알 수 있지만 그보다 더 정확히 알지는 못한다.

여기서 마지막 층이 입력 이미지보다 32배나 작은 특성 맵을 출력한다. 따라서 해상도를 32배 로 늘리는 업샘플링 층을 하나 추가한다.

 

여기서는 전치 합성곱 층을 사용했다.

💡전치 합성곱 층 : 기존 합성곱과 반대 방향으로 작동하여 작은 특성 맵을 더 큰 해상도로 복원하는 층. 주로 이미지 업샘플링에서 사용되며, 특징을 유지하면서도 해상도를 증가시키는 역할을 함.

 

 

  • 업샘플링을 위해 전치 합성곱 층을 사용하는 것은 좋은 방법이지만 여전히 정확도가 떨어짐. 이를 개선하기 위해 아래쪽 층에서부터 스킵 연결을 추가한다.

 

초해상도

: 원본 이미지 크기보다 더 크게 업샘플링 하는 등 이미지의 해상도를 높이는 데 사용

 

 

 

초해상도 만드는 과정

  1. 2배 업샘플링
  2. 아래쪽 층의 출력을 더함
  3. 2배 업샘플링
  4. 더 아래쪽 층의 출력을 더함
  5. 8배 업샘플링

 

인스턴스 분할

  • 각 물체를 구분하여 표시
  • Mask R-CNN 구조는 각 바운딩 박스에 대해 픽셀 마스크를 추가로 생성하여 Faster R-CNN 모델을 확장
  • 각 객체에 대해 일련의 추정 클래스 확률을 포함한 바운딩 박스를 얻을 수 있을 뿐만 아니라 바운딩 박스에서 객체에 속하는 픽셀을 찾아내는 픽셀 마스크도 얻을 수 있음.