일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬
- 1002
- 손실함수
- 15649
- 실버
- n과 m
- 티스토리챌린지
- 4948
- 재귀
- streamlit
- 밑바닥부터 시작하는 딥러닝
- 파이싼
- REST
- Python
- 가상환경
- 개발환경
- 신경망 학습
- BOJ
- REST API
- end to end
- 기계학습
- 백트래킹
- 경사하강법
- 그리디 알고리즘
- 9020
- N-Queen
- 백준
- 오블완
- pyenv
- 1101
- Today
- Total
파이톨치
[BoostCamp AI Tech] FCN 과제 본문
FCN 8
FCN 8의 특징:
- 업샘플링(Deconvolution): FCN 8은 업샘플링 기법을 사용해 다운샘플링된 이미지를 원래의 해상도로 되돌립니다. 이를 위해 deconvolution(또는 transposed convolution) 레이어를 사용하여 이미지 크기를 점진적으로 복원하며, 이 과정에서 각 픽셀의 클래스 정보를 예측합니다.
- Skip Connection: FCN 8은 중간 레이어의 정보를 결합하는 스킵 연결(skip connection)을 사용합니다. 예를 들어, 네트워크의 더 깊은 레이어와 얕은 레이어에서 나온 특징 맵을 결합하여 세밀한 공간 정보를 보존하면서 높은 수준의 추상화된 특징을 반영합니다. 이렇게 하면 더 정확한 경계와 세밀한 예측이 가능합니다.
- 8배 업샘플링: FCN 8이라는 이름은 출력 이미지를 원래 이미지 크기의 1/8 크기로 다운샘플링한 뒤 업샘플링하여 복원하는 방식에서 비롯되었습니다. FCN 32, FCN 16, FCN 8 등 여러 변형이 있으며, 숫자는 업샘플링 비율을 나타냅니다. FCN 8은 업샘플링 단계에서 가장 세밀한 정보를 활용하여 정확도를 높입니다.
class FCN8s(nn.Module):
def __init__(self, num_classes=len(CLASSES)):
super(FCN8s, self).__init__()
# TODO: FCN8s 모델을 완성하기 위해 필요한 모듈들을 작성하세요
self.num_classes = num_classes
def forward(self, x):
# TODO: `__init__`에서 작성한 모듈을 이용하여 forward 함수를 작성하세요
pass
딥러닝 모델을 구축할 때, 특히 이미지 처리를 위한 합성곱 신경망(Convolutional Neural Networks, CNNs) 에서 컨볼루션과 풀링은 매우 중요한 연산입니다. 이 글에서는 PyTorch에서 Conv2d와 MaxPool2d 레이어를 사용하여 2D 합성곱 연산과 최대 풀링을 어떻게 수행하는지 설명하겠습니다. 각 레이어의 동작 원리와 함께 코드 예시도 제공하겠습니다.
컨볼루션 연산 (Convolution Operation)
기본 개념
Conv2d는 2D 합성곱 연산을 수행하는 레이어입니다. 주로 이미지를 처리할 때 사용되며, 입력 이미지에서 특징을 추출하는 데 중요한 역할을 합니다. Conv2d는 여러 개의 필터(또는 커널)를 사용하여 입력 이미지를 처리하며, 각 필터는 입력 이미지에서 특정한 특징을 학습합니다.
Conv2d 레이어의 주요 매개변수
self.conv1 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)
풀링(Pooling) 은 주로 이미지 크기 축소 및 특징 요약을 위한 연산입니다. MaxPool2d는 주어진 영역 내에서 최대값을 뽑아 출력하는 연산으로, 이미지의 공간적 크기를 줄이는 데 사용됩니다. 이는 모델의 계산량을 줄이고, 과적합을 방지하는 데 도움이 됩니다.
inplace는 연산을 수행할 때 원본 데이터를 수정할지 여부를 결정하는 키워드입니다. inplace=True로 설정하면 입력 텐서를 수정하여 메모리 사용량을 줄일 수 있습니다.
예를 들어, ReLU 활성화 함수에서 inplace=True를 사용하면 입력 텐서 자체가 수정됩니다: