Difference between revisions of "Validation:Algorithms"

From BoofCV
Jump to navigationJump to search
(Created page)
 
m
 
(14 intermediate revisions by the same user not shown)
Line 1: Line 1:
= Algorithm Validation =
= Validation and Regression =


Correctly implementing algorithms and producing the expected performance can be non-trivial. Academic papers more of then than not leave out important implementation details which are needed for reproducing their results. BoofCV contains over a thousand internal tests to help ensure correctness of its algorithms, but testing against external sources is often required to catch more subtle bugs.  This page contains a list of important algorithms inside of BoofCV and if they have been validated against external libraries or not.  Just because some code has not been validated does not mean it is incorrect.
Correctly implementing algorithms and producing the expected performance is difficult. BoofCV contains thousands internal tests to help ensure correctness of its algorithms, but it is nearly impossible to be 100% sure that the implementation is correct.  This is especially true since often academic papers leave out important implementations needed to reproduce their work!.  In the best case scenario an implementation will be compared against the author's original implementation.  This page contains a list of important algorithms inside of BoofCV and if they have been validated against external libraries or not.
 
Source code used to validate BoofCV can be found at the [https://github.com/lessthanoptimal/ValidationBoof| ValidationBoof project on GitHub].  ValidationBoof also contains regression tests designed to check for changes in stability/performance of different algorithms.  It is entirely possible for all the unit tests to pass and have a 20% drop in performance due to a minor changeRegression tests are designed to catch those problems.
 
{| class="wikitable" border="1"
! Status !! Meaning
|-
| Validated || As good or better than original code or test data
|-
| Needs Work || Producing results which are not as good as expected
|-
| NA || Significantly different from original.  See comments in code
|-
|    || Blank means that it has not been externally validated
|}


= Region Descriptors =
= Region Descriptors =


{| class="wikitable" border="1"
{| class="wikitable" border="1"
! scope="col" width="75" | Algorithm  
! scope="col" width="75" | Algorithm  
! scope="col" width="50" | Status !! Comments
! scope="col" width="50" | Status  
! scope="col" width="600" | Comments
|-
|-
| SURF || Validated || Original authors reference binary and others.  http://boofcv.org/index.php?title=Performance:SURF
| SURF || Validated || Original authors reference binary and others.  http://boofcv.org/index.php?title=Performance:SURF
|-
| SIFT || Validated || Scale-space is computed significantly different from original.  Out performs reference binary, possibly due to more tuning options.
|-
|-
| KLT || ||  
| KLT || ||  
|-
|-
| BRIEF || ||
| BRIEF || ||
|-
| Oriented Gaussian Descriptor || || Not validated and known to not replicate the original paper
|}
|}


Line 21: Line 36:


{| class="wikitable" border="1"
{| class="wikitable" border="1"
! scope="col" width="75" | Algorithm  
! scope="col" width="75" | Algorithm  
! scope="col" width="50" | Status !! Comments
! scope="col" width="50" | Status  
! scope="col" width="600" | Comments
|-
|-
| Fast Hessian || Validated || Original authors reference binary and others.  http://boofcv.org/index.php?title=Performance:SURF
| Fast Hessian || Validated || Original authors reference binary and others.  http://boofcv.org/index.php?title=Performance:SURF
|-
| FAST || Validated || Original author's source code. [https://github.com/lessthanoptimal/ValidationBoof/tree/master/fast Validation Code]
|-
|-
| Harris Corner || ||
| Harris Corner || ||
|-
|-
| KLT Corner || ||
| KLT Corner || ||
|-
| Hough Line || ||
|}
|}


Line 34: Line 54:


{| class="wikitable" border="1"
{| class="wikitable" border="1"
! scope="col" width="75" | Algorithm  
! scope="col" width="75" | Algorithm  
! scope="col" width="50" | Status !! Comments
! scope="col" width="50" | Status  
! scope="col" width="600" | Comments
|-
| Zhang99 || Validated || More accurate than parameters found in paper.  Given same points it produces same results as OpenCV.  More accurate calibration point detector then OpenCV.
|-
| EPnP || || Pending verification against author's code
|-
| 8+ pt Fundamental || ||
|-
| 8+ pt Essential || ||
|-
|-
| Zhang98 || || Compared against calibration numbers listed at author's website
| 7 pt Fundamental || ||
|-
|-
| Linear F || ||
| 7 pt Essential || ||
|-
| 5 pt Essential Nister || || Pending validation against author's Matlab code
|-
|-
| Linear H || ||
| Linear H || ||
|-
| Linear Trifocal 7 || Validated || [http://www.csse.uwa.edu.au/~wongt/matlab.html Compared to matlab code found online that was based off the same source.] [https://github.com/lessthanoptimal/ValidationBoof/tree/master/fast Validation Code]
|}
== Object Tracking ==
{| class="wikitable" border="1"
! scope="col" width="75"  | Algorithm
! scope="col" width="50"  | Status
! scope="col" width="600" | Comments
|-
| TLD || Validated || Comparable to slightly less stable than original. TLD is less stable than it at first appears, making scoring difficult. 
|-
| Circulant || Validated || Improved over original.  Much faster and slightly more stable.
|-
| MeanShiftComaniciu2003 || ||
|}
== Dense Optical Flow ==
{| class="wikitable" border="1"
! scope="col" width="75"  | Algorithm
! scope="col" width="50"  | Status
! scope="col" width="600" | Comments
|-
| Brox Warping ||  ||
|-
| HornSchunck ||  ||
|-
| HornSchunck Pyramid ||  ||
|-
| KLT ||  || Common technique.
|-
| Block ||  || Nothing to validate against.  Not based off any specific paper.
|}
== Image Segmentation ==
{| class="wikitable" border="1"
! scope="col" width="75"  | Algorithm
! scope="col" width="50"  | Status
! scope="col" width="600" | Comments
|-
| FelzenHutten04 ||  ||
|-
| Mean-Shift ||  ||
|-
| SLIC ||  ||
|-
| Watershed ||  ||
|}
|}


== Image Processing ==
== Image Processing ==


{| class="wikitable" border="1"
{| class="wikitable" border="1"
! scope="col" width="75" | Algorithm  
! scope="col" width="75" | Algorithm  
! scope="col" width="50" | Status !! Comments
! scope="col" width="50" | Status  
! scope="col" width="600" | Comments
|-
|-
| Convolution || ||
| Convolution || ||
Line 56: Line 136:


{| class="wikitable" border="1"
{| class="wikitable" border="1"
! scope="col" width="75" | Algorithm  
! scope="col" width="75" | Algorithm  
! scope="col" width="50" | Status !! Comments
! scope="col" width="50" | Status  
! scope="col" width="600" | Comments
|-
|-
| Nearest Neighbour || ||
| Nearest Neighbour || ||
Line 67: Line 148:


{| class="wikitable" border="1"
{| class="wikitable" border="1"
! scope="col" width="75 | Algorithm  
! scope="col" width="75| Algorithm  
! scope="col" width="50" | Status !! Comments
! scope="col" width="50" | Status  
! scope="col" width="600" | Comments
|-
|-
| Wavelet || ||
| Wavelet || ||
|}
|}

Latest revision as of 11:07, 11 June 2014

Validation and Regression

Correctly implementing algorithms and producing the expected performance is difficult. BoofCV contains thousands internal tests to help ensure correctness of its algorithms, but it is nearly impossible to be 100% sure that the implementation is correct. This is especially true since often academic papers leave out important implementations needed to reproduce their work!. In the best case scenario an implementation will be compared against the author's original implementation. This page contains a list of important algorithms inside of BoofCV and if they have been validated against external libraries or not.

Source code used to validate BoofCV can be found at the ValidationBoof project on GitHub. ValidationBoof also contains regression tests designed to check for changes in stability/performance of different algorithms. It is entirely possible for all the unit tests to pass and have a 20% drop in performance due to a minor change. Regression tests are designed to catch those problems.

Status Meaning
Validated As good or better than original code or test data
Needs Work Producing results which are not as good as expected
NA Significantly different from original. See comments in code
Blank means that it has not been externally validated

Region Descriptors

Algorithm Status Comments
SURF Validated Original authors reference binary and others. http://boofcv.org/index.php?title=Performance:SURF
SIFT Validated Scale-space is computed significantly different from original. Out performs reference binary, possibly due to more tuning options.
KLT
BRIEF

Feature Detectors

Algorithm Status Comments
Fast Hessian Validated Original authors reference binary and others. http://boofcv.org/index.php?title=Performance:SURF
FAST Validated Original author's source code. Validation Code
Harris Corner
KLT Corner
Hough Line

3D Vision

Algorithm Status Comments
Zhang99 Validated More accurate than parameters found in paper. Given same points it produces same results as OpenCV. More accurate calibration point detector then OpenCV.
EPnP Pending verification against author's code
8+ pt Fundamental
8+ pt Essential
7 pt Fundamental
7 pt Essential
5 pt Essential Nister Pending validation against author's Matlab code
Linear H
Linear Trifocal 7 Validated Compared to matlab code found online that was based off the same source. Validation Code

Object Tracking

Algorithm Status Comments
TLD Validated Comparable to slightly less stable than original. TLD is less stable than it at first appears, making scoring difficult.
Circulant Validated Improved over original. Much faster and slightly more stable.
MeanShiftComaniciu2003

Dense Optical Flow

Algorithm Status Comments
Brox Warping
HornSchunck
HornSchunck Pyramid
KLT Common technique.
Block Nothing to validate against. Not based off any specific paper.

Image Segmentation

Algorithm Status Comments
FelzenHutten04
Mean-Shift
SLIC
Watershed


Image Processing

Algorithm Status Comments
Convolution

Interpolation

Algorithm Status Comments
Nearest Neighbour
Bilinear

Image Transformation

Algorithm Status Comments
Wavelet