이전 내용
객체 탐지
◆ 객체 탐지: 하나의 이미지에서 여러 물체를 분류하고 위치를 추정하는 작업
이전에 널리 사용되던 방법은 이미지 중앙에 놓인 하나의 물체를 분류하고 위치를 찾는 CNN을 훈련한 다음 이 CNN으로 이미지 위를 훑으면서 각 위치에서 예측을 만드는 것이다. 이 CNN은 일반적으로 클래스 확률과 바운딩 박스 외에도 객체성 점수를 에측하도록 훈련된다.
※ 객체성 점수: 이미지의 중앙부에 실제 객체가 있는지에 대한 추정확률, 이진 분류 출력이므로 하나의 유닛과 시그모이드 활성화 함수를 가진 밀집 출력 층을 사용하고 이진 크로스 엔트로피 손실로 훈련하여 만들 수 있음.
이 방식은 매우 쉽지만 조금씩 다른 위치에서 동일한 물체를 여러 번 감지하는 경우가 많아 불필요한 바운딩 박스를 제거하기 위해 사후 처리가 필요하다. 흔히 사용되는 사후 처리 방법은 NMS이며, 방법은 아래와 같다.
- 객체성 점수가 일정 임곗값보다 낮은 바운딩 박스를 모두 삭제: CNN이 해당 위치에 객체가 없다고 믿기 때문에 이런 바운딩 박스는 쓸모가 없다.
- 남은 바운딩 박스에서 객체성 점수가 가장 높은 바운딩 박스를 찾고 이 박스와 많이 중첩된 다른 바운딩 박스를 모두 제거한다.
- 더는 제거할 바운딩 박스가 없을 때까지 2단계 반복
▶ 간단한 객체 탐지 방식은 잘 작동하나, CNN을 여러 번 실행시켜야 하므로 많이 느리다.
완전 합성곱 신경망(fully convolutional network, FCN)
FCN(완전 합성곱 신경망)은 이미지 분할(segmentation) 작업에 자주 사용되는 딥러닝 모델이다. 전통적인 합성곱 신경망(CNN)은 이미지를 입력받아 분류 결과를 출력하지만, FCN은 입력 이미지와 동일한 크기의 출력을 생성하여 각 픽셀에 대한 정보를 제공한다. 즉, 이미지를 픽셀 단위로 분류하는 데 사용된다.
- 주요 특징:
- 완전 합성곱 구조: FCN은 완전히 연결된(Dense) 층을 제거하고, 오직 합성곱(conv) 층과 업샘플링(deconvolution) 층으로 구성된다. 이미지의 공간적 정보를 유지할 수 있다.
- 업샘플링: 이미지 크기를 줄이는 풀링(pooling) 과정으로 인해 손실된 해상도를 복원하기 위해 업샘플링(또는 디컨볼루션)을 사용한다. 출력은 입력 이미지와 동일한 크기를 가지며, 각 픽셀의 클래스 확률 맵을 생성한다.
- 적용 분야:
- Semantic Segmentation: 예를 들어, 도로 사진에서 차, 사람, 도로 등을 픽셀 단위로 구분하는 작업.
예: 입력 이미지를 크기별로 축소하면서 중요한 특징을 추출한 뒤, 축소된 이미지를 다시 업샘플링하여 입력 크기와 동일하게 복원한다.
You Only Look Once (YOLO)
YOLO(You Only Look Once)는 실시간 객체 탐지(object detection) 모델로, 이미지를 단 한 번의 전반적인 분석으로 여러 객체를 탐지하고 분류할 수 있는 딥러닝 모델이다.
- 주요 특징:
- 한 번의 처리로 객체 탐지: 이미지를 격자로 나누고, 각 셀에서 객체가 포함될 가능성을 계산한다. 각 객체에 대해 바운딩 박스(Bounding Box)와 클래스 확률을 동시에 출력한다.
- 속도와 효율성: YOLO는 CNN 기반의 모델이지만, 단일 신경망에서 모든 객체를 탐지하므로 매우 빠르다. 실시간 객체 탐지에 적합하다.
- 적용 분야:
- 자율주행 자동차: 보행자, 차량, 표지판 탐지.
- 감시 시스템: CCTV에서 사람이나 이상 행동 탐지.
- 스포츠 분석: 선수의 위치와 움직임 추적.
- YOLO 동작 방식:
- 입력 이미지를 SxS 크기의 격자로 나눈다.
- 각 격자는: 바운딩 박스 좌표(x, y, w, h), 클래스 확률, 객체 신뢰도(objectness score)를 예측한다.
- 겹치는 박스를 제거하는 Non-Maximum Suppression (NMS) 기법을 통해 최종 결과를 출력한다.
객체 추적
객체 추적은 까다로운 작입이다. 객체가 움직이고, 카메라에 가까워지거나 멀어짐에 따라 커지거나 작아지고, 돌아서거나 다른 배경 또는 조명 조건으로 옮겨가면 모양이 달라지고, 다른 물체에 의해 일시적으로 가져리 수 있기 때문이다.
가장 널리 사용되는 객체 추적 시스템은 DeepSORT 로, 이 시스템은 고전적인 알고리즘과 딥러닝의 조합을 기반으로 한다.
- 추적 과정
- 객체가 일정한 속도로 움직인다고 가정하고 칼만 필터를 사용하여 이전에 감지된 객체의 가장 가능성이 높은 현재 위치 추정
- 딥러닝 모델을 사용하여 새로운 탐지 결과와 기존 추적 객체 간의 유사성 측정
- 헝가리 알고리즘을 사용하여 새로운 탐지 대상을 기존 추적 객체에 매핑. 이 알고리즘은 탐지된 결과와 추적 객체의 예측 위치 사이의 거리를 최소화하는 동시에 외관상의 불일치를 최소화하는 매핑 조합을 효율적으로 찾는다.
시맨틱 분할(Semantic Segmentation)
시맨틱 분할은 이미지 내의 각 픽셀을 특정 클래스로 분류하는 컴퓨터 비전 작업이다. 예를 들어, 도로 사진에서 각 픽셀을 "자동차", "사람", "도로", "건물" 등의 클래스에 할당하는 것을 의미한다.
- 주요 특징
- 픽셀 단위의 분류: 이미지의 각 픽셀에 대해 클래스 레이블을 할당한다. 객체를 구분할 뿐 아니라 객체의 경계까지 세밀하게 인식한다.
- 전역 이해(Global Understanding): Semantic Segmentation은 이미지 전체의 문맥(Context)을 고려해 각 픽셀의 의미를 이해한다. 그러나 같은 클래스의 객체들을 구분하지 못하고, 동일한 클래스로 묶는다.
- 적용 분야:
- 자율주행 자동차: 차선, 도로, 보행자, 신호등 등을 구분.
- 의료 영상 분석: MRI, CT 스캔에서 장기(Organ)와 병변(Lesion)을 구분.
- 위성 이미지 분석: 토지 이용 구분(농지, 도시, 강 등).
- 시맨틱 분할의 동작 방식
주로 합성곱 신경망(CNN)을 기반으로 작동하며, 주요 단계는 다음과 같다.
1. 다운샘플링(Feature Extraction):
CNN을 사용해 이미지에서 특징을 추출.
풀링(Pooling)과 스트라이드(Stride)를 사용해 이미지 크기를 줄이면서 중요한 정보(특징 맵)를 얻음.
2. 업샘플링(Upsampling):
다운샘플링으로 축소된 특징 맵을 다시 입력 이미지와 동일한 크기로 복원.
업샘플링은 주로 디컨볼루션(Deconvolution) 또는 인터폴레이션(Interpolation) 기법 사용.
3. 픽셀 분류:
복원된 특징 맵의 각 픽셀에 대해 클래스 확률을 계산하고, 가장 높은 확률의 클래스를 해당 픽셀에 할당.
- 네트워크 구조: Semantic Segmentation을 위한 주요 CNN 기반 모델.
1. FCN (Fully Convolutional Network):
전통적인 CNN에서 Fully Connected 층을 제거하고, 업샘플링 계층을 추가한 구조.
각 픽셀의 클래스 레이블을 출력.
2. U-Net:
주로 의료 영상 분석에 사용.
다운샘플링과 업샘플링 경로 사이에 스킵 연결(Skip Connection)을 추가해 세밀한 정보를 보존.
3. DeepLab:
Atrous Convolution(구멍 합성곱)을 사용해 더 넓은 문맥 정보를 캡처.
경계를 더 세밀하게 처리.
4. SegNet:
업샘플링 과정에서 풀링 인덱스를 사용해 정확도를 높임.
다른 케라스 합성곱 층
텐서플로는 몇 가지 다른 종류의 합성곱 층도 제공한다.
- tf.keras.layers.Conv1D: 시계열이나 텍스트와 같은 1D 입력에 대한 합성곱 층
- tf.keras.layers.Conv3D: 3D 입력을 위한 합성곱 층
- dilation_rate: tf.keras 합성곱 층에 있는 dilation_rate 매개변수를 2 이상으로 지정하면 아트루스 (구멍 난) 합성곱 층이 된다. 이는 0으로 된 행과 열을 추가하여 늘린 필터로, 보통의 합성곱 층을 사용하는 것과 동일하다
다음 내용
[출처]
핸즈 온 머신러닝
https://kr.mathworks.com/
'[파이썬 Projects] > <파이썬 딥러닝, 신경망>' 카테고리의 다른 글
[딥러닝] RNN & CNN(feat. 시카고 교통국 데이터셋) - 2 (1) | 2024.12.01 |
---|---|
[딥러닝] RNN & CNN(feat. 시카고 교통국 데이터셋) - 1 (0) | 2024.11.30 |
[딥러닝] 케라스의 사전 훈련 모델 사용하기 (1) | 2024.11.29 |
[딥러닝] 합성곱 신경망을 사용한 컴퓨터 비전 (0) | 2024.11.27 |
[딥러닝] 텐서플로 데이터셋 프로젝트 (0) | 2024.11.27 |