chmod +x scripts/install_aerialnet.sh
chmod +x packages/ml_api/run.sh
chmod +x scripts/run_tfserving.sh
chmod +x scripts/install_nvidia_docker.sh
chmod +x scripts/set_azure_account.sh
./scripts/install_nvidia_docker.sh
conda env create -f environment.yml
conda activate aerialnet_env
./scripts/install_aerialnet.sh packages/aerialnet/
python
import aerialnet
aerialnet.__version__
./scripts/run_tfserving.sh
cd packages/ml_api
./run.sh
curl -X GET "http://localhost:5000/health"
curl -X GET "http://localhost:5000/version"
curl --data "img_url=https://droneimagesstorage.blob.core.windows.net/avionimagefiles/2020-06-01_13-54-40_GPS.jpg" --data "output_img=1" -X POST "http://localhost:5000/predict"
curl --data "img_url=https://droneimagesstorage.blob.core.windows.net/dronblob/andresepachecog@gmail.com/2020/08/11/2020-08-11_08:50:24-3692280-DJI_0339.jpg" --data "output_img=1" -X POST "http://localhost:5000/predict"
curl --data "img_url=https://droneimagesstorage.blob.core.windows.net/dronblob/luis.pirela@kauel.com/2020/08/06/DJI_0436.JPG" --data "output_img=1" -X POST "http://localhost:5000/predict"
curl --data "img_url=https://droneimagesstorage.blob.core.windows.net/blobunitytest/maquinaria.png" --data "output_img=1" -X POST "http://localhost:5000/predict"
curl --data "img_url=https://droneimagesstorage.blob.core.windows.net/blobunitytest/maquinaria_crop.jpg" --data "output_img=1" -X POST "http://localhost:5000/predict"
curl -X GET "http://40.74.226.100:5000/health"
curl -X GET "http://40.74.226.100:5000/version"
curl --data "img_url=https://droneimagesstorage.blob.core.windows.net/avionimagefiles/2020-06-01_13-54-40_GPS.jpg" --data "output_img=1" -X POST "http://40.74.226.100:5000/predict"
curl --data "img_url=https://droneimagesstorage.blob.core.windows.net/dronblob/andresepachecog@gmail.com/2020/08/11/2020-08-11_08:50:24-3692280-DJI_0339.jpg" --data "output_img=1" -X POST "http://40.74.226.100:5000/predict"
curl --data "img_url=https://droneimagesstorage.blob.core.windows.net/dronblob/luis.pirela@kauel.com/2020/08/06/DJI_0436.JPG" --data "output_img=1" -X POST "http://40.74.226.100:5000/predict"
curl --data "img_url=https://droneimagesstorage.blob.core.windows.net/blobunitytest/maquinaria.png" --data "output_img=1" -X POST "http://40.74.226.100:5000/predict"
curl --data "img_url=https://droneimagesstorage.blob.core.windows.net/blobunitytest/maquinaria_crop.jpg" --data "output_img=1" -X POST "http://40.74.226.100:5000/predict"
AI model was trained using the RetinaNet implementation from fizyr.com: https://github.com/fizyr/keras-retinanet
-
Actualizar el dataset, guardando cada via.json dentro de la ruta /datasets/source_dataset, en el subdirectorio correspondiente a la fecha del json.
-
Crear subdirectorio para nuevo dataset, dentro de la ruta /datasets/data/. Por ejemplo, para versión 5 del dataset: /datasets/data/v5
-
Dentro del nuevo subdirectorio, crear archivo CLASSES con el detalle de las clases que se considerarán dentro del dataset:
0,Animal 1,Basural 1,Escombro 1,MConstrucción 2,Bus 3,Camión 4,Chasis 5,Cilindro 6,Estructura 7,GHorquilla 8,Juegos 9,Maquinaria 10,PalletCaja 11,Persona 12,Pickup 13,Piscina 14,Poste 15,SAdvertencia 16,Tractor 17,Troncos 18,Tuberia 19,Vehículo
** Las clases disponibles para elegir se encuentran en el archivo /dataset_utils/OFICIAL/VIA-ENAP-PROJECT.json
** Para agrupar clases como una sola, se debe asignar el mismo número. Para el ejemplo, las clases Basural, Escombro y MConstrucción se consideran como una sola clase. Además, se debe crear un nuevo archivo CLASSES_REPORT_NAME con los nombres asociados a cada id:
0,Animal 1,Basural-Escombro-MConstrucción 2,Bus 3,Camión 4,Chasis 5,Cilindro 6,Estructura 7,GHorquilla 8,Juegos 9,Maquinaria 10,PalletCaja 11,Persona 12,Pickup 13,Piscina 14,Poste 15,SAdvertencia 16,Tractor 17,Troncos 18,Tuberia 19,Vehículo
-
Abrir notebook notebooks/Creación_de_nuevo_dataset_desde_archivos_VIA.ipynb (inicializar jupyter notebook)
-
Ingresar los datos para generar el nuevo dataset y seguir las instrucciones del notebook.
Como resultado final luego de ejecutar el notebook anterior, dentro del subdirectorio '../datasets/data/v<numero_de_version>/' tendremos:- dos archivos .csv con el dataset para entrenamiento (train.csv) y validación (val.csv)
- subdirectorio con las imágenes de 1000X1000 asociadas a ambos datasets
-
Crear archivo classes.csv con el siguiente formato:
0,0 1,1 2,2 3,3 4,4 5,5 6,6 7,7 8,8 9,9 10,10 11,11 12,12 13,13 14,14 15,15 16,16 17,17 18,18 19,19
** En este caso el dataset contiene 20 clases
- Duplicar el último archivo de AerialNet_vx.ipynb y modificar los parámetros según corresponda. Luego seguir las instrucciones del notebook.
-
Actualizar versión en ../packages/aerialnet/aerialnet/VERSION
-
Actualizar lectura y filtrado de clases en ../packages/aerialnet/aerialnet/utils/predictions.py
-
Actualizar clases en ../packages/aerialnet/aerialnet/utils/classes.py
-
Actualizar id de clases en ../packages/aerialnet/aerialnet/data/classes.csv
-
Actualizar versión del modelo de IA en ../packages/ml_api/api/controller.py
-
Generar saved_model y guardarlo en ../saved_models (ver AerialNet_vx.ipynb)
-
Continuar desde el punto 4 de la primera sección (Activate environment)
-
Comprimir saved_models y subir al servidor
-
Conectar al servidor, descargar saved_models y descomprimir:
7z x saved_model.7z
Para conectarse al servidor y tener un pseudo GUI lo mejor es utilizar la función SSH de Visual Studio Code.
-
Obtener ID de la API y detener el proceso:
ps aux | grep gunicorn kill -9 ID
-
Obtener ID de tfserving y detener el proceso:
nvidia-smi kill -9 ID