Códigos para "Aprender la detección de carril liviano CNNS por destilación de atención propia"
Este repositorio también contiene la implementación de TensorFlow de "Spacial AS Deep: Spatial CNN para la comprensión de la escena del tráfico". (SCNN-TensorFlow)
Erfnet-Culane-Pytorch ha sido lanzado. (Puede lograr 73.1 Medidas F1 en el conjunto de pruebas de Culane)
Se han lanzado ENET-Label-Torch, ENET-Tusimple-Torch y ENET-BDD100K-Torch.
Características clave:
(1) ENET-Label es un modelo de detección de carril de peso ligero basado en ENET y adopta la destilación de autocompletación (se pueden encontrar más detalles en nuestro documento).
(2) Tiene 20 × menos parámetros y ejecuta 10 × más rápido en comparación con el SCNN de última generación, y logra 72.0 (Medición F1) en el conjunto de pruebas de Culane (mejor que SCNN que logra 71.6). También logra una precisión del 96.64% en el conjunto de pruebas de Tusimple (mejor que SCNN, lo que logra 96.53%) y 36.56% de precisión en el conjunto de pruebas BDD100K (mejor que SCNN que logra 35.79%).
(3) Aplicar el conjunto de datos ENET a Llamas produce un mapa de 0.635 en la tarea de segmentación de marcadores de carril múltiples, que es mucho mejor que el algoritmo de línea de base que logra 0.500 mapa. Los detalles se pueden encontrar en este repositorio.
(¡No dudes en probar nuestro modelo!)
CUDA_VISIBLE_DEVICES="0,1,2,3" python file_name.py . Gracias @ 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
Descargue el VGG.npy aquí y póngalo en el modelo SCNN-TensorFlow/Lane Detection/Data.
Descargue el modelo previamente capacitado aquí.
Las etiquetas de verdad en tierra del conjunto de pruebas de Tusimple ya están disponibles en Tusimple. La capacitación anotada (#Frame = 3268) y las etiquetas de validación (#Frame = 358) se pueden encontrar aquí, úselas (list-name.txt) para reemplazar el trenes_gt.txt y val_gt.txt en trinero_lanenet.py. Además, debe cambiar el tamaño de la imagen a 256 x 512 en lugar de 288 x 800 en Tusimple. Recuerde cambiar el índice máximo de filas y columnas, y se pueden ver explicaciones detalladas aquí. Evalúe su pred.json usando las etiquetas y este script. Además, para generar pred.json, puede consultar este problema.
Todo el conjunto de datos está disponible en Culane.
Todo el conjunto de datos está disponible en 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
Tenga en cuenta que la ruta/a/image_name_list debe ser como test_img.txt. Ahora, obtienes los mapas de probabilidad de nuestro modelo. Para obtener el rendimiento final, debe seguir a SCNN para obtener líneas curvas de mapas de probabilidad, así como calcular la precisión, el retiro y la medición F1.
Recordatorio: debe verificar lanenet_data_processor.py y lanenet_data_processor_test.py para garantizar que el procesamiento de la ruta de la imagen sea correcto. Se recomienda utilizar la ruta absoluta en su lista de rutas de imagen. Además, este código necesita un tamaño por lotes utilizado en el entrenamiento y las pruebas para ser consistente. Para habilitar el tamaño de lotes arbitrarios en la fase de prueba, consulte este problema.
CUDA_VISIBLE_DEVICES="0" python tools/train_lanenet.py --net vgg --dataset_dir path/to/CULane-dataset/
Tenga en cuenta que Rath/to/Culane-Dataset/debe contener archivos como Train_GT.TXT y Val_GT.TXT.
| Modelo | Exactitud | FP | Fn |
|---|---|---|---|
| Tortura de scnn | 96.53% | 0.0617 | 0.0180 |
| Scnn-tensorflow | - | - | - |
| Enet-label-Torch | 96.64% | 0.0602 | 0.0205 |
El modelo previamente capacitado para las pruebas está aquí. (¡Próximamente!) Tenga en cuenta que en Tusimple, SCNN-Torch se basa en ResNet-101, mientras que SCNN-TensorFlow se basa en VGG-16. En Culane y BDD100K, tanto SCNN-Torch como SCNN-TensorFlow se basan en VGG-16.
| Categoría | Tortura de scnn | Scnn-tensorflow | Enet-label-Torch | Erfnet-Culane-Pytorch |
|---|---|---|---|---|
| Normal | 90.6 | 90.2 | 90.7 | 91.5 |
| Atestado | 69.7 | 71.9 | 70.8 | 71.6 |
| Noche | 66.1 | 64.6 | 65.9 | 67.1 |
| Sin línea | 43.4 | 45.8 | 44.7 | 45.1 |
| Sombra | 66.9 | 73.8 | 70.6 | 71.3 |
| Flecha | 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 |
| Cruce de caminos | 1990 | 4137 | 2729 | 2199 |
| Total | 71.6 | 71.3 | 72.0 | 73.1 |
| Tiempo de ejecución (MS) | 133.5 | - | 13.4 | 10.2 |
| Parámetro (m) | 20.72 | - | 0.98 | 2.49 |
El modelo previamente capacitado para las pruebas está aquí. Tenga en cuenta que debe intercambiar el orden de VGG-mean en test_lanenet.py y cambiar el orden de las imágenes de entrada de RGB a BGR ya que el modelo previamente capacitado usa OpenCV para leer imágenes. Puede aumentar aún más el rendimiento refiriéndose a este problema.
| Modelo | Exactitud | IOU |
|---|---|---|
| Tortura de scnn | 35.79% | 15.84 |
| Scnn-tensorflow | - | - |
| Enet-label-Torch | 36.56% | 16.02 |
Se calculan la precisión y el IOU de los píxeles de carril. El modelo previamente capacitado para las pruebas está aquí. (¡muy pronto!)
Si usa los códigos, cite las siguientes publicaciones:
@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 repositorio se basa en SCNN y Lanenet.
Si tiene algún problema para reproducir los resultados, simplemente plantee un problema en este repositorio.