An extremely simple, intuitive, hardware-friendly, and well-performing network structure for LiDAR semantic segmentation on 2D range image. IROS21

Overview

FIDNet_SemanticKITTI

Motivation

Implementing complicated network modules with only one or two points improvement on hardware is tedious. So here we propose a LiDAR semantic segmentation pipeline on 2D range image just with the most commonly used operators: convolutional operator and bilinear upsample operator. The designed network structure is simple but efficient. We make it achieve the comparable performance with the state-of-the-art projection-based solutions. The training can be done on a single RTX 2080 Ti GPU.

The network structure:
Figure








A demo video of our IROS paper on test set:
Figure











Dataset Organization

IROS21-FIDNet-SemanticKITTI
├──  Dataset
├        ├── semanticKITTI                 
├            ├── semantic-kitti-api-master         
├            ├── semantic-kitti.yaml
├            ├── data_odometry_velodyne ── dataset ── sequences ── train, val, test         # each folder contains the corresponding sequence folders 00,01...
├            ├── data_odometry_labels ── dataset ── sequences ── train, val, test           # each folder contains the corresponding sequence folders 00,01...
├            └── data_odometry_calib        
├──  save_semantic ── ResNet34_point_2048_64_BNTrue_remissionTrue_rangeTrue_normalTrue_rangemaskTrue_2_1.0_3.0_lr1_top_k0.15

How to run

```
docker pull pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime
```

Install dependency packages:

```
bash install_dependency.sh
```

For training inside the docker:

```
python semantic_main.py
```

For evaluate inside the docker:

```
python semantic_inference.py
```

Generate the test predictions:

```
python semantic_test.py
```

Pretrained weight

Download link: https://drive.google.com/drive/folders/1Zv2i-kYcLH7Wmqnh4nTY2KbE_ZyGTmyA?usp=sharing

After downloading, move the file 25 into

./save_semantic/ResNet34_point_2048_64_BNTrue_remissionTrue_rangeTrue_normalTrue_rangemaskTrue_2_1.0_3.0_lr1_top_k0.15/

Then directly run the evaluate python script should can work.

After generating the predicted label on validation set, one can simply run:

```
bash evaluation.sh
```

Some changes of local path may need to be done. Just follow the error to change them, should be easy.

This checkpoint achieves 58.8 mIOU on the validation set.

Train from the scatch

The default setting should can give a good result. The performance may has one or two point difference due to the randomness. One can explore more based on our pipeline.

Publication

Please cite the paper if you use this code:

@article{zhao2021fidnet,
  title={FIDNet: LiDAR Point Cloud Semantic Segmentation with Fully Interpolation Decoding},
  author={Zhao, Yiming and Bai, Lin and Huang, Xinming},
  journal={arXiv preprint arXiv:2109.03787},
  year={2021}
}


You might also like...
SuMa++: Efficient LiDAR-based Semantic SLAM (Chen et al IROS 2019)
SuMa++: Efficient LiDAR-based Semantic SLAM (Chen et al IROS 2019)

SuMa++: Efficient LiDAR-based Semantic SLAM This repository contains the implementation of SuMa++, which generates semantic maps only using three-dime

A Python package for performing pore network modeling of porous media
A Python package for performing pore network modeling of porous media

Overview of OpenPNM OpenPNM is a comprehensive framework for performing pore network simulations of porous materials. More Information For more detail

Python scripts performing class agnostic object localization using the Object Localization Network model in ONNX.
Python scripts performing class agnostic object localization using the Object Localization Network model in ONNX.

ONNX Object Localization Network Python scripts performing class agnostic object localization using the Object Localization Network model in ONNX. Ori

Point Cloud Denoising input segmentation output raw point-cloud valid/clear fog rain de-noised Abstract Lidar sensors are frequently used in environme
Point Cloud Denoising input segmentation output raw point-cloud valid/clear fog rain de-noised Abstract Lidar sensors are frequently used in environme

Point Cloud Denoising input segmentation output raw point-cloud valid/clear fog rain de-noised Abstract Lidar sensors are frequently used in environme

Moving Object Segmentation in 3D LiDAR Data: A Learning-based Approach Exploiting Sequential Data
Moving Object Segmentation in 3D LiDAR Data: A Learning-based Approach Exploiting Sequential Data

LiDAR-MOS: Moving Object Segmentation in 3D LiDAR Data This repo contains the code for our paper: Moving Object Segmentation in 3D LiDAR Data: A Learn

UnpNet - Rethinking 3-D LiDAR Point Cloud Segmentation(IEEE TNNLS)

