CNN /  Faster R-CNN
인공지능

CNN / Faster R-CNN

내가 이해한것을 바탕으로 작성예정   계속  수정할생각이다!

 

 

컴퓨터 비전을 딥러닝으로 많이한다 .

그중  Object Detection에 많이 사용 .(위치와 분류를 잘해야됨)

 

Faster R-CNN 은 정말 빠른가 ? 

논문 Faster Rcnn / R-FCN /SSD

실제로는 R-FCN 과 SSD 보다 느리지만 정확하다.(성능이좋다)

R-CNN 구조

간단히.

1.이미지 넣기 

2.바운딩 박스들을 뽑아낸다.

3.뽑아낸 바운딩 박스들을 크롭한후 하나하나를 cnn에 집어넣는다.

4.분류한다.

 

R-cnn 상세히 
회귀분석

일단.. 

P는 내가 뽑아낸 ROI의 좌표 .

G는 정답의 좌표.

밑의 식은 G가 정답이니 최대한 P들이 정답에 가까워 질수있게 하는 식이라고 생각하면되겠다.

 

R-CNN 의 단점

-가장큰단점 느리다.

이것을 개선한게 Fast R-CNN

 

 

Fast R-CNN

많은설명이 있는데.. 일단 fast-Rcnn은 Roi Pooling 이다 .

 

여기서 잠깐 Pooling에 대해 찾아보다가 CNN까지 찾아보았다..

 

CNN(Convolutional Neural Network)이란?

여기서 convolution을 몰라서 찾아보았는데.

시스템에 메모리가 있는경우 한시스템의 출력이 현재 입력에 의해서만 결정되는 것이 아닌 이전입력에 의해서도 영향을 받기 때문에 그에대한 출력을 나타내기 위해 하는연산 이라고 나왔다.

ex)

처음 종을 쳤을때. 그 처음 쳤을때의 종소리가 나겠지만 울리고 있는 종을 또친다면 울리고있는 종소리에 현재 쳤을때의 종소리가 합쳐서 나오게된다 .

 

이미지의 전체를 보는것이 아니라 부분을 보는것이 핵심이다.

이 '부분' 에 해당하는것을 filter 라고 한다 .

ex)

편의상 이미지의 사이즈를 7x7 이라고 가정한다 .

filter의 사이즈를 3x3이라고 가정한다.

 

filter를 옮겨가며 위의 작업을 반복할텐데 , 아래나 옆으로 옮긴다면 얼마나 옮겨야할까?

이때, 옮기는 양읠 stride라고 부른다.

만약 stride를 1을 준다면 . 이렇게 할것이다 .

stride 1 

각 스텝마다 1개의 값을 얻기때문에  이 과정을 반복하면 5x5 의 아웃풋을 얻게된다.

 

output 실제 공식 

Total size ; N (i.e. N x N)

Filter size ; F (i.e. F x F)

Output size ; k:=(N-F)/stride + 1 where k is an integer.

(7-3)/1 +1 = 5  

 

렇게 나온 output을 convolution layer라고 부른다.

여기까진 대충알겠는데 다음이 어렵다.

출처 : https://medium.com/@hobinjeong/cnn-convolutional-neural-network-9f600dd3b395

 

CNN에서 pooling이란?

 

Convolution을 거쳐서 나온 activation maps이 있을 때,

이를 이루는 convolution layer을 resizing하여 새로운 layer를 얻는 것 ... 

 

이러한 pooling에는 최댓값을 뽑아내는 max pooling, 평균값을 뽑아내는 mean pooling등 다양한 종류가 있습니다. 그 중에서 강연 중 예를 들고 있는 max pooling에 대해 알아보도록 하겠습니다.

 

맥스폴링

pooling을 하는이유 

=> overfitting(데이터를 과하게 학습하는것)을 방지하기위함 .

 

ex)

feature := elements of input data

parameter := elements of weight matrix

 

결론 CNN 방식 은 

어떠한 이미지에서 필터를 통해 선정을하고 그필터가 스트라이드를 하면서 여러개의 값을 만들어낸다 

그 만들어낸 여러값중 mqx pool을 통해  값을 다시 추출해낸다.

 

 

 

 

 

우리에게 size가 96x96인 image가 주어져 있고(즉, feature의 수는 96x96개), 이를 400개의 filter로 convolution한 size 8x8x400의 convolution layers가 있습니다. 이 포스트에서 밝힌 바와 같이 각 convolution layer에는 (stride를 1이라 가정하면) (96–8+1)x(96–8+1)=89x89=7921개의 feature가 있고, 이런 layer가 400개이니 총 feature의 수는 89x89x400=3,168,400개가 됩니다. 이렇게 feature가 많아지면 overfitting의 우려가 있음은 자명합니다.

 

여기서 pooling을 해준다면 적절히 조절할 수 있겠죠? 그래서 padding과 pooling을 적당히 써주면 다음과 같은 사진을 얻습니다. 아주 유명한 사진입니다. 출처는 아마도 cs231n일 것입니다.( 스탠포드 대학온라인강의)

 

 

출처:https://medium.com/@hobinjeong/cnn%EC%97%90%EC%84%9C-pooling%EC%9D%B4%EB%9E%80-c4e01aa83c83

어렵다 ㅋㅋ

여튼 결론을 대충내리면 pooling이란 기계학습에서 학습데이터를 과하게 학습하는것을 방지하기위한 것  이라고생각할수있겠다. 

 

다시 본론으로 ..

 

Faster R-CNN ( RPN(Region Proposasl Network) + Fast R-CNN )

 

-Region Proposal을 selective search를 사용하지말고 ,.실제 네트워크 안에서 해보자는게 핵심

??뭔소리 

CNN 은 gpu에서 돌고 selective search 는 cpu에서 돌았는데 == 졸라느림 

그래서  이걸 RPN 이라는것을 만들어서 gpu에서 돌려서 빠르게 해보자!    가 핵심 아이디어 이다 .

그림을 보면 기본 fast Rcnn 에서 RPN이 들어간것. 

 

왼쪽은 RPN   / 오른쪽은 어떤 알고리즘을 selective serach 했다.

둘다 GPU에서 구동중이며 공유하면서 network를 마치 하나인것처럼 해보자 .

 

어렵다.

 

 

 

 

 

 

 

 

 

 

 

 

 

'인공지능' 카테고리의 다른 글

데이터 전처리와 Augmentation(증가) // 인공지능 논문리뷰  (0) 2020.02.20
epochs/batch size  (0) 2020.02.13
Tensor란?  (0) 2020.01.15
tensorflow 기본문법(placeholder/variable/constant)  (0) 2020.01.15
TFRecord  (0) 2020.01.09