티스토리 뷰

Deep-learning

[딥러닝] CNN 정리

Sims. 2023. 5. 29. 18:20

1. Conv2d 

CLASStorch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

 

parameter : 

1) in_channels : 몇개의 채널 (input image의 channel 수)

2) out_channels : output image가 가지는 채널 수 

3) kernel_size : Conv2d의 size 

4) stride : kernel이 움직이는 칸 수

5) padding : 얼만큼 padding을 넣을것인가? ( 좌 우 / 상 하 에 모두 넣음) // 스칼라 , "same", "valid"가능

    ex) input Image size : (3,4,4) 이고 padding = 3을 수행하면... (3,10,10)됨. 즉, 상 하 좌 우 모두 3씩의 padding이 들어감

    ex) padding = "same"시, input image size로 맞춤. 

6) dilation(팽창) : kernel의 사이(?)를 나타냄 ( 그림으로 보는게 훨씬 이해가 쉬움)

dilation

즉, dilation 의 default = 1 이라는 ㄷ뜻은 현재 칸에서 '1칸'옆을 보겠다. dilation = 2 라는 소리는 현재 칸에서 '2칸' 옆을 보겠다. 생각하면 된다. 

 

7) group : channel을 그룹화 시켜 분산처리 할 수 있도록 함.

group화

그룹화는 조금 생소하다.

group화는 channel과 관련있다. channel을 그룹화시켜 우리가 일반적으로 알고있는 CNN, kernel 적용하겠다는 것이다.

기본적으로 group의 default는 1, 우리가 일반적으로 알고있는 CNN방식을 생각하면 된다.

위에는 group = 2 인 상태이다. 그림을 보면 단순에 알아볼 수 있을것이다.

channel을 그룹 수로 나누어 각 그룹마다 '서로다른' Kernel을 적용하여 목표 out_channel / group수 만큼 만들어 낸다.

그 후 concat을 통하여 서로 만들어낸 feature map을 합치는 방식이다.

위 그림이 직접적으로 알아들을 수 있을 것이다.

 

 

 

개인적인 의문 )

기본적인 input_img 는 H,W,C 3차원으로 구성되어 있는데 왜 Conv2d를 사용할까?

    > Conv2d는 단순히 가로, 세로를 지나가며 kernel을 적용한다는 의미이다.

만약, T,H,W,C  시간이 포함된 동영상이 들어오게 된다면 우리는 Conv3d를 사용할 것이다. 왜냐?

    > 가로, 세로 , 시간을 kernel이 지나가며 확인해야 하기 때문이다.

또, 테이블 형태의 정형데이터일 경우, row, column으로 구성되어 있다. 즉, 2차원이다.

그럼 우리는 자연스럽게 Conv1d를 사용해야 할것 같다는 생각이 든다. 왜?

    > 가로로만 kernel이 지나가며 살펴볼 것이니까..!

 

 

절대 햇갈리면 안되는 것)

Conv2d를 선언할때, 우리는 in_channel, out_channel, stride , kernel_size 는 반드시 지정해 줘야 한다. 왜?

    1. 들어오는 in_channel을 알아야 kernel의 Channel(?)를 지정할 수 있다.

    2. out_channel은 몇개의 서로다른 kernel을 만들지 알려줘야 하기 때문

    3. stride는 이미지를 훑고 가는 기준이기 때문에

    4. kernel_size는 커널의 크기를 알려줘야 하기 때문이다.

 

즉, 우리는 위 필수 4개의 하이퍼파라미터를 이용하여 만들고자 하는 Kernel의 (C,H,W)를 알 수 있고, 얼만큼 만들어야 하는지도 알 수 있다. ( 즉 , kernel의 ( N , C , H , W )를 지정하는 것이다 )

 

한가지 잊지 말아야 할건, 입력된 feature map의 channel 만큼  kernel도 channel을 맞춰 만들어 결국, 하나의 kernel은 (1,H,W)를 만들지만, 서로다른 다수의 kernel을 out_channels만큼 사용하기 때문에 ( out_channels,H,W)가 되는 것이다.

 

끝.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함