The Library
Help/Info
Current Release
Sourceforge









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


Last Modified:
Jan 29, 2012

Release notes

Release 17.45

Release date: Jan 29, 2012
Major Changes in this Release:
New Stuff:
   - Added tools for timing blocks of code
   - Machine Learning
      - Added a set of tools for learning to solve the assignment problem.
        See the structural_assignment_trainer and its associated example
        program for an introduction.
      - Added random projection based locality sensitive hashing tools.
      - Added tools to simplify the creation of scan_image_pyramid objects.  
        See the object_detector_ex.cpp example program for details.
   - Image Processing
      - Added sum_filter() and spatially_filter_image_separable_down()
      - New feature extractors: poly_image, nearest_neighbor_feature_image, and
        fine_hog_image
 
Non-Backwards Compatible Changes:
   - Changed the serialization format for rand objects.
   - Changed the order of arguments for the sequence_labeler's constructor.
   - Object Detection Changes
      - Some parts of the object detection tools have been refactored.  In particular, 
        the interfaces of the scan_image_pyramid and structural_object_detection_trainer 
        have been changed slightly to improve usability.
      - Made the test_box_overlap a little more flexible.  This change breaks
        backwards compatibility with the previous version though.
      - The hashed_feature_image object has been made more general.  It now 
        uses a user supplied hashing function rather than its own hashing 
        implementation.
      - Removed constness from the operator() member functions of the 
        object_detector.
   - Fixed improper normalization in the gaussian() functions.  The
     normalization constant was being computed incorrectly.
   - Sequence labeling feature extractors must now define a sequence_type
     typedef instead of sample_type.  This change allows the user to use any 
     type of sequence, not just std::vector objects.

Bug fixes:
   - Changed the add_probability() method of joint_probability_table so
     it does a saturating add rather than a normal add.  This ensures the
     probability value stays exactly <= 1.  Previously, floating point
     rounding error could cause it to be slightly above 1 and would therefore
     cause some asserts to misfire during debugging mode.
   - The object_detector had code in it which limited the number of outputs
     to 100 rectangles.  This has been removed.
   - Fixed improper normalization in the gaussian() functions.  The
     normalization constant was being computed incorrectly.

Other:
   - dlib::rand can now generate Gaussian random numbers.
   - The structural_object_detection_trainer will now automatically setup
     appropriate non-max suppression parameters if the user doesn't supply them. 
   - The structural_object_detection_trainer has been optimized and now runs
     significantly faster than in previous dlib releases.
   - The tools folder containing htmlify, imglab, and mltool is now included
     in the dlib release archive files.  Previously, these tools were only 
     available directly from source control.


Release 17.44

Release date: Nov 21, 2011
Major Changes in this Release:
New Stuff:
   - Machine Learning
      - Added the histogram intersection kernel for sparse and dense vectors.
      - Added a set of tools to allow a user to easily learn to do sequence
        labeling using dlib's structural SVM implementation.  See the new
        sequence_labeler object and its associated example program for an 
        introduction.
   - Image processing:  
      - Added segment_image()
      - Added randomly_color_image()
      - Added the border_enumerator
   - Added the disjoint_subsets object, it is an implementation of the 
     union-find algorithm/disjoint-set data structure.
   - Added new matrix routines: conv(), conv_same(), conv_valid(), xcorr(),
     xcorr_same(), xcorr_valid(), and flip().
 
Non-Backwards Compatible Changes:
   - Changed find_max_factor_graph_viterbi() so you can use run-time
     defined order and num_states parameters.

Bug fixes:
   - The last dlib release added a max_iterations parameter to the
     svm_c_linear_trainer and svm_c_ekm_trainer objects.  However,
     there was a bug which made them only do at most 16 iterations,
     which is too few to solve many problems.  This has been fixed.
   - Fixed a bug in is_const_type.  It didn't work for reference types.
   - Fixed a bug in the SQLite binding routine statement::get_column_as_text().  
     It didn't work correctly if the column contained a NULL.
   - Fixed a bug in find_max_factor_graph_viterbi() which occurred when a
     zero order model had negative factor values.

Other:


Release 17.43

Release date: Oct 21, 2011
Major Changes in this Release:
New Stuff:
   - Two new routines for performing MAP inference in factor graphs:
      - For chain-structured graphs: find_max_factor_graph_viterbi()
      - For general graphs:          find_max_factor_graph_nmplp()
   - Image Processing
      - Added more tools for creating image pyramids.  See pyramid_down_5_4, 
        pyramid_down_4_3, and pyramid_down_3_2.
      - Added more image filtering and morphology functions.
      - Added a set of tools for creating sliding window classifiers:
         - Added the scan_image() routine.  It is a tool for sliding a set of 
           rectangles over an image space and finding the locations where the sum 
           of pixels in the rectangles exceeds a threshold.  Also added
           scan_image_pyramid, which is a tool for running scan_image() over an 
           image pyramid.
         - Added the structural_object_detection_trainer.  This is a tool which 
           formulates the sliding window classifier learning problem as an
           instance of structural SVM learning.
         - Added a variety of supporting tools and two object detection example 
           programs.
   - Added the following functions for computing statistics on vectors:
     mean_sign_agreement(), correlation(), covariance(), r_squared(),
     and mean_squared_error()
   - Added a C++ wrapper for SQLite (see the new database and statement objects)
 
Non-Backwards Compatible Changes:
   - Changed the interface to the ridge regression trainer objects so that they 
     report the entire set of leave-one-out prediction values rather than a 
     summary statistic like mean squared error.
   - Changed the serialization routine for bgr_pixels to store the pixels in BGR 
     order rather than RGB.
   - Changed the interface for the spatially_filter_image() routine to take the 
     filter as a matrix rather than C-array.  Also, now it won't force signed pixel 
     values to 0 if they go negative. 
   - Changed the test_regression_function() and cross_validate_regression_trainer()
     routines so they return both the MSE and R-squared values rather than just the
     MSE.
   - Changed suppress_non_maximum_edges() to use the L2 norm instead of L1 norm
     for measuring the strength of an edge since this produces a slightly better
     result.

Bug fixes:
   - The image_display didn't display overlay rectangles quite right.  If you zoomed
     in you could see that some of the pixels which are inside the rectangle were
     outside the overlay.  Specifically, the right column and bottom row was outside
     the overlay rectangle.  This has been fixed.  Now all pixels which are supposed
     to be part of a rectangle are drawn as being inside the overlay rectangle.
   - Fixed a bug pointed out by Martin Müllenhaupt which caused the windows socket
     code to not compile when used with the mingw-cross-env project.
   - Fixed a bug in the png_loader.  If you loaded an image with an alpha channel 
     into something without an alpha channel there were uninitialized values being 
     alpha blended into the image.
   - Fixed a bug in the cpp_tokenizer that only shows up on newer versions of gcc.  
     It wasn't tokenizing double quoted strings right.
   - Fixed a bug in spatially_filter_image() which showed up when using non-square 
     filters.  The bug would cause the edges of the output image to be incorrect.
   - Fixed a bug in the matrix class.  Expressions of the form mat *= mat(0) would
     evaluate incorrectly because the *= operator took the right hand side by reference
     and thus experienced an aliasing problem.  The other op= operators had similar
     problems and have also been fixed.
   - Fixed a bug pointed out by Justin Solomon which could cause the svr_trainer and
     svm_c_trainer to produce incorrect results in certain unusual cases.  

Other:
   - Added a more complete set of methods for converting between image space and 
     the downsampled hog grid used by hog_image.  Now you can convert from image 
     to hog in addition to hog to image.
   - Made the integral_image more general by making it templated on the type of 
     scalar used to store the sums.


Release 17.42

Release date: Jun 24, 2011
Major Changes in this Release:
New Stuff:
   - Added the check_sub_option() method to the command line parser check
     object.
   - Added match_endings to the dir_nav utils.
   - Added a set_current_dir() function.
   - Added the distance_to_rect_edge() routine.
   - Added support for user drawn rectangle overlays and selectable overlays 
     to the image_display widget.
 
Non-Backwards Compatible Changes:

Bug fixes:
   - Fixed a bug in the image_display widget.  If you switched it between
     images of a different size while any kind of zoom was in effect
     it could cause a segmentation fault.

Other:


Release 17.41

Release date: Jun 12, 2011
Major Changes in this Release:
New Stuff:
   - You can now add tasks to a thread_pool by value, using the new 
     add_task_by_value() method.
 
Non-Backwards Compatible Changes:

Bug fixes:
   - Fixed a bug which caused multiply defined symbol errors during linking
     if the PNG saving routine was #included.

Other:
   - Optimized the threaded and distributed structural svm solvers for the 
     case where there are many data samples and the separation oracle is 
     quick to evaluate.


Release 17.40

Release date: Jun 05, 2011
Major Changes in this Release:
New Stuff:
   - Added a function for saving to the PNG image format.
   - Added Austin Appleby's excellent MurmurHash3 hashing code and setup some
     additional convenience functions.  These functions are murmur_hash3() and
     various overloads of hash().
 
Non-Backwards Compatible Changes:
   - Made get_pixel_intensity() more efficient.  However, the value returned
     is slightly different than it used to be for RGB pixel types.

Bug fixes:
   - Setup proper error handling for libpng in the png_loader.  Now if the PNG
     file is corrupted in the middle it won't just print a message and abort
     the program.
   - Fixed a bug in assign_pixel_intensity() that happened when the target pixel 
     was an RGB pixel with an alpha channel.

Other:
   - Added a Frequently Asked Questions page
   - Changed the array2d object so you don't have to say array2d<type>::kernel_1a
     anymore to declare it.  Now you just say array2d<type>.


Release 17.39

Release date: May 22, 2011
Major Changes in this Release:
New Stuff:
   - Added tools for distributing the work involved in solving a structured
     SVM problem over many computers and CPUs. 
   - Added the bridge.  It allows a dlib::pipe to be used for networked
     communication.
 
Non-Backwards Compatible Changes:
   - Removed the DLIB_REVISION macro and replaced it with DLIB_MAJOR_VERSION and
     DLIB_MINOR_VERSION.

Bug fixes:

Other:
   - dlib's version control system has switched from Subversion to Mercurial.


Release 17.38

Release date: May 7, 2011
Major Changes in this Release:
New Stuff:
   - Added the max_sum_submatrix() function to the optimization tools.
   - Upgraded the pyramid_down function object so it can create color pyramids.  
     Also, added some functions which define the coordinate transforms between 
     different layers in an image pyramid.  
 
Non-Backwards Compatible Changes:
   - Changed the oca_problem interface to the oca optimizer.  Now the 
     optimization_status() function reports back the current risk and risk gap 
     in addition to the overall objective value and objective gap. 
   - Changed the stopping condition for the structured svm to the one suggested
     by the Joachims paper.  Now it stops when the risk gap is below a user
     supplied epsilon. 

Bug fixes:

Other:
   - Various usability improvements.
   - Improved the feature vector caching in the structural_svm_problem object.
   - Some objects were setup as multi-implementation objects but only had one 
     implementation.  I went through dlib and switched these to single implementation 
     objects.  So for example, to use the dlib crc32 module you used to declare an 
     object of type "crc32::kernel_1a" but now you can just say "crc32".  Note that 
     I did this change in a way that maintains backwards compatibility with previous 
     versions.  So crc32::kernel_1a is still allowed but that form is officially 
     deprecated.  The modified objects are as follows:
      - base64
      - byte_orderer
      - config_reader
      - crc32
      - pipe
      - rand


Release 17.37

Release date: Mar 24, 2011
Major Changes in this Release:
New Stuff:
   - Added a multiclass support vector machine.
   - Added a tool for solving the optimization problem associated with
     structural support vector machines.
   - Added new functions for dealing with sparse vectors: add_to(), 
     subtract_from(), max_index_plus_one(), fix_nonzero_indexing(), a
     more flexible dot(), and I renamed assign_dense_to_sparse() to assign() 
     and made it more flexible.
 
Non-Backwards Compatible Changes:
   - Renamed max_index_value_plus_one() (a function for working with graphs) to 
     max_index_plus_one() so that it uses the same name as the essentially 
     identical function for working with sparse vectors.
   - I simplified the cross_validate_multiclass_trainer(), cross_validate_trainer(), 
     test_binary_decision_function(), and test_multiclass_decision_function()
     routines.  They now always return double matrices regardless of any other 
     consideration.  This only breaks previous code if you had been assigning
     the result into a float or long double matrix.
   - Renamed assign_dense_to_sparse() to assign()

Bug fixes:
   - Fixed a bug in load_libsvm_formatted_data().  I had forgotten to clear the 
     contents of the labels output vector before adding the loaded label data.  
   - Fixed a bug in the kernel_matrix() function.  It didn't compile when used 
     with sparse samples which were of type std::vector<std::pair<> >.  
     Moreover, some of the trainers have a dependency on kernel_matrix() so this 
     fix makes those trainers also work with this kind of sparse sample.

Other:
   - Added a value_type typedef to matrix_exp so it's easier to write templates
     which operate on STL containers and matrix objects.

Release 17.36

Release date: Mar 2, 2011
Major Changes in this Release:
New Stuff:
   - Added an implementation of the Hungarian algorithm for solving the optimal 
     assignment problem (in the new max_cost_assignment() routine).
 
Non-Backwards Compatible Changes:

Bug fixes:
   - Fixed a problem which prevented the any_function unit test from compiling 
     in visual studio 2008.

Other:
   - Changed the oca optimizer so that it warm starts the QP subproblem
     rather than resolving it from scratch during each iteration. This 
     improves the speed and stability of the algorithm.



Old Release Notes