Showing
1 changed file
with
116 additions
and
0 deletions
1 | +# Self-Transfer Learning 을 통한 동영상 Super Resolution | ||
2 | + | ||
3 | +## Abstract | ||
4 | + | ||
5 | +기존의 동영상 Super Resolution 연구는 프레임 단위로 영상을 분할 한 뒤 각 프레임에 대해 Image Super Resolution 을 수행하고, SR 된 프레임을 다시 영상으로 합치는 방법을 주로 사용하였다. 인접한 프레임에 대한 초해상화 결과의 차이가 크다면 영상이 부자연스럽게 보일 수 있기 때문에 이를 개선하기 위해 인접한 5-7 프레임 가량을 RNN 등의 인공신경망을 통해 학습하여 초해상화에 사용하는 기법은 연구되어 왔으나, 인접하지 않은 한 동영상 내의 다른 프레임을 영상의 초해상화에 사용하는 연구는 이루어지지 않았다. | ||
6 | +본 프로젝트는 하나의 영상은 하나의 주제에 대한 영상이며 그 안에서 다수의 중복된 장면이 확대되어 여러번 나타난다는 관찰에서 출발하여, 이러한 중복된 프레임이 영상의 초해상화에 사용될 수 있음을 입증하는 것을 목표로 한다. | ||
7 | + | ||
8 | +## Project Process | ||
9 | + | ||
10 | +### GPU | ||
11 | + | ||
12 | +동영상을 소스로 사용하는 머신러닝 프로젝트 특성상 성능 좋은 GPU가 필요하다. | ||
13 | +본 프로젝트를 진행하면서 우리들은 GPU 사용 문제를 다음과 같이 해결했다. | ||
14 | + | ||
15 | +- 개인적으로 가지고 있는 GPU 사용. | ||
16 | +- GCP (Google Cloud Platform)에서 GPU 할당 요청 후 사용. | ||
17 | + | ||
18 | +### Requirements | ||
19 | + | ||
20 | +- Python 3 | ||
21 | +- PyTorch (0.4.0), torchvision | ||
22 | +- Numpy, Scipy | ||
23 | +- Pillow, Scikit-image | ||
24 | +- h5py | ||
25 | +- importlib | ||
26 | +- ffmpeg | ||
27 | + | ||
28 | +### Project Scenario | ||
29 | + | ||
30 | +본 프로젝트에선 성능이 뛰어나고 경량화가 잘되었다고 평가받는 [CARN 모델](https://github.com/nmhkahn/CARN-pytorch)을 사용한다. | ||
31 | + | ||
32 | +우선 초해상화를 진행할 동영상을 대상으로 frame을 추출한다. | ||
33 | + | ||
34 | +``` | ||
35 | +ffmpeg -i [추출한 동영상 파일 이름].mp4 | ||
36 | + -vf "select=eq(pict_type\,I),scale=1280:720" // scale을 해당 영상의 크기에 맞춰, keyframe으로 추출 | ||
37 | + -vsync 0 [추출한 frame 저장할 디렉토리]/%06d.png | ||
38 | +``` | ||
39 | + | ||
40 | +추출한 frame들로 dataset을 구성한다. | ||
41 | + | ||
42 | +``` | ||
43 | +from glob import glob | ||
44 | +import cv2 | ||
45 | + | ||
46 | +images = sorted(glob("./[추출한 frame 저장할 디렉토리]/*.png")) | ||
47 | +``` | ||
48 | + | ||
49 | +dataset 디렉토리를 만들어주고 | ||
50 | + | ||
51 | +``` | ||
52 | +from pathlib import Path | ||
53 | +Path("./dataset/DIV2K/DIV2K_train_HR").mkdir(parents=True, exist_ok=True) | ||
54 | +Path("./dataset/DIV2K/DIV2K_train_LR_bicubic/X2").mkdir(parents=True, exist_ok=True) | ||
55 | +``` | ||
56 | + | ||
57 | +추출한 frame들을 decrease size해서 dataset으로 구성한다. | ||
58 | + | ||
59 | +``` | ||
60 | +from tqdm import tqdm | ||
61 | +for image in tqdm(images): | ||
62 | + hr = cv2.imread(image, cv2.IMREAD_COLOR) | ||
63 | + lr = cv2.resize(hr, dsize=(640, 360), interpolation=cv2.INTER_CUBIC) | ||
64 | + | ||
65 | + cv2.imwrite("./dataset/DIV2K/DIV2K_train_HR/" + Path(image).name, hr) | ||
66 | + cv2.imwrite("./dataset/DIV2K/DIV2K_train_LR_bicubic/X2/" + Path(image).stem + "x2.png", lr) | ||
67 | +``` | ||
68 | + | ||
69 | +그 후 div2h5.py 실행 | ||
70 | + | ||
71 | +``` | ||
72 | +import os | ||
73 | +import glob | ||
74 | +import h5py | ||
75 | +import scipy.misc as misc | ||
76 | +import numpy as np | ||
77 | + | ||
78 | +dataset_dir = "DIV2K/" | ||
79 | +dataset_type = "train" | ||
80 | + | ||
81 | +f = h5py.File("DIV2K_{}.h5".format(dataset_type), "w") | ||
82 | +dt = h5py.special_dtype(vlen=np.dtype('uint8')) | ||
83 | + | ||
84 | +for subdir in ["HR", "X2"]: | ||
85 | + if subdir in ["HR"]: | ||
86 | + im_paths = glob.glob(os.path.join(dataset_dir, | ||
87 | + "DIV2K_{}_HR".format(dataset_type), | ||
88 | + "*.png")) | ||
89 | + | ||
90 | + else: | ||
91 | + im_paths = glob.glob(os.path.join(dataset_dir, | ||
92 | + "DIV2K_{}_LR_bicubic".format(dataset_type), | ||
93 | + subdir, "*.png")) | ||
94 | + im_paths.sort() | ||
95 | + grp = f.create_group(subdir) | ||
96 | + | ||
97 | + for i, path in enumerate(im_paths): | ||
98 | + im = misc.imread(path) | ||
99 | + print(path) | ||
100 | + grp.create_dataset(str(i), data=im) | ||
101 | + | ||
102 | +``` | ||
103 | + | ||
104 | +다음과 같이 구성된 dataset 을 가지고 carn-m 모델로 동영상의 초해상화를 진행한다. | ||
105 | + | ||
106 | +``` | ||
107 | +!python carn/train.py --patch_size 64 | ||
108 | + --batch_size 64 | ||
109 | + --max_steps 600000 | ||
110 | + --decay 400000 | ||
111 | + --model carn_m | ||
112 | + --ckpt_name [체크포인트 이름] | ||
113 | + --ckpt_dir [체크포인트 디렉토리] | ||
114 | + --scale 2 | ||
115 | + --group 4 | ||
116 | +``` | ... | ... |
-
Please register or login to post a comment