GithubHelp home page GithubHelp logo

ethz-asl / segmap Goto Github PK

View Code? Open in Web Editor NEW
1.0K 1.0K 393.0 1.08 MB

A map representation based on 3D segments

License: BSD 3-Clause "New" or "Revised" License

CMake 0.52% C++ 75.95% Python 23.28% Shell 0.25%

segmap's Introduction

SegMap

SegMap is a map representation based on 3D segments allowing for robot localization, environment reconstruction, and semantics extraction. The SegMap code is open-source (BSD License) and has been tested under Ubuntu 14.04, 16.04 and ROS Indigo, Kinetic. Please remember that this is on-going research code which is subject to changes in the future.

Related Publications

R. Dubé, A. Cramariuc, D. Dugas, H. Sommer, M. Dymczyk, J. Nieto, R. Siegwart, and C. Cadena. SegMap: Segment-based mapping and localization using data-driven descriptors The International Journal of Robotics Research (IJRR), 2019 pdf

R. Dubé, A. Cramariuc, D. Dugas, J. Nieto, R. Siegwart, and C. Cadena. "SegMap: 3D Segment Mapping using Data-Driven Descriptors." Robotics: Science and Systems (RSS), 2018. pdf - video

R. Dubé, MG. Gollub, H. Sommer, I. Gilitschenski, R. Siegwart, C. Cadena and , J. Nieto. "Incremental Segment-Based Localization in 3D Point Clouds." IEEE Robotics and Automation Letters, 2018. pdf

R. Dubé, D. Dugas, E. Stumm, J. Nieto, R. Siegwart, and C. Cadena. "SegMatch: Segment Based Place Recognition in 3D Point Clouds." IEEE International Conference on Robotics and Automation, 2017. pdf - video

Features

  • 3D CNN encoder – decoder
  • ICP based LiDAR odometry
  • Dynamic voxel grid
  • Single and multi-robot SLAM back-end
  • Generic incremental region-growing segmentation
  • Incremental geometric verification

Installation

The SegMap repository contains the following modules:

  • segmap: The C++ library for 3D segment mapping.
  • segmap_ros: ROS interface for segmap.
  • segmapper: Example application using segmap and ros.
  • laser_slam: Backend for the example application, based on LiDAR sensor data.
  • segmappy: Python library for training and evaluating the neural network models.

This section provides a step by step guide to installing the full flavor of SegMap. Advanced: it is also possible to use the SegMap C++ library standalone in a C++ project, or integrate the C++ library and ROS interface in a ROS project.

Dependencies

First install the required system packages:

$ sudo apt-get install python-wstool doxygen python3-pip python3-dev python-virtualenv dh-autoreconf

Set up the workspace configuration:

$ mkdir -p ~/segmap_ws/src
$ cd ~/segmap_ws
$ catkin init
$ catkin config --merge-devel
$ catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release

Then use wstool for fetching catkin dependencies:

$ cd src
$ git clone https://github.com/ethz-asl/segmap.git
$ wstool init
$ wstool merge segmap/dependencies.rosinstall
$ wstool update

Tensorflow

If you do not plan on using the deep learned descriptors in SegMap you should at least install the CPU version of Tensorflow to compile the whole package. Otherwise we recommend the GPU version.
The precompiled version of Tensorflow can only be used with Ubuntu 14.04, for further explanations see here (requirements for the GPU version here). For Ubuntu 16.04 and 18.04 you must compile tensorflow from source. After compiling tensorflow, generate the pip package and continue with these instructions, installing the custom generated package instead of the precompiled one.

SegMap relies on the package tensorflow_ros_cpp for linking to the tensorflow C++ API. All our code has been tested with Tensorflow 1.8.

$ virtualenv ~/segmappyenv
$ source ~/segmappyenv/bin/activate
(segmappyenv)$ pip install --upgrade pip
(segmappyenv)$ pip install catkin_pkg empy pyyaml
(segmappyenv)$ pip install tensorflow-gpu==1.8.0
Build tensorflow_ros_cpp

For more details on the optional compile flags or in case of issues compiling see the FAQ.

$ cd ~/segmap_ws
$ catkin build tensorflow_ros_cpp

Build SegMap

Finally, build the segmapper package which will compile all dependencies and SegMap modules:

$ cd ~/segmap_ws
$ catkin build segmapper

(Optional) Install SegmapPy python package

Installing segmappy allows you to train data-driven models yourself to use with SegMap.

$ cd src/segmap/segmappy/
$ source ~/segmappyenv/bin/activate
(segmappyenv)$ pip install .

Running segmapper Examples

Make sure to source the SegMap workspace before running the segmapper demonstrations:

$ source ~/segmap_ws/devel/setup.bash

To train new models see intructions here.

Download demonstration files

To download all necessary files, copy the content of the segmap_data into ~/.segmap/. If you installed the segmappy python package you can run the automated download script. Note: These models have been trained using Tensorflow 1.8 and are only guaranteed to work for that version.

Run online SLAM example

An online SLAM example can be run with

$ roslaunch segmapper kitti_loop_closure.launch

Run localization against known map example

A localization example can be run with

$ roslaunch segmapper kitti_localization.launch

Run online SLAM with CNN example

An online SLAM example with data-driven descriptor can be run with

$ roslaunch segmapper cnn_kitti_loop_closure.launch

You can now visualize the reconstructed target map in rviz by subscribing to /segmatch/target_reconstruction.

More details on the demonstrations can be found here.

License

SegMap is released under BSD 3-Clause License

Thank you for citing the related publication if you use SegMap in academic work:

