All Projects → ai4ce → FLAT

ai4ce / FLAT

Licence: Apache-2.0 license
[ICCV2021 Oral] Fooling LiDAR by Attacking GPS Trajectory

Programming Languages

python
139335 projects - #7 most used programming language
Cuda
1817 projects
C++
36643 projects - #6 most used programming language

Projects that are alternatives of or similar to FLAT

BtcDet
Behind the Curtain: Learning Occluded Shapes for 3D Object Detection
Stars: ✭ 104 (+100%)
Mutual labels:  point-cloud, lidar, autonomous-driving, 3d-object-detection
efficient online learning
Efficient Online Transfer Learning for 3D Object Detection in Autonomous Driving
Stars: ✭ 20 (-61.54%)
Mutual labels:  point-cloud, autonomous-driving, 3d-object-detection
LiDAR fog sim
LiDAR fog simulation
Stars: ✭ 101 (+94.23%)
Mutual labels:  point-cloud, lidar, autonomous-driving
Awesome-3D-Object-Detection-for-Autonomous-Driving
Papers on 3D Object Detection for Autonomous Driving
Stars: ✭ 52 (+0%)
Mutual labels:  lidar, autonomous-driving, 3d-object-detection
urban road filter
Real-time LIDAR-based Urban Road and Sidewalk detection for Autonomous Vehicles 🚗
Stars: ✭ 134 (+157.69%)
Mutual labels:  point-cloud, lidar, autonomous-driving
awesome-lidar
😎 Awesome LIDAR list. The list includes LIDAR manufacturers, datasets, point cloud-processing algorithms, point cloud frameworks and simulators.
Stars: ✭ 217 (+317.31%)
Mutual labels:  point-cloud, lidar, autonomous-driving
Awesome Robotic Tooling
Tooling for professional robotic development in C++ and Python with a touch of ROS, autonomous driving and aerospace.
Stars: ✭ 1,876 (+3507.69%)
Mutual labels:  point-cloud, lidar, autonomous-driving
Displaz
A hackable lidar viewer
Stars: ✭ 177 (+240.38%)
Mutual labels:  point-cloud, lidar
3d Bat
3D Bounding Box Annotation Tool (3D-BAT) Point cloud and Image Labeling
Stars: ✭ 179 (+244.23%)
Mutual labels:  point-cloud, autonomous-driving
3d Pointcloud
Papers and Datasets about Point Cloud.
Stars: ✭ 179 (+244.23%)
Mutual labels:  point-cloud, autonomous-driving
Spvnas
[ECCV 2020] Searching Efficient 3D Architectures with Sparse Point-Voxel Convolution
Stars: ✭ 239 (+359.62%)
Mutual labels:  point-cloud, lidar
Vision3d
Research platform for 3D object detection in PyTorch.
Stars: ✭ 177 (+240.38%)
Mutual labels:  point-cloud, lidar
Dbnet
DBNet: A Large-Scale Dataset for Driving Behavior Learning, CVPR 2018
Stars: ✭ 172 (+230.77%)
Mutual labels:  point-cloud, autonomous-driving
Lidar camera calibration
Light-weight camera LiDAR calibration package for ROS using OpenCV and PCL (PnP + LM optimization)
Stars: ✭ 133 (+155.77%)
Mutual labels:  point-cloud, lidar
Liblas
C++ library and programs for reading and writing ASPRS LAS format with LiDAR data
Stars: ✭ 211 (+305.77%)
Mutual labels:  point-cloud, lidar
OpenMaterial
3D model exchange format with physical material properties for virtual development, test and validation of automated driving.
Stars: ✭ 23 (-55.77%)
Mutual labels:  lidar, autonomous-driving
Extrinsic lidar camera calibration
This is a package for extrinsic calibration between a 3D LiDAR and a camera, described in paper: Improvements to Target-Based 3D LiDAR to Camera Calibration. This package is used for Cassie Blue's 3D LiDAR semantic mapping and automation.
Stars: ✭ 149 (+186.54%)
Mutual labels:  point-cloud, lidar
Pclpy
Python bindings for the Point Cloud Library (PCL)
Stars: ✭ 212 (+307.69%)
Mutual labels:  point-cloud, lidar
e3d
Efficient 3D Deep Learning
Stars: ✭ 44 (-15.38%)
Mutual labels:  point-cloud, 3d-perception
3D Ground Segmentation
A ground segmentation algorithm for 3D point clouds based on the work described in “Fast segmentation of 3D point clouds: a paradigm on LIDAR data for Autonomous Vehicle Applications”, D. Zermas, I. Izzat and N. Papanikolopoulos, 2017. Distinguish between road and non-road points. Road surface extraction. Plane fit ground filter
Stars: ✭ 55 (+5.77%)
Mutual labels:  point-cloud, lidar

FLAT: Fooling LiDAR Perception via Adversarial Trajectory Perturbation [ICCV2021 Oral]

Yiming Li*, Congcong Wen*, Felix Juefei-Xu, Chen Feng

"Small perturbations to vehicle trajectory can blind LiDAR perception."

Poster Page: https://ai4ce.github.io/FLAT/

