wikillm

Paper · 2020-11-17 · cs.CV, cs.RO

RELLIS-3D Dataset: Data, Benchmarks and Analysis

RELLIS-3D is an off-road multimodal dataset from a ground robot on a university campus: 6,235 pixel-labelled camera images and 13,556 point-labelled LiDAR scans in 20 classes, with raw sensor streams. Author-reported baselines reach 51.6 to 52.9 mIoU on images (HRNet+OCR, Gated-SCNN) and 20.0 to 43.1 on point clouds (KPConv, SalsaNext), well below urban-data results.

Semantic segmentationLong-tailed recognitionsemantic-segmentationlidaroff-roaddatasetbenchmark

arXivPDFCodeMarkdown11 min read

AI-compiled by claude-haiku-5-5 on 2026-10-18, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.

In plain words

Most self-driving research uses city streets, so the data and tools are built for roads. A robot that drives over dirt trails, grass, bushes and puddles needs to know what each of those is, and whether it can drive over it or must avoid it. RELLIS-3D is a dataset recorded by a ground robot on a university campus. It holds camera images, laser scans (LiDAR), stereo images and GPS and motion sensor readings. People labelled each pixel of 6,235 photos and each point of 13,556 laser scans into 20 kinds of terrain and objects.

The authors ran two well-known segmentation models on the labelled data. Both did much worse than on city datasets. They think the main reason is that a few classes are rare. The raw recordings are published too, so others can build new methods without driving the robot again.

TL;DR

RELLIS-3D is an off-road dataset with camera, LiDAR, stereo and GPS/INS data. It has pixel labels for 6,235 images and point labels for 13,556 LiDAR scans, in 20 classes §IV-B §IV-A. The authors report 51.55 (HRNet+OCR) and 52.92 (Gated-SCNN) mIoU on images, and 43.07 (SalsaNext) and 19.97 (KPConv) on point clouds tab. 2. Check the split and class-count inconsistencies under Pitfalls before quoting numbers. The repository states non-commercial terms for the data and code README.md.

Problem

LiDAR and inertial navigation alone perform poorly off-road. They mark bushes as obstacles even where a larger vehicle could drive through them §I. Semantic labels help, but most segmentation datasets are urban. The off-road datasets that exist either have one sensor type or few labels §I §II tab. 1. Off-road scenes also have unclear class boundaries, uneven terrain, and class frequencies that differ between sites §I §V-B.

Method

This is a dataset and benchmark paper. It has no new model. It describes three things: the sensor rig and its calibration §III-A–§III-D, the recording and labelling pipeline §IV-A–§IV-B, and reference segmentation runs with their metric §V.

  1. Record five sequences by teleoperating the robot along three unpaved trails. Each sequence lasts around five minutes §IV-A.
  2. Synchronise the sensors with PTP. The GPS/IMU unit cannot be PTP-synced, so each LiDAR or camera frame takes the GPS/IMU reading with the closest timestamp §III-B.
  3. Calibrate the cameras with a pinhole model plus distortion, using the ROS camera calibrator built on OpenCV §III-C. Estimate LiDAR–camera extrinsics with three cited methods, and check them with the mean line re-projection error, since no ground truth exists §III-D.
  4. Label images. Trained annotators label pixels, with one annotator per sequence, followed by in-house checks. The camera stream is downsampled to 5 Hz, and frames where the robot is stationary are not duplicated §IV-B.
  5. Label LiDAR scans from the image labels, as in the pseudocode below §IV-B.
  6. Use the 20-class ontology, which includes void. It borrows from RUGD and adds classes such as mud, barriers and rubble. Puddle and deep water are separate classes §IV-A.
  7. Evaluate with mIoU on fixed splits, for two image models and two point-cloud models §V-A–§V-C.
Pseudocode
# Label LiDAR scans from labelled images  [§IV-B] [§III-D]
# Input:  labelled images, camera-LiDAR calibration, scans of one sequence
# Output: one class per point, for every scan
def label_sequence(images, calibration, scans):
    # Start from the image labels projected into each scan  [§IV-B]
    initial = project_image_labels(images, calibration, scans)
    # Register and loop-close the sequence to get one pose per scan  [§IV-B]
    poses = slam_register(scans)
    # Refine by hand over overlapping scans in the stacked cloud  [§IV-B]
    return refine_labels(initial, scans, poses)