@article{doi:10.1177/0278364919863090,
  title ={SegMap: Segment-based mapping and localization using data-driven descriptors},
  author = {Renaud Dubé and Andrei Cramariuc and Daniel Dugas and Hannes Sommer and Marcin Dymczyk and Juan Nieto and Roland Siegwart and Cesar Cadena},
  journal = {The International Journal of Robotics Research},
  volume = {39},
  number = {2-3},
  pages = {339-355},
  year = {2020},
  doi = {10.1177/0278364919863090}
}
@inproceedings{segmap2018,
  title={{SegMap}: 3D Segment Mapping using Data-Driven Descriptors},
  author={Dub{\'e}, Renaud and Cramariuc, Andrei and Dugas, Daniel and Nieto, Juan and Siegwart, Roland and Cadena, Cesar},
  booktitle={Robotics: Science and Systems (RSS)},
  year={2018}
}
@inproceedings{segmatch2017,
  title={SegMatch: Segment based place recognition in 3d point clouds},
  author={Dub{\'e}, Renaud and Dugas, Daniel and Stumm, Elena and Nieto, Juan and Siegwart, Roland and Cadena, Cesar},
  booktitle={IEEE International Conference on Robotics and Automation (ICRA)},
  pages={5266--5272},
  year={2017},
  organization={IEEE}
}

If you use the incremental version for the segmentation or geometric verification algorithms (used in the provided configuration files), please consider citing the describing paper:

@article{incremental2018,
  title={Incremental Segment-Based Localization in {3D} Point Clouds},
  author={Dub{\'e}, Renaud and Gollub, Mattia G and Sommer, Hannes and Gilitschenski, Igor and Siegwart, Roland and Cadena, Cesar and Nieto, Juan},
  journal={IEEE Robotics and Automation Letters},
  volume={3},
  number={3},
  pages={1832--1839},
  year={2018},
  publisher={IEEE}
}

Contributing to SegMap

We would be very grateful if you would contribute to the code base by reporting bugs, leaving comments and proposing new features through issues and pull requests. Please see the dedicated wiki page on this topic and feel free to get in touch at renaud.dube(at)sevensense(dot)ch, dugasd(at)ethz(dot)ch and crandrei(at)ethz(dot)ch. Thank you!

segmap's People

Contributors

brunoeducsantos avatar cesarcadena avatar danieldugas avatar dotpiano avatar rdube avatar smauq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

segmap's Issues

Crash with region-growing segmenter

Hi,
I noticed that the segmentation crashes if no points are in the pointcloud. The log before the crash is:

I0822 12:45:54.641043 13327 region_growing_segmenter.cpp:54] Starting region growing segmentation.
I0822 12:45:54.641834 13327 region_growing_segmenter.cpp:62] Normals are computed.
I0822 12:45:54.641858 13327 region_growing_segmenter.cpp:73] Number of indices 0
I0822 12:45:54.641868 13327 region_growing_segmenter.cpp:74] Number of normals 2
[pcl::RegionGrowing::prepareForSegmentation] Empty given indices!
[pcl::KdTreeFLANN::setInputCloud] Cannot create a KDTree with an empty input cloud!
/opt/ros/indigo/lib/node_manager_fkie/respawn: line 8: 13143 Segmentation fault      (core dumped) stdbuf -i0 -oL -eL "$@"'

I avoided the crash by adding a check to the extraction in
https://github.com/ethz-asl/segmatch/blob/master/segmatch/src/segmenters/region_growing_segmenter.cpp#L74

if (indices->size() > 0) {
      region_growing_estimator_.extract(clusters);
}

Random forest training code is not included?

Based on my current knowledge, the random forest training is given in [http://robotics.ethz.ch/segmatch/demonstration_files/kitti/] . Could you add random forest training code and dataset to guide how to train the classifier? Thank you!

Using segmatch with different backend

Hi,
We have devloped our own SLAM back-end and would like to use segmatch just to retrieve loop closings and pose between them in SE3. I have been going through the code and see that segmatch is coupled with your own SLAM system and that it uses current pose when segmenting each point cloud.
Is it possible to run segmatch in standalone version in which it would simply process each point cloud in its local frame and find loop closings between them?

Build error in ubuntu 16.04

Hi, I'm trying to run segmatch on ubuntu 16.04,I notice that I should run catkin config --merge-devel before catkin build -DCMAKE_BUILD_TYPE=Release laser_mapper,and I did so, But I still get error "Error: The current devel space layout, linked,is incompatible with the configured layout, merged." . How to fix this error? Thanks a lot !

Make the filtering of duplicate segments more efficient

@exodaniel @HannesSommer I'd like to make the filterDuplicateSegmentsOfTargetMap() function more efficient:

https://github.com/ethz-asl/segmatch/blob/feature/incremental_estimator/segmatch/src/segmatch.cpp#L466

The current idea is that we get a cloud of all target segments centroids and loop over all segments centroid of the cloud to add and check if we should remove the segment from the target cloud.

Creating the target segments cloud centroid can take a few ms (50-100 ms on a big KITTI map). Brute force knn to this cloud currently takes a lot of time (500ms+). I will change by first applying a cylindrical filter to that cloud, according on the trajectory pose they are linked to.

The best would be to first grab the "near collectors" as we had before and then build the local cloud without having to iterate over all segments but only over the ones which are linked to a near collector. We could potentially achieve the same by modifying the definition of valid_segments_ in SegmentedCloud from :

std::vector<Segment> valid_segments_; to:

typedef std::pair<SE3, std::vector<Segment> > PoseAndSegmentsPair;
std::vector<PoseAndSegmentsPair> valid_segments_;

But that would require some refactoring. Any thoughts?

Should dependencies.rosinstall use SSH or HTTPS?

@HannesSommer wstool update was failing for @CesarCadena for the dependencies specified with SSH as he had no SSH key setup on his virtual machine. Should we move all dependencies to use HTTPS or maybe have two dependencies scripts?

Also some dependencies url for the https are ending by .git and other don't. Should we normalize and put .git everywhere?

Thanks! :)

track_id is not used?

hello
i am reading the code recently, that i found that when i run the code ,"track id" is keeping zero. And when it finds loop ,
loop_closure->track_id_a = target_track_id;
loop_closure->track_id_b = source_track_id;
also keeps zero.so whether we can think that ,this para can be removed?

mincurves failed during installation

Hi developers,

I am trying to install segmatch, but the installation is terminated during mincurves make.The error shown in terminal as below:

make[2]: *** [CmakeFiles/mincurves.dir/src/DiscreteSE3Curve.cpp.o] Error 1
make[1]: *** [CmakeFiles/mincurves.dir/all] Error 2
make: *** [all] Error 2

May I know how to solve this issue?

Thank you in advance.

laser_mapper.launch file not working

Hi all,

i am trying to roslaunch laser_mapper.launch
[laser_mapper-2] restarting process
process[laser_mapper-2]: started with pid [4741]
WARNING: Logging before InitGoogleLogging() is written to STDERR
I1108 15:35:18.640985 4741 segmatch.cpp:18] Do not forget to initialize SegMatch.
F1108 15:35:18.656913 4741 common.hpp:133] Check failed: loop_closure_noise_model.size() == kNoiseModelDimension (0 vs. 6)
*** Check failure stack trace: ***
[laser_mapper-2] process has died [pid 4741, exit code -6, cmd /home/t450-14/aaa_ws/devel/lib/laser_mapper/laser_mapper_node __name:=laser_mapper __log:=/home/t450-14/.ros/log/5de4a75c-c457-11e7-87e0-1002b5e35684/laser_mapper-2.log].
log file: /home/t450-14/.ros/log/5de4a75c-c457-11e7-87e0-1002b5e35684/laser_mapper-2*.log

Thanks in advance.

Integrate SegMatch and LOAM

Hi,

I think a great feature to add would be integrating LOAM as an alternative to the current ICP-based LiDAR odometry for SegMatch SLAM. For those who are not familiar with LOAM (Lidar Odometry and Mapping in Real-time https://www.researchgate.net/profile/Ji_Zhang50/publication/282704722_LOAM_Lidar_Odometry_and_Mapping_in_Real-time/links/56193e3008ae6d173086ed6b.pdf), LOAM is a very low drift LiDAR odometry method that has achieved very impressive results on the KITTI dataset (currently 2nd - http://www.cvlibs.net/datasets/kitti/eval_odometry.php). However, it does not incorporate loop closures to eliminate drift over time.

I think that integrating LOAM could improve SegMatch SLAM's performance as the ICP LiDAR odometry introduces significant drift as noted in the parameters file (https://github.com/ethz-asl/segmatch/blob/master/laser_mapper/launch/kitti/kitti_loop_closure.yaml#L117) and verified by my own experiments. I am planning to work on this over the next week or so.

Any thoughts / suggestions?

Thanks!

Compile error on ubuntu16.04 kinetic

Hi, I'm using ubuntu16.04 kinetic, I had compiled this package successfully,but when I modified the code that I'm sure it is right, for example, actually, I just add LOG(WARNING) << "predicted_matches size:"<<predicted_matches.size()<<"."; to segmatch_worker.cpp 125 line, then I run catkin build in the terminal, I got the error:
Errors << laser_mapper:make /home/nv/test_ws/logs/laser_mapper/build.make.007.log /home/nv/test_ws/devel/lib/liblaser_slam.so: undefined reference to gtsam::Marginals::Marginals(gtsam::NonlinearFactorGraph const&, gtsam::Values const&, gtsam::Marginals::Factorization, boost::optional<gtsam::Ordering const&>)'
/home/nv/test_ws/devel/lib/liblaser_slam.so: undefined reference to gtsam::ISAM2::update(gtsam::NonlinearFactorGraph const&, gtsam::Values const&, gtsam::FastVector<unsigned long> const&, boost::optional<gtsam::FastMap<unsigned long, int> > const&, boost::optional<gtsam::FastList<unsigned long> > const&, boost::optional<gtsam::FastList<unsigned long> > const&, bool)' collect2: error: ld returned 1 exit status make[2]: *** [/home/nv/test_ws/devel/lib/laser_mapper/laser_mapper_node] Error 1 make[1]: *** [CMakeFiles/laser_mapper_node.dir/all] Error 2 make: *** [all] Error 2 cd /home/nv/test_ws/build/laser_mapper; catkin build --get-env laser_mapper | catkin env -si /usr/bin/make --jobserver-fds=6,7 -j; cd - ........................................................................................................................... Failed << laser_mapper:make [ Exited with code 2 ] Failed <<< laser_mapper [ 5.3 seconds ] [build] Summary: 30 of 31 packages succeeded. [build] Ignored: 2 packages were skipped or are blacklisted. [build] Warnings: 3 packages succeeded with warnings. [build] Abandoned: None. [build] Failed: 1 packages failed. [build] Runtime: 9.8 seconds total.
And I have tried to remove the code that added by myself, this error still exists. But when I delete the .catkin_tools, logs, devel, build ,floder the run catkin config --merge-devel and catkin build , It can be compiled successfully, but it really would take too long time, almost several hours. I'm new to catkin build, do you have any suggestion about this problem? By the way, why do you choose catkin build not catkin_make?

use segmatch in real environment

Hi, thank you for all your works. I want to use segmatch in real environment, especially use real 3D lidar to realize this algorithm, but i don't know how can i do that. Can you give me some advice?

Compiling Segmap framework.

Thank you for releasing this amazing segment based LidarSLAM Framework.
I have read several papers related to this framework.

  • Learning 3D Segment Descriptors for Place Recognition
  • SegMatch: Segment based loop-closure for 3D point clouds
  • SegMap: 3D Segment Mapping using Data-Driven Descriptors
  • Incremental-Segment-Based Localization in 3-D Point Clouds

And I am trying to compile this framework on my machine
but, I have some troubles with it.

I newly installed Ubuntu 16.04 and ROS Kinetic on my machine
and I have carefully followed the “Compiling SegMatch” section ReadMe page.
However, I encountered error messages after excepting "catkin build -DCMAKE_BUILD_TYPE=Release segmapper” command.
segmapper error.txt

So, I tried the “divide-and-conquer” approach in order to build the framework by individually building the prerequisites.
The followings are the error message from each command.

"catkin build -DCMAKE_BUILD_TYPE=Release libnabo”
libnabo error.txt

"catkin build -DCMAKE_BUILD_TYPE=Release libpointmatcher”
libpointmatcher error.txt

"catkin build -DCMAKE_BUILD_TYPE=Release pcl_catkin”
pcl_catkin error.txt

"catkin build -DCMAKE_BUILD_TYPE=Release laser_slam”
laser_slam error.txt

I didn’t include the rest of prerequisites since it looks like that those are successfully complied.

I want to contribute to this great LidarSLAM framework but I am failing even on the first stage.
Could you give me a clue or direction to deal with it?
Thanks in advance.

Using the laser_slam_worker without odometry estimate

Hi, I have read the paper for several times in details, and also tried the 2 demos, it works very well. But may I ask SegMatch works well with Velodyne VLP16?

I just started to try to use SegMatch with VLP 16 only. Meanwhile, there is such a problem when I used SegMatch with our own rosbag :
I0510 11:48:23.906718 3671 segmapper.cpp:122] publishing local maps
[ INFO] [1525924103.907656700, 1523701063.778971112]: Stereo is NOT SUPPORTED
[ INFO] [1525924103.907807419, 1523701063.778971112]: OpenGl version: 3 (GLSL 1.3).
[ WARN] [1525924106.240226918, 1523701063.984035853]: [SegMapper] Timeout while waiting between world and velodyne.
I0510 11:48:26.371474 3671 segmapper.cpp:122] publishing local maps95075
I0510 11:48:26.371620 3671 segmapper.cpp:122] publishing local maps
[ WARN] [1525924106.441460653, 1523701064.185756267]: [SegMapper] Timeout while waiting between world and velodyne.
[ WARN] [1525924106.644311873, 1523701064.388192654]: [SegMapper] Timeout while waiting between world and velodyne.
I0510 11:48:26.704529 3671 segmapper.cpp:122] publishing local maps
[ WARN] [1525924106.846493187, 1523701064.589803107]: [SegMapper] Timeout while waiting between world and velodyne.
If someone came across the same issue, could you tell us the steps to use SegMatch with our VLP 16 online and the reason about the above problem.Thanks.

"https" not supported or disabled in libcurl

Hi, I tried compiling the packages and ran into the following error -

CMake Error at gflags_src-stamp/download-gflags_src.cmake:27 (message):
error: downloading 'https://github.com/gflags/gflags/archive/v2.1.2.zip'
failed

status_code: 1
status_string: "Unsupported protocol"
log: Protocol "https" not supported or disabled in libcurl

Closing connection -1

Any help is appreciated. Thanks!

Does SegMatch works with Velodyne VLP16?

Hi, I have read the paper for several times in details, and also tried the 2 demos, it works very well. But may I ask SegMatch works well with Velodyne VLP16?

I just started to try to use SegMatch with VLP 16, if someone came across the same issue, could you tell us the steps to use SegMatch with our own rosbag. Thanks.

Meanwhile, I will put the steps here if I successfully do it.

installation issue

Hi all,

I am trying to use segmatch method with visual slam method for optimizing loop closure method.
But i am obtaining the following error during catkin_make.

src/laser_slam_worker.cpp:72:17: error: ‘class pcl::VoxelGridpcl::PointXYZ’ has no member named ‘setMinimumPointsNumberPerVoxel’
voxel_filter_.setMinimumPointsNumberPerVoxel(params_.minimum_point_number_per_voxel);
^

Kindly suggest solutions.

regards,
varun

setting up a proper catkin workspace

Hi,

First of all, its a great work and congratulations on that!

Now, I followed the installation instructions on the github and got it to work. Specifically,

  1. I already have a ubuntu 14.04 with ROS Indigo and tried to install the source code in catkin_ws/src/ but was having some issues producing compiling erros, hence
  2. I created a new folder and catkin_ws_segmatch and I followed the instruction on github and later i could get both localization and loop closure to work.
  3. Once I close the terminal and open a new terminal and try to replicate the steps then, it produces an error saying

ERROR: cannot launch node of type [laser_mapper/laser_mapper_node]: can't locate node [laser_mapper_node] in package [laser_mapper]

I tried adding adding the line shown below in .bashrc file but it didnt help.
export ROS_PACKAGE_PATH=/home/iirav/catkin_ws_segmatch/src:/home/iirav/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks

Could you help in solving this issue ?

Is segmatch deterministic?

Hi all,
I have tried the loop closure demonstration and also some own datasets and noticed that different runs with exactly same parameters return different outcomes. I have made small changes to the code so I cannot determine if I introduced the non-deterministic behaviour.
Did you also notice non-deterministic behaviour in your experiments and have an idea where it comes from?

Using Segmatch with region growing segmenter

Hi everyone,

First of all, thanks for making the code available, I really liked the demonstrations and want to use SegMatch myself for indoor loop-closures. I already wrote some mails to @rdube, and got very helpful answers, thanks for the tips. Maybe someone else can benefit from my results, so I want to share where I got so far.

I am using simulated and real data from an VLP-16 and have disabled ICP, instead using the ground-truth trajectory (or cartographers trajectory for the real data) with some rotational drift. For the segmentation I have switched to the region-growing segmenter and changed some parameters. Although the segmentation is not yet perfect, I already have some good results as can be seen in the following:

As my dataset I use the corridor around a lecture hall, and its reconstructed mesh:
mesh
Here is one of the results
loop_correct

So far I noticed that the repeating structures and symmetry is less of a problem than expected, because the segments are accumulated over a long time but consequently the overlapping trajectory must be large before the loop is detected. (The trajectory goes clockwise twice around the whole lecture hall, beginning slightly before the lower left corner)

The parameters for the region-growing segmenter itself work very well, however I had to change some other parameters to filter the pointcloud before segmenting to get good results:

  • I filtered the floor and ceiling and a lot of noise by changing minimum_point_number_per_voxel to 2 or 3 and voxel_size to 0.08.
  • I also changed the distance_to_consider_fixed and distance_between_segmentations_m to 20-30. It is important to keep the latter smaller or equal to the former, otherwise the filtering of cut segments at the border does not work and many incomplete duplicates are created.
  • The same is the case if distance_between_segmentations_m is too high, because large walls that are only scanned partially in the beginning will create many segments as they are observed over time. Setting the distance between segmentations to 0 helps to remove these duplicates although large walls still create multiple segments because they can not be completely observed or the simple map update can not match them.

Even when the drift is completely disabled the resulting map still has some duplicates as can be seen here:
overlaying_segments

But still the resulting trajectory with loop-closures looks very nice and I hopefully can try to close some loops in different datasets.
@rdube I would also like to try the shape descriptor if you still have the trained random forest and see, if loops can be found faster and with fewer segments with it.

the matching of dynamic objects

Hi, thanks for all your works. I'm very glad to do your experiment again. However, I have encountered some problems when reading your paper, How do you solve the matching of dynamic objects, such as moving cars, in urban scenes? For example, when the robot comes back to the same place, the car parked next to the road may have gone.At this point, the segments of source clouds and target clouds may be different.

Error when using the wstool

$ wstool update
[GTSAM] Updating /home/daniel/Documents/catkin_ws/src/GTSAM
[GTSAM] Done.
[Schweizer-Messer] Updating /home/daniel/Documents/catkin_ws/src/Schweizer-Messer
[Schweizer-Messer] Done.
[catkin_simple] Updating /home/daniel/Documents/catkin_ws/src/catkin_simple
[catkin_simple] Done.
[curves] Updating /home/daniel/Documents/catkin_ws/src/curves
Username for 'https://github.com': exodaniel
Password for 'https://[email protected]': 
WARNING [vcstools] Command failed: 'git checkout feature/discreteSE3Curve'
 run at: '/home/daniel/Documents/catkin_ws/src/curves'
 errcode: 1:
error: pathspec 'feature/discreteSE3Curve' did not match any file(s) known to git.

@rdube do you also see this error?

segmatch in windows

Hello ,

Thank you for this great piece of work.

I would like to integrate segmatch to another odometry algorithm but in windows environment.
What all changes in which all configuration files are necessary for this?

Can someone suggest any ideas or advices?

Loop closure launch file needs update

I am unable to see any loop-closure using the KITTI dataset - 2011_09_30_drive_0027 when I launch 'kitti_loop_closure.launch' file. Any suggestions? Thanks!

Unable to publish trajectory when executing kitti localization example

Hi all
I am following the example from the following link, https://github.com/ethz-asl/segmatch/wiki/Demonstrations.

However no trajectory was published. May I know any possible method for me to work out on this issue?

the following are the logs during roslauch.
Additional note: the loop closure example also having similar issues.
thank you in advance

I1025 16:06:01.768736 23467 incremental_estimator.cpp:54] Loading ICP configurations from: /home/user/catkin_ws4/src/segmatch/laser_mapper/launch/kitti/icp_dynamic_outdoor.yaml
inverted_max_eigen_double_ 39702.091084 Duration: 34.098621 / 137.842093
0.000401043 5.35673e-06 5.30817e-06 3.02663 5.30819e-06 0.917515 1.0013
inverted_max_eigen_float_
0.000401043 5.35673e-06 5.30817e-06 3.02663 5.30819e-06 0.917515 1.0013
[ INFO] [1508918761.815895548]: Loading target cloud.
I1025 16:06:01.815948 23467 common.hpp:135] Loading cloud: /home/user/catkin_ws4/src/segmatch/laser_mapper/demonstration_files/kitti/drive27_target_map.pcd.
Failed to find match for field 'intensity'.uration: 52.858947 / 137.842093
I1025 16:06:20.684986 23467 euclidean_segmenter.cpp:28] Starting euclidean segmentation.
I1025 16:06:34.345943 23467 euclidean_segmenter.cpp:42] Segmentation complete. Took 13661.5ms and found 1026 clusters.
I1025 16:06:34.354141 23467 segmatch.cpp:149] Removing too near segments from source map.
I1025 16:06:34.354260 23467 segmatch.cpp:844] segment_ids.size() 1026
I1025 16:06:34.356477 23467 segmatch.cpp:919] Removed 19 duplicate segments in 2.799 ms.
I1025 16:06:34.387974 23467 descriptors.cpp:61] Decriptor 0 took 31.962 ms.
[laser_mapper-3] process has died [pid 23467, exit code -11, cmd /home/user/catkin_ws4/devel/lib/laser_mapper/laser_mapper_node __name:=laser_mapper log:=/home/user/.ros/log/2bce1b92-b95b-11e7-bd94-88d7f69239dd/laser_mapper-3.log].
log file: /home/user/.ros/log/2bce1b92-b95b-11e7-bd94-88d7f69239dd/laser_mapper-3*.log
[laser_mapper-3] restarting process
process[laser_mapper-3]: started with pid [23637]
WARNING: Logging before InitGoogleLogging() is written to STDERR137.842093
I1025 16:06:35.216768 23637 segmatch.cpp:18] Do not forget to initialize SegMatch.
I1025 16:06:35.257854 23637 laser_track.cpp:16] Loading ICP configurations from: /home/user/catkin_ws4/src/segmatch/laser_mapper/launch/kitti/icp_dynamic_outdoor.yaml
I1025 16:06:35.258607 23637 laser_track.cpp:26] Loading ICP input filters from: /home/user/catkin_ws4/src/segmatch/laser_mapper/launch/kitti/input_filters_outdoor.yaml
I1025 16:06:35.258886 23637 laser_track.cpp:48] Creating ICP noise model with cauchy.
I1025 16:06:35.258913 23637 incremental_estimator.cpp:31] Creating loop closure noise model with cauchy.
I1025 16:06:35.258924 23637 incremental_estimator.cpp:54] Loading ICP configurations from: /home/user/catkin_ws4/src/segmatch/laser_mapper/launch/kitti/icp_dynamic_outdoor.yaml
inverted_max_eigen_double
39735.572313 Duration: 67.579851 / 137.842093
0.000401043 5.35673e-06 5.30817e-06 3.02663 5.30819e-06 0.917515 1.0013
inverted_max_eigen_float