UnpNet Citation Please cite the following paper if you use this repository in your reseach. @article {PMID:34914599, Title = {Rethinking 3-D LiDAR Po

The code for our paper submitted to RAL/IROS 2022:  OverlapTransformer: An Efficient and Rotation-Invariant Transformer Network for LiDAR-Based Place Recognition.
The code for our paper submitted to RAL/IROS 2022: OverlapTransformer: An Efficient and Rotation-Invariant Transformer Network for LiDAR-Based Place Recognition.

OverlapTransformer The code for our paper submitted to RAL/IROS 2022: OverlapTransformer: An Efficient and Rotation-Invariant Transformer Network for

Pre-trained Deep Learning models and demos (high quality and extremely fast)

OpenVINO™ Toolkit - Open Model Zoo repository This repository includes optimized deep learning models and a set of demos to expedite development of hi

TorchDistiller - a collection of the open source pytorch code for knowledge distillation, especially for the perception tasks, including semantic segmentation, depth estimation, object detection and instance segmentation.

This project is a collection of the open source pytorch code for knowledge distillation, especially for the perception tasks, including semantic segmentation, depth estimation, object detection and instance segmentation.

Comments
  • Some ques.

    Some ques.

    Hi, Dear Ph.D Zhao. I have some doubts about details and look forward to your answers

    1. I tried generating and submitting test sequences from your pre-trained model to the official codalab. The end result is as follows, which is similar to the result I expected. In fact, in my similar submissions in the past, the test sequence usually has a slightly lower miou than the validation set sequence. So I would like to know if the 60miou you got in your paper was obtained by TTA (test augmentation or fine tuning with validation set, etc.)? In addition, can you provide detailed data(iou class by class) for 60miou?
        ********************************************************************************
        INTERFACE:
        Data:  /tmp/codalab/tmpjFJIFr/run/input/ref
        Predictions:  /tmp/codalab/tmpjFJIFr/run/input/res
        Backend:  numpy
        Split:  test
        Config:  /tmp/codalab/tmpjFJIFr/run/program/semantic-kitti.yaml
        Limit:  None
        Codalab:  /tmp/codalab/tmpjFJIFr/run/output
        ********************************************************************************
        Opening data config file /tmp/codalab/tmpjFJIFr/run/program/semantic-kitti.yaml
        Ignoring xentropy class  0  in IoU evaluation
        [IOU EVAL] IGNORE:  [0]
        [IOU EVAL] INCLUDE:  [ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
        Evaluating sequences: 10% 20% 30% 40% 50% 60% 70% 80% 90% Validation set:
        Acc avg 0.896
        IoU avg 0.586
        IoU class 1 [car] = 0.930
        IoU class 2 [bicycle] = 0.457
        IoU class 3 [motorcycle] = 0.420
        IoU class 4 [truck] = 0.279
        IoU class 5 [other-vehicle] = 0.326
        IoU class 6 [person] = 0.626
        IoU class 7 [bicyclist] = 0.581
        IoU class 8 [motorcyclist] = 0.305
        IoU class 9 [road] = 0.908
        IoU class 10 [parking] = 0.583
        IoU class 11 [sidewalk] = 0.749
        IoU class 12 [other-ground] = 0.201
        IoU class 13 [building] = 0.885
        IoU class 14 [fence] = 0.595
        IoU class 15 [vegetation] = 0.831
        IoU class 16 [trunk] = 0.643
        IoU class 17 [terrain] = 0.678
        IoU class 18 [pole] = 0.526
        IoU class 19 [traffic-sign] = 0.600
        ********************************************************************************
        below can be copied straight for paper table
        0.930,0.457,0.420,0.279,0.326,0.626,0.581,0.305,0.908,0.583,0.749,0.201,0.885,0.595,0.831,0.643,0.678,0.526,0.600
    
    1. In addition, I still have doubts about the FPS test on SemanticKITTI on all the other works, as there is a lack of uniform and fair comparison(same set of hardware). So I would like to make sure that in the code here, it is necessary to set the sync:torch.cuda.synchronize() https://github.com/placeforyiming/IROS21-FIDNet-SemanticKITTI/blob/7f90b45a765b8bba042b25f642cf12d8fccb5bc2/semantic_inference.py#L170-L173 Just like in RangeNet++. https://github.com/PRBonn/lidar-bonnetal/blob/5a5f4b180117b08879ec97a3a05a3838bce6bb0f/train/tasks/semantic/modules/user.py#L136-L141

    Looking forward to your reply again.

    opened by huixiancheng 4
  • Strange Lr

    Strange Lr

    Compare with lr_policy 2(Top), lr_policy(Bottom) 1 look like very strange. Kind of like multi warm_up. With lr_policy 1, the loss will change jumping up and down between epochs.

    • lr_policy 2:[0.0004, 0.0004, 0.0008, 0.0008, 0.0012, 0.0012, 0.0016, 0.0016, 0.002, 0.002, 0.0018, 0.0018, 0.0016, 0.0016, 0.0014, 0.0014, 0.0012, 0.0012, 0.001, 0.001, 0.0008, 0.0008, 0.0006, 0.0006, 0.0004, 0.0004]

    • lr_policy 1:[0.0004, 0.0004, 0.0008, 0.0008, 0.0012, 0.0012, 0.0016, 0.0016, 0.002, 0.002, 0.0016, 0.0016, 0.0012, 0.0012, 0.0008, 0.0008, 0.0012, 0.0012, 0.0006, 0.0006, 0.0008, 0.0008, 0.0004, 0.0004, 0.0002, 0.0002]

    myplot1 myplot2

    opened by huixiancheng 4
  • Question about docker

    Question about docker

    hey! I have just discovered your work and I am very interested, I would like to inference with your weights on some of my pointckouds. Given that I have never used a docker I would like to ask you what procedure to follow and what to install to prepare the development environment (or i can directly use the python script without following the previous steps and only installing the requirements library?)(Windows 10 or google collab), thanks

    EDIT:I managed to get the python scripts to work, the inference works and the gpu is used correctly. Unfortunately this network has very low performance on my pointclouds, in practice the network assigns label 81 (road sign) to almost all points (obtained with Carla Simulator), I had the same problem also using SalsaNext, SqueezeSegV3 and Darknet53 (this' last is the one that works best as it doesn't put the same id at all points, even if it still has poor performance). The problem from what I understand lies in the geomteria of the pointclouds, I set the simulator parameters to simulate a velodyne hdl64e (the same used to create semanticKITTI) and in fact the point clouds are similar, but despite this the networks are wrong sensationally to make inferences on these points Cattura

    opened by DavideCoppola97 4
  • How about the effect of OHEM?

    How about the effect of OHEM?

    This code is about ohem? Is there some ablation experiment showing result?https://github.com/placeforyiming/IROS21-FIDNet-SemanticKITTI/blob/7f90b45a765b8bba042b25f642cf12d8fccb5bc2/semantic_main.py#L180-L185

    opened by huixiancheng 3
Owner
YimingZhao
Job seeking at Shanghai. I'm a Ph.D. student at Worcester Polytechnic Institute, working on deep learning, autonomous driving, and general robotic vision.
YimingZhao
Measures input lag without dedicated hardware, performing motion detection on recorded or live video

What is InputLagTimer? This tool can measure input lag by analyzing a video where both the game controller and the game screen can be seen on a webcam

Bruno Gonzalez 4 Aug 18, 2022
Uncertainty-aware Semantic Segmentation of LiDAR Point Clouds for Autonomous Driving

SalsaNext: Fast, Uncertainty-aware Semantic Segmentation of LiDAR Point Clouds for Autonomous Driving Abstract In this paper, we introduce SalsaNext f

null 308 Jan 4, 2023
Scribble-Supervised LiDAR Semantic Segmentation, CVPR 2022 (ORAL)

Scribble-Supervised LiDAR Semantic Segmentation Dataset and code release for the paper Scribble-Supervised LiDAR Semantic Segmentation, CVPR 2022 (ORA

null 102 Dec 25, 2022
performing moving objects segmentation using image processing techniques with opencv and numpy

Moving Objects Segmentation On this project I tried to perform moving objects segmentation using background subtraction technique. the introduced meth

Mohamed Magdy 15 Dec 12, 2022
Recall Loss for Semantic Segmentation (This repo implements the paper: Recall Loss for Semantic Segmentation)

Recall Loss for Semantic Segmentation (This repo implements the paper: Recall Loss for Semantic Segmentation) Download Synthia dataset The model uses

null 32 Sep 21, 2022
Code for "FPS-Net: A convolutional fusion network for large-scale LiDAR point cloud segmentation".

FPS-Net Code for "FPS-Net: A convolutional fusion network for large-scale LiDAR point cloud segmentation", accepted by ISPRS journal of Photogrammetry

null 15 Nov 30, 2022
a simple, efficient, and intuitive text editor

Oxygen beta a simple, efficient, and intuitive text editor Overview oxygen is a simple, efficient, and intuitive text editor designed as more featured

Aarush Gupta 1 Feb 23, 2022
Prototypical Pseudo Label Denoising and Target Structure Learning for Domain Adaptive Semantic Segmentation (CVPR 2021)

Prototypical Pseudo Label Denoising and Target Structure Learning for Domain Adaptive Semantic Segmentation (CVPR 2021, official Pytorch implementatio

Microsoft 247 Dec 25, 2022
Learning Pixel-level Semantic Affinity with Image-level Supervision for Weakly Supervised Semantic Segmentation, CVPR 2018

Learning Pixel-level Semantic Affinity with Image-level Supervision This code is deprecated. Please see https://github.com/jiwoon-ahn/irn instead. Int

Jiwoon Ahn 337 Dec 15, 2022
Segmentation in Style: Unsupervised Semantic Image Segmentation with Stylegan and CLIP

Segmentation in Style: Unsupervised Semantic Image Segmentation with Stylegan and CLIP Abstract: We introduce a method that allows to automatically se

Daniil Pakhomov 134 Dec 19, 2022