CNN 기초, 이미지 처리

2021. 9. 17. 20:11ai/Deep Learning

728x90

1 Image 처리의 기본

pixel  = 이미지를 구성하고 있는 가장 작은 단위
pixel 갯수 = 모니터 해상도 (1024 x 768), 이미지의 해상도
pixel의 밝기값, color값을 가질 수 있는데 이런 pixel들이 모여 이미지 패턴이 만들어요

2차원 데카르트 좌표계 :  일반적으로 우리가 사용하는 좌표계로 x값이 하단 우측방향 y값이 좌측 상방향

 

이미지 좌표계 ( Image Coordinate) 

- x값이 상단 우측방향 y값이 좌측 하단방향

- 행렬곱(에서는 위에서 아래 방향) 이용을 위해 사용  [ y[행]이 떨어지도록 되어있다]

- Y 축은 M 이라는 과 matching

- X 축을 N 이라는 과 matching

- 이미지 좌표계는 "Matrix구조" M x N 구조

pixel [ 세로, 가로 ]

50 x 40 pixel 이 있다고 가정했을때 평소 우리는 image=[x값(가로)인 50 ,y값(세로)인40] 을 생각하지만 안된다

image=[y값(세로)인40, x값(가로)인 50] 이 맞는 표현이다 즉 pixel [ 세로, 가로 ]

 

컴퓨터의 가장 작은 단위가 1bit

8개의 bit가 모여 1byte

1byte를 표현할수 있는 경우의 수는 2 의 8승인 255 까지 가능

음수로 표현하려면 제일 앞에 음수를 나타낸다 MSB (Most Significont bit) -128 ~ 127까지 표현가능

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

Digital Image의 형태       

- 이진 이미지 (binary image) : 각 pixel의 값으로 0 (어두움), 1 (밝음)

          -각 pixel을 표현할때 1bit로 표현해서 사이즈를 줄일수 있다라고 생각하지만 

           실제로 1pixel을 표현할때 1byte이용 그래서 안써요 (공간낭비,   0,1만이용해서 품질 떨어지고 장점이 없음)

- 흑백 이미지 (gray-scale image) : 각 pixel의 값으로 0 ~ 255 사이의 값으로 표현한 이미지

            [숫자가 낮을수록 어둡다 / 중간숫자가 회색]

         - 보통 이미지가 2차원이라고 생각할수도 있지만 흑백, 컬러 상관 없이 이미지의 기본은 3차원

         - RGB의 평균값으로 같은값으로 표현하면 gray-scale 즉 2차원으로 표현할수 있다

- 컬러 이미지 (color image) : 3개의  channel을 이용 . 각 channel은 R, G, B (각각 0~255사이 값) 로 3차원

         -색상의 가지수는 2의 8승이 3개모여 2의 24승개의 색상을 표현 = True color

 

현업에서는 실제로 이미지의 색깔을 학습하는것이 아닌 특징을 학습하기에

2차원으로도 표현가능한  흑백으로 많이 사용한다 data size가 줄기때문에

 

확장자가 jpg가 아닌 png는 RGBA [ 투명도(A) ] 는 4 channel

컬러이미지(3차원) → 흑백이미지 (3차원 or 2차원) 코드로 변환해 보아요 . .

여러 방법이 방법이 있어요 그중 코드로 가장 간단한 방법은 평균을 이용

 

color이미지 1개의 픽셀 안 ex )  R(50)   G(100)   B(75) 평균을 구해서  →

흑백 이미지 1개의 픽셀 안 ex)  R(75)   G(75)   B(75)

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

CNN (Convolution Nevral Network) 

- 다른말로 Convnet(컴브넷) 이라고 하기도 한다

- 우리나라 말로는 "합성곱 신경망"

 

DNN (Deep Nevral Network)

- 우리가 일반적으로 애기하는 Deep Leraning 구조 즉 Deep Learning

 

FC Layer ( Fully Connected Layer)

- DNN과 같은 의미로 종종 사용되는데  사실 FC Layer는 다른의미

- 앞, 뒤(Layer) 모든 Node와 연결된 Layer 

 

(Layer중 Node에 어쩔때는 Linear, Sigmoid, Relu, Softmax 역할을 각각 한다 )

위 사진상 중앙에 있는 Layer가 모든 Layer의 Node와 연결 되어있으므로 FC Layer가 될수 있다

FC Layer를 다른 말로 Dense Layer라고도 한다

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

CNN  ( Convolutional Nevral Network)      

 

DNN으로 이미지 학습이 가능한가요?  네 되긴해요! 한계가 있어요     ex)이미지의 약간의 회전 

해결책 : "특징(pattern)"을 학습하면 훨씬 적은 Data로 더 정확한 예측이 가능 (마치 사람처럼) 

DNN과 CNN의 Architecture(건축) 비교
DNN (Deep Neural Network)
(1) training Data Set
(2) input layer (A1)      
(3) hidden layer  (A1`W2+B2) = z2 → relu(z2) = A2
(4) output layer  (A2`W3+B3) = z3 → softmax(z3) = Y
(5) Y와 T를 비교 차이 계산 (Cross Entropy)
(6) 최적이면 종료 / 그렇지 않으면 W,B update (Back Propagation : 편미분x 행렬곱o)

 

CNN(convolutional Newral Network)
(1) training Data Set
(2) input layer (A1)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 입력data  
(3) convolution Layer 

     (( 1 )) conv라는 곳에서 convolution 연산 수행 = C2  (  Filter(안에 W가 존재)를 이용  )
     (( 2 )) Relu( C2 ) 

     (( 3 )) [선택사항] Pooling Layer / Pooling처리 

 

---------------------------------------- convolution을 또 할수도 있다

(4) convolution Layer/ Filter(안에 W가 존재)를 이용해서 convolution 연산 수행 = C3
    → Relu( C3) → [선택사항] Pooling Layer / Pooling처리 


ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ (특징을 뽑았으니 학습 (DNN ) 할거야)
(5) (Fclayer)Flatten → [선택사항]hidden layer
(6) output Layer    Linear → softmax
(7) 최적이면 종료 / 그렇지 않으면 W,B, filter update (Back Propagation : 편미분x 행렬곱o)  

                                                   (filter가 update 될수록 특징이 더 잘 학습)

Convolution  ( 합성곱 ) 


수학적 정의

합성곱 연산은 두 함수 A와 B가 있다면, 
하나의 함수 반전(reverse),전이(shift)시킨후 다른 함수와 곱해서 나온결과를 적분해요

Filter : CNN에서 이 filter는 특징을 찾아내기 위한 공용 parameter / 여러개 사용 가능
         size도 customizing이며 정방형을 사용, 글 size보다 작은 size가 유리 / 3 x 3, 4 x 4 를 많이 사용
         filter를 지정된 간격으로 이동시키면서 입력이미지 data와 합성곱 연산을 반복적으로 시킬수 있어요
 

   Stride : 지정된 간격

          내가 마음대로 정할수 없다 지정된 값이 있다 ?

 


그림을 통해 convolution연산이 어떻게 수행되는지 확인
Image Data 5x5 / Filter 3x3 이 있다고 가정했을때 

1stride 마다 곱해서 모두 더하는 작업을 움직이면서 반복

 

1filter의 결과들을 모아서 만들면


if stride가 1이면 3x3 짜리가 완성
if stride가 2이면 2x2 짜리가 완성
즉 stride가 크면 클수록 만들어지는 data결과가 작아진다