2023. 10. 20. 00:25ㆍpython/딥러닝
Unet 구조도
- 정보를 압축하는 인코더와 정보로부터 이미지를 복원하는 디코더로 구성됨
- 정보손실을 줄이기 위해 , 원본 이미지와 유사하게 하기 위해 다운샘플링의 출력결과를 업샘플링의 입력과 합침
인코더-디코더
- 컴퓨터가 이해할수 있는 언어로 변경하는 것을 인코더, 컴퓨터 언어를 사람이 이해할수 있는 언어로 변경하는것을 디코더라고 한다.
- U-Net의 인코더 구조 : 기본블록(합성곱층 두번, 풀링층 한번) 5개로 구성되나, 마지막 블록에서는 풀링을 하지 않는다. -> 인코더를 통해 합성곱을 이용해 이미지로부터 특징 추출한다.
- U-Net의 디코더 구조 : 기본블록(업샘플링 한번, 합성곱 두번) 4개로 구성되나, 마지막 블록은 합성곱을 3번 사용한다.
-> 마지막 합성곱은 신경망의 출력을 결정한다.
업샘플링 VS 다운샘플링
- 업샘플링(정보를 이미지화) 할때 업 컴볼루션 사용한다.
- 업샘플링은 이미지 크기를 두배로 늘려준다.
- 다운샘플링 할때 맥스풀링 등을 쓴다.
squeeze VS unsqueeze
- squeeze는 차원을 축소하고 unsqueeze는 차원을 확장하는 함수이다.
- U-Net 코드에서, squeeze는 채널이 1인 차원을 제거해서(채널 정보 삭제) 4차원을 3차원으로 바꿔준다.
- U-Net 코드에서, unsqeeze는 dim=0에 차원을 추가하여, 배치사이즈를 정해주어 모델의 입력값을 3차원에서 4차원으로 바꿔준다.
- U-Net의 마지막 출력값은 3차원이다.
- U-Net를 학습할때는 unsqeeze를 안하는데, train_loader는 이미 4차원 형태이기 때문이다. 즉, test_loader, trian_loader 사용하면 unsqeeze를 안해도 되지만(loader는 배치사이즈가 있는 4차원형태), 공부한 코드에서는 이미지 하나를 출력하기 위해 test_set 이미지 하나를 사용하였기 때문에 unsqeeze를 사용하였다.
torch.cat()
- U-Net 구조에서, torch.cat([x,e1],dim=1)을 사용하는 이유는 앞서 말했듯이 다운샘플링의 출력값을 업샘플링의 입력값에 합해주기 위한것이다.
참고 : 텐초의 파이토치 딥러닝 특강
'python > 딥러닝' 카테고리의 다른 글
트랜스포머 어텐션(Transformer attention) (1) | 2023.12.01 |
---|---|
GAN 파생 기술(DCGAN, CGAN ..etc) (2) | 2023.11.24 |
적대적 생성 신경망 GAN(Generative Adversarial Networks) (0) | 2023.11.17 |
변형 오토인코더 (2) | 2023.11.09 |
오토인코더 (0) | 2023.10.20 |