Release notes

Release 19.22

Release date: Mar 28, 2021
Major Changes in this Release:
New Features and Improvements:
   - Deep learning tooling:
      - Added loss_multibinary_log_
      - Added scale_prev layer
      - Various ease of use improvements to the deep learning tooling, such as improved layer
        visitors and increased DNN training stability.
      - Added CUDA implementation for loss_multiclass_log_per_pixel_weighted.
      - Add GELU activation layer
      - Add Layer Normalization
      - Add CIFAR-10 dataset loader: load_cifar_10_dataset()
   - Add probability_values_are_increasing() and probability_values_are_increasing_robust().
   - Expanded list of serializable types and added DLIB_DEFINE_DEFAULT_SERIALIZATION, a macro that
     lets you make a class serializable with a single simple declaration.
   - Added exponential and Weibull distributions to dlib::rand.
   - For dlib::matrix:
         - Added soft_max() and pointwise_pow()
         - The FFT methods now support arbitrary sized FFTs and are more performant.
   - Added user definable stopping condition support to find_min_global() and find_max_global().

Non-Backwards Compatible Changes:
   - Rename POSIX macro to DLIB_POSIX to avoid name clashes with some libraries.
   - Dropped support for gcc 4.8.

Bug fixes:
   - Fixed bug in loss_mmod that degraded the quality of bounding box regression.  Now
     bounding box regression works a lot better.
   - Fixes for code not compiling in various environments and support newer CUDA tooling.

Release 19.21

Release date: Aug 08, 2020
Major Changes in this Release:
New Features and Improvements:
   - Added support for cuDNN 8.0.
   - Added support for CUDA in Python 3.8 on Windows.
   - Allow forwarding initial function evaluations into find_max_global().
   - Can now load PNG images from a memory buffer.

Non-Backwards Compatible Changes:

Bug fixes:
   - Improved error messages for python users trying to install dlib
     with CUDA enabled or who are using windows.
   - Fix random forest regression not doing quite the right thing.


Release 19.20

Release date: Jun 06, 2020
Major Changes in this Release:
New Features and Improvements:
   - Added CUDA implementation for loss_mean_squared_per_channel_and_pixel.
   - Added DCGAN example in examples/dnn_dcgan_train_ex.cpp
   - Added transfer learning example in examples/dnn_introduction3_ex.cpp
   - Added leaky_relu activation layer
   - Added mish activation layer 
   - Added loss_multiclass_log_weighted
   - Added loss_binary_log_per_pixel
   - Minor API simplifications in deep learning tooling.
   - imglab can automatically select the number of image clusters when --cluster 0 is given.
   - Added a relative epsilon termination option to svm_c_linear_trainer
   - Support new version of OpenCV that doesn't have IplImage anymore.

Non-Backwards Compatible Changes:

Bug fixes:
   - Corrected interpolate_bilinear for lab_pixel.
   - Fix build errors in CUDA 10.2
   - Make equal_error_rate() handle degenerate case where all scores are equal.
   - Fix DLIB_ISO_CPP_ONLY not working
   - Fix build errors in C++20 build mode.
   - Fixed function_evaluation_request::set() invalidating function_evaluation_request::x()

Release 19.19

Release date: Dec 14, 2019
Major Changes in this Release:
New Features and Improvements:
   - Made find_min_global() and find_max_global() much faster when using them
     to optimize inexpensive functions.  These tools now measure the runtime of
     the objective function and automatically tune themselves to balance solver
     overhead vs objective function execution time.
   - Improved handling of label and ignore boxes in loss_mmod layer.
     See here for more details: https://github.com/davisking/dlib/issues/1894
   - Better auto-detection of build configurations on some platforms.
   - Shiny new deep instance segmentation examples:
     dnn_instance_segmentation_ex.cpp and dnn_instance_segmentation_train_ex.cpp.  

Non-Backwards Compatible Changes:

