Elle McFarlane
add gitignore etc
15d6c34
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')