* 객체 인식
= 여러가지 객체에 대한 분류 + 객체의 위치 정보를 파악하는 위치 검출
1단계 객체인식 : 두 문제(분류와 위치 검출)를 동시에 행하는 방법
- 빠르지만 정확도가 낮다 예) YOLO, SSD
2단계 객체인식 : 두 문제를 순차적으로 행하는 방법
- 느리지만 정확도가 높다 예) R-CNN
* R-CNN
- CNN(합성곱)과 이미지에서 객체가 있을 만한 영역을 제안해 주는 후보영역 알고리즘의 결합 (선택적 탐색)
순서
1. 이미지를 입력으로 받음
2. 2000개의 바운딩 박스를 선택적 탐색 알고리즘으로 추출한 후 잘라내고 CNN모델에 넣기 위해 같은 크기로 통일
(바운딩박스 : 3d 오브젝트의 형태를 모두 포함할 수 있는 최소 크기의 박스를 말한다)
3. 크기가 동일한 이미지 2000개에 각각 CNN 모델을 적용
4. 각각 분류를 진행하여 결과를 도출
위의 과정을 수행하기 위해 R-CNN은 세 가지 모듈로 나누어 놓았다.
- 1. Region Proposal : "Object가 있을법한 영역"을 찾는 모듈 (기존의 Sliding window방식의 비효율성 극복)
- 2. CNN : 각각의 영역으로부터 고정된 크기의 Feature Vector를 뽑아낸다.
(고정된 크기의 output을 얻기위해 warp 작업을 통해 크기를 찌그러뜨려서 동일 input size로 만들고 CNN에 넣는다.) - 3. SVM : Classification을 위한 선형 지도학습 모델
(* 왜 Classifier로 Softmax를 쓰지 않고 SVM을 사용했을까? : CNN fine-tuning을 위한 학습 데이터가 시기상 많지 않아서 Softmax를 적용시키면 오히려 성능이 낮아져서 SVM을 사용했다.)
* R- CNN 구현을 위한 알고리즘
※ 선택적 탐색 단계
* R-CNN의 단점
- 세단계의 복잡한 학습과정
- 긴 학습 시간과 대용량 저장 공간
- 객체 검출 속도 문제
* 보안된 Fast R-CNN
※ 기존 CNN구조들은 완결연결층을 위해 입력 이미지를 신경망에 통과시키려면 이미지를고정된 크기로 자르거나 비율을 조정해야 했습니다. 하지만 이렇게 하면 물체의 일부분이 잘리거나 본래의 생김새와 달라지는 문제점이 있기때문에 이 문제를 해결하고자 나온 것이 공간 피라미드 풀링을 도입했다.
* 공간 피라미드 풀링
- 입력 이미지에 관계없이 합성곱층을 통과시키고, 완전연결층에 전달되기 전에 특성 맵들을 키기로 조절해 주는 출링층을 적용하는 기법
- 입력이미지의 크기를조절하지 않기에 원본 이미지의 특징이 회손되지 않는 특성 맵을 얻을 수 있고 이미지 분류나 객체인식 같은 여러 작업에 적용할 수 있다
* Fast R-CNN
- R-CNN의 속도 문제를 개선하기 위 해 Rol 풀링을 도입
- 선택적 탐색에서 찾은 바운딩 박스 정보가 CNN을 통과하면서 유지되도록 하고 최종 CNN 특성 맵은 풀링을 적용하여 완전 연결층을 통화하도록 크기를 조정 (이렇게 하면 바운딩 박스마다 CNN을 돌리는 시간을 단축할 수 있다)
- 후보영역 선택을 하지 않고 전체 이미지에 대해 CNN을 적용함
* Fast R-CNN의 구조
※ Rol 풀링
- 크기가 다른 특성 맵의 영역마다 스트라이드를 다르게 최대 풀링을 적용하여 결과값 크기를 동일하게 맞추는 방법
* Faster R-CNN
- 더욱 빠른 객체인식을 수행하기 위한 네트워크
- 기존 Fast R-CNN 속도의 걸림돌이었던 후보영역 생성을 CNN 내부 네트워크에서 진행할 수 있도록 설계 (기존 Fast R-CNN에 후보영역 추출 네트워크를 추가)
- 외부의 느린 선택적 탐색(CPU로 계산) 대신 내부의 빠른 RPN(GPU로 계산)을 사용합니다
* R-CNN과 Fast R-CNN, Faster R-CNN의 구조 비교
* R-CNN과 Fast R-CNN, Faster R-CNN의 성능 비교
* 후보영역 네트워크
- 특성맵 (N x N) 크기의 작은 위도우 영역을 입력으로 받고, 해당 영역에 객체의 존재 유무 판단을 위해 이진분류를 수행하는 작은 네트워크를 생성
- 바운딩 박스 회귀 또한 위치 보정을 위해 추가
- 모든 영역에 대한 객체의 존재 유무를 확인하기 위해서 슬라이딩 윈도우 방식으로 작은 위도우영역 (NxN 크기)을 이용하여 객체를 탐색
* 앵커
- 후보영역 추출 네트워크는 이미지에 존재하는 객체들의 크기와 비율이 다양하여 (NxN) 크기의 입력만으로 다양한 크기와 비율의 이미지를 수용하기 어려움
- 위 단점을 보완하기 위해 여러 크기와 비율의 레퍼런스 박스 k개를 미리 정의하고 각각 슬라이딩 윈도우 위치마다 박스 k개를 출력하도록 설계하는 방법이 앵커이다
- 후보 영역 추출 네트워크의 출력값은 모든 앵커 위치에 대해 각각 객체와 배경을 판단하는 2k개의 분류에 대한 출력과 x, y, w, h 위치 보정 값을 위한 4k개의 회귀 출력을 갖습니다
- 예) 특성 맵 크기 = w x k -> 앵커 = w x h x k
이미지 분할을 위한 신경망
완전 합성곱 네트워크
- 완전연결층의 한계는 고정된 크기의 입력만 받아들이며, 완전연결층을 거친 후에는 위치 정보가 사라진다는 것
- 위 문제를 해결하기 위해 완전연결층을 1x1 합성곱으로 대체하는 것이 완전 합성곱 네트워크 (위치 정보가 보존된다)
- CNN 기반 모델(AlexNet, VGG16, GoogleLeNet)을 변형시켜 이미지 분할에 적합하도록 만든 네트워크
- 완전 합성곱의 단점
- 여러 단계의 합성곱층과 풀링층을 거치면서 해상도가 낮아진다
- 낮아진 해상도를 복원하기 위해 업 샘플링 방식을 사용하기 때문에 이미지의 세부 정보들을 잃어버리는 문제가 발생한다
- 이러한 문제를 해결해기 위해 나온것이 합성곱&역합성곱
합성곱 & 역합성곱 네트워크
- 합성곱 : 특성 맵 크기를 줄임, 역합성곱 : 특성 맵 크기를 증가
역합성곱의 동작 방식
- 각각의 픽셀 주위에 제로 패딩을 추가
- 이렇게 패딩된 것에 합성곱 연산을 수행
U-Net
- 바이오 메디컬 이미지 분할을 위한 합성곱 신경망 (메디컬이미지관련해서 많이 사용된다)
- 기존 슬라이딩 윈도우 방식은 이전 패치에서 검증이 끝난 부분을 다음 패치에서 또 검증하기 때문에 속도가 느리지만 U-Net은 이미 검증이 끝난 패치는 건너뛰기 때문에 속도가 빠르다
- 일반적으로 패치 크기가 커진다면 넓은 범위의 이미지를 인식하는 데 뛰어나기 때문에 컨텍스트 인식에 탁월하지만 지역화에는 한계가 있지만 U-Net은 컨텍스트 인식과 지역화 트레이드오프 문제를 개선했다.
U-net의 구조
- FCN(완전 합성곱 네트워크)을 기반으로 구축, 수축 경로와 확장 경로로 구성되어 있다
- 수축경로는 컨텍스트를 포착하며, 확장경로는 특성 맵을 업 샘플링하고 수축 경로에서 포착한 특성 맵의 컨텍스트와 결합하여 정확한 지역화를 수행
- 주로 3x3 합성곱을 주로 이루며, 각 합성곱 블록은 3x3 합성곱 두개로 구성되어 있으며, 그 사이에 드롭아웃이 있다.
PSPNet
- 시멘틱 분할 알고리즘