Source code for src.runtime.modules.output.common

"""
Contains some common helper functions for output modules
"""


import datetime

import numpy as np
from scipy import special

from src.common.config.global_config import cfg


[docs]def map_x_to_image(y): """ Map x-axis (griding_num) estimations to image coordinates Args: y: one result sample (can be directly from net or post-processed -> all number types should be accepted) Returns: x coordinates for each lane """ lanes = [] offset = 0.5 # different values used in ufld project. demo: 0.0, test: 0.5 for i in range(y.shape[1]): out_i = y[:, i] lane = [ int((loc + offset) * float(cfg.img_width) / (cfg.griding_num - 1)) # int(round((loc + 0.5) * float(cfg.img_width) / (cfg.griding_num - 1))) if loc != -2 else -2 for loc in out_i ] lanes.append(lane) return lanes
[docs]def evaluate_predictions(y): """ Evaluate predictions Tries to improve the estimation by including all probabilities instead of only using the most probable class Args: y: one result sample Returns: 2D array containing x values (float) per h_sample and lane """ out = y.data.cpu().numpy() # load data to cpu and convert to numpy out_loc = np.argmax(out, axis=0) # get most probably x-class per lane and h_sample # do some stuff i dont fully understand to improve x accuracy prob = special.softmax(out[:-1, :, :], axis=0) # relative probability with sum() == 1.0 idx = np.arange(cfg.griding_num).reshape(-1, 1, 1) # init 3 dim array containing numbers from 0 to griding_num - 1 loc = np.sum(prob * idx, axis=0) # calculate more accurate x values loc[out_loc == cfg.griding_num] = -2 # where the most probable class is 100 (no lane detected): replace with -2 return loc
[docs]def get_filename_date_string(): """ get current date and time in a format suitable for file exports Returns: string """ return datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')