Spaces:
Running
Running
File size: 4,871 Bytes
15d6c34 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
import math
import os
import random
import time
import torch
import numpy as np
import torch as th
from PIL import Image
from scipy.ndimage import gaussian_filter
from utils import paramUtil
def set_random_seed(seed: int, using_cuda: bool = False) -> None:
"""Seed the different random generators.
:param seed:
:param using_cuda:
"""
# Seed python RNG
random.seed(seed)
# Seed numpy RNG
np.random.seed(seed)
# seed the RNG for all devices (both CPU and CUDA)
th.manual_seed(seed)
if using_cuda:
# Deterministic operations for CuDNN, it may impact performances
th.backends.cudnn.deterministic = True
th.backends.cudnn.benchmark = False
def mkdir(path):
if not os.path.exists(path):
os.makedirs(path)
COLORS = [[255, 0, 0], [255, 85, 0], [255, 170, 0], [255, 255, 0], [170, 255, 0], [85, 255, 0], [0, 255, 0],
[0, 255, 85], [0, 255, 170], [0, 255, 255], [0, 170, 255], [0, 85, 255], [0, 0, 255], [85, 0, 255],
[170, 0, 255], [255, 0, 255], [255, 0, 170], [255, 0, 85]]
MISSING_VALUE = -1
def save_image(image_numpy, image_path):
img_pil = Image.fromarray(image_numpy)
img_pil.save(image_path)
def save_logfile(log_loss, save_path):
with open(save_path, 'wt') as f:
for k, v in log_loss.items():
w_line = k
for digit in v:
w_line += ' %.3f' % digit
f.write(w_line + '\n')
def print_current_loss(start_time, niter_state, losses, epoch=None, inner_iter=None):
def as_minutes(s):
m = math.floor(s / 60)
s -= m * 60
return '%dm %ds' % (m, s)
def time_since(since, percent):
now = time.time()
s = now - since
es = s / percent
rs = es - s
return '%s (- %s)' % (as_minutes(s), as_minutes(rs))
if epoch is not None:
print('epoch: %3d niter: %6d inner_iter: %4d' % (epoch, niter_state, inner_iter), end=" ")
now = time.time()
message = '%s'%(as_minutes(now - start_time))
for k, v in losses.items():
message += ' %s: %.4f ' % (k, v)
print(message)
def compose_gif_img_list(img_list, fp_out, duration):
img, *imgs = [Image.fromarray(np.array(image)) for image in img_list]
img.save(fp=fp_out, format='GIF', append_images=imgs, optimize=False,
save_all=True, loop=0, duration=duration)
def save_images(visuals, image_path):
if not os.path.exists(image_path):
os.makedirs(image_path)
for i, (label, img_numpy) in enumerate(visuals.items()):
img_name = '%d_%s.jpg' % (i, label)
save_path = os.path.join(image_path, img_name)
save_image(img_numpy, save_path)
def save_images_test(visuals, image_path, from_name, to_name):
if not os.path.exists(image_path):
os.makedirs(image_path)
for i, (label, img_numpy) in enumerate(visuals.items()):
img_name = "%s_%s_%s" % (from_name, to_name, label)
save_path = os.path.join(image_path, img_name)
save_image(img_numpy, save_path)
def compose_and_save_img(img_list, save_dir, img_name, col=4, row=1, img_size=(256, 200)):
# print(col, row)
compose_img = compose_image(img_list, col, row, img_size)
if not os.path.exists(save_dir):
os.makedirs(save_dir)
img_path = os.path.join(save_dir, img_name)
# print(img_path)
compose_img.save(img_path)
def compose_image(img_list, col, row, img_size):
to_image = Image.new('RGB', (col * img_size[0], row * img_size[1]))
for y in range(0, row):
for x in range(0, col):
from_img = Image.fromarray(img_list[y * col + x])
# print((x * img_size[0], y*img_size[1],
# (x + 1) * img_size[0], (y + 1) * img_size[1]))
paste_area = (x * img_size[0], y*img_size[1],
(x + 1) * img_size[0], (y + 1) * img_size[1])
to_image.paste(from_img, paste_area)
# to_image[y*img_size[1]:(y + 1) * img_size[1], x * img_size[0] :(x + 1) * img_size[0]] = from_img
return to_image
def list_cut_average(ll, intervals):
if intervals == 1:
return ll
bins = math.ceil(len(ll) * 1.0 / intervals)
ll_new = []
for i in range(bins):
l_low = intervals * i
l_high = l_low + intervals
l_high = l_high if l_high < len(ll) else len(ll)
ll_new.append(np.mean(ll[l_low:l_high]))
return ll_new
def motion_temporal_filter(motion, sigma=1):
motion = motion.reshape(motion.shape[0], -1)
# print(motion.shape)
for i in range(motion.shape[1]):
motion[:, i] = gaussian_filter(motion[:, i], sigma=sigma, mode="nearest")
return motion.reshape(motion.shape[0], -1, 3)
def get_device(args):
return torch.device('cuda:%d' % args.gpu_id if args.gpu_id != -1 else 'cpu')
|