1 minute read

Semana 7

Durante esta semana he mejorado el proceso de entrenamiento para que funcione, además de balancear el dataset y tomar correctamente los datos del replay.

Record Dataset

Al retomar el archivo para grabar el dataset, he aprendido que las cámaras del coche no se guardan en el archivo de log. Por lo tanto, al elegir el coche dentro del replay hemos de añadirle la cámara y a partir de su callback captar tanto las imagenes como el steering. También he encontrado que es conveniente activar el modo síncrono para obtener un dataset mas parecido a lo que hemos grabado.

global vehicle

    client = carla.Client('localhost', 2000)
    client.set_timeout(10.0)

    world = client.get_world()

    settings = world.get_settings()
    settings.synchronous_mode = True
    settings.fixed_delta_seconds = 0.05
    world.apply_settings(settings)

    client.replay_file("dataset_record.log", 0.0, 0.0, 0)

    world.tick()
    time.sleep(1.0)

    vehicles = world.get_actors().filter("vehicle.*")
    vehicle = vehicles[0]

    blueprint_library = world.get_blueprint_library()
    camera_bp = blueprint_library.find("sensor.camera.rgb")
    camera_bp.set_attribute("image_size_x", "800")
    camera_bp.set_attribute("image_size_y", "600")
    camera_bp.set_attribute("fov", "90")

    camera_transform = carla.Transform(
        carla.Location(x=1.5, z=1.7)
    )

    camera = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle)
    camera.listen(camera_callback)

    try:
        while True:
            world.tick()
    except KeyboardInterrupt:
        print("[INFO] Finalizando...")
    finally:
        camera.stop()
        camera.destroy()
        save_data()

        # Restaurar settings
        settings.synchronous_mode = False
        settings.fixed_delta_seconds = None
        world.apply_settings(settings)

PilotNet

Además de la red que tenía la semana pasada, he añadido varias cosas al archivo.

Con esto balanceamos estas lineas podemos balancear el dataset:


hist, bins = np.histogram(df["steering"], 25)

indices_to_keep = []

for i in range(25):
    bin_indices = df[
        (df["steering"] >= bins[i]) &
        (df["steering"] < bins[i+1])
    ].index.tolist()

    if len(bin_indices) > 200:
        bin_indices = np.random.choice(
            bin_indices,
            200,
            replace=False
        )

    indices_to_keep.extend(bin_indices)

df_balanced = df.loc[indices_to_keep].sample(frac=1).reset_index(drop=True)

Pasando de:

Pre balanceo

Convirtiendose en:

Post balanceo

Además de esto, he solucionado problemas que tenia el entrenamiento.

Lecturas

También me he informado durante esta semana sobre DAgger y Training Tweaks.

Updated: