def _log_visuals(rgb_image, birdview, speed, command, loss, pred_locations, _pred_locations, _teac_locations, size=16): import cv2 import numpy as np import utils.carla_utils as cu WHITE = [255, 255, 255] BLUE = [0, 0, 255] RED = [255, 0, 0] _numpy = lambda x: x.detach().cpu().numpy().copy() images = list() for i in range(min(birdview.shape[0], size)): loss_i = loss[i].sum() canvas = np.uint8(_numpy(birdview[i]).transpose(1, 2, 0) * 255).copy() canvas = cu.visualize_birdview(canvas) rgb = np.uint8(_numpy(rgb_image[i]).transpose(1, 2, 0) * 255).copy() rows = [x * (canvas.shape[0] // 10) for x in range(10+1)] cols = [x * (canvas.shape[1] // 10) for x in range(10+1)] def _write(text, i, j): cv2.putText( canvas, text, (cols[j], rows[i]), cv2.FONT_HERSHEY_SIMPLEX, 0.35, (255,255,255), 1) def _dot(_canvas, i, j, color, radius=2): x, y = int(j), int(i) _canvas[x-radius:x+radius+1, y-radius:y+radius+1] = color def _stick_together(a, b): h = min(a.shape[0], b.shape[0]) r1 = h / a.shape[0] r2 = h / b.shape[0] a = cv2.resize(a, (int(r1 * a.shape[1]), int(r1 * a.shape[0]))) b = cv2.resize(b, (int(r2 * b.shape[1]), int(r2 * b.shape[0]))) return np.concatenate([a, b], 1) _command = { 1: 'LEFT', 2: 'RIGHT', 3: 'STRAIGHT', 4: 'FOLLOW'}.get(torch.argmax(command[i]).item()+1, '???') _dot(canvas, 0, 0, WHITE) for x, y in (_teac_locations[i] + 1) * (0.5 * CROP_SIZE): _dot(canvas, x, y, BLUE) for x, y in _pred_locations[i]: _dot(rgb, x, y, RED) for x, y in pred_locations[i]: _dot(canvas, x, y, RED) _write('Command: %s' % _command, 1, 0) _write('Loss: %.2f' % loss[i].item(), 2, 0) images.append((loss[i].item(), _stick_together(rgb, canvas))) return [x[1] for x in sorted(images, reverse=True, key=lambda x: x[0])]
def _log_visuals(birdview, speed, command, loss, locations, _locations, size=16): import cv2 import numpy as np import utils.carla_utils as cu WHITE = [255, 255, 255] BLUE = [0, 0, 255] RED = [255, 0, 0] _numpy = lambda x: x.detach().cpu().numpy().copy() images = list() for i in range(min(birdview.shape[0], size)): loss_i = loss[i].sum() canvas = np.uint8(_numpy(birdview[i]).transpose(1, 2, 0) * 255).copy() canvas = cu.visualize_birdview(canvas) rows = [x * (canvas.shape[0] // 10) for x in range(10 + 1)] cols = [x * (canvas.shape[1] // 10) for x in range(10 + 1)] def _write(text, i, j): cv2.putText(canvas, text, (cols[j], rows[i]), cv2.FONT_HERSHEY_SIMPLEX, 0.35, (255, 255, 255), 1) def _dot(i, j, color, radius=2): x, y = int(j), int(i) canvas[x - radius:x + radius + 1, y - radius:y + radius + 1] = color _command = { 1: 'LEFT', 2: 'RIGHT', 3: 'STRAIGHT', 4: 'FOLLOW' }.get(torch.argmax(command[i]).item() + 1, '???') _dot(0, 0, WHITE) for x, y in locations[i]: _dot(x, y, BLUE) for x, y in (_locations[i] + 1) * (0.5 * 192): _dot(x, y, RED) _write('Command: %s' % _command, 1, 0) _write('Loss: %.2f' % loss[i].item(), 2, 0) images.append((loss[i].item(), canvas)) return [x[1] for x in sorted(images, reverse=True, key=lambda x: x[0])]