Bug fixes:
   - Fix build error in some versions of visual studio in some setups.
   - Fix find_max() going into an infinite loop in some cases when a
     non-differentiable function is given.


Release 19.18

Release date: Sep 22, 2019
Major Changes in this Release:
New Features and Improvements:
   - Make dlib.full_object_detection take list of dlib.point or dlib.points.
   - CMake scripts will automatically include the Intel MKL's iomp dll in the
     output folder to reduce confusion for windows users who haven't added the
     Intel MKL to their PATH.  This avoids a dll not found error that would
     otherwise result in that situation.
   - load_jpeg() now supports loading from a memory buffer.
   - Added input_grayscale_image_pyramid DNN input layer.
   - Added loss_mean_squared_per_channel DNN input layer.
   - Added methods for getting keyboard and mouse clicks to image_window's python API.
   - Made pkg-config report all needed include and link settings to use dlib.

Non-Backwards Compatible Changes:

Bug fixes:
   - Setting a point's y coordinate changed x instead, when done from Python.
     This has been fixed.
   - Fixed global_function_search's initialization being wrong if explicitly
     given an empty list of initial function evaluations.
   - Fixed compile time errors on some uncommon system configurations.
   - Work around bugs in CUDA runtime on some systems.
   - Various improvements to CMake built scripts to handle unusual system configurations.
   - Fixed bug in multi-GPU training of semantic segmentation models.


Release 19.17

Release date: Mar 10, 2019
Major Changes in this Release:
New Features and Improvements:
   - Added weighted labels to loss_binary_log layer.
   - Added padding option to Python compute_face_descriptor() methods.
   - Added pointwise_divide function.
   - Added U-net style skip connections to the semantic-segmentation example.
   - Exposed dlib::chinese_whispers() directly in Python API.
   - Added python api that generates desciptor(s) from the aligned image(s).
   - Added support for CUDA 10.1.
   - Dlib's python install process always automatically enables all supported features.  
     So --yes <option> was removed as it does nothing.
   - Added --box-images to imglab.

Non-Backwards Compatible Changes:

Bug fixes:
   - Fixed build errors on some systems or buggy compilers.
   - Workaround for bug in cudaStreamSynchronize() causing hanging in some rare cases.
   - Fixed broken CUDA memcpy overload.
   - Fixed CMake not finding cusolver in CUDA 10.1. 


Release 19.16

Release date: Sep 29, 2018
Major Changes in this Release:
New Features and Improvements:
   - Allow 64bit seeds for murmur hash.
   - Some code paths are a little faster.
   - Added an option to do bounding box regression to the loss_mmod layer.
   - Added resize_image(img,scale) to Python API.

Non-Backwards Compatible Changes:

Bug fixes:
   - Fixed build errors in some environments.
   - Make older versions of CMake work with CUDA 10.
   - Fixed is_image_type template always reporting false. This also caused
     have_same_dimensions() to be uncallable for images, so that's fixed now too.


Release 19.15

Release date: Jul 13, 2018
Major Changes in this Release:
New Features and Improvements:

Non-Backwards Compatible Changes:

Bug fixes:
   - Fixed sub_image() in the Python API not working correctly for non-8bit images.
   - Last release broke have_same_dimensions(). The version specific to images
     was being used for tensors, which is incorrect and caused some of the DNN
     tooling to malfunction.


Release 19.14

Release date: Jul 07, 2018
Major Changes in this Release:
New Features and Improvements:
   - Added a --split-train-test option to imglab.
   - Added a max runtime option to the oca solver and structural object
     detection trainer.
   - Added an option to do translational jittering of the bounding boxes in the
     shape_predictor_trainer.  Using this option allows you to train
     shape_predictors that are somewhat more robust against variation in
     detection box placement. 
   - Added an optional thread_pool argument to find_max_global() and
     find_min_global() to allow for parallel execution of objective function calls.
   - Added auto_train_rbf_classifier(), a tool that trains a RBF-SVM without requiring the user
     to supply any hyperparameters.
   - Added polygon_area()
   - The image view objects now implement the generic image interface.
   - Updates to the Python API:
       - Added Python bindings for: extract_image_chip(),
         extract_image_chips(), center(), get_histogram(), sub_image(),
         polygon_area(), auto_train_rbf_classifier(), reduced(),
         translate_rect(), spatially_filter_image(),
         spatially_filter_image_separable(), num_separable_filters(),
         threshold_filter_singular_values(), max_point(),
         max_point_interpolated(), zero_border_pixels().  Also added an option
         for training nuclear norm regularized HOG detectors.
       - Added a bunch of new overloads and operators for existing Python types.
       - Made decision functions more viewable from python.  You can now inspect
         the contents of the functions rather than them being completely opaque.
       - Made it so you can call the std::vector<detectors> version of
         the object_detector constructor from python. So now you can pack
         multiple detectors into one object via the python API.
       - Allow batched face recognition for greater performance.

Non-Backwards Compatible Changes:

Bug fixes:
   - Fixed the point and dpoint operator + doing subtraction in the Python API.
   - Fixed label_connected_blobs_watershed() not giving contiguous labels as outputs. 
   - Fixed AVX detection not working correctly on some systems.
   - Fixed dlib.threshold_image() ignoring the optional thresh argument in the Python API.
   - Fixed hough_transform::find_pixels_voting_for_lines(). It would sometimes
     include a pixel multiple times in the output lists.
   - Made the routines that rotate image datasets use the rectangle_transform
     instead of the bad old way that only really worked for square boxes.  This
     improves placement of such rotated rectangular boxes.


Release 19.13

Release date: May 26, 2018
Major Changes in this Release:
New Features and Improvements:
   - Added a lot of new Python bindings.  You can now use these things from Python:
      - gaussian_blur(), label_connected_blobs(), randomly_color_image(), jet(),
        skeleton(), find_line_endpoints(), get_rect(), shrink_rect(), grow_rect(),
        image_gradients, label_connected_blobs_watershed(), convert_image(),
        convert_image_scaled(), dpoint, centered_rect(), centered_rects(), length(),
        as_grayscale(), pyramid_down, find_bright_keypoints(), find_bright_lines(),
        find_dark_lines(), find_dark_keypoints(), suppress_non_maximum_edges(),
        find_peaks(), hysteresis_threshold(), sobel_edge_detector(), equalize_histogram(),
        resize_image(), hough_transform, remove_incoherent_edge_pixels(),
        normalize_image_gradients(), line, signed_distance_to_line(), distance_to_line(),
        reverse(), intersect(), count_points_on_side_of_line(),
        count_points_between_lines(), dot(), normalize(), point_transform_projective,
        find_projective_transform(), inv(), transform_image(), angle_between_lines(),
        extract_image_4points(), load_grayscale_image(), min_barrier_distance(). 
      - Added a .add_overlay_circle() to dlib.image_window.  Also made .add_overlay()
        take lines.
      - Added the *_corner() routines to rectangle and drectangle and made these 
        objects constructable from instances of each other.
   - Made the Python extension module automatically enable AVX instructions if the host
     machine supports them.  So you never need to say --yes USE_AVX_INSTRUCTIONS anymore
     when installing dlib.

   - New C++ routines:
      - Added an image_window::add_overlay() overload for line object.
      - Added angle_between_lines()
      - Added extract_image_4points()
      - Added is_convex_quadrilateral(), find_convex_quadrilateral(), and no_convex_quadrilateral.
      - Added python_list_to_array()
      - Added min_barrier_distance() 

Non-Backwards Compatible Changes:

Bug fixes:
   - Fixed numpy_image and pybind11 crashing python sometimes when certain types of
     conversions are attempted.
   - Fixed some python functions not taking as wide a range of image types as they did in
     previous dlib versions.



Old Release Notes