2 minute read

Summary

I have resumed my Final Year Project (TFG) after the Christmas break with some tasks left pending.

Progress This Week

Objective

This week, on the suggestion of my advisor to get more accustomed to training PilotNets, I aimed to train more networks. Specifically, I wanted to create one specialized in straight lines (the first one I created will now be used as the one specialized in curves, since it was trained on an “only curves” circuit). After that, I planned to train another one to identify whether I’m on a straight or curved part of the circuit and request the prediction from the appropriate network.

Straight Net

I did not want to use the same dataset, as I wanted there to be a difference when using the straight line expert or the curve expert. To achieve this, I started by adding a condition to my neural pilot: if the angular speed was within a certain range, then we were on a straight line. In such cases, I manually established the speed instead of using the one predicted by the net. With this, I recorded another dataset of around 18,500 pairs of images and velocity commands and trained a 500-epoch net.

This took a while, but the results were worth it. I had a pilot that worked quite decently (the fastest yet) and accelerated significantly on curves.

Decision Making

Not having yet implemented the decision-making neural net, we created a double neural pilot program that requested predictions from both networks and decided which to use based on the angular speeds. However, this wasn’t exactly what I was looking for. Yes, the pilot performed better with the combination than with any of them alone. However, I knew that when the decision was wrong, it didn’t matter much because even if the aggressive net was specialized in straight lines, it also knew how to turn… So I did it again, this time with even faster speeds in straight line situations.

Too Aggressive Net

To save time, resources, and actually divide the job, I wanted the net to only learn how to go on a straight line. To do this, I generated another dataset in a similar way to the first one. However, this time, when preparing the data for training, I made a change: instead of balancing the data as before, I unbalanced it, taking only the data that had low angular speed, indicating that they were taken on a straight line.

With this, and knowing that going straight did not require a too large dataset, I soon had a “2aggressive” net.

Graphing

Midway through the training of the first aggressive net, I realized I had not implemented a way to evaluate the dataset so it would end when it stopped evolving, nor did I have any graphs to show its progress. So, before the second training, I implemented it, and here is the graph of the 2aggressive net:

PilotNet Training Graph

Result and Pending Work

The result is a really fast pilot that detects when it’s on a straight line and hands control over to an aggressive net, and when it’s on a curve, it gives control to a safe net. This is the best pilot yet. However, we are not done. Right now, I am working on another net that decides which of them to use, a TripleNeuralPilot…