Pseudocode
# Mean IoU over classes  [eq. 1] [§V-A]
# Input:  predicted, truth: class id per pixel or point (flat arrays)
# Output: scalar mIoU
def mean_iou(predicted, truth, num_classes):
    ious = []
    # One class at a time, counting pixels or points  [§V-A]
    for c in range(num_classes):
        true_pos = count(predicted == c and truth == c)
        false_pos = count(predicted == c and truth != c)
        false_neg = count(predicted != c and truth == c)
        # Division fails when a class has no pixels; handling not stated
        ious.append(true_pos / (true_pos + false_pos + false_neg))
    # Average over the C classes; whether void is counted is not stated
    return mean(ious)

Key equation:

mIoU = \frac{1}{C}\sum_{c=1}^{C}\frac{TP_c}{TP_c+FP_c+FN_c} eq. 1

Here TP, FP and FN are true positives, false positives and false negatives for class c, and C is the number of classes §V-A.

Hyperparameters

The paper states almost no training settings. The rows marked code come from the official repository, not from the paper. They describe the setup the authors used, but the paper does not confirm it.

NameValueWhereNotes
Ontology20 classes incl. void§IV-AImage benchmark uses 19 (dirt dropped) §V-B
Scan classes (benchmark)15 incl. void§V-C tab. 2Sky, object, asphalt, building absent from table
Sequences5, about 5 min each, 3 trails§IV-ASingle facility; diversity limited §VI
Image annotations6,235 pixel-labelled images§IV-BCamera downsampled to 5 Hz
Scan annotations13,556 scans§IV-BStated as "up to 13,056 points" per scan
Image split3,302 train / 983 val / 1,672 test§V-BSums to 5,957, not 6,235 (see Pitfalls)
Scan split7,800 train / 2,413 val / 3,343 test§V-CSums to 13,556
LiDAR (Ouster OS1)64 channels, 2048 horizontal, 10 Hz, 45° vertical FOV§III-A
LiDAR (Velodyne)32 channels, 10 Hz, 40° vertical FOV§III-A
CameraBasler acA1920-50gc, 1920×1200, 10 Hz§III-A16 mm lens
StereoNerian Karmin2 + SceneScan, 10 Hz§III-A
GPS/IMU300 Hz GPS, 100 Hz IMU§III-APaper also says updates at 100 Hz §III-B
Time syncPTP for all but GPS/IMU§III-B
HRNet+OCR input (train)1024×640code: seg_hrnet_ocr_w48_train_512x1024_sgd_lr1e-3_wd5e-4_bs_12_epoch484.yamlFile name says 512×1024 crop
HRNet+OCR optimiserSGD, momentum 0.9, no Nesterovcode: seg_hrnet_ocr_w48_train_512x1024_sgd_lr1e-3_wd5e-4_bs_12_epoch484.yaml
HRNet+OCR LR, weight decay0.001, 5e-4code: seg_hrnet_ocr_w48_train_512x1024_sgd_lr1e-3_wd5e-4_bs_12_epoch484.yamlSibling file uses LR 0.01 seg_hrnet_ocr_w48_train_512x1024_sgd_lr1e-2_wd5e-4_bs_12_epoch484.yaml
HRNet+OCR batch4 per GPU, launched on 2 GPUscode: seg_hrnet_ocr_w48_train_512x1024_sgd_lr1e-3_wd5e-4_bs_12_epoch484.yaml run_hrnet.shFile name says bs 12
HRNet+OCR epochs484code: seg_hrnet_ocr_w48_train_512x1024_sgd_lr1e-3_wd5e-4_bs_12_epoch484.yaml
Gated-SCNN LR, batch multiplier0.001, 3code: run_gscnn.shArgparse default LR is 0.01 train.py
Gated-SCNN epochs175 (default)code: train.pyRun script does not override
Gated-SCNN crop, scale, decaycrop 720 (default); scale 0.5–2.0; weight decay 1e-4; momentum 0.9code: train.pyDefaults used by the run script
Gated-SCNN normalisationmean [0.5422, 0.6425, 0.5662], std [0.5422, 0.6425, 0.5662]code: rellis.pySame values as HRNet loader
SalsaNext optimiserSGD, LR 0.01, momentum 0.9, weight decay 1e-4code: salsanext_ouster.yml
SalsaNext schedule150 epochs, 1 warm-up epoch, LR decay 0.99 per epochcode: salsanext_ouster.ymlDecay comment says "after initial cycle"
SalsaNext batch16code: salsanext_ouster.yml
SalsaNext losscross-entropy, class weights from point counts (epsilon 0.001)code: salsanext_ouster.yml salsanext_ouster.ymlWeights use counts in rellis.yaml rellis.yaml
SalsaNext post-processingKNN on, k 5, search 5, sigma 1.0, cutoff 1.0; CRF offcode: salsanext_ouster.yml
SalsaNext sensorspherical projection, 2048×64, FOV +22.5° to −22.5°code: salsanext_ouster.ymlMatches the 45° FOV in §III-A
KPConv inputsphere radius 4.0 m; grid 0.06 m; batch 30code: train_Rellis.py train_Rellis.py train_Rellis.py
KPConv optimiserSGD, LR 1e-2, momentum 0.98code: train_Rellis.py
KPConv schedulemax 800 epochs; LR × 0.1^(1/150) per epoch; 230 steps per epochcode: train_Rellis.py train_Rellis.py train_Rellis.py
KPConv augmentationanisotropic scale 0.8–1.2; colour 0.8; noise 0.001code: train_Rellis.py
KPConv class weightscommented outcode: train_Rellis.py
Void handling (3D)ignored in KPConv and SalsaNextcode: Rellis.py rellis.yamlPaper does not say

