The Library
Help/Info
Current Release
Sourceforge









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


Last Modified:
Mar 07, 2010

Release notes

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.


Release 17.20

Release date: Jul 11, 2009
Major Changes in this Release:
New Stuff:
   - Added the reshape_to_column_vector() function.
   - Added a hook to the logger object that lets you set a different kind of
     output logging destination (in addition to the std::ostream supported 
     already).
   - Upgraded the scoped_ptr so that it can handle array pointers as well
     as customer deleter functions.
   - Added overloads of the kernel_derivative object for all the kernels 
     in dlib.

Non-Backwards Compatible Changes:
   - Reworked the config_reader interface a little to make it easier to use.  
     In particular, I removed the enumerator over blocks in favor of a simple 
     get_blocks() function that just returns a std::vector of all the blocks.  
     I also removed the requires clauses on the block and key accessor functions 
     and instead made a request for a non-existent key/block result in a non-fatal 
     exception.  This way users can let the config reader perform a more natural 
     role in config file validation (by catching this exception and acting 
     accordingly).
   - It is now illegal to multiply matrices of size zero together. 

Bug fixes:
   - Fixed the gaussian() function used by the SURF code.  It wasn't computing 
     a properly weighted Gaussian function.
   - Fixed a few things in various parts of the code to avoid compiler errors 
     in certain use-cases.
   - Added a missing rethrow statement.  The xml parser would eat exceptions 
     thrown by event handlers rather than letting them propagate out as 
     documented in the specification.

Other:


Release 17.19

Release date: May 25, 2009
Major Changes in this Release:
New Stuff:
    - Added an implementation of the SURF algorithm which includes the
      following new objects and functions:  integral_image, hessian_pyramid, 
      interest_point, surf_point, compute_dominant_angle(), 
      compute_surf_descriptor(), haar_x(), haar_y(), get_interest_points(), 
      and get_surf_points().
    - Added the zeros_matrix() and ones_matrix() functions.
    - Added serialization support to the type_safe_union object.
    - Added the grow_rect() and shrink_rect() functions.
    - Added the get_files_in_directory_tree() function.
    - Added the null_trainer_type object.
    - Added the roc_trainer_type object.

Non-Backwards Compatible Changes:
    - Removed some extraneous get_kernel() functions from some of the 
      trainer adapter classes since they really aren't needed.  

Bug fixes:
    - Changed the socket read/write code so that it can handle a large 
      number ( > 2 billion) of bytes in I/O calls.
    - Added a missing type cast to the reciprocal() function to fix a compile
      time error you get when you use it with complex<float> type matrices.
    - Fixed a bug in the assign_border_pixels() and zero_border_pixels() functions.  
      Their contracts said there was no upper limit on the size of the border that 
      could be assigned/zeroed but the implementations failed to handle the case 
      where the border was bigger than the image.

Other:
    - Generally cleaned up the code and documentation here and there.
    - Added in Steven Van Ingelgem's patches to improve the usability of the
      HTTP server object.
    - Updated the load_bmp() function so that it is capable of reading BMP
      files that have been compressed with the RLE compression sometimes
      used for 8bit BMP files.
    - Merged in Miguel Grinberg's patch to add a non-blocking read() function to the
      connection object.

Release 17.18

Release date: Apr 5, 2009
Major Changes in this Release:
New Stuff:
   - Added a set of kernels that can operate on sparse vectors.
   - Added the image_window and image_display objects.
   - Added the rotate_point() function and the point_rotator object.

Non-Backwards Compatible Changes:
   - Added Steven Van Ingelgem's patch to add the body of data posted 
     back to the server into the incoming data object given to the 
     server_http::on_request() handler.  This removes the content_length 
     field and replaces it with a string that contains the body of content
     data.

Bug fixes:
   - Fixed a compile time bug in the offset_kernel.

Other:
   - Added optimized overloads of the kcentroid object for various 
     linear kernels.
   - Changed all the tests in the dlib test suite to use a new DLIB_TEST 
     macro instead of DLIB_CASSERT since the tests really aren't 
     technically assertions


Release 17.17

Release date: Mar 16, 2009
Major Changes in this Release:
New Stuff:
   - Added the strings_equal_ignore_case() functions

Non-Backwards Compatible Changes:
   - Changed the on_request() function in the http server
   - Changed the serialization format of the kcentroid and svm_pegasos
     objects
   - By default, the kcentroid now keeps the most linearly independent 
     dictionary vectors rather than the newest

Bug fixes:

Other:
   - Split the algorithms documentation page into three pages, algorithms,
     machine learning, and bayes nets.
   - Merged in Steven Van Ingelgem's patch to cleanup the HTTP server and
     add new functionality.  This breaks backwards compatibility with the
     previous on_request() interface but it is easy to update old code and
     it is now much cleaner and easier to use.
   - Changed the kcentroid so that you can tell it to keep the most linearly 
     independent vectors rather than the newest vectors.  I then changed the
     svm_pegasos object so that it has a max number of support vector setting
     so that the user can supply an upper limit on the number of support 
     vectors to use.  




Old Release Notes