ArXiv: Fooling LiDAR Perception via Adversarial Trajectory Perturbation

News

[2021-07] 🔥 FLAT is accepted at ICCV 2021 as oral presentation (210/6236, 3% acceptance rate)

Abstract

LiDAR point clouds collected from a moving vehicle are functions of its trajectories, because the sensor motion needs to be compensated to avoid distortions. When autonomous vehicles are sending LiDAR point clouds to deep networks for perception and planning, could the motion compensation consequently become a wide-open backdoor in those networks, due to both the adversarial vulnerability of deep learning and GPS-based vehicle trajectory estimation that is susceptible to wireless spoofing? We demonstrate such possibilities for the first time: instead of directly attacking point cloud coordinates which requires tampering with the raw LiDAR readings, only adversarial spoofing of a self-driving car's trajectory with small perturbations is enough to make safety-critical objects undetectable or detected with incorrect positions. Moreover, polynomial trajectory perturbation is developed to achieve a temporally-smooth and highly-imperceptible attack. Extensive experiments on 3D object detection have shown that such attacks not only lower the performance of the state-of-the-art detectors effectively, but also transfer to other detectors, raising a red flag for the community.

Installation

For white-box attacks, we use point-based PointRCNN as the target detector.
point_rcnn.py rcnn_net.py rpn.py in PointRCNN/lib/net were modified for introducing attacks.
kitti_dataset.py kitti_rcnn_dataset.py in PointRCNN/lib/datasets were modified for loading our customized nusc_kitti dataset.

The rest code of PointRCNN is left untouched.

Requirements

  • Linux (tested on Ubuntu 18.04)
  • Python 3.6
  • PyTorch 1.2.0
  • CUDA 10.0

Create Anaconda Environment

conda create -n flat python=3.6
conda activate flat

CUDA

export PATH=/usr/local/cuda-10.0/bin:$PATH
export CUDA_PATH=/usr/local/cuda-10.0
export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH

Install dependencies

git clone https://github.com/ai4ce/FLAT.git
cd FLAT
pip install -r requirements.txt
pip install torch==1.2.0 torchvision==0.4.0
cd PointRCNN
sh build_and_install.sh
cd ..

Dataset Preparation

Please download the official nuscenes dataset(v1.0-trainval)

Use nusc_to_kitti.py to generate the dataset.

python nusc_to_kitti.py nuscenes_gt_to_kitti [--dataroot "Your nuscenes dataroot"]

It will generate the dataset in the structure as follows.

FLAT
├── dataset
│   ├── nusc_kitti
│   │   ├──val_1000
│   │   │   ├──image_2
│   │   │   ├──ImageSets
│   │   │   ├──label_2
│   │   │   ├──pose
│   │   │   ├──velodyne

NOTICE: This script converts the first 1000(of 6019 in total) samples from orginal validation split of v1.0-trainval at default. You can use all of the nuscenes samples, and shuffle option is also provided.

Run FLAT on Evaluation

python flat.py [--stage STAGE] [--nb_iter NB_ITER]
               [--task TASK] [--attack_type ATTACK_TYPE] 
               [--iter_eps ITER_EPS] [--iter_eps2 ITER_EPS2] [--poly]
--split SPLIT       
                    The data split for evaluation
--stage STAGE       
                    Attack stage of Point RCNN. Options: "1" for RPN
                    stage, "2" for RCNN stage
--nb_iter NB_ITER   
                    Number of attack iterations in PGD
--task TASK         
                    Task of attacking. Options: "cls" for classification,
                    "reg" for regression
--attack_type ATTACK_TYPE
                    Specify attack type. Options: "all", "translation",
                    "rotation"
--iter_eps ITER_EPS 
                    Primary PGD attack step size for each iteration, in
                    translation only/rotation only attacks, this parameter
                    is used.
--iter_eps2 ITER_EPS2
                    Secondary PGD attack step size for each iteration,
                    only effective when attack_type is "all" and poly mode
                    is disabled.
--poly              
                    Polynomial trajectory perturbation option. Notice: if
                    true, attack_type will be fixed(translation)

All the experiments were performed at the pretrained model of PointRCNN as provided.

Detection and evaluation results will be save in

output/{SPLIT}/{ATTACK_TYPE}/FLAT_{STAGE}_{TASK}_{NB_ITER}_{ITER_EPS}_{ITER_EPS2}

Acknowledgment

flat.py is modified from the evaluation code of PointRCNN, for implementing attacks.
evaluate.py is borrowed from evaluation code from Train in Germany, Test in The USA: Making 3D Object Detectors Generalize, utilizing distance-based difficulty metrics.
nusc_to_kitti.py is modified from official nuscenes-devkit script to generate kitti-format nuscenes dataset with ego pose for interpolation.

This project is not possible without these great codebases.

Citation

If you find FLAT useful in your research, please cite:

@InProceedings{Li_2021_ICCV,
      title = {Fooling LiDAR Perception via Adversarial Trajectory Perturbation},
      author = {Li, Yiming and Wen, Congcong and Juefei-Xu, Felix and Feng, Chen},
      booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},
      month = {October},
      year = {2021}
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].