Results

Author-reported. Setup: RELLIS-3D with the splits above; image models are 2D and score 19 classes, point-cloud models are 3D and score 15 classes. Hardware is not stated. The paper compares its numbers against published urban results: Cityscapes and SemanticKITTI §V-B §V-C. Those datasets differ, so the comparison is not like-for-like.

Per-class IoU tab. 2. A dash means the class is not in that model's class list. Mean is computed over the listed classes (see Pitfalls).

ClassHRNet+OCR (image)Gated-SCNN (image)SalsaNext (scan)KPConv (scan)Source
sky96.9497.02--tab. 2
grass90.2084.9564.7456.41tab. 2
tree80.5378.5279.0449.25tab. 2
bush76.7670.3372.9058.45tab. 2
concrete84.2283.8275.2733.91tab. 2
mud43.2945.529.580.00tab. 2
person89.4890.3183.1781.20tab. 2
puddle73.9471.4923.200.00tab. 2
rubble62.0366.035.010.00tab. 2
barrier54.8655.1275.890.00tab. 2
log0.002.9218.760.00tab. 2
fence39.5241.8616.130.40tab. 2
vehicle41.5446.5123.120.00tab. 2
object46.4454.64--tab. 2
pole9.516.9056.260.00tab. 2
water0.720.940.000.00tab. 2
asphalt33.2544.18--tab. 2
building4.6011.47--tab. 2
mean mIoU51.5552.9243.0719.97tab. 2

Other reported results:

  • Image models, on the same split, with urban references the paper cites: Gated-SCNN 52.92 vs 74.7 on Cityscapes; HRNet+OCR 51.55 vs 81.1 on Cityscapes §V-B.
  • Point clouds: SalsaNext 43.07 mIoU; KPConv 19.07 mIoU in the text, but 19.97 in the table §V-C tab. 2. The paper gives SemanticKITTI references of 59.5 and 58.8 "respectively" §V-C.
  • Label-distribution sampling for KPConv adds 0.6 mIoU points §V-C.
  • Fence visibility: a fence hidden behind bushes in images and in a single scan appears only after several LiDAR scans are registered §V-D fig. 7.
  • Largest errors in images, per the paper: log, pole, water and building §V-B tab. 2.

Paper vs code

Repository: https://github.com/unmannedlab/RELLIS-3D at commit c17a118fcaed1559f03cc32cc3a91dedc557f8b8. It belongs to the authors' lab; the paper's abstract links it README.md.

  • Splits. The paper's image split (3,302 / 983 / 1,672) and scan split (7,800 / 2,413 / 3,343) are not in the repo. Configs point to train.lst, val.lst, pt_train.lst and similar files seg_hrnet_ocr_w48_train_512x1024_sgd_lr1e-3_wd5e-4_bs_12_epoch484.yaml Rellis.py. The counts cannot be checked.
  • "Same splits" for points. The paper says point experiments use "the same data splits as for the image data" §V-C, but the counts differ. The code loads separate point lists. The paper does not say whether this means the same sequences or the same frames.
  • Image class mapping. The HRNet loader keeps sky, object, asphalt and building as classes, and maps raw ids to indices 5, 7, 8 and 9 rellis.py. The SalsaNext map sends sky, object, asphalt and building to void rellis.yaml. The paper's point table agrees with the SalsaNext map tab. 2.
  • Void in HRNet. HRNet maps raw void (id 0) and dirt (id 1) to class 0, and its configured ignore value is 255, which this map never produces rellis.py seg_hrnet_ocr_w48_train_512x1024_sgd_lr1e-3_wd5e-4_bs_12_epoch484.yaml. Whether class 0 enters the loss or the mIoU was not checked.
  • Which HRNet config produced the numbers. Both LR variants exist. The README and train.sh use the 0.001 file README.md. The paper does not say which one was used.
  • Batch size. The file name says bs_12, but the config gives 4 per GPU on 2 GPUs (8 total) seg_hrnet_ocr_w48_train_512x1024_sgd_lr1e-3_wd5e-4_bs_12_epoch484.yaml.
  • SalsaNext config. The run script uses the Ouster config run_salsanext.sh. Its FOV matches the paper's 45° §III-A. A different config, benchmarks/SalsaNext/salsanext.yml, names an HDL-64 sensor and is not the one the run script uses salsanext.yml.
  • KPConv class weights. The paper describes label-based sampling §V-C. The config's class-weight lines are commented out train_Rellis.py. How the label-based sampling is implemented was not checked.
  • Evaluation code. The notebooks in utils/ (Evaluate_img.ipynb, Evaluate_pt.ipynb) were not reviewed. They are the metric code the README points to README.md. Check them before reproducing the mIoU numbers.

