The Library
Help/Info
Current Release
Sourceforge









Get dlib C++ Library at SourceForge.net. Fast, secure and Free Open Source software downloads


Last Modified:
Jul 28, 2010

Release notes

Release 17.30

Release date: Jul 28, 2010
Major Changes in this Release:
New Stuff:

Non-Backwards Compatible Changes:

Bug fixes:
   - Fixed a compile-time bug in the matrix related to multiplication by 
     subm() expressions when the BLAS bindings were enabled.
   - Fixed a bug in train_probabilistic_decision_function() which could 
     cause it to go into an infinite loop when working with very large 
     datasets.

Other:


Release 17.29

Release date: Jul 25, 2010
Major Changes in this Release:
New Stuff:
  - Added a reference_wrapper implementation and modified the thread_function 
    slightly so it works with it.
  - Added an implementation of kernel ridge regression.
  - Added a simple newton search strategy for optimizing functions.

Non-Backwards Compatible Changes:
  - If you have created your own matrix expressions then its possible this
    new release will cause them to not compile.  

Bug fixes:
  - Fixed a bug in scale_columns.  It said it didn't have any destructive aliasing 
    when in fact it destructively aliased its second argument.
  - Fixed a bug in the random number generator where setting the seed back to ""
    didn't result in the object going back to it's initial state.

Other:
  - Reorganized the matrix expression code.  It's now much simpler and the
    library includes a new example program which details the steps needed to
    create new matrix expressions.
  - Changed the train_probabilistic_decision_function() routine so that it uses
    a more numerically stable method to perform its maximum likelihood optimization.
  - Added missing get/set epsilon functions to the RVM training objects.
    I also changed the default epsilon from 0.0005 to 0.001.

Release 17.28

Release date: Jun 14, 2010
Major Changes in this Release:
New Stuff:
   - Added the simplify_linear_decision_function() routines.
   - Added the find_approximate_k_nearest_neighbors() function.
   - Added the fill_lisf() function.

Non-Backwards Compatible Changes:
   - Made the sample_pair have a default distance of infinity instead of
     the max floating point value.  I also reworked the graph creation functions 
     to make them a little more versatile.  Now you can use infinite distances to 
     indicate that certain nodes are not connected at all.
   - Changed the linear_manifold_regularizer to normalize the regularization
     parameter by the sum of edge weights instead of the sum of edges.

Bug fixes:
   - Fixed a bug in the timer_kernel_2 object.  In certain rare cases it would 
     stop calling the action function and essentially shut down without being 
     told to do so.

Other:
   - Made the reduced() and reduced2() functions more efficient.
   - Many small usability improvements here and there.


Release 17.27

Release date: May 16, 2010
Major Changes in this Release:
New Stuff:
   - Added the svm_c_ekm_trainer.  It is a kernelized version of the fast
     linear trainer svm_c_linear_trainer.
   - Added the linear_manifold_regularizer and some supporting tools.
   - Added the sum_rows(), sum_cols(), join_rows(), join_cols(), reshape(), 
     and pointer_to_matrix() functions.
   - Added the randomly_subsample() function.

Non-Backwards Compatible Changes:

Bug fixes:
   - Fixed some minor compile time bugs on certain older compilers.

Other:
   - Updated the += and -= matrix operators to be a little more flexible.  Now
     if you try to apply them to a matrix of the wrong size it will automatically
     resize the target matrix and just do a normal assignment.
   - Removed the requirement that you load dng files into an image of the exact
     pixel type that created the file.  Now you can use any pixel type.  I also
     changed the code so that grayscale pixels with more than 16 bits get saved as
     16 bit grayscale images instead of 8 bit images.


Release 17.26

Release date: Mar 07, 2010
Major Changes in this Release:
New Stuff:
   - Added the solve_qp_using_smo() function to solve certain quadratic
     programs.
   - Added the oca object.  It is an implementation of the Optimized Cutting 
     Plane Algorithm.
   - Added a linear SVM trainer that uses oca.
   - Added an implementation of the Histogram of Oriented Gradients algorithm
   - Added a simple tool for making image pyramids
   - Added the running_covariance object 
   - Added a simple linear (i.e. non-kernelized) kmeans implementation
   - Added support for serializing dlib::int64
   - Added some functions to load and save LIBSVM formatted data files.

Non-Backwards Compatible Changes:
   - Changed the definition of dlib's sparse vector format to require
     unsigned integral keys.  Having this requirement is nice because it 
     creates a simple correspondence between dense vector index values and 
     sparse vector keys.  The previous sparse vector definition was  
     excessively generic.
   - Renamed sparse_vector::dot_product() to sparse_vector::dot() so that 
     both dense and sparse vectors have a global function with the same 
     name (i.e. dot()).

Bug fixes:
   - Fixed a bug discovered by Mitchell Peabody.  In some instances trying to
     deserialize a std::vector would fail to compile.  

Other:
   - Increased the number of template arguments of the type_safe_union from 10 
     to 20.  Additionally, I made the get_id() function public and renamed it 
     to get_type_id().  I also added a comment explaining the serialization 
     format of type_safe_union objects.
   - Moved the optimization algorithms into their own page in the documentation.
   - Added a Suggested Books page to the documentation


Release 17.25

Release date: Feb 05, 2010
Major Changes in this Release:
New Stuff:
   - Added the ability to compute transformation matrices that map between
     the representations used by different empirical_kernel_maps.  Also added
     the ability to compute projection error.
   - Added the random_subset_selector object.
   - Added the compute_mean_squared_distance() function.

Non-Backwards Compatible Changes:
   - Modified the logger's hook implementation so that it uses a special stream  
     buffer instead of an std::ostringstream.  This way logging doesn't cause 
     memory allocations.  This breaks backwards compatibility with the previous
     hook function API but only slightly.  The new hook functions must take a
     const char* instead of std::string.
   - Added the const_ret_type typedef to the matrix_exp.  It is now required that 
     all matrix expressions define this type.  This enables the expressions to 
     return elements by constant reference when appropriate rather than always 
     returning by value.  

Bug fixes:
   - Fixed a bug in the matrix BLAS bindings that caused BLAS to return an invalid
     argument error.  The error occurred when general matrix multiply expressions
     were transposed and didn't result in a square matrix.  E.g. mat = trans(a*b)
     where mat isn't square.
   - Fixed potential compile time bugs in the comparison operators for futures.
   - Added a missing check for division by zero in the SURF feature extractor.
   - Modified the find_min_single_variable() function so that it is more 
     robust when working with functions that are made up of a bunch of
     constant value strips.  Previously, these kinds of functions could
     cause the optimization to fail.

Other:
   - Changed the regression test suite so that when it sets the logging level 
     it now sets it for all loggers.  Not just ones that start with "test."



Release 17.24

Release date: Jan 04, 2010
Major Changes in this Release:
New Stuff:
   - Added some MATLAB style thresholding relational operators to the matrix.
   - Added the kernel_matrix() functions.
   - Added the empirical_kernel_map object.
   - Added the discriminant_pca object.
   - Added the read_write_mutex object.

Non-Backwards Compatible Changes:
   - Renamed the support_vectors member of the decision_function and
     distance_function classes to basis_vectors.  This name more appropriately 
     reflects how these two classes are used within the library.
   - Changed the matrix_exp interface slightly.  This could only impact users
     who created their own custom matrix expressions.  If you don't get a 
     compiler error then you don't have to worry about it.

Bug fixes:
   - Fixed a minor error in the LBFGS code.
   - Added a missing check for division by zero to the kcentroid, krls,  
     and linearly_independent_subset_finder classes.  If someone added
     the zero vector to them as the first training example a division by zero 
     could result.
   - There were a few cases where the code wouldn't compile when using
     matrices of complex numbers.  There was also a runtime bug that triggered 
     when a rank 1 update was performed where one of the vectors was conjugated
     and two or more transposes were used in certain positions.  This bug
     caused the wrong output to be computed if the BLAS bindings were used.  
     Both of these bugs have been fixed.
   - Fixed a bug in the http server that affected cookies with certain kinds of 
     data.  The result was invalid data being sent back to the web browser.

Other:
   - Generally improved the BLAS bindings for the matrix object.


Release 17.23

Release date: Oct 20, 2009
Major Changes in this Release:
New Stuff:
   - Added the pointer_to_column_vector function.
   - Added the BOBYQA algorithm for derivative-free optimization.
   - Added some functions to make it easy to do a line search on a function
     of a single variable when derivatives are not available.

Non-Backwards Compatible Changes:

Bug fixes:
   - Fixed a bug in the cpp pretty printer.  It wasn't parsing 
     exponentiated numbers like 1e100 correctly.

Other:
   - Added a model selection example program using grid search
     and the new BOBYQA algorithm.


Release 17.22

Release date: Sep 10, 2009
Major Changes in this Release:
New Stuff:
   - Added an implementation of the L-BFGS algorithm for unconstrained non-linear
     optimization. 

Non-Backwards Compatible Changes:
   - Refactored the optimization code.  It is now much more flexible but
     this resulted in changes to the API.  See the optimization example program 
     for a discussion of the new API.

Bug fixes:
   - Fixed a bug in the get_filesystem_roots() roots function that
     prevented it from compiling.

Other:


Release 17.21

Release date: Aug 30, 2009
Major Changes in this Release:
New Stuff:
   - Added the ability to use a kernel cache to the batch_trainer object.  
   - svm_pegasos can now be configured to use two different lambda arguments
     for use with unbalanced data.
   - Added the reciprocal_max() and dot() matrix functions.
   - Added the bgr_pixel and cv_image objects so that OpenCV images can
     be easily used with dlib routines.

Non-Backwards Compatible Changes:
   - I changed the batch trainers so that they always call clear() on the 
     trainer being used before training begins.  
   - Modified the svm_pegasos class so that the user can set independent lambda
     parameters for each class.  This breaks backwards compatibility with 
     the previous interface slightly and changes the serialization format
     of this class.
   - Split the vector_normalizer into a normal normalizer and a pca normalizer
     version. 
   - The zoomable_region widget now uses exponential rather than linear 
     zoom scaling since this is much more pleasing to use.  There is now 
     a new requirement on the zoom increment that it must be between 0 
     and 1.

Bug fixes:
   - Fixed a bug in the cross_validate_trainer_threaded() function.  It could 
     deadlock if more than about 10 folds were requested.
   - Fixed the serialization functions for the normalized_function object.  
     They will now work with custom normalizer function objects.
   - Fixed a minor bug in the zoomable_region::set_min_zoom_scale() function.
     It didn't always end up zooming in a smooth sensible manner after this
     function was called.

Other:
   - Made the thread_function object more general.   It can now handle
     arbitrary functions of up to four arguments.




Old Release Notes