공지
본 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
