Codifica para "Aprender CNNs de detecção de pista leve por destilação de auto -atenção"
Este repo também contém a implementação do TensorFlow de "espacial como profundo: CNN espacial para entender o cenário de tráfego". (Scnn-Tensorflow)
Erfnet-culane-pytorch foi lançado. (Pode atingir 73,1 f1-medida no conjunto de testes de Culane)
ENET-LABEL-TORCH, ENET-TUSIMPLE TORCH e ENET-BDD100K-TORCH foram lançados.
Principais recursos:
(1) ENET-LABEL é um modelo de detecção de pista leve com base na ENET e adota destilação de auto-atenção (mais detalhes podem ser encontrados em nosso artigo).
(2) Possui 20 × menos parâmetros e executa 10 × mais rápido em comparação com o SCNN de última geração e alcança 72,0 (F1-Medice) no conjunto de testes de Culane (melhor que o SCNN que atinge 71.6). Também atinge a precisão de 96,64% no conjunto de testes de Tusimple (melhor que o SCNN, que atinge 96,53%) e 36,56% de precisão no conjunto de testes BDD100K (melhor que o SCNN, que atinge 35,79%).
(3) A aplicação do conjunto de dados do ENET-SAD ao LAMAS produz 0,635 mapa na tarefa de segmentação de marcadores de várias classes, que é muito melhor que o algoritmo de linha de base que atinge o mapa de 0,500. Os detalhes podem ser encontrados neste repositório.
(Não hesite em experimentar nosso modelo !!!)
CUDA_VISIBLE_DEVICES="0,1,2,3" python file_name.py . Obrigado @ yujincheng08. conda create -n tensorflow_gpu pip python=3.5
source activate tensorflow_gpu
pip install --upgrade tensorflow-gpu==1.3.0
pip3 install -r SCNN-Tensorflow/lane-detection-model/requirements.txt
Faça o download do vgg.npy aqui e coloque-o no modelo/dados/dados de detecção/pista/dados.
Faça o download do modelo pré-treinado aqui.
Os rótulos de verdade no solo do conjunto de testes de Tusimple já estão disponíveis em Tusimple. O treinamento anotado (#Frame = 3268) e os rótulos de validação (#Frame = 358) podem ser encontrados aqui, use-os (list-name.txt) para substituir o trep_gt.txt e val_gt.txt em trens_lanenet.py. Além disso, você precisa redimensionar a imagem para 256 x 512 em vez de 288 x 800 em Tusimple. Lembre -se de alterar o índice máximo de linhas e colunas, e explicações detalhadas podem ser vistas aqui. Avalie seu Pred.json usando os rótulos e este script. Além disso, para gerar pred.json, você pode se referir a esse problema.
Todo o conjunto de dados está disponível no Culane.
Todo o conjunto de dados está disponível no BDD100K.
cd SCNN-Tensorflow/lane-detection-model
CUDA_VISIBLE_DEVICES="0" python tools/test_lanenet.py --weights_path path/to/model_weights_file --image_path path/to/image_name_list --save_dir to_be_saved_dir
Observe que o caminho/para/image_name_list deve ser como test_img.txt. Agora, você obtém os mapas de probabilidade do nosso modelo. Para obter o desempenho final, você precisa seguir o SCNN para obter linhas de curva a partir de mapas de probabilidade, além de calcular precisão, recall e medição de F1.
Lembrete: você deve verificar LANENET_DATA_PROCESSOR.PY e LANENENET_DATA_PROCESSOR_TEST.PY para garantir que o processamento do caminho da imagem esteja correto. Recomenda -se usar o caminho absoluto na sua lista de caminhos de imagem. Além disso, esse código precisa de tamanho em lote usado em treinamento e teste para ser consistente. Para ativar o tamanho do lote arbitrário na fase de teste, consulte este problema.
CUDA_VISIBLE_DEVICES="0" python tools/train_lanenet.py --net vgg --dataset_dir path/to/CULane-dataset/
Observe que Path/to/Culane-Dataset/deve conter arquivos como Train_GT.TXT e VAL_GT.TXT.
| Modelo | Precisão | Fp | Fn |
|---|---|---|---|
| Scnn-Torch | 96,53% | 0,0617 | 0,0180 |
| Scnn-TensorFlow | - | - | - |
| ENET-LABEL-TORCH | 96,64% | 0,0602 | 0,0205 |
O modelo pré-treinado para teste está aqui. (Em breve!) Observe que em Tusimple, o SCNN-TORCH é baseado no Resnet-101, enquanto o SCNN-TensorFlow é baseado no VGG-16. Em Culane e BDD100K, o SCNN-TORCH e o SCNN-TensorFlow são baseados no VGG-16.
| Categoria | Scnn-Torch | Scnn-TensorFlow | ENET-LABEL-TORCH | Erfnet-culane-pytorch |
|---|---|---|---|---|
| Normal | 90.6 | 90.2 | 90.7 | 91.5 |
| Superlotado | 69.7 | 71.9 | 70.8 | 71.6 |
| Noite | 66.1 | 64.6 | 65.9 | 67.1 |
| Sem linha | 43.4 | 45.8 | 44.7 | 45.1 |
| Sombra | 66.9 | 73.8 | 70.6 | 71.3 |
| Seta | 84.1 | 83.8 | 85.8 | 87.2 |
| Luz deslumbrante | 58.5 | 59.5 | 64.4 | 66.0 |
| Curva | 64.4 | 63.4 | 65.4 | 66.3 |
| Cruzamento | 1990 | 4137 | 2729 | 2199 |
| Total | 71.6 | 71.3 | 72.0 | 73.1 |
| Tempo de execução (MS) | 133.5 | - | 13.4 | 10.2 |
| Parâmetro (m) | 20.72 | - | 0,98 | 2.49 |
O modelo pré-treinado para teste está aqui. Observe que você precisa trocar a ordem do VGG-Mean em test_lanenet.py e alterar a ordem das imagens de entrada de RGB para BGR, já que o modelo pré-treinado usa o OpenCV para ler imagens. Você pode aumentar ainda mais o desempenho referindo -se a esse problema.
| Modelo | Precisão | Iou |
|---|---|---|
| Scnn-Torch | 35,79% | 15.84 |
| Scnn-TensorFlow | - | - |
| ENET-LABEL-TORCH | 36,56% | 16.02 |
A precisão e a IOU de pixels de pista são calculados. O modelo pré-treinado para teste está aqui. (em breve!)
Se você usar os códigos, cite as seguintes publicações:
@article{hou2019learning,
title={Learning Lightweight Lane Detection CNNs by Self Attention Distillation},
author={Hou, Yuenan and Ma, Zheng and Liu, Chunxiao and Loy, Chen Change},
journal={arXiv preprint arXiv:1908.00821},
year={2019}
}
@inproceedings{pan2018SCNN,
author = {Xingang Pan, Jianping Shi, Ping Luo, Xiaogang Wang, and Xiaoou Tang},
title = {Spatial As Deep: Spatial CNN for Traffic Scene Understanding},
booktitle = {AAAI Conference on Artificial Intelligence (AAAI)},
month = {February},
year = {2018}
}
@misc{hou2019agnostic,
title={Agnostic Lane Detection},
author={Yuenan Hou},
year={2019},
eprint={1905.03704},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
Este repo é construído sobre SCNN e Lanenet.
Se você tiver algum problema na reprodução dos resultados, basta levantar um problema neste repositório.