티스토리 뷰
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 의 default = 1 이라는 ㄷ뜻은 현재 칸에서 '1칸'옆을 보겠다. dilation = 2 라는 소리는 현재 칸에서 '2칸' 옆을 보겠다. 생각하면 된다.
7) group : channel을 그룹화 시켜 분산처리 할 수 있도록 함.
그룹화는 조금 생소하다.
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)가 되는 것이다.
끝.
'Deep-learning' 카테고리의 다른 글
[Deep learning] pytorch GPU 환경 세팅 (2) | 2023.09.01 |
---|---|
[딥러닝] Pooling 정리 (0) | 2023.05.29 |
0. DGL 예제 만들기 프로젝트 (0) | 2022.12.16 |
다중공선성을 제거해야할까? (0) | 2022.11.05 |
GNN 수학식 뜯어보기 - 3. GAT(Attention) (0) | 2022.10.18 |
- Total
- Today
- Yesterday
- 어탠션
- 정리
- yolov11
- 자바
- 도커
- 뜯어보기
- V11
- 백준
- github
- 오류
- 딥러닝
- CNN
- YOLO
- 욜로
- java
- 깃
- 티스토리챌린지
- python
- c3k2
- Tree
- YOLOv8
- GIT
- DeepLearning
- 초보자
- 알고리즘
- docker
- 디텍션
- GNN
- 이미지
- 오블완
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |