-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
16 changed files
with
262 additions
and
65 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
--- | ||
title: "Semana 17 - Piloto neuronal!!!" | ||
categories: | ||
- Registro Semanal | ||
tags: | ||
- ROS2 | ||
- Aprendizaje Automático | ||
--- | ||
|
||
## Índice | ||
|
||
--- | ||
|
||
## Fallo en la aumentación | ||
|
||
Lo primero que se descubrió es que en nuestro caso la aumentación no nos favorecía tanto, ya que al hacer que el aprendizaje no dependiera del color, se detectaba la pared del circuito como la línea, por lo que se tuvo que quitar esta característica. | ||
|
||
--- | ||
|
||
## Cambio de enfoque | ||
|
||
Tras una prueba, me di cuenta de que no sabía a ciencia cierta qué umbral de `mse_loss` era el más indicado para finalizar el entrenamiento, por lo que se desarrolló otra manera de probar los modelos neuronales. Se ejecutó un entrenamiento de manera normal con el comando: | ||
|
||
```python | ||
python3 train.py --dataset_path ../training_dataset/expertPilot_VX/ --network_path ../networks/netX/netX.tar | ||
``` | ||
|
||
Entonces se creó un script que cada hora fuera copiando la red neuronal, guardando el estado de la misma con el avance del entrenamiento durante un tiempo indefinido. Se dejó esta red entrenando bastantes horas, dejando una carpeta con bastantes modelos. | ||
|
||
El siguiente paso fue la automatización de la comprobación. Para esto se recorrió esta misma carpeta ejecutando cada modelo; el resultado se guardó como una imagen. Esto permitía ver con claridad qué modelos no funcionaban. Analizando los resultados se seleccionaron las gráficas donde menor error y tiempo por vuelta salía como resultado. | ||
|
||
--- | ||
--- | ||
|
||
## Cambios en el dataset | ||
|
||
Se trataron varias distribuciones con las variables de pesos, la que dio un mejor resultado fue la siguiente | ||
|
||
```python3 | ||
weights = [(0.85, 0.15, 0.25), | ||
(0.65, 0.55, 0.45), | ||
(0.35, 0.75, 0.995), | ||
(0.35, 0.75, 0.995), | ||
(0.65, 0.55, 0.45), | ||
(0.85, 0.15, 0.25)] | ||
``` | ||
|
||
<figure class="align-center" style="width:60%"> | ||
<img src="{{ site.url }}{{ site.baseurl }}/assets/images/post17/dataDistribution.png" alt=""> | ||
<figcaption>Distribución Dataset</figcaption> | ||
</figure> | ||
|
||
También se distribuyeron de varias maneras las velocidades a la hora de entrenar. Leí una técnica que consistía en aumentar el valor de la variable que más importara en la estabilidad del sistema. Esto se tradujo en multiplicar la velocidad angular por 3 para que así tuviera un mayor peso y el error en la misma se corrigiera más rápido. Después de la inferencia se dividía su valor de nuevo entre 3 para que el drone se comportara adecuadamente. | ||
|
||
En un principio dio buenos resultados, pero la velocidad lineal no se ajustaba mucho, por lo que se decidió normalizar ambas con sus valores máximos y mínimos y después normalizar. | ||
|
||
## Video final | ||
|
||
Tras varias pruebas se consiguió que el piloto neuronal pasara el circuito de pruebas, pero quedaba un pequeño problema. El drone no era tan estable como se esperaba. Tras releer varios papeles de semanas anteriores, me di cuenta de que una de las características de estas redes neuronales es que no tienen memoria ni retroalimentación. En nuestro caso, lo más parecido y sencillo de implementar con nuestro modelo sería que la entrada del mismo fuera de 4 imágenes, pero no daría resultados muy distintos. | ||
|
||
Pensándolo, nuestra mayor dependencia era que si el cambio de velocidad lineal era muy brusco, haría al drone cabecear y esto produciría un movimiento de cámara que desestabilizaría al drone. Para solucionar esto se usó la misma medida que en el piloto experto: hacer una media de x velocidades lineales para calcular la actual. | ||
|
||
Con esta técnica se respeta la inferencia de la red neuronal y aportó una mucho mejor estabilidad, dando el siguiente resultado: | ||
|
||
## Conclusiones de la semana | ||
|
||
No siempre más entrenamiento significa mejores resultados. Esto creo que podría ser debido a un sobreajuste, y hay veces que las redes neuronales tienen límites como es el caso de la "memoria" o retroalimentación de velocidades mencionadas anteriormente. Sin embargo, aporta la mejora de que su frecuencia de decisión es mucho más alta que la del piloto experto, pudiendo tener un mejor tiempo de reacción. | ||
|
||
<!-- Foto frecuencias piloto experto --> | ||
<figure class="align-center" style="width:60%"> | ||
<img src="{{ site.url }}{{ site.baseurl }}/assets/images/post17/expertFrq.png" alt=""> | ||
<figcaption>Frecuencias piloto experto</figcaption> | ||
</figure> | ||
<!-- Foto frecuencias piloto neuronal --> | ||
<figure class="align-center" style="width:60%"> | ||
<img src="{{ site.url }}{{ site.baseurl }}/assets/images/post17/expertFrq.png" alt=""> | ||
<figcaption>Frecuencias piloto neuronal</figcaption> | ||
</figure> | ||
|
||
<!-- Mapa con resultado de ambas rutas --> | ||
<figure class="align-center" style="width:60%"> | ||
<img src="{{ site.url }}{{ site.baseurl }}/assets/images/post17/result.png" alt=""> | ||
<figcaption>Result</figcaption> | ||
</figure> | ||
|
||
Podemos ver la diferencia de media entre frecuencias del piloto experto, con una media de 125 Hz, al piloto neuronal que, aunque tenga más desviación, su media ronda al doble. Respecto a resultados prácticos, es cierto que el piloto neuronal tiene un poco más de error y tarda 5 segundos más en completar el circuito. |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.