0.000401043 5.35673e-06 5.30817e-06 3.02663 5.30819e-06 0.917515 1.0013
[ INFO] [1508918795.309016166]: Loading target cloud.
I1025 16:06:35.309072 23637 common.hpp:135] Loading cloud: /home/user/catkin_ws4/src/segmatch/laser_mapper/demonstration_files/kitti/drive27_target_map.pcd.
[visualizer-2] process has finished cleanlyuration: 86.846634 / 137.842093
log file: /home/user/.ros/log/2bce1b92-b95b-11e7-bd94-88d7f69239dd/visualizer-2*.log
Failed to find match for field 'intensity'.uration: 87.259952 / 137.842093
I1025 16:06:55.101943 23637 euclidean_segmenter.cpp:28] Starting euclidean segmentation.
[player-4] killing on exit639760.433020 Duration: 92.440558 / 137.842093
[laser_mapper-3] killing on exit

Build failed on segmatch:make

Working on a fresh workspace (Lunar Loggerhead, though I did have a Kinetic workspace too first).

I'm pretty new to ROS and catkin builds so might have made some mistake but can't figure this out right now.
There was quite a lot of warnings, but these are the parts with actual errors (and the summary from end and catkin config output)):

Errors     << segmatch:make /home/graerth/new_ws/logs/segmatch/build.make.000.log                                         
In file included from /home/graerth/new_ws/devel/include/pointmatcher/PointMatcher.h:62:0,
                 from /home/graerth/new_ws/src/laser_slam/laser_slam/include/laser_slam/common.hpp:10,
                 from /home/graerth/new_ws/src/segmatch/segmatch/include/segmatch/common.hpp:12,
                 from /home/graerth/new_ws/src/segmatch/segmatch/include/segmatch/segmented_cloud.hpp:15,
                 from /home/graerth/new_ws/src/segmatch/segmatch/include/segmatch/descriptors/descriptors.hpp:9,
                 from /home/graerth/new_ws/src/segmatch/segmatch/src/descriptors/descriptors.cpp:1:
/home/graerth/new_ws/devel/include/pointmatcher/Parametrizable.h:46:0: warning: "BOOST_ASSIGN_MAX_PARAMS" redefined
 #define BOOST_ASSIGN_MAX_PARAMS 6
 ^
