U-Net

2023. 10. 20. 00:25python/딥러닝

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)을 사용하는 이유는 앞서 말했듯이 다운샘플링의 출력값을 업샘플링의 입력값에 합해주기 위한것이다.

 

 

참고 : 텐초의 파이토치 딥러닝 특강