The use of Computer Vision techniques for Water Surface Object Detection tasks has been rising as a strong trend in autonomous vessels context. In this work, we propose um modelo inédito, baseado no algoritmo YOLOv5, para detecção de objetos localizados, especificamente, em superfícies de rios da Amazônia. Para esse modelo, são utilizadas técnicas de Transfer Learning a fim de aproveitar a base de imagens WSOD. Além disso, o deploy do modelo é realizado em uma plataforma embarcada (plataforma Jetson Nano) a fim de simular um cenário real de utilização. A seguir, são apresentados os detalhes deste repositório
Caso nosso dataset seja utilizado, por favor, nos cite:
@inproceedings{sbcup,
author = {T. Sá and C. Figueiredo},
title = {Self-driving Vessels: YOLOv5 Approach for Water Surface Object Detection},
booktitle = {Anais do XIV Simpósio Brasileiro de Computação Ubíqua e Pervasiva},
location = {Niterói},
year = {2022},
keywords = {},
issn = {2595-6183},
pages = {31--40},
publisher = {SBC},
address = {Porto Alegre, RS, Brasil},
doi = {10.5753/sbcup.2022.222855},
url = {https://sol.sbc.org.br/index.php/sbcup/article/view/20608}
}
Este trabalho também foi escrito e defendido como trabalho de conclusão de curso (TCC) para obtenção do título de Engenheiro Eletricista.
O dataset está disponível publicamente por meio deste link: WSOD-ARD Download
password: wsodard2022
As imagens foram coletadas a partir do cruzamento de combinações de strings em repositórios online de imagens e vídeos, conforme ilustra a figura abaixo.
As imagens foram todas anotadas por meio da ferramenta roboflow.
O treinamento foi realizado dentro de um docker container. Para provisioná-lo, utilize o seguinte comando como referência:
docker run --ipc=host -p 8888:8888 --gpus all -it -v "/path/to/dataset":"/usr/src" ultralytics/yolov5:latest
Para mais detalhes sobre pré-requisitos e configurações adicionais, consultar: YOlov5 Docker
Para o treinamento do modelo com transfer learning, foram utilizados os pesos obtidos a partir do treinamento com a base de imagens WSODD. Esses pesos estão salvos em: /weights/wsodd.pt
.
Para realização da etapa de treinamento, utilize o seguinte comando como referência:
!python train.py --img 416 --batch 16 --epochs 300 --data /path/to/dataset/data.yaml --weights /path/to/weights/wsodd.pt --cache
Para mais detalhes sobre o treinamento dentro de uma instância do jupyter-notebook, consultar o notebook em: /notebooks/wsodd-ard-training.ipynb
Após a etapa de treinamento e validação, o modelo é embarcado em um edge device da Nvidia (Jetson Nano).
Para mais detalhes sobre como realizar a primeira configuração desse dispostivo embarcado, consultar: Jetson Nano Developer Kit
Atualmente, infelizmente a versão mais recente do sistema operacional do Jetson Nano não é suportado pela última versão do YOLOv5. Dessa forma, para rodar um modelo treinado a partir do YOLOv5 em um Jetson Nano, é necessário utilizar uma versão mais antiga.
Para essa etapa, recomendo fortemente seguir a documentação descrita em: Docker image for object detection using YOlov5 on Nvidia Jetson Plataform
Após essa a etapa de configuração acima, com uma câmera USB plugada no Jetson Nano, executar o seguinte comando de referência em um terminal do Jetson Nano:
docker run -it --rm \
--runtime nvidia \
--network host \
--device /dev/video0:/dev/video0:mrw \
-e DISPLAY=$DISPLAY \
-e LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1 \
-v /tmp/.X11-unix/:/tmp/.X11-unix \
-v /path/to/weights:/weights \
yolov5 python3.8 detect.py --source 0 --weights /weights/wsodd-arv.pt.pt
Observe que é utilizado o peso wsodd-arv.pt localizado em /weights/wsodd-arv.pt
.
Ilustração da câmera USB plugada no dispositivo Jetson:
Por último, a partir do momento em que o modelo integrado na plataforma embarcada Jetson Nano iniciou o processo de detecção de objetos a partir da captura de imagens com a câmera USB, vídeos de objetos localizados em superfícies de rios da Amazônia foram transmitidos em um monitor de modo que pudessem simular, em tempo real de execução, a captura de uma sequência imagens em um cenário real, conforme ilustra a figura a seguir.