In file included from /home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:1:0:
/home/graerth/new_ws/src/segmatch/segmatch/include/segmatch/opencv_random_forest.hpp:47:3: error: ‘CvRTrees’ does not name a type
   CvRTrees rtrees_;
   ^
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp: In constructor ‘segmatch::OpenCvRandomForest::OpenCvRandomForest(const segmatch::ClassifierParams&)’:
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:24:3: error: ‘rtrees_’ was not declared in this scope
   rtrees_.load(params.classifier_filename.c_str());
   ^
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp: In member function ‘void segmatch::OpenCvRandomForest::resetParams(const segmatch::ClassifierParams&)’:
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:52:3: error: ‘rtrees_’ was not declared in this scope
   rtrees_.load(params.classifier_filename.c_str());
   ^
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp: In member function ‘segmatch::PairwiseMatches segmatch::OpenCvRandomForest::findCandidates(const segmatch::SegmentedCloud&, segmatch::PairwiseMatches*)’:
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:266:36: error: ‘rtrees_’ was not declared in this scope
           const float confidence = rtrees_.predict_prob(features);
                                    ^
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:315:34: error: ‘rtrees_’ was not declared in this scope
         const float confidence = rtrees_.predict_prob(features);
                                  ^
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp: In member function ‘void segmatch::OpenCvRandomForest::train(const MatrixXd&, const MatrixXd&)’:
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:350:65: warning: narrowing conversion of ‘((segmatch::OpenCvRandomForest*)this)->segmatch::OpenCvRandomForest::params_.segmatch::ClassifierParams::rf_priors.std::vector<_Tp, _Alloc>::operator[]<double, std::allocator<double> >(0ul)’ from ‘__gnu_cxx::__alloc_traits<std::allocator<double> >::value_type {aka double}’ to ‘float’ inside { } [-Wnarrowing]
   float priors[] = { params_.rf_priors[0], params_.rf_priors[1] };
                                                                 ^
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:350:65: warning: narrowing conversion of ‘((segmatch::OpenCvRandomForest*)this)->segmatch::OpenCvRandomForest::params_.segmatch::ClassifierParams::rf_priors.std::vector<_Tp, _Alloc>::operator[]<double, std::allocator<double> >(1ul)’ from ‘__gnu_cxx::__alloc_traits<std::allocator<double> >::value_type {aka double}’ to ‘float’ inside { } [-Wnarrowing]
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:353:3: error: ‘CvRTParams’ was not declared in this scope
   CvRTParams rtrees_params = CvRTParams(
   ^
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:361:3: error: ‘rtrees_’ was not declared in this scope
   rtrees_.train(opencv_features, CV_ROW_SAMPLE, opencv_labels, cv::Mat(),
   ^
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:361:34: error: ‘CV_ROW_SAMPLE’ was not declared in this scope
   rtrees_.train(opencv_features, CV_ROW_SAMPLE, opencv_labels, cv::Mat(),
                                  ^
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:362:50: error: ‘rtrees_params’ was not declared in this scope
                 cv::Mat(), cv::Mat(), cv::Mat(), rtrees_params);
                                                  ^
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp: In member function ‘void segmatch::OpenCvRandomForest::test(const MatrixXd&, const MatrixXd&, Eigen::MatrixXd*) const’:
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:403:28: error: ‘rtrees_’ was not declared in this scope
       double probability = rtrees_.predict_prob(opencv_sample);
                            ^
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp: In member function ‘void segmatch::OpenCvRandomForest::save(const string&) const’:
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:429:3: error: ‘rtrees_’ was not declared in this scope
   rtrees_.save(filename.c_str());
   ^
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp: In member function ‘void segmatch::OpenCvRandomForest::load(const string&)’:
/home/graerth/new_ws/src/segmatch/segmatch/src/opencv_random_forest.cpp:434:3: error: ‘rtrees_’ was not declared in this scope
   rtrees_.load(filename.c_str());
   ^
In file included from /home/graerth/new_ws/devel/include/pointmatcher/PointMatcher.h:62:0,
                 from /home/graerth/new_ws/src/laser_slam/laser_slam/include/laser_slam/common.hpp:10,
                 from /home/graerth/new_ws/src/segmatch/segmatch/include/segmatch/segmatch.hpp:8,
                 from /home/graerth/new_ws/src/segmatch/segmatch/src/segmatch.cpp:1:
/home/graerth/new_ws/devel/include/pointmatcher/Parametrizable.h:46:0: warning: "BOOST_ASSIGN_MAX_PARAMS" redefined
 #define BOOST_ASSIGN_MAX_PARAMS 6
 ^
In file included from /home/graerth/new_ws/devel/include/gtsam/nonlinear/NonlinearFactor.h:30:0,
                 from /home/graerth/new_ws/devel/include/gtsam/nonlinear/ExpressionFactor.h:23,
                 from /home/graerth/new_ws/src/laser_slam/laser_slam/include/laser_slam/common.hpp:7,
                 from /home/graerth/new_ws/src/segmatch/segmatch/include/segmatch/segmatch.hpp:8,
                 from /home/graerth/new_ws/src/segmatch/segmatch/src/segmatch.cpp:1:
/usr/include/boost/assign/list_of.hpp:378:0: note: this is the location of the previous definition
 #define BOOST_ASSIGN_MAX_PARAMS 5
 ^
In file included from /home/graerth/new_ws/src/segmatch/segmatch/include/segmatch/segmatch.hpp:16:0,
                 from /home/graerth/new_ws/src/segmatch/segmatch/src/segmatch.cpp:1:
/home/graerth/new_ws/src/segmatch/segmatch/include/segmatch/opencv_random_forest.hpp:47:3: error: ‘CvRTrees’ does not name a type
   CvRTrees rtrees_;
   ^
make[2]: *** [CMakeFiles/segmatch.dir/src/opencv_random_forest.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [CMakeFiles/segmatch.dir/src/segmatch.cpp.o] Error 1
make[1]: *** [CMakeFiles/segmatch.dir/all] Error 2
make: *** [all] Error 2
cd /home/graerth/new_ws/build/segmatch; catkin build --get-env segmatch | catkin env -si  /usr/bin/make --jobserver-fds=6,7 -j; cd -
..........................................................................................................................
Failed     << segmatch:make                        [ Exited with code 2 ]                                                 
Failed    <<< segmatch                             [ 2 minutes and 43.8 seconds ]                                         
Abandoned <<< segmatch_ros                         [ Unrelated job failed ]                                               
Abandoned <<< laser_mapper                         [ Unrelated job failed ]                                               
[build] Summary: 17 of 20 packages succeeded.                                                                             
[build]   Ignored:   10 packages were skipped or are blacklisted.                                                         
[build]   Warnings:  9 packages succeeded with warnings.                                                                  
[build]   Abandoned: 2 packages were abandoned.                                                                           
[build]   Failed:    1 packages failed.                                                                                   
[build] Runtime: 1 hour 21 minutes and 24.9 seconds total.                                                                
graerth@graerth-K30BF-M32BF-A-F-K31BF-6:~/new_ws$ catkin config
---------------------------------------------------------
Profile:                     default
Extending:          [cached] /opt/ros/lunar
Workspace:                   /home/graerth/new_ws
---------------------------------------------------------
Source Space:       [exists] /home/graerth/new_ws/src
Log Space:          [exists] /home/graerth/new_ws/logs
Build Space:        [exists] /home/graerth/new_ws/build
Devel Space:        [exists] /home/graerth/new_ws/devel
Install Space:      [unused] /home/graerth/new_ws/install
DESTDIR:            [unused] None
---------------------------------------------------------
Devel Space Layout:          linked
Install Space Layout:        None
---------------------------------------------------------
Additional CMake Args:       None
Additional Make Args:        None
Additional catkin Make Args: None
Internal Make Job Server:    True
Cache Job Environments:      False
---------------------------------------------------------
Whitelisted Packages:        None
Blacklisted Packages:        None
---------------------------------------------------------
Workspace configuration appears valid.
---------------------------------------------------------

Anyone got ideas what's the problem?

Error when parsing the random forest xml file

Following the instruction in the document, I typed the cmd "roslaunch laser_mapper kitti_localization.launch " after catkin build the project, the error below showing up. How can i fix this problem?

process[laser_mapper-3]: started with pid [7956]
[PAUSED ] Bag Time: 1317639667.992462 Duration: 0.000000 / 137.842093 [PAUSED ] Bag Time: 1317639667.992462 Duration: 0.000000 / 137.842093 WARNING: Logging before InitGoogleLogging() is written to STDERR
I1127 11:14:43.709179 7956 segmatch.cpp:18] Do not forget to initialize SegMatch.
[PAUSED ] Bag Time: 1317639667.992462 Duration: 0.000000 / 137.842093 I1127 11:14:43.792932 7956 laser_track.cpp:16] Loading ICP configurations from: /home/wfcola/catkin_ws/src/segmatch/laser_mapper/launch/kitti/icp_dynamic_outdoor.yaml
I1127 11:14:43.793896 7956 laser_track.cpp:26] Loading ICP input filters from: /home/wfcola/catkin_ws/src/segmatch/laser_mapper/launch/kitti/input_filters_outdoor.yaml
I1127 11:14:43.794366 7956 laser_track.cpp:48] Creating ICP noise model with cauchy.
I1127 11:14:43.794412 7956 incremental_estimator.cpp:31] Creating loop closure noise model with cauchy.
I1127 11:14:43.794433 7956 incremental_estimator.cpp:54] Loading ICP configurations from: /home/wfcola/catkin_ws/src/segmatch/laser_mapper/launch/kitti/icp_dynamic_outdoor.yaml
[PAUSED ] Bag Time: 1317639667.992462 Duration: 0.000000 / 137.842093 OpenCV Error: Parsing error (/home/wfcola/catkin_ws/src/segmatch/laser_mapper/demonstration_files/kitti/random_forest_eigen_25trees.xml(95678): Too long string or a last string w/o newline) in icvXMLSkipSpaces, file /home/wfcola/Downloads/opencv-2.4.13.4/modules/core/src/persistence.cpp, line 1838
terminate called after throwing an instance of 'cv::Exception'
what(): /home/wfcola/Downloads/opencv-2.4.13.4/modules/core/src/persistence.cpp:1838: error: (-212) /home/wfcola/catkin_ws/src/segmatch/laser_mapper/demonstration_files/kitti/random_forest_eigen_25trees.xml(95678): Too long string or a last string w/o newline in function icvXMLSkipSpaces

[PAUSED ] Bag Time: 1317639667.992462 Duration: 0.000000 / 137.842093 [PAUSED ] Bag Time: 1317639667.992462 Duration: 0.000000 / 137.842093 [laser_mapper-3] process has died [pid 7956, exit code -6, cmd /home/wfcola/catkin_ws/devel/lib/laser_mapper/laser_mapper_node __name:=laser_mapper __log:=/home/wfcola/.ros/log/ca83a174-d320-11e7-a349-00215cc3552d/laser_mapper-3.log].
log file: /home/wfcola/.ros/log/ca83a174-d320-11e7-a349-00215cc3552d/laser_mapper-3*.log

Performing ground segmentation

Hi,

I need to perform semantic segmentation on LiDAR point clouds. After looking at your demo, it seems you have successfully solved this problem. Could you perhaps point me to the code that performs the point cloud segmentation? Or, if by any chance you already have a LiDAR dataset where each point is labelled that would be awesome :)

Thanks in advance,
Lucas

kitti loop closure demo launch file not working

Hi all,

i am trying to execute the Kitti demo file as mentioned in the wiki page, but I am getting the following error.

--roslaunch laser_mapper kitti_loop_closure.launch
error -- [kitti_loop_closure.launch] is neither a launch file in package [laser_mapper] nor is [laser_mapper] a launch file name
The traceback for the exception was written to the log file

I have the launch files and bash setup accordingly, yet I am not able to execute.
Kindly help.

Thanks in advance.

Varun Umesh

Trajectory Correction for Localization

Hi,

I think implementing trajectory correction for localization would be a great feature to add to SegMatch.

Currently when running localization with a map generated on a previous run of SegMatch SLAM, SegMatch detects matches very robustly but does not correct its estimated SLAM trajectory. I think implementing this feature would make SegMatch a very robust SLAM system, especially for long term mapping.

I am planning on working on this over the next couple of weeks. My plans are to get the transformation correction from the filterMatches method in segmatch (https://github.com/ethz-asl/segmatch/blob/master/segmatch/src/segmatch.cpp#L487) and then update the factor graph. For the first correction, I am thinking to remove the prior factor and create a new prior at the corrected pose (I think I should be able to reuse some of the code from the estimateAndRemove method in incremental_estimator - https://github.com/ethz-asl/laser_slam/blob/41fdab0076d9282e4e9119c5023f9eef0e86464f/laser_slam/src/incremental_estimator.cpp#L170? but it does seem like a fair amount of work will still need to be done to do exactly what I need). For all future corrections, I am thinking to correct the latest pose by the correction.

Any thoughts / suggestions?

Thanks!

Almost impossible to get segment_matches

Hi, I run the loop_closure.launch with my data, so I can get a map.But when I run the localization, I find that it's almost impossible to get segment_matches. I find that predicted_matches is enough,but few of them can pass GeometricConsistencyGrouping,because the clustered_corrs size is 0. I think maybe the model of classifier is not appropriate for my data. The data is recorded in the campus.
1.What do you think is the main cause of this?
2.I find that there is a train function in opencv_random_forest.cpp,may I ask how do you use this function? Need special labeling tools to do this?
Thanks a lot!

Question regarding ground segmentation

Does the latest update involving implementing ground segmentation on point cloud XYZ data? If yes, would you please instruct which source file I can find the related feature?

Thanks a lot for sharing your work!

Issue of eigen descriptor code

In this code of eigen descriotor, order of eigen value is e1<e2<e3.

So, I think linearity should be calculated with (e3 - e2) / e3).

(e1 - e2) / e1) also have discriminative feature, but have wrong meaning.

is it right?

How many classifications does segmatch extract?

Hi, I find that in the random_forest_eigen_25trees.xml file it only has 2 classifications, but when I read the wiki(https://github.com/ethz-asl/segmatch/wiki) it seems has at least 4 classifications, such as tree,wall,trailer,car. I don't know why?
And I train a classifier with 5 classifications, and change the predict_prob() to predict() because I think predict_prob() only supports binary classifications, when I run the kitti_localization.launch and change random_forest_eigen_25trees.xml to my own .xml file, I still get the error "OpenCV Error: Bad argument (the input sample must be 1d floating-point vector with the same number of elements as the total number of variables used for training) in predict, file /home/nv/opencv-2.4.9/modules/ml/src/tree.cpp, line 3622
terminate called after throwing an instance of 'cv::Exception'
what(): /home/nv/opencv-2.4.9/modules/ml/src/tree.cpp:3622: error: (-5) the input sample must be 1d floating-point vector with the same number of elements as the total number of variables used for training in function predict"
How to use my own classification file with segmatch? Thanks a lot!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.