Dataset finalizad
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:

Convirtiendose en:

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.