공지
-
본 Tutorial은 교재 시작하세요 텐서플로 2.0 프로그래밍의 강사에게 국비교육 강의를 듣는 사람들에게 자료 제공을 목적으로 제작하였습니다.
-
강사의 주관적인 판단으로 압축해서 자료를 정리하였기 때문에, 자세하게 공부를 하고 싶으신 분은 반드시 교재를 구매하실 것을 권해드립니다.

- 본 교재 외에 강사가 추가한 내용에 대한 Reference를 확인하셔서, 추가적으로 학습하시는 것을 권유드립니다.
Tutorial
이전 강의가 궁금하신 분들은 아래에서 선택하여 추가 학습 하시기를 바랍니다.
I. 개요
- 저해상도에서 고해상도의 이미지로 변환하는 것은 어려운 연산입니다.
- 픽셀로 구성된 이미지는 고해상도로 변환(확대)하면 이미지에서 사각형이 두드러져 보이는 것이 바로 초해상도(
Super Resolution) 작업입니다.
- 전통적으로는
interpolation(보간) 등의 기법이 있지만, 선명함을 잃고 흐릿해지는 단점이 있습니다.
- 오토인코더로 초해상도 작업을 하는 과정을 진행합니다.
- 이 때,
REDNet이라는 네트워크를 사용합니다.
II. REDNet
REDNet은 Residual Encoder-Decoder Network의 약자이며, Residual은 ResNet등에서 사용하는 건너뛴 연결(skip-connection)입니다.
- 다수의 레이어가 중첩되는 구조에서 앞쪽의 정보를 잃어버리기 않기 위해 뒤쪽에 정보를 그대로 전달해줄 때 건너뛴 연결이 사용됩니다.
- 논문에서 사용한 이미지는
BSD (Berkeley Segmentation Dataset) 이며, 책에서도 동일하게 사용합니다.
# 텐서플로 2 버전 선택
try:
# %tensorflow_version only exists in Colab.
%tensorflow_version 2.x
except Exception:
pass
import tensorflow as tf
import numpy as np
import pandas as pd
import tensorflow_hub as hub
import matplotlib.pyplot as plt
import cv2
III. 데이터 불러오기
tf.keras.utils.get_file() 데이터를 불러옵니다.
tf.keras.utils.get_file('/content/bsd_images.zip', 'http://bit.ly/35pHZlC', extract=True)
Downloading data from http://bit.ly/35pHZlC
37527552/37520292 [==============================] - 0s 0us/step
'/content/bsd_images.zip'
!unzip /content/bsd_images.zip
Archive: /content/bsd_images.zip
creating: images/
creating: images/test/
inflating: images/test/100007.jpg
inflating: images/test/100039.jpg
.
.
.
.
inflating: images/val/97033.jpg
inflating: images/val/Thumbs.db
import pathlib
image_root = pathlib.Path('/content/images')
all_images_paths=list(image_root.glob('*/*'))
print(all_images_paths[:10])
[PosixPath('/content/images/val/62096.jpg'), PosixPath('/content/images/val/361010.jpg'), PosixPath('/content/images/val/Thumbs.db'), PosixPath('/content/images/val/54082.jpg'), PosixPath('/content/images/val/87046.jpg'), PosixPath('/content/images/val/38082.jpg'), PosixPath('/content/images/val/156065.jpg'), PosixPath('/content/images/val/33039.jpg'), PosixPath('/content/images/val/14037.jpg'), PosixPath('/content/images/val/159008.jpg')]
- 각 이미지의 경로는
root 디렉터리에서 glob() 함수를 사용해 하단의 모든 파일을 불러올 수 있습니다.
- 각 파일의 경로는
PosixPath라는 객체가 되는데, 이 객체에서 경로를 가져오기 위해서는 문자열로 변환하는 str()함수를 사용합니다.
(1) 이미지 시각화
matplotlib.pyplot으로 확인합니다.
import PIL.Image as Image
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 12))
for c in range(9):
plt.subplot(3,3,c+1)
plt.imshow(plt.imread(all_images_paths[c]))
plt.title(all_images_paths[c])
plt.axis('off')
plt.show()
/img/programming/2020/05/ch9_4_super_resolution/output_7_1.png
