딥러닝 배우기

객체 인식

영성 2021. 7. 16. 13:55

* 객체 인식

= 여러가지 객체에 대한 분류 + 객체의 위치 정보를 파악하는 위치 검출

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 구현을 위한 알고리즘

 

 

※ 선택적 탐색 단계

                       1단계:초기영역생성                        2단계:작은(비슷한)영역통합                      3단계:후보영역생성

 

 

* R-CNN의 단점

- 세단계의 복잡한 학습과정

- 긴 학습 시간과 대용량 저장 공간

- 객체 검출 속도 문제

* 보안된 Fast R-CNN

 

※ 기존 CNN구조들은 완결연결층을 위해 입력 이미지를 신경망에 통과시키려면 이미지를고정된 크기로 자르거나 비율을 조정해야 했습니다. 하지만 이렇게 하면 물체의 일부분이 잘리거나 본래의 생김새와 달라지는 문제점이 있기때문에 이 문제를 해결하고자 나온 것이 공간 피라미드 풀링을 도입했다.

 

* 공간 피라미드 풀링

- 입력 이미지에 관계없이 합성곱층을 통과시키고, 완전연결층에 전달되기 전에 특성 맵들을 키기로 조절해 주는 출링층을 적용하는 기법

- 입력이미지의 크기를조절하지 않기에 원본 이미지의 특징이 회손되지 않는 특성 맵을 얻을 수 있고 이미지 분류나 객체인식 같은 여러 작업에 적용할 수 있다

 

* Fast R-CNN

- R-CNN의 속도 문제를 개선하기 위 해 Rol 풀링을 도입

- 선택적 탐색에서 찾은 바운딩 박스 정보가 CNN을 통과하면서 유지되도록 하고 최종 CNN 특성 맵은 풀링을 적용하여 완전 연결층을 통화하도록 크기를 조정 (이렇게 하면 바운딩 박스마다 CNN을 돌리는 시간을 단축할 수 있다)

- 후보영역 선택을 하지 않고 전체 이미지에 대해 CNN을 적용함

 

* Fast R-CNN의 구조

후보영역 선택을 하지 않고 전체 이미지에 대해 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)을 변형시켜 이미지 분할에 적합하도록 만든 네트워크

  • 완전 합성곱의 단점
  • 여러 단계의 합성곱층과 풀링층을 거치면서 해상도가 낮아진다
  • 낮아진 해상도를 복원하기 위해 업 샘플링 방식을 사용하기 때문에 이미지의 세부 정보들을 잃어버리는 문제가 발생한다
  • 이러한 문제를 해결해기 위해 나온것이 합성곱&역합성곱

 

 

 

합성곱 & 역합성곱 네트워크

  • CNN의 최종 출력 결과를 원래의 입력 이밎와 같은 크기를 만들고 싶을 때 사용
  • 시맨틱 분할 등에 활용할 수 있으며, 업 샘플링 등으로도 부른다

  • 합성곱 : 특성 맵 크기를 줄임, 역합성곱 : 특성 맵 크기를 증가

 

역합성곱의 동작 방식

  • 각각의 픽셀 주위에 제로 패딩을 추가
  • 이렇게 패딩된 것에 합성곱 연산을 수행

 

U-Net

  • 바이오 메디컬 이미지 분할을 위한 합성곱 신경망 (메디컬이미지관련해서 많이 사용된다)
  • 기존 슬라이딩 윈도우 방식은 이전 패치에서 검증이 끝난 부분을 다음 패치에서 또 검증하기 때문에 속도가 느리지만 U-Net은 이미 검증이 끝난 패치는 건너뛰기 때문에 속도가 빠르다

  • 일반적으로 패치 크기가 커진다면 넓은 범위의 이미지를 인식하는 데 뛰어나기 때문에 컨텍스트 인식에 탁월하지만 지역화에는 한계가 있지만 U-Net은 컨텍스트 인식과 지역화 트레이드오프 문제를 개선했다.

 

 

 

U-net의 구조

  • FCN(완전 합성곱 네트워크)을 기반으로 구축, 수축 경로와 확장 경로로 구성되어 있다
  • 수축경로는 컨텍스트를 포착하며, 확장경로는 특성 맵을 업 샘플링하고 수축 경로에서 포착한 특성 맵의 컨텍스트와 결합하여 정확한 지역화를 수행
  • 주로 3x3 합성곱을 주로 이루며, 각 합성곱 블록은 3x3 합성곱 두개로 구성되어 있으며, 그 사이에 드롭아웃이 있다.

 

 

PSPNet

  • 시멘틱 분할 알고리즘

 

 

 

 

DeepLabv3/DeepLabv3+