Pitfalls

  • Numbering and version. Citations follow the IEEE conference template's Roman-numeral section style (§III-A and so on) in arXiv v4 source. A different version may renumber them.
  • Image split does not add up. 3,302 + 983 + 1,672 = 5,957, but 6,235 images are annotated. The 278 missing images are not explained §IV-B §V-B.
  • Class counts disagree. The text says 19 image classes and 15 point classes §V-B §V-C. The table caption says 20 and 16 tab. 2. The 20-class ontology includes void §IV-A.
  • KPConv mIoU disagrees. 19.07 in the text, 19.97 in the table. The table value is the one that matches the arithmetic (see next point).
  • Means. Arithmetic check on the table: the image means (51.55, 52.92) equal the average of the 18 listed class columns, and the point means (43.07, 19.97) equal the average of the 14 listed columns. So void is not in the mean. The paper does not say this.
  • Accumulation and empty classes. Whether TP, FP and FN are summed over the test set or averaged per image is not stated. Handling of classes with no pixels is not stated §V-A.
  • Point count. Scans are said to contain "up to 13,056 points" §IV-B, while the scan count is 13,556. The point count may be a typo. Not verified.
  • GPS rate. §III-A lists 300 Hz GPS and 100 Hz IMU. §III-B says the GPS/IMU system updates at 100 Hz. Which stream is matched to frames is not stated.
  • Label quality. Labels come from crowdsourcing with in-house checks §IV-B. The paper reports no inter-annotator agreement or error rate. Point labels are propagated from image labels, then refined, and scans can disagree where SLAM registration is imperfect §IV-B.
  • Class imbalance is the stated cause. The paper attributes the weak image results mainly to imbalance and unclear boundaries §V-B, and the weak KPConv result to imbalance and unstructured data §V-C. These are the authors' beliefs; no ablation isolates them.
  • Cross-dataset comparison. The Cityscapes and SemanticKITTI numbers come from other papers and other setups. Do not rank them against these results.
  • Single site. All five sequences come from one facility §VI. The paper says diversity is a challenge for splits.
  • Licences. This card is published under the paper's CC BY 4.0. The dataset and repository are not covered by that licence. The README states CC BY-NC-SA 3.0 for both README.md. Bundled GSCNN code is CC BY-NC-SA 4.0 LICENSE. No snippet from these repositories is quoted here; the code references are citations only. Anyone using the data or code must check the non-commercial terms first.
  • Dataset availability. The README links Google Drive and Baidu Pan downloads, some limited in quota and one requiring email access README.md. Not all files are verified here.

Lineage

  • Builds on: the RUGD ontology (not a card) for its class design §IV-A.
  • Benchmarks: HRNet+OCR (Wang et al. and Yuan et al., arXiv:1909.11065); Gated-SCNN (arXiv:1907.05740); SalsaNext (arXiv:2003.03653); KPConv (arXiv:1904.08889). None has a card, so no content is taken from them §V-B §V-C.
  • Compared against (named only): RUGD, Freiburg Forest / DeepScene, YCOR, the NREC person-detection set, and Dabbiru et al. §II tab. 1. Urban references: Cityscapes, SemanticKITTI and others §V.
  • Superseded by: not stated.

Source and license

Adapted from “RELLIS-3D Dataset: Data, Benchmarks and Analysis” by Peng Jiang, Philip Osteen, Maggie Wigness, Srikanth Saripalli (arXiv:2011.12954), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors. Code citations refer to https://github.com/unmannedlab/RELLIS-3D at commit c17a118fcaed (No LICENSE file at repository root; README states CC BY-NC-SA 3.0 (non-commercial) for dataset and code; bundled GSCNN is CC BY-NC-SA 4.0, SalsaNext and HRNet are MIT). Any quoted code is shown under that license.