The Library
Help/Info
Current Release









Last Modified:
Jan 03, 2011

Release notes

Release 17.34

Release date: Jan 03, 2011
Major Changes in this Release:
New Stuff:
   - General Stuff 
      - Added the promote template
      - Added the basic_type template
      - Added the assign_image_scaled() function
      - Added the unordered_pair object.
      - Added the symmetric_matrix_cache() function
      - Added two new quadratic program solvers.  The solve_qp2_using_smo
        and solve_qp3_using_smo objects.

   - Machine Learning Stuff
      - Added the svm_c_trainer object.  It implements C-SVM classification and
        allows the user to set different C values for each class.
      - Added the svm_one_class_trainer object. 
      - Added the svr_trainer object.  It implements epsilon-insensitive
        support vector regression.
      - Added two new any objects.  The any_decision_function for containing 
        decision function style objects and the any_trainer for trainers.
      - Added cross_validate_regression_trainer()
      - Added test_regression_function()
      - Added the probabilistic() function.  It is a trainer adapter that
        simply calls train_probabilistic_decision_function().
      - Added tools for multiclass classification 
         - Added one_vs_one_trainer
         - Added one_vs_all_trainer
         - Added cross_validate_multiclass_trainer()
         - Added test_multiclass_decision_function()
 
Non-Backwards Compatible Changes:
  - invalid_svm_nu_error has been renamed to invalid_nu_error.
  - Changed the pixel_traits so that signed grayscale pixel types are allowed.  
    This involved adding a few new fields to pixel_traits.  I also changed the 
    get_pixel_intensity() function so that its return value is of the same type 
    as the basic pixel type rather than always being unsigned long.
  - Removed the kernel_type typedef from the normalized function since this
    meta-object should be capable of working with non-kernel decision functions.
  - train_probabilistic_decision_function() no longer accepts column vectors of 
    samples and labels.  Now it only accepts std::vectors of samples and labels.  

Bug fixes:
  - Fixed a bug in the deserialization code for the sparse kernels.  The bug
    prevented code which used the deserialize() routine from compiling.

Other:
  - Changed the image display GUI widgets to use the assign_image_scaled() 
    function internally.  Now they will accept just about any image and 
    do the right thing.
  - Modified the type_safe_union so that you can call apply_to_contents() on const
    type_safe_unions.
  - Added serialization support for std::pair objects.
  - Made the train_probabilistic_decision_function() more general by making it work 
    with any kind of trainer object rather than only ones which produce 
    dlib::decision_function objects.  I also made it work with trainers that only 
    take std::vectors.
  - Added overloads to the config_reader's methods to allow it to load directly 
    from a file name given as a string in addition to taking istream objects.

Release 17.33

Release date: Dec 05, 2010
Major Changes in this Release:
New Stuff:
  - Added the ability to add/subtract scalar values to/from all the elements 
    of a matrix using the - and + operators.
  - Added a trust region optimizer. 
  - Added Levenberg-Marquardt and LM/quasi-newton hybrid methods for solving
    non-linear least squares problems.
  - Added an any container object.

Non-Backwards Compatible Changes:

Bug fixes:
  - Fixed a compiler warning and also a runtime bug in sort_basis_vectors().  
    The bug triggered when all the basis vectors were included in the final
    answer.

Other:
  - Added a bunch of overloads to catch operations on diagonal matrices
    and use more efficient code paths for them.  For example, inv(diagm(d))
    turns into diagm(reciprocal(d)).  Multiplication by a diagonal matrix
    is now also handled efficiently.


Release 17.32

Release date: Nov 13, 2010
Major Changes in this Release:
New Stuff:
  - Added a class for reading JPEG image files.
  - Added scale_rows(), flipud() and fliplr() matrix functions.
  - Added console_progress_indicator.  It is a tool for measuring how long a 
    task will take.
  - Added sort_basis_vectors().  It is a function for performing supervised 
    basis selection.

Non-Backwards Compatible Changes:
   - Renamed the linearly_independent_subset_finder's dictionary_size() member 
     function to size().  This way, linearly_independent_subset_finder objects 
     can be used in many templated functions which expect objects which look 
     like arrays. 

Bug fixes:
  - Changed the assert macros so that they don't use __PRETTY_FUNCTION__
    with gcc 4.4.5 since, on Ubuntu at least, this version of gcc segfaults
    when __PRETTY_FUNCTION__ is used within certain template constructs.
  - Improved the alias detection capability of kernel_matrix() expressions.  
    Now statements of the form: sample = kernel_matrix(kern, *, sample) can 
    be used since the aliasing of sample will be handled.

Other:
  - Generally tried to make things more usable.
  - Optimized matrix expressions such as mat*diagm(vect)
  - Made the code in chol() more robust to indefinite matrices.


Release 17.31

Release date: Sep 15, 2010
Major Changes in this Release:
New Stuff:
   - Added the running_scalar_covariance object.
   - All the matrix decomposition routines now use LAPACK when DLIB_USE_LAPACK
     is #defined.   

Non-Backwards Compatible Changes:
   - Removed the dlib::EOTHER constant since it conflicts with visual
     studio 2010.
   - Changed the svd functions so you can't supply output matrices which use 
     both column and row major layouts.  Now all the output matrices need to 
     use the same memory layout.
   - Removed the qr_decomposition::get_householder() function.

Bug fixes:
   - Minor fixes so that dlib compiles in Visual Studio 2010

Other:
   - Added an overloaded matrix_assign() that handles symmetric kernel_matrix()
     expressions more efficiently by only evaluating the upper triangular part
     of the matrix.


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."





Old Release Notes