diff options
Diffstat (limited to 'ml/dlib/docs/docs/release_notes.xml')
-rw-r--r-- | ml/dlib/docs/docs/release_notes.xml | 4437 |
1 files changed, 0 insertions, 4437 deletions
diff --git a/ml/dlib/docs/docs/release_notes.xml b/ml/dlib/docs/docs/release_notes.xml deleted file mode 100644 index 2bb03580e..000000000 --- a/ml/dlib/docs/docs/release_notes.xml +++ /dev/null @@ -1,4437 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> - -<doc> - <title>Release notes</title> - <body> - - -<release_notes> - -<!-- ************************************************************************************** --> - -<current> -New Features and Improvements: - - Deep Learning: - - Added scale_ layer, allowing implementation of squeeze-and-excitation networks. - - Added loss_multimulticlass_log: used for learning a collection of multi-class classifiers. - - Added a random forest regression tool. See random_forest_regression_trainer. - - Added make_bounding_box_regression_training_data() - - Added isotonic_regression - - Added momentum_filter, rect_filter, find_optimal_momentum_filter(), and - find_optimal_rect_filter(). - - Added binomial_random_vars_are_different() and event_correlation(). - - Added xcorr_fft(), a routine for efficiently performing large cross-correlations using the FFT. - - Added the ramdump type decorator for invoking faster serialization routines. - - Added check_serialized_version() - - Added max_scoring_element() and min_scoring_element() - - Made orthogonalize() faster. - - Updates to the Python API: - - Added interface to the global_function_search object. This is a more general - interface to the solver used by find_max_global(). - - Added support for variadic Python functions in find_max_global(). - - Added rect_filter and find_optimal_rect_filter(). - - Added make_bounding_box_regression_training_data() - - Added the image_dataset_metadata routines for parsing XML datasets. - - Added rvm_trainer - - Added probability_that_sequence_is_increasing() - - Added dlib.__time_compiled__ field - - Added num_threads to shape_predictor_training_options. - - Added CUDA controlling routines such as set_device() and - set_dnn_prefer_smallest_algorithms(). - -Non-Backwards Compatible Changes: - - Changed CMake so that there is only the dlib target and it isn't forced to - be static. Instead, the build type will toggle based on the state of CMake's - BUILD_SHARED_LIBS variable. So there is no longer a dlib_shared target. - - Changed the integer types used to represent sizes from 32bits to 64bits in numerous - places, such as in the tensor object. This should be a backwards compatible change - for nearly all client code. - -Bug fixes: - - Fixed memory leak in java swig array binding tool. - - Fixed windows include order problem in all/source.cpp file. - - Fixed cont_ layers not printing the correct num_filters parameter when they were - printed to std::cout or to XML. - - Fixed some code not handling OBJECT_PART_NOT_PRESENT values correctly. - - Fixed fft_inplace() not compiling for compile time sized matrices. - - The shape_predictor_trainer could have very bad runtime for some really - bad parameter settings. This has been fixed and also warning messages about - really bad training data or parameters have been added. - - Fixed the decayed running stats objects so they use unbiased estimators. - -</current> - -<!-- ************************************************************************************** --> - -<old name="19.9" date="Jan 22, 2018"> -New Features and Improvements: - - Switched the Python API from Boost.Python to pybind11. This means Python - users don't need to install Boost anymore, making building dlib's Python API - much easier. - - Made the sparse version of svd_fast() use multiple CPU cores. - - Changed the behavior of imglab's --flip option. It will now attempt to - adjust any object part labels so that the flipped dataset has the same - average part layout as the source dataset. There is also a new --flip-basic - option that behaves like the old --flip. However, most people flipping a - dataset with part annotations will want to use --flip. For more details - see: http://blog.dlib.net/2018/01/correctly-mirroring-datasets.html - -Non-Backwards Compatible Changes: - - Removed std::auto_ptr from dlib's old (and depreciated) smart pointers. - -Bug fixes: - - Fixed global_optimization.py not working in Python 3. - -</old> - -<!-- ************************************************************************************** --> - -<old name="19.8" date="Dec 19, 2017"> -New Features and Improvements: - - Added a global optimizer, find_max_global(), which is suitable for - optimizing expensive functions with many local optima. For example, you - can use it for hyperparameter optimization. See model_selection_ex.cpp - for an example. - - Updates to the deep learning tooling: - - Added semantic segmentation examples: dnn_semantic_segmentation_ex.cpp - and dnn_semantic_segmentation_train_ex.cpp - - New layers: loss_ranking, loss_epsilon_insensitive, softmax_all, and loss_dot. - - Made log loss layers more numerically stable. - - Upgraded the con layer so you can set the number of rows or columns to - 0 in the layer specification. Doing this means "make the filter cover - the whole input image dimension". This provides an easy way to make a - filter sized so it will have one output along that dimension, - effectively making it like a fully connected layer operating on a row - or column. - - Added support for non-scale-invariant MMOD. - - Added an optional parameter to dnn_trainer::get_net() that allows you - to call the function without forcing a state flush to disk. - - Sometimes the loss_mmod layer could experience excessively long runtime - during early training iterations. This has been optimized and is now - much faster. - - Optimized the tensor's management of GPU memory. It now uses less memory - in some cases. It will also not perform a reallocation if resized to a - smaller size. Instead, tensors now behave like std::vector in that - they just change their nominal size but keep the same memory, only - reallocating if they are resized to something larger than their - underlying memory block. This change makes some uses of dlib faster, in - particular, running networks on a large set of images of differing - sizes will now run faster since there won't be any GPU reallocations, - which are notoriously slow. - - Upgraded the input layer so you can give - input<std::array<matrix<T>,K>> types as input. Doing - this will create input tensors with K channels. - - Added disjoint_subsets_sized - - Added Python APIs: get_face_chips(), count_steps_without_decrease(), - count_steps_without_decrease_robust(), and jitter_image(). - - Various improvements to CMake scripts: e.g. improved warning and error - messages, added USE_NEON_INSTRUCTIONS option. - - chol() will use a banded Cholesky algorithm for banded matrices, making it - much faster in these cases. - - Changed the timing code to use the C++11 high resolution clock and - atomics. This makes the timing code a lot more precise. - -Non-Backwards Compatible Changes: - - Changed the random_cropper's set_min_object_size() routine to take min box - dimensions in the same format as the mmod_options object (i.e. two lengths - measured in pixels). This should make defining random_cropping strategies - that are consistent with MMOD settings more straightforward since you can - simply take the mmod_options settings and give them to the random_cropper - and it will do the right thing. - - Changed the mean squared loss layers to return a loss that's the MSE, not - 0.5*MSE. The only thing this effects is the logging messages that print - during training, which were confusing since the reported loss was half the - size you might naively expect. - - Changed the outputs of test_regression_function() and cross_validate_regression_trainer(). - These functions now output 4D rather than 2D vectors. The new output is: - mean squared error, correlation, mean absolute error, and standard - deviation of absolute error. I also made test_regression_function() take - a non-const reference to the regression function so that DNN objects can - be tested. - - Fixed shape_predictor_trainer padding so it behaves as it used to. In - dlib 19.7 the padding code was changed and accidentally doubled the size - of the applied padding in some cases. It's not a huge deal either way, but - this change reverts back to the previous behavior. - -Bug fixes: - - Fixed toMat() not compiling in some cases. - - Significantly reduced the compile time of the DNN example programs in - visual studio. - - Fixed a few image processing functions that weren't using the generic - image interface. - - Fixed a bug in the random_cropper where it might crash due to division by - 0 if small images were given as input. - - Fixed a bug in how the mmod_options automatically determines detection - window sizes. It would pick a bad size in some cases. - - Fixed load_image_dataset()'s skip_empty_images() option. It wasn't - skipping images that only have ignore boxes when you load into mmod_rect - objects. - - Fixed a bug where chinese_whispers(), when called from python, would - sometimes return a labels array that didn't include labels for all the - inputs. - - Fixed a bug in dlib's MS Windows GUI code that was introduced a little - while back when we switched everything to std::shared_ptr. This change - fixes a bug where the program crashes or hangs sometimes during program - shutdown. - - Fixed error in TIME_THIS() introduced in dlib 19.7. It was printing - seconds when it said minutes in the output. - - Adding missing implementation of tabbed_display::selected_tab. - - Changed the windows signaler and mutex code to use the C++11 thread - library instead of the old win32 functions. I did this to work around how - windows unloads dlls. In particular, during dll unload windows will kill - all threads, THEN it will destruct global objects. So this can lead to - problems when a global object that owns threads tries to tell them to - shutdown, since the threads have already vanished. The new code mitigates - some of these problems, in particular, there were some cases where - unloading dlib's python extension would deadlock. This should now be - fixed. - - Fixed compile time errors when either of these macros were enabled: - DLIB_STACK_TRACE, DLIB_ISO_CPP_ONLY. - -</old> - -<!-- ************************************************************************************** --> - -<old name="19.7" date="Sep 17, 2017"> -New Features and Improvements: - - Deep Learning: - - The CNN+MMOD detector is now a multi-class detector. In particular, - the mmod_rect object now has a string label field which you can use to - label objects, and the loss_mmod_ layer will learn to label objects with - those labels. For an example, see: https://www.youtube.com/watch?v=OHbJ7HhbG74 - - CNN+MMOD detectors are now 2.5x faster. For instance, this example program - http://dlib.net/dnn_mmod_find_cars_ex.cpp.html now runs at 98fps instead - of 39fps. - - Added a 5 point face landmarking model that is over 10x smaller than the - 68 point model, runs faster, and works with both HOG and CNN generated - face detections. It is now the recommended landmarking model to use for - face alignment. render_face_detections() and get_face_chip_details() have been - updated to work with both 5 and 68 point models, so the new 5 point model is - a drop in replacement for the 68 point model. - - The imglab tool is slightly improved. It will display box labels with - higher relative contrast. You can also now press END or i to ignore boxes - in imglab. This is useful because it's a much less stressing hand motion - to hit END that i in most cases. - - Added overloads of sub_image() that take raw pointers so you can make - sub_images of anything. - - Changed TIME_THIS() to use std::chrono::high_resolution_clock, so now it's - much higher precision. - - Exposed Chinese whispers clustering to Python, added face clustering example. - -Non-Backwards Compatible Changes: - -Bug fixes: - - Fixed an error in input_rgb_image_pyramid::image_contained_point(). The - function might erroneously indicate that a point wasn't inside the original - image when really it was, causing spurious error messages. - - mmod_options would pick bad window sizes in some corner cases. This has been fixed. - - Fixed a bug in the extract layer that trigged when a tensor with a - different number of samples than the tensor used to initialize the network - was passed through the layer. - - The loss_per_missed_target parameter of the loss_mmod_ wasn't being used - exactly right when boxes were auto-ignored. There weren't any practical - user facing problems due to this, but it has nevertheless been fixed. - -</old> - -<!-- ************************************************************************************** --> - -<old name="19.6" date="Aug 28, 2017"> -New Features and Improvements: - -Non-Backwards Compatible Changes: - -Bug fixes: - - Fix build error in Visual Studio when CUDA is enabled. - -</old> - -<!-- ************************************************************************************** --> - -<old name="19.5" date="Aug 27, 2017"> -New Features and Improvements: - - Deep Learning - - Added a python wrapper for using the CNN face detector. - - Added support for cuDNN v6 and v7. - - Added a simple tool to convert dlib model files to caffe models. - See the tools/convert_dlib_nets_to_caffe folder for details. - - New DNN layers - - loss_multiclass_log_per_pixel_ - - loss_multiclass_log_per_pixel_weighted_ - - loss_mean_squared_per_pixel_ - - cont_ (transpose convolution, sometimes called "deconvolution") - - mult_prev_ (like add_prev_ but multiplies instead of adds) - - extract_ (sort of like caffe's slice layer) - - upsample_ (upsamples a tensor using bilinear interpolation) - - Object Detection - - Upgraded loss_mmod_ to support objects of varying aspect ratio. This - changes the API for the mmod_options struct slightly. - - Relaxed the default non-max suppression parameters used by the - mmod_options object so that users of the deep learning MMOD tool don't - get spurious errors about impossibly labeled objects during training. - - Added missing input validation to loss_mmod_. Specifically, the loss - layer now checks if the user is giving truth boxes that can't be detected - because the non-max suppression settings would prevent them from being - output at the same time. If this happens then we print a warning message - and set one of the offending boxes to "ignore". I also changed all - the input validation errors to warning messages with auto conversion - to ignore boxes rather than exceptions. - - Changed the random_cropper's interface so that instead of talking in - terms of min and max object height, it's now min and max object size. - This way, if you have objects that are short and wide (i.e. objects where - the relevant dimension is width rather than height) you will get sensible - behavior out of the random cropper. - - Added options to input_rgb_image_pyramid that let the user set - create_tiled_pyramid()'s padding parameters. Also changed the default - outer border padding from 0 to 11. This effects even previously trained - models. So any model that doesn't explicitly set the outer patting to - something else will have a padding of 11. This should be a more - reasonable value for most networks. - - Added process() and process_batch() to add_loss_layer. These routines - let you easily pass arguments to any optional parameters of a loss - layer's to_tensor() routine. For instance, it makes it more convenient to - set loss_mmod_'s adjust_threshold parameter. - - Added visit_layers_until_tag() - - Improved how dnn_trainer synchronizes its state to disk. It now uses - two files and alternates between them. This should be more robust in - the face of random hardware failure during synchronization than the - previous synchronization method. - - Made it so you can set the number of output filters for con_ layers at runtime. - - The way cuDNN work buffers are managed has been improved, leading to - less GPU RAM usage. Therefore, users should not need to call - set_dnn_prefer_smallest_algorithms() anymore. - - Added operator<< for random_cropper and dnn_trainer to allow - easy logging of training parameters. - - Made concat_ layer a lot faster. - - Made the dnn_trainer not forget all the previous loss values it knows - about when it determines that there have been a lot of steps without - progress and shrinks the learning rate. Instead, it removes only a - small amount of the oldest values. The problem with the old way of - removing all the loss values in the history was that if you set the - steps without progress threshold to a really high number you would - often observe that the last few learning rate values were obviously not - making progress, however, since all the previous loss values were - forgotten the trainer needed to fully populate its loss history from - scratch before it would figure this out. This new style makes the - trainer not waste time running this excessive optimization of obviously - useless mini-batches. I also changed the default - get_test_iterations_without_progress_threshold() from 200 to 500. Now - that we have a better history management of loss values in the trainer - it's much more sensible to have a larger value here. - - Dlib's simd classes will now use ARM NEON instructions. This makes the - HOG based object detector faster on mobile devices running ARM processors. - - Added last_modified() method to dlib::file. Also, added - select_oldest_file() and select_newest_file(). - - Added solve_qp_box_constrained_blockdiag() - - Added an overload of mat() that takes a row stride value. - - Added cmake scripts and some related tooling that makes it easy to call - C++ code from java. See dlib/java/ folder. - - MATLAB MEX wrapper API - - Made the mex wrapper deal with cell arrays that have null elements. - - Made ctrl+c detection in a mex file work more reliably in newer versions of matlab. - - Added set_rect_area() - - Gave test_object_detection_function() an option to set how ignore box - overlap is tested. - - Added serialization support for the running_stats_decayed object. - - Additions to imglab - - Added --sort and also the ability to propagate boxes from one image to - the next using dlib::correlation_tracker. - - Made it so you can remove images by pressing alt+d. - - Made is so pressing e in imglab toggles between views of the image - where the histogram is equalized or unmodified. This way, if you are - looking at particularly dark or badly contrasted images you can toggle - this mode and maybe get a better view of what you are labeling. - - Made the attribute_list of the xml parser a little more friendly by - allowing you to ask for attributes that don't exist and get a defined - behavior (an exception being thrown) rather than it being a contract - violation. - -Non-Backwards Compatible Changes: - - DNN solver objects are now required to declare operator<<. - - Broke backwards compatibility with previous dnn_trainer serialization - format. The network serialization format has not changed however. So old - model files will still load properly. - - Changed random_cropper interface. - - Changed the XML format output by net_to_xml(). Specifically, the XML tag - for affine layers was changed to use the same conventions as other layers - that support convolutional vs fully connected modes. - - Dlib's smart pointers have been deprecated and all of dlib's code has been - changed to use the std:: version of these smart pointers. The old dlib - smart pointers are still present, allowing users to explicitly include - them if needed, but users should migrate to the C++11 standard version of - these tools. - - Changed the functions that transform between input tensor coordinates and - output tensor coordinates to use dpoint instead of point. This way, we can - obtain sub-pixel coordinates if we need them. - - Upgraded loss_mmod_ to support objects of varying aspect ratio. This - changes the API for the mmod_options struct slightly. - -Bug fixes: - - Made resize_image() and functions that use it like the pyramid objects - produce better results when run on float and double images. There was - needless rounding to integers happening in the bilinear interpolation. Now - if you work with a float image the entire process will run without integer - rounding. - - Made the input_tensor_to_output_tensor() and output_tensor_to_input_tensor() - coordinate mappings work on networks that contain skip layers. - - The input_rgb_image_sized is supposed to be convertible to - input_rgb_image, which it was in all ways except you couldn't deserialize - directly like you would expect. This has now been fixed. - - There was a bug in the concat_ layer's backward() method. It was assigning - the gradient to previous layers instead of adding the gradient, as required - by the layer interface specification. Probably no-one has been impacted - by this bug, but it's still a bug and has been fixed. - - Changed the random_cropper so that it samples background patches uniformly - across scales regardless of the input image size. Previously, if you gave - really large images or really small images it had a bias towards giving only - large patches or small patches respectively. - - Fixed name lookup problem for calls to serialize() on network objects. - - Fixed double delete in tokenizer_kernel_1. - - Fixed error in pyramid_down<2> that caused the output image to be a - little funny looking in some cases. - - Fixed the visit_layers_backwards() and visit_layers_backwards_range() - routines so they visit layers in the correct order. - - Made build scripts work on a wider range of platforms and configurations. - - Worked around global timer cleanup issues that occur on windows when dlib - is used in a dll in some situations. - - Fixed various compiler errors in obscure environments. - -</old> - -<!-- ************************************************************************************** --> - -<old name="19.4" date="Mar 07, 2017"> -New Features: - -Non-Backwards Compatible Changes: - - CMake 2.8.12 is now required to build dlib (but only if you use CMake). - -Bug fixes: - - Fixed a slow memory leak that could occur when using cuDNN. - -Other: -</old> - -<!-- ************************************************************************************** --> - -<old name="19.3" date="Feb 21, 2017"> -New Features: - - Deep Learning - - Added a state-of-the-art face recognition tool (99.38% accuracy on the - LFW benchmark) with C++ and Python example programs. - - Added these new loss layer types: loss_metric_, loss_mean_squared_, and - loss_mean_squared_multioutput_. - - Added the l2normalize_ computational layer. - - Added test_one_step() to the dnn_trainer. This allows you to do - automatic early stopping based on observing the loss on held out data. - - Made the dnn_trainer automatically reload from the last good state if a - loss of NaN is encountered. - - Made alias_tensor usable when it is const. - - Dlib's simd classes will now use PowerPC VSX instructions. This makes the - HOG based object detector faster on PowerPC machines. - - Added compute_roc_curve() - - Added find_gap_between_convex_hulls() - - Added serialization support for std::array. - - Added running_scalar_covariance_decayed object - - Added running_stats_decayed object - - Added min_pointwise() and max_pointwise(). - - Added a 1D clustering routine: segment_number_line(). - - Added Intel MKL FFT bindings. - - Added matlab_object to the mex wrapper. Now you can have parameters that - are arbitrary matlab objects. - - Added support for loading of RGBA JPEG images - -Non-Backwards Compatible Changes: - - Changed the loss layer interface to use two typedefs, output_label_type - and training_label_type instead of a single label_type. This way, the label - type used for training can be distinct from the type output by the network. - This change breaks backwards compatibility with the previous API. - -Bug fixes: - - Fixed compiler warnings and errors on newer compilers. - - Fixed a bug in the repeat layer that caused it to throw exceptions in some - cases. - - Fixed matlab crashing if an error message from a mex file used the % - character, since that is interpreted by matlab as part of an eventual - printf() code. - - Fixed compile time error in random_subset_selector::swap() - - Fixed missing implementation of map_input_to_output() and - map_output_to_input() in the concat_ layer. - - Made the dnn_trainer's detection and backtracking from situations with - increasing loss more robust. Now it will never get into a situation where it - backtracks over and over. Instead, it will only backtrack a few times in a - row before just letting SGD run unimpeded. - -Other: - - Usability improvements to DNN API. - - Improved C++11 detection, especially on OS X. - - Made dlib::thread_pool use std::thread and join on the threads in - thread_pool's destructor. The previous implementation used dlib's global - thread pooling to allocate threads to dlib::thread_pool, however, this - sometimes caused annoying behavior when used as part of a MATLAB mex file, - very occasionally leading to matlab crashes when mex files were unloaded. - This also means that dlib::thread_pool construction is a little bit slower - than it used to be. -</old> - -<!-- ************************************************************************************** --> - -<old name="19.2" date="Oct 10, 2016"> -New Features: - - Updates to the deep learning API: - - Added tools for making convolutional neural network based object detectors. See - dnn_mmod_ex.cpp example program. - - Added annotation() to tensor so you can associate any object you want with a tensor. - - Made layer_details() part of the SUBNET interface so that user defined layer - details objects can access each other. Also added the input_layer() global function - for accessing the input layer specifically. - - alias_tensor can now create aliases of const tensors. - - Added set_all_bn_running_stats_window_sizes(). - - Added visit_layers_backwards(), visit_layers_backwards_range(), and - visit_layers_range(). - - Computational layers can now optionally define map_input_to_output() and - map_output_to_input() member functions. If all layers of a network provide these - functions then the new global functions input_tensor_to_output_tensor() and - output_tensor_to_input_tensor() can be used to map between the network's input and - output tensor coordinates. This is important for fully convolutional object - detectors since they need to map between the image space and final feature space. - These new functions are important for tools like the new MMOD detector. - - Added input_rgb_image_pyramid. - - Image Processing - - The imglab command line tool has these new options: --min-object-size, --rmempty, - --rmlabel, --rm-if-overlaps, and --sort-num-objects. I also changed the behavior of - --split so that it simply partitions the data and is an invertible operation. - - Added mmod_rect - - Added an overload of load_image_dataset() that outputs directly to mmod_rect - instead of rectangle. - - Added image_dataset_file::shrink_big_images(). So now load_image_dataset() can load - a dataset of high resolution files at a user requested lower resolution. - - Added box_intersection_over_union(). - - Added create_tiled_pyramid(), image_to_tiled_pyramid(), and tiled_pyramid_to_image(). - - Added random_cropper - - Upgraded dlib's mex wrapper tooling to enable easy binding of C++ classes to MATLAB - objects. - - Added nearest_rect() - - Added find_upper_quantile() - - Added count_steps_without_decrease_robust(). - - Added get_double_in_range() to dlib::rand. - -Non-Backwards Compatible Changes: - - C++11 is now required to use dlib. - - Changed pinv() so it interprets its tol argument relative to the largest singular - value of the input matrix rather than as an absolute tolerance. This should generally - improve results, but could change the output in some cases. - - Renamed the class members of test_box_overlap so they are less confusing. - - Updates to the deep learning API: - - Changed the DNN API so that sample_expansion_factor is a runtime variable rather - than a compile time constant. This also removes it from the input layer interface - since the DNN core now infers its value at runtime. Therefore, users that define their - own input layers don't need to specify it anymore. - - Changed DEFAULT_BATCH_NORM_EPS from 1e-5 to 1e-4. - - Changed the default batch normalization running stats window from 1000 to 100. - -Bug fixes: - - Made the relational operators constexpr so they don't accidentally cause compilation - errors when they get pulled into the scope of template metaprogramming expressions. - - Fixed all/source.cpp not compiling in some instances. - - CMake scripts now do a better job detecting things like C++11 support, the presence of - CUDA, and other system specific details that could cause the build to fail if not - properly configured. - - Fixed a bug in imglab's --cluster option where it would output xml files with empty - entries if the input xml file contained unannotated images. - - Fixed imglab's --cluster option not working with relative paths. - -Other: - - Made the thread local variables that hold the cudnn and cublas context objects not - destruct and recreate themselves when you switch devices. Instead, they keep a table - of context objects, for each thread and device, reusing as necessary. This prevents - churn in the context objects when you are switching back and forth between devices - inside a single thread, making things run more efficiently for some CUDA based - workflows. - - Made the message argument of the DLIB_ASSERT and DLIB_CASSERT macros optional. - - Made thread_pool and parallel_for propagate exceptions from task threads to calling - code rather than killing the application if a task thread throws. - - Changed imglab --resample so that it never changes the aspect ratio of an image. - - Made the check in dnn_trainer for convergence more robust. Previously, if we - encountered a bad mini-batch that made the loss value suddenly jump up by a larger than - normal value it could make the trainer think we converged. Now the test is robust to - transient spikes in loss value. Additionally, the dnn_trainer will now check if the - loss has been increasing before it saves the state to disk. If it detects that the loss - has been going up then instead of saving to disk it recalls the previously good state. - This way, if we hit a really bad mini-batch during training which negatively effects - the model in a significant way, the dnn_trainer will automatically revert back to an - earlier good state. -</old> - -<!-- ************************************************************************************** --> - -<old name="19.1" date="Aug 13, 2016"> -New Features: - - Support for cuDNN 5.1 - - dlib::async() and dlib::default_thread_pool(). - - rectangle_transform - - imglab tool: added --resample, --ignore, --files, and --extract-chips - command line options. Also added convert_imglab_paths_to_relative and - copy_imglab_dataset scripts. - - Evgeniy Fominov made the shape_predictor trainer multi-threaded and faster. - - sutr90 contributed support for the CIELab color space. See the new lab_pixel. - -Non-Backwards Compatible Changes: - - All the cmake utility scripts were moved to dlib/cmake_utils. - - Code that #includes the shape_predictor can now only be compiled with - compilers that support C++11 lambda functions. - -Bug fixes: - - Made CMake scripts work in a wider range of environments. - - Fixed compile time errors on various platforms. - - Fixed bad multi-threading support in the MATLAB mex wrapper. - - Fixed bug in cuDNN binding that could sometimes cause NaN outputs. - - Fixed bad convergence testing in DNN tooling for very small datasets. - -Other: -</old> - -<!-- ************************************************************************************** --> - -<old name="19.0" date="Jun 25, 2016"> -New Features: - - A deep learning toolkit using CPU and/or GPU hardware. Some major elements - of this are: - - Clean and fully documented C++11 API - - Clean tutorials: see dnn_introduction_ex.cpp and dnn_introduction2_ex.cpp - - Uses cuDNN v5.0 - - Multi-GPU support - - Automatic learning rate adjustment - - A pretrained 1000 class Imagenet classifier (see dnn_imagenet_ex.cpp) - - Optimization Tools - - Added find_optimal_parameters() - - Added elastic_net class - - Added the option to use the elastic net regularizer to the OCA solver. - - Added an option to solve the L2-loss version of the SVM objective function to svm_c_linear_dcd_trainer. - - Added solve_qp_box_constrained() - - Image Processing - - Added random_color_transform, disturb_colors(), and apply_random_color_offset(). - - load_image() now supports loading GIF files. - - Many improvements to the MATLAB binding API - - Automatically link to MATLAB's Intel MKL when used on linux. - - struct support - - mex functions can have up to 20 arguments instead of 10. - - In place operation. Made column major matrices directly wrap MATLAB - matrix objects when used inside mex files. This way, if you use - matrix_colmajor or fmatrix_colmajor in a mex file it will not do any - unnecessary copying or transposing. - - Catch ctrl+c presses in MATLAB console. Allowing early termination of mex functions. - - When used inside mex files, DLIB_ASSERTS won't kill the MATLAB process, - just throw an exception. - - Made cerr print in MATLAB as a red warning message. - - load_mnist_dataset() - - Added a constructor for seeding rand with a time_t. - - Added subm_clipped() - - Added unserialize. - - Added running_gradient - -Non-Backwards Compatible Changes: - - Everything in dlib/matlab/call_matlab.h is now in the dlib namespace. - - DLIB_TEST() and DLIB_TEST_MSG() macros now require you to terminate them with a ; - -Bug fixes: - - Fixed bug in 10 argument version of call_matlab() and also cleaned up a few - minor things. - - setup.py and CMake scripts work in a few more contexts. - - Fixed compiler errors in visual studio 2015. - - Fixed a bug in gaussian_blur() that caused messed up outputs when big - sigma values were used on some pixel types. - - Fixed minor bugs in join_rows() and join_cols(). They didn't work when one - of the matrices was empty. - -Other: - - Made CMake scripts uniformly require CMake version 2.8.4. - - Faster fHOG feature extraction / face detection - - CMake scripts now enable C++11 by default - - Gave array2d and matrix move constructors and move assignment operators. Matrix - can also now be created from initializer lists. -</old> - -<!-- ************************************************************************************** --> - -<old name="18.18" date="Oct 28, 2015"> -New Features: - - Added the set_ptrm() routine for assigning dlib::matrix objects to arbitrary - memory blocks. - -Non-Backwards Compatible Changes: - -Bug fixes: - - Fixed a bug that caused cmake to not provide the correct preprocessor - definitions until cmake was run twice. This was causing some projects to - not build properly. - -Other: - - Improvements to build system: - - Ehsan Azarnasab contributed a setup.py so the dlib Python API can be - installed via the usual 'python setup.py install' command. - - Séverin Lemaignan upgraded dlib's CMake scripts so they include an - install target. Now dlib can be installed system wide by executing - 'cmake PATH_TO_DLIB; make install'. This also includes installing the - appropriate scripts for CMake's find_package(dlib) to work. -</old> - -<!-- ************************************************************************************** --> - -<old name="18.17" date="Aug 15, 2015"> -New Features: - - More clustering tools: - - Added bottom_up_cluster() and find_clusters_using_angular_kmeans() - routines. - - Added a --cluster option to the imglab tool. This lets you cluster - objects into groups of similar appearance/pose. - - Improved the shape_predictor. In particular, it can now be learned from - datasets where some landmarks are missing. The shape_predictor also now - outputs a sparse feature vector that encodes which leafs are used on each - tree to make a prediction. - -Non-Backwards Compatible Changes: - - extract_highdim_face_lbp_descriptors() produces slightly different output. - -Bug fixes: - - Fixed a minor bug in extract_highdim_face_lbp_descriptors() which was - pointed out by Yan Xu. One of the face locations was mistakenly used twice - while another was skipped. This change breaks backwards compatibility with - the previous feature extraction output but should slightly improve - accuracy of classifiers trained using these features. - - Fixed jet() and heatmap() so they work on empty images. - - The SQLite transaction object did not function correctly when compiled - in a C++11 program. Since its destructor can throw, an exception - specification needed to be added indicating that this was possible since - destructors are now noexcept by default in C++11. - - Fixed a bug pointed out by Ernesto Tapia that could cause matrix - expressions that involve sub matrix views (e.g. colm) to produce the wrong - results when the BLAS bindings were enabled. - - Added an if to avoid a possible division by zero inside spectral_cluster(). - - Fixed a bug in parse_xml(). It failed to check if the given input stream - was valid before trying to parse it. - -Other: - -</old> - -<!-- ************************************************************************************** --> - -<old name="18.16" date="Jun 3, 2015"> -New Features: - - Added a linear model predictive control solver. See the mpc_ex.cpp example - program for details. - - Thanks to Patrick Snape, the correlation_tracker can now be used from Python. - -Non-Backwards Compatible Changes: - - The camera_transform's second operator() method now takes 3 arguments - instead of 2. This is to allow it to output the z distance in addition to - scale. - -Bug fixes: - - Fixed a bug in the eigenvalue_decomposition which could occur when a - symmetric matrix was used along with the LAPACK bindings. - - Fixed a bug where the last column of data in a file wasn't loaded on some - OS X machines when load_libsvm_formatted_data() was called. - -Other: - - Added a hard iteration limit to a number of the SVM solvers. - - Adrian Rosebrock graciously setup an OS X machine for dlib testing, which - resulted in improved CMake python scripts on OS X machines. - - Improved the way overlapping points are rendered by the perspective_window. - -</old> - -<!-- ************************************************************************************** --> - -<old name="18.15" date="Apr 29, 2015"> -New Features: - - Added a number of tools for working with 3D data: - - Added the perspective_window which is a tool for displaying 3D point clouds. - - Added camera_transform. It performs the 3D to 2D mapping needed to visualize 3D - data. - - Added point_transform_affine3d as well as functions for creating such transforms: - rotate_around_x(), rotate_around_y(), rotate_around_z(), and translate_point(). - - Added draw_solid_circle() for drawing on images. - - Added get_best_hough_point() to the hough_transform. - - Thanks to Jack Culpepper, the python API for object detection now outputs detection - confidences. - - Added lspi, an implementation of the least-squares policy iteration algorithm. - -Non-Backwards Compatible Changes: - - The shape_predictor and shape_predictor_trainer had a non-optimal behavior when used - with objects that have non-square bounding boxes. This has been fixed but will cause - models that were trained with the previous version of dlib to not work as accurately if - they used non-square boxes. So you might have to retrain your models when updating dlib. - -Bug fixes: - - Fixed a bug which prevented add_image_rotations() from compiling. - -Other: - - The imglab tool now allows the user to click and drag annotations around by holding - shift and right clicking. - -</old> - -<!-- ************************************************************************************** --> - -<old name="18.14" date="Mar 01, 2015"> -New Features: - - Added spectral_cluster() - - Added sub_image() and sub_image_proxy - - Added set_all_logging_headers() - -Non-Backwards Compatible Changes: - -Bug fixes: - - Fixed a bug that caused the correlation_tracker to erroneously trigger an assert when - run in debug mode. - -Other: - - Improved the usability of the new drectanle object. - - Optimized extract_fhog_features() for the case where cell_size==1. This makes it about - 4x faster in that case. - - Made it so you can compose point transform objects via operator *. - -</old> - -<!-- ************************************************************************************** --> - -<old name="18.13" date="Feb 03, 2015"> -New Features: - - Added the correlation_tracker object - - Added the option to force the last weight to 1 to structural_assignment_trainer. - - Added max_point_interpolated() - - Added the drectangle object - - New Python Tools: - - Patrick Snape contributed a Python binding for the face landmarking tool and - the general purpose shape prediction/training tools. - - Vinh Khuc contributed a Python binding for find_candidate_object_locations(), - dlib's implementation of the selective search object location proposal method. - -Non-Backwards Compatible Changes: - -Bug fixes: - - Fixed a bug in extract_image_chips() and get_mapping_to_chip() that caused - incorrect outputs when the requested chip stretched the image unevenly - vertically or horizontally. - - Made CMake check that libpng and libjpeg actually contain the link symbols - they are supposed to since, on some systems, these libraries aren't - installed correctly and will cause linker errors if used. - - Fixed assign_border_pixels(img, rect) so that it correctly zeros an image - when an empty rectangle is supplied. Previously, it did nothing to the - image in this case. - - Fixed compute_lda_transform() so it works properly when the class - covariance matrices are singular even after performing PCA. - - Fixed a bug in find_similarity_transform(). When given just two points as - inputs it would sometimes produce a reflection rather than a similarity - transform. - - Disabled all bindings to FFTW because FFTW isn't threadsafe. - -Other: - - Added an example program for dlib's SQLite API and made a few minor - usability improvements to the API as well. - -</old> - -<!-- ************************************************************************************** --> - -<old name="18.12" date="Dec 20, 2014"> -New Features: - - Upgraded fft() and ifft() to support 2D matrices. - - Added hough_transform - - Added skeleton() for finding the skeletonization of a binary image. - - Added distance_to_line(), clip_line_to_rectangle(), min_point(), and max_point(). - - Added a simple API for calling C++ from MATLAB. - -Non-Backwards Compatible Changes: - -Bug fixes: - - Fixed a compile time error that could happen when calling fft() for - certain input types. - - Fixed a compile time error that prevented auto_threshold_image() from - being used. - - Fixed name clashes with new version of Boost. - - Changed Python pickling code so it works with Python 3. - - Fixed CMake compile time error related to finding fftw. - -Other: - - Made extract_image_chips() much faster when extracting unscaled image chips. -</old> - -<!-- ************************************************************************************** --> - -<old name="18.11" date="Nov 13, 2014"> -New Features: - - Added save_jpeg() - - Added the option to use an identity matrix prior to vector_normalizer_frobmetric. - - Made the extract_image_chips() routine more flexible, in particular: Added - get_mapping_to_chip(), get_face_chip_details(), map_det_to_chip(), and also - upgraded chip_details so you can specify a chip extraction by a bunch of - point correspondences between the chip and the original image. - - Added a set of local-binary-pattern based feature extractors: - make_uniform_lbp_image(), extract_histogram_descriptors(), - extract_uniform_lbp_descriptors(), and extract_highdim_face_lbp_descriptors() - - Added compute_lda_transform() - - Added equal_error_rate() - - Added cast_to() to the type_safe_union. This allows you to get the - contents of a const type_safe_union. - -Non-Backwards Compatible Changes: - -Bug fixes: - - Changed noncopyable.h to avoid a name clash with boost 1.56 - - On some platforms hostname_to_ip() would erroneously return 0.0.0.0. This - has been fixed. - -Other: -</old> - -<!-- ************************************************************************************** --> - -<old name="18.10" date="Aug 28, 2014"> -New Features: - - Added find_similarity_transform() - - Added the ability to upgrade a auto_mutex_readonly from a readonly lock to a write - lock. - - Added an implementation of the paper "One Millisecond Face Alignment with an Ensemble - of Regression Trees" by Vahid Kazemi and Josephine Sullivan which appeared in this - year's CVPR conference. Therefore, dlib now includes tools for learning shape models - and also comes with a state-of-the-art face landmark locator. See the - face_landmark_detection_ex.cpp and train_shape_predictor_ex.cpp example programs for - an introduction. - -Non-Backwards Compatible Changes: - - Made the interface to all the image processing routines more generic. In particular, - it is now easier to use arbitrary image types with dlib. The new generic image - interface is defined in dlib/image_processing/generic_image.h and simply consists of - seven user defined global functions and a traits template. Any user code that was - using array2d objects to represent images will still work. However, if you had been - using your own custom image object you will need to provide implementations of the - seven functions. Instructions for how to do this are in - dlib/image_processing/generic_image.h. - -Bug fixes: - - Changed the murmur hash implementation to avoid any possibility of strict aliasing - violations in user code, even when things get inlined in unfavorable ways. - - Fixed a color space handling bug in resize_image() that caused bad looking outputs in - some cases. - - If "cmake" was a substring of the full path to your source code folder then the cmake - scripts would fail. This has been fixed. - - Fixed a compile time error that could occur when using find_max_single_variable(). - -Other: - - load_image() now uses the internal file header information to detect the - image format rather than looking at the file extension. - - Renamed unit test program to dtest avoid warnings from CMake. - - cross_validate_trainer() and cross_validate_trainer_threaded() no loner make copies - of the training data. This significantly reduces their RAM usage for large datasets. - - Changed the serialization code for C-strings so that they don't save the null - terminator byte. This makes their serialization format the same as the format for - std::string. The code should still be able to read all previously serialized data - correctly, so the change is backwards compatible with previous versions of dlib. - - Changed the evaluate_detectors() routine so that it applies non-max suppression to - each detector individually. This way one detector doesn't stomp on the output of - another detector. - - Made the version of draw_line() that draws onto a regular image use alpha blending - for drawing diagonal lines. -</old> - -<!-- ************************************************************************************** --> - -<old name="18.9" date="Jun 16, 2014"> -New Features: - -Non-Backwards Compatible Changes: - -Bug fixes: - - The new simplified serialization API that works like serialize("filename")<<object - was not opening files in binary mode and therefore didn't work properly on Windows. - This has been fixed. - -Other: - -</old> - -<!-- ************************************************************************************** --> - -<old name="18.8" date="Jun 02, 2014"> -New Features: - - Added the ability to set a previously trained function as a prior to the - svm_multiclass_linear_trainer, svm_c_linear_trainer, and svm_rank_trainer - objects. - - Added a user settable loss to the structural_assignment_trainer and - structural_track_association_trainer objects. - - Added evaluate_detectors(), a function for efficiently running multiple fHOG - based object detectors. - - Added the new split_on_first() and split_on_last() string manipulation functions. - - Added locally_change_current_dir, a RAII tool for switching between directories. - - You can now make a 1x1 matrix containing a single value by calling mat() on a single - scalar value. - - The point transform functions and frobmetric_training_sample are now serializable. - - Added a simplified operator << and >> based syntax for serializing to and - from files. So now you can serialize to a file using a syntax of: - serialize("myfile.dat") << myobject << another_object; - and then load those objects from disk via: - deserialize("myfile.dat") >> myobject >> another_object; - An arbitrary number of objects can be serialized or deserialized by - chaining the << and >> operators. - -Non-Backwards Compatible Changes: - -Bug fixes: - - Fixed a bug pointed out by Daniel Girardeau-Montaut. The covariance() - function didn't work on non-double valued matrices. - - Fixed a bug in the backtracking_line_search() function pointed out by - Ping-Chang Shih. The function ignored the max_iter parameter. - - Fixed a compiler error encountered when using clang 3.4 on Mac OS X 10.9. - Thanks to Martin Fergie for reporting this problem. - - Fixed a potential divide by zero in draw_fhog() - -Other: - - Added an example program showing how to set a custom logger output hook. - - Made linear decision_functions which use sparse vectors much faster. - -</old> - -<!-- ************************************************************************************** --> - -<old name="18.7" date="Apr 09, 2014"> -New Features: - - Added a Python API for working with fHOG based object detectors. See the - new python example programs train_object_detector.py and face_detector.py for - more details. - - Added the ability to use a user supplied fHOG style feature extractor with - the scan_fhog_pyramid object. So now you can define your own version of HOG - for use with these tools. - - The oca solver now supports taking a user supplied prior vector. That is, - it lets you use a regularizer like ||w-prior||^2 instead of the usual - ||w||^2 regularizer. - - Added the structural_track_association_trainer object. It is a structural - SVM tool for creating multi-target tracking algorithms. See the - learning_to_track_ex.cpp example program for an introduction. - - Added the following minor utility functions: nearest_center(), - add_image_rotations(), set_aspect_ratio(), and tile_images(). - -Non-Backwards Compatible Changes: - - Refactored the load_image_dataset() routines so they are easier to use and - more flexible. This introduces a slight backwards incompatibility in that - the version that loads full_object_detection objects now returns an ignore - rectangle set instead of a parts name list. Other than that the changes - are backwards compatible with previous versions of dlib. - - Added a bias term to the assignment_function's model so the user doesn't - need to remember, or even understand, that they should add it themselves. - However, this change breaks backwards compatibility with the previous - serialization format for assignment_function objects. - -Bug fixes: - - Fixed a number of compile time errors that could occur in rare cases. - - The stopping condition for the svr_linear_trainer was too tight, causing it - to take an excessive amount of time to converge in some cases. - - Disabled use of XIM for X11 windowing since it makes programs hang on some - systems. However, this means the wide character input methods won't work on - X11 systems anymore. - - Fixed a bug in randomize_samples() which caused the outputs to be not as - random as they should be. - - Fixed dlib's CMakeLists.txt file so that the "use FFTW" option actually - causes the build to use FFTW. - - Fixed a compile time error that triggered when trying to link with FFTW. - - mat() did not work correctly when used with std::vector<bool> objects. - This has been fixed. - -Other: - -</old> - -<!-- ************************************************************************************** --> - -<old name="18.6" date="Feb 03, 2014"> -New Features: - - Object Detection Tools: - - Added scan_fhog_pyramid, a tool for creating Histogram of Oriented Gradient (HOG) - based object detectors. - - Added get_frontal_face_detector(), a HOG based face detector. - - Added an option to include "ignore/don't care" truth boxes to the - structural_object_detection_trainer. This allows a user to tell the trainer that - they don't care if certain objects are detected or not detected. - - Image Processing Tools: - - Added extract_image_chips() - - Added a version of draw_rectangle() for drawing on images. - - The spatial filtering routines now support even sized filters. - - Added flip_image_dataset_left_right(), upsample_image_dataset(), and - rotate_image_dataset(). - - Machine Learning Tools: - - Added a nuclear norm regularization option to the structural SVM solver. - - Added the option to learn only non-negative weights to the - svm_multiclass_linear_trainer. - - Speed Improvements: - - The svm_multiclass_linear_trainer, one_vs_one_trainer, and one_vs_all_trainer - objects are now multithreaded. This also means you have to #include - dlib/svm_threaded.h instead of dlib/svm.h to use these tools. - - A number of image processing tools can now optionally use SSE and AVX instructions - and are therefore considerably faster. In particular, the following tools have been - accelerated: extract_fhog_features, resize_image, pyramid_down, pyramid_up, - spatially_filter_image_separable, and spatially_filter_image. - - Added an inv() routine that inverts point transformation functions. - - Added a sign() routine for matrix objects. - -Non-Backwards Compatible Changes: - - The spatial image filtering functions have the following changes: - - They no longer zero the image borders when you set the add_to parameter to true. - - The spatially_filter_image_separable_down() routine now only allows grayscale - output images. - - Changed the default parameters of the test_box_overlap object. Now it defaults to - using exactly the PASCAL VOC match criterion. - - To use the svm_multiclass_linear_trainer, one_vs_one_trainer, or one_vs_all_trainer - objects you now have to #include dlib/svm_threaded.h instead of dlib/svm.h. - - pyramid_up() no longer has a levels option. - -Bug fixes: - - Fixed a compile time bug that could occur when wide character strings were - serialized. - - Fixed a compile time bug occurring in gcc 4.7.1 on SUSE Linux. Thanks to Volker - Härtel for finding this. - - Fixed compile time errors that occurred when using gcc on cygwin. - - Fixed a compile time bug that could occur when serializing mlp objects. - - Fixed a bug in the bigint object that caused division to sometimes produce incorrect - results. - - Fixed a bug which sometimes caused load_image_dataset() to erroneously report that - the dataset file could not be found. - - Fixed a bug in the structural_object_detection_trainer that caused it to erroneously - throw a impossible_labeling_error exception in certain rare cases. - - Updated find_max_factor_graph_nmplp() to use the improved version of the algorithm - from the 2011 paper Introduction to dual decomposition for inference by David Sontag, - Amir Globerson, and Tommi Jaakkola. The original algorithm presented in their 2008 - paper had an error that negatively affected its convergence. Thanks to James Gunning - for pointing this out. - -Other: - - Fixed many compiler warnings in gcc 4.8. - - Made many of the mat() converters bind the resulting matrix expressions into BLAS - functions. - - libpng and libjpeg are now included in the dlib/external folder to enable easy static - linking to these libraries on platforms that typically don't have them (e.g. Windows). - Moreover, dlib's cmake files will automatically perform this static linking when no - copy of these libraries is found on the system. -</old> - -<!-- ************************************************************************************** --> - -<old name="18.5" date="Oct 22, 2013"> -New Features: - - Added routines for performing BFGS and L-BFGS optimization with box constraints. - See the new find_min_box_constrained() and find_max_box_constrained() routines. - - Added vector_normalizer_frobmetric. This is a tool for learning a - Mahalanobis distance metric. - - The user can now set different loss values for false alarming vs. getting a - correct detection when using the structural_sequence_segmentation_trainer. - - Added an overload of clamp() that lets you use matrix valued lower/upper bounds. - - New image processing tools: - - Added the scan_image_custom object, split_array(), and add_image_left_right_flips(). - - Added extract_fhog_features(), this is a function for computing - Felzenszwalb's 31 channel HOG image representation. - -Non-Backwards Compatible Changes: - - Refactored the image pyramid code. Now there is just one templated object called - pyramid_down and you give it the downsampling amount as a template argument. To make - old code work with this change use the following substitutions: - change pyramid_down to pyramid_down<2> - change pyramid_down_3_2 to pyramid_down<3> - change pyramid_down_4_3 to pyramid_down<4> - change pyramid_down_5_4 to pyramid_down<5> - -Bug fixes: - -Other: - - Made the structural SVM solver slightly faster. - - Moved the python C++ utility headers from tools/python/src into dlib/python. - - The PNG loader is now able to load grayscale images with an alpha channel. - - Removed checks that prevented users from using references to functions with the - optimization code and forced the use of function pointers. This was to avoid - triggering a bug in gcc 4.0. Since that compiler is no longer officially supported - by dlib I've removed these checks to increase usability. - - Made resize_image() use bilinear interpolation by default and also added a special - version of it that is optimized for this case. - - Dlib's cmake files will now automatically link to the Intel MKL on MS Windows - platforms if the MKL is installed. -</old> - -<!-- ************************************************************************************** --> - -<old name="18.4" date="Aug 14, 2013"> -New Features: - - Added Python interfaces to dlib's structural support vector machine solver and - Hungarian algorithm implementation. - - Added running_cross_covariance - - Added order_by_descending_distance() - - Added is_finite() - - Added the csv IO manipulator that lets you print a matrix in comma separated value - format. - -Non-Backwards Compatible Changes: - - Changed the object detector testing functions to output average precision instead of - mean average precision. - - Added an option to weight the features from a hashed_feature_image relative to the - number of times they occur in an image. I also made it the default behavior to use - this relative weighting and changed the serialization format to accommodate this. - -Bug fixes: - - Fixed typo in learn_platt_scaling(). The method wasn't using the exact prior - suggested by Platt's paper. - - Fixed a bug in running_scalar_covariance that caused the covariance() and - correlation() methods to output the wrong answer if the covariance was negative. - -Other: - - Gave the image_window the ability to tie the mouse and keyboard events together such - that it is possible for a user to listen for both simultaneously. - - A number of changes were made to the structural_svm_problem's code which make it - significantly faster in some cases. - - Added Steven Van Ingelgem's patch to the HTTP server which makes operations on HTTP - headers case-insensitive. - -</old> - -<!-- ************************************************************************************** --> - -<old name="18.3" date="June 21, 2013"> -New Features: - - Machine Learning: - - Added the svr_linear_trainer, a tool for solving large scale support vector - regression problems. - - Added a tool for working with BIO and BILOU style sequence taggers/segmenters. - This is the new sequence_segmenter object and its associated - structural_sequence_segmentation_trainer object. - - Added a python interface to some of the machine learning tools. These - include the svm_c_trainer, svm_c_linear_trainer, svm_rank_trainer, and - structural_sequence_segmentation_trainer objects as well as the cca() - routine. - - Added point_transform_projective and find_projective_transform(). - - Added a function for numerically integrating arbitrary functions, this is the - new integrate_function_adapt_simpson() routine which was contributed by - Steve Taylor - - Added jet(), a routine for coloring images with the jet color scheme. - -Non-Backwards Compatible Changes: - -Bug fixes: - - Fixed a bug in hysteresis_threshold() that caused it to produce incorrect - outputs in some cases. - - Fixed a segmentation fault in the eigenvalue_decomposition object which - could occur when NaN valued inputs were given. - -Other: - - Made image saving routines work on matrix objects in addition to array2d objects. - - The machine learning page now contains a flow chart to help new users - select a machine learning tool appropriate for their task. - -</old> - -<!-- ************************************************************************************** --> - - -<old name="18.2" date="May 30, 2013"> -New Features: - - Object Detection Tools: - - Added another image scanning tool similar to scan_image_pyramid. This - is the new scan_image_boxes object. It allows a user to easily specify - an arbitrary set of object boxes which should be checked by an object - detector rather than scanning a fixed sized window over the image as is - done by the scan_image_pyramid tool. This allows more flexible scanning - strategies. For example, it is now possible to use the selective search - method implemented by the new find_candidate_object_locations() routine. - - Added the binned_vector_feature_image. - - Upgraded the object_detector so that you can use the adjust_threshold - argument for all versions of the operator() method. - - Added remove_unobtainable_rectangles() - - Hashing Tools: - - Added a set of new locality sensitive hashing functions meant for use - with larger vectors and higher bit sizes than the current LSH tools. - These are the new hash_similar_angles_xxx objects. - - Added find_k_nearest_neighbors_lsh() and hash_samples() - - Added create_max_margin_projection_hash() - - New Matrix Routines: linpiece(), fft(), and ifft() - - Added numeric constants and additional statistics to the running_stats - object. This code was contributed by Steve Taylor. - - Added the image_window::get_next_keypress() routine. This tool allows a - user to easily find out which keyboard key the user is pressing. - -Non-Backwards Compatible Changes: - - Changed the object_detector interface slightly. In particular, it no - longer adds the adjust_threshold argument to the output scores. - - The object detector testing functions now output mean average precision in - addition to precision and recall. - - Changed how dlib does serialization in a number of ways: - - The running_stats and scan_image_pyramid objects have had their - serialization format changed in a way that breaks backwards - compatibility. This means serialized versions of these objects can't be - loaded by the new version of dlib. - - Changed the format dlib uses when it serializes floating point values. - Previously, we used an ASCII based format. Dlib now uses a much more - efficient binary format. However, the deserialization routines have - been made backwards compatible with the previous format. So dlib can - still deserialize older data but older software won't be able to read - the new format. - - Changed the serialization formats for the matrix and array2d objects so - that either object can be deserialized into the other. This was done in a - way that is backwards compatible with previous versions of dlib. That is, - we can still load data serialized by previous dlib versions. However, - older versions of dlib can't load the new serialization format. - -Bug fixes: - - Fixed a bug in save_dng() that happened sometimes when saving images with - unsigned char pixels. - - The test_ranking_function() and cross_validate_ranking_trainer() routines - computed incorrect MAP scores when the learned function output a constant - value for all samples. This has been fixed. - -Other: - - Gave load_image_dataset() the ability to skip images that don't have any - ground truth boxes. - - Changed average_precision() to use interpolated precision. So now it uses - the same metric as the one used by the Pascal VOC challenge. - - Upgraded the dng image format so it can natively store floating point - pixel types without any information loss. - -</old> - -<!-- ************************************************************************************** --> - -<old name="18.1" date="Mar 25, 2013"> -New Features: - - Added svd_fast(), a routine for computing a singular value decomposition of very - large matrices. - - Added cca(), a routine for doing canonical correlation analysis on very large - and high-dimensional datasets. - - Added tools for creating parallel for loops, see parallel_for(). - - Added some features to the image display widgets to let the user easily - get information about where the user is clicking. This is the new - get_next_double_click() routine. - - Added an operator>> for matrix objects which allows you to read in ASCII - matrices using the format used by operator<<. - - Added serialization support for std::vector<bool>. - - Added the following new minor objects and routines: average_precision(), - make_sparse_vector_inplace(), orthogonalize(), count_bits(), draw_surf_points(), - hamming_distance(), cosine_distance, and negative_dot_product_distance. - -Non-Backwards Compatible Changes: - - Changed ranking evaluation functions to return the mean average precision - in addition to just raw ranking accuracy. This changes their return types - from double to matrix<double,1,2>. - - Generalized segment_image() so it works on any pixel type or array of - vectors. I also changed its interface slightly. In particular, I removed - the min_diff parameter and replaced it with an explicit min_size parameter. - - Changed how the SURF descriptor is computed slightly to improve its - accuracy. The interface to the user has not been changed, however, the - number and position of detected SURF points might be different than in - previous dlib versions. - -Bug fixes: - - Fixed an endianness bug in the PNG I/O functions which occurred when 16bit - grayscale PNGs were used. - - Fixed a bug which could potentially occur when empty std::vector<char> or - std::vector<unsigned char> were serialized. - - There was a bug in the version of draw_line() that draws directly onto an - array2d type image (not the one that draws onto a GUI canvas object). The - bug triggered whenever a perfectly horizontal or vertical line that extended - outside the image was drawn. This has been fixed. - - Fixed a bug in the Windows implementation of the signaler object, which - was found by Isaac Peterson. The bug caused the program to deadlock if - signal() or broadcast() was called at exactly the same time a - wait_or_timeout() function timed out. - - Fixed a bug in the image_window and image_display GUI tools which caused - them to not redraw overlay lines correctly in certain cases involving - non-default zoom levels. - - Switched randomly_color_image() to use the non-pointer based version of - murmur_hash3() to avoid violation of the strict aliasing rule. In - particular, the previous version didn't work correctly in gcc 4.7.2 when - optimizations were enabled. - - Visual Studio 2012's iostreams library has a bug which caused the - iosockstream to crash on use. This version of dlib has been changed to - avoid triggering this bug. - -Other: - - Refactored the Platt scaling code a little. Now there is a function, - learn_platt_scaling(), that allows you to directly call the Platt scaling - code without supplying a trainer object. - - Optimized the oca and structural SVM solvers. They are now a little bit faster - than in previous dlib releases. - -</old> - -<!-- ************************************************************************************** --> - -<old name="18.0" date="Feb 04, 2013"> -New Features: - - Machine Learning - - Added svm_rank_trainer, an optimized implementation of the SVM-Rank algorithm. - - Added rank_unlabeled_training_samples(), an implementation of the SVM Active - Learning algorithm. - - Added svm_c_linear_dcd_trainer, a warm-startable SVM solver using the dual - coordinate descent algorithm used by liblinear. - - Added the ability to force the last element of a weight vector to 1 to the - following objects: svm_c_linear_trainer, svm_c_linear_dcd_trainer, - svm_rank_trainer, and oca. - - Added the ability to learn non-negative weight vectors to the - structural_sequence_labeling_trainer object. - - Networking - - Added an iosockstream object. - - Added a method to the server object that lets a user set the graceful close timeout - time to something other than the default of 500ms. - - Linear Algebra - - Added the gaussian_randm() function. - - Added the find_affine_transform() function. - - Added the mat() function. It combines the array_to_matrix(), vector_to_matrix(), - pointer_to_column_vector(), and pointer_to_matrix() methods all into one convenient - interface. mat() also works for Armadillo and Eigen matrices. - - Added STL style begin() and end() methods to matrix and matrix_exp. - - Added an overload of sparse_matrix_vector_multiply() that multiplies a dense matrix - with a sparse vector. - - Made toMat() work with the matrix object in addition to array2d style images. - - Graphical User Interface Tools - - Added draw_solid_convex_polygon(). - - Added an overload of draw_image() that's useful for drawing images and doing - interpolation at the same time. - - Added the on_view_changed() callback to zoomable_region and scrollable_region widgets. - - Added parse_trees_to_string() and parse_trees_to_string_tagged(). - - Added lambda function support to the timeout object. - - Added the vectorstream object. - - Added the parse_xml() routines. - - Added a group name feature to the command line parser. Now it is possible to make - print_options() print related options in named groups. - - Added the following new hashing functions: murmur_hash3_128bit_3(), - murmur_hash3_2(), murmur_hash3_3(), uniform_random_hash(), gaussian_random_hash() - as well as hash() overloads for uint32, uint64, and std::pair. - -Non-Backwards Compatible Changes: - - Made the svm_c_linear_trainer use the risk gap to decide when to stop. This was done - because it is how all the other OCA based SVM tools in dlib decide when to stop. - However, it might cause the outputs to be slightly different in this version of dlib. - - It is now illegal to call unlock() on a mutex when the mutex is not owned by the - calling thread. The most likely reason for doing this was to unlock early in an area - locked by an auto_mutex. Old code that does this can be fixed by calling auto_mutex's - unlock() function instead. - - Removed the structural_assignment_trainer::learns_nonnegative_weights() routine - and moved its functionality into the feature extraction interface used by this object. - -Bug fixes: - - Fixed a bug in find_max_factor_graph_nmplp() which caused it to not work properly on - some compilers. - - Fixed a bug pointed out by Joel Nelson in the version of md5() that took an istream. - The bug caused the function to crash on strings longer than 56 characters. - -Other: - - dlib now has an excellent new logo thanks to Yasser Asmi. - - Added a new documentation page for the various linear algebra tools. - - The following objects were turned into single implementation components: - sockstreambuf, timeout, member_function_pointer, xml_parser, linker, - bound_function_pointer, and timer. - -</old> - -<!-- ************************************************************************************** --> - -<old name="17.49" date="Dec 18, 2012"> -New Features: - - Machine Learning - - Added the ability to learn non-negative weight vectors to the - structural_assignment_trainer object. - - Added two new graph clustering algorithms: Chinese Whispers and Newman's modularity - clustering. - - Added a number of new graph manipulation tools: sparse_matrix_vector_multiply(), - is_ordered_by_index(), find_neighbor_ranges(), convert_unordered_to_ordered(), - remove_duplicate_edges(), and the ordered_sample_pair object. - - Networking - - Added a set of tools for creating applications using the Bulk Synchronous Parallel - computing model. See the new bsp_ex.cpp example program for an introduction. - - Added a routine that lets a user disable Nagle's algorithm on a TCP connection. - - Added an asynchronous start routine to the server object. This is the new - start_async() method. - - Added the network_address object. - - Added connect_to() to the bridge interface. - - Added find_max_parse_cky(), a method implementing the well known CKY algorithm for - parsing probabilistic context free grammars. - - Added the ability to label parts of objects with the mouse to the image_display - widget. - - Added the ability to put overlay circles and full_object_detections into the - image_window widget. - - Added a stddev() for matrix objects. - - Added operator+() for running_stats and running_scalar_covariance. - - Added an overload of murmur_hash3_128bit() that takes 4 integers instead of a block of - memory. - - Added rand::get_random_64bit_number(). - -Non-Backwards Compatible Changes: - - Changed the image_dataset_metadata XML reading tools to use a map of strings to points - to represent object parts. This change removes the old head point from a box since - this information can now be represented in the parts map. - - The syntax for passing order_by_distance and order_by_index to std::sort() is now - slightly different since these functions are now templates. However, this change - allows them to work on any kind of sample_pair or ordered_sample_pair object. - - The default distance value of a sample_pair is now initialized to 1 instead of - infinity. - -Bug fixes: - - Added a patch, contributed by Martin Müllenhaupt, to fix a minor bug in the SQLite - bindings. - - Fixed a typo which would prevent code that called running_stats::max_n() from - compiling. - -Other: - - Added a new documentation page for the various graph tools in dlib. - - Added support for Visual Studio 2012. - - Switched the sample_pair object to use double to store its distance value instead of - float. - - Added William Sobel's patch to the web server that improves its flexibility and - security. - - Changed the server object so you don't have to use the server::kernel_1a syntax to - declare it anymore. Now you just say server, server_iostream, or server_http - depending on which one you want. - - Changed the cmd_line_parser so you don't have to use the ::kernel_1a syntax anymore. - Now it is declared like a normal single implementation object. - - Set the default max number of connections a server will accept at a time to 1000 - rather than the previous default of infinity. - -</old> - -<!-- ************************************************************************************** --> - -<old name="17.48" date="Oct 18, 2012"> -New Features: - - Added more overloads of find_max_factor_graph_potts() to make applying it - over a Markov random field of image pixels really simple. - - Added overloads of serialize()/deserialize() so that they can serialize - Google protocol buffer objects. - - Image Processing: - - Added find_points_above_thresh() - - Added max_filter() - - Added scan_image_movable_parts() - - Added sum_filter_assign() - - Added the full_object_detection object. - - Added the ability to model objects with movable parts into the - scan_image_pyramid object. This update also includes all the needed tools - to train movable part models using the structural_object_detection_trainer. - - Machine Learning: - - Added a per node loss option to the structural_svm_graph_labeling_problem's - interface. - - Added Emanuele Cesena's implementation of Sammon's nonlinear dimensionality - reduction method. - -Non-Backwards Compatible Changes: - - To support movable part models, the serialization format of scan_image_pyramid - objects was modified. This breaks backwards compatibility with the previous - format for scan_image_pyramid objects as well as object_detector instances - that use the scan_image_pyramid. - -Bug fixes: - - Fixed a bug in auto_threshold_image() that caused it to give bad outputs - when used with very large images. - -Other: - - Updated find_max_factor_graph_potts() to correctly say you can use infinite - weights for the factor_value_disagreement() values since the code actually - supports this. - - Made integer serialization about 3 times faster. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.47" date="Jun 15, 2012"> -New Features: - - Improvements to linear algebra tools: - - Added the lowerbound() and upperbound() routines for thresholding dense - matrices. - - Refined the tools for working with sparse vectors. In particular, - the following functions were added: min(), max(), make_sparse_vector(), - add(), and subtract(). A number of existing routines were also updated - to work with both sparse and dense vectors so that templated code which - works on both vector types is simpler to write. - - Added the += and -= operators to the set_subm(), set_rowm(), and set_colm() - tools for operating on submatrices. - - Optimization: - - Added a new quadratic program solver, solve_qp4_using_smo(). This new - solver is useful for solving quadratic programs corresponding to - non-negative constrained primal quadratic programs. - - Added an optional non-negativity constraint to the oca optimizer. - - Added the min_cut object. It provides a method to find the minimum weight - cut on a graph. - - Added tools for finding the maximum probability assignment in a Potts - style Markov random field. See the find_max_factor_graph_potts() routine - for details. - - Machine Learning: - - Added structural SVM tools for learning the parameters of a Potts style - Markov random field. See the structural_graph_labeling_trainer and - graph_labeler objects as well as their associated example program for - details. - - Added the ability to learn only non-negative weights to the - svm_c_linear_trainer. - - Improved Integration with OpenCV: - - Updated the cv_image object so it works with cv::Mat as well as IplImage. - - Added the toMat() routine for converting from a dlib style image to an - OpenCV cv::Mat image. - -Non-Backwards Compatible Changes: - - Removed the dlib::sparse_vector namespace. Everything from this namespace - was moved into the normal dlib:: namespace so that code which works with - both sparse and dense vectors is more cohesive. - -Bug fixes: - - Fixed a bug in find_max_factor_graph_viterbi() which sometimes occurred when - the model order was larger than the number of variables. - - Fixed a bug which caused a compiler error if you tried to call dot() on two - 1x1 matrices which were statically dimensioned. - -Other: - - Improved existing documentation: added pictures of the gui widgets, - added documentation of the dlib::bridge protocol, and other minor - usability improvements. -</old> - -<!-- ******************************************************************************* --> - -<old name="17.46" date="Apr 11, 2012"> -New Features: - - Image Processing: - - Added the option to make the features generated by poly_image rotationally - invariant. - - Added a set of routines for warping, scaling, and resizing images. - See the new "Scaling and Rotating" section of the image processing - documentation for details. - - Added the heatmap() routine for converting an image into a heatmap. - - Machine Learning - - Updated the sequence labeling trainer to allow the user to set different - loss values for different labels. - - Added the rls object. It is an implementation of the linear recursive - least squares algorithm. - - Added the get_option() routines which slightly simplify option parsing - from the command line and config files. - - Added the 128bit version of Murmur hash. - - Added the kalman_filter and rls_filter objects. These are tools for - performing Kalman filtering and recursive least squares filtering. - - Added the circular_buffer object. - -Non-Backwards Compatible Changes: - - The poly_image generates slightly different features in this new release. - Therefore, classifiers trained using the previous version will need to be - retrained if they are switched to the new version of poly_image. - - Changed the xcorr() functions so they take the complex conjugate of the right - hand arguments if they are complex numbers. This way they do a proper - cross-correlation and also mirror the behavior of MATLAB. However, this - breaks backwards compatibility with the previous behavior of xcorr(). - - Previously, dlib included two versions of dlib::array. However, to - simplify the user interface, dlib now includes only the contiguous - memory implementation of dlib::array. This change should only affect - you if you wrote code which assumed dlib::array::set_max_size() only - allocated a small amount of RAM. The new behavior is similar to the - std::vector::reserve() routine. That is, dlib::array::set_max_size() - will allocate the requested amount of memory immediately. - -Bug fixes: - - Fixed a bug which caused certain matrix expressions to not compile - when the BLAS bindings were enabled. In particular, expressions which - involved a 1x1 matrix sometimes didn't compile. - -Other: - - Made the matrix routines min(), max(), sum() and mean() work with - complex numbers. - - Turned the array object into a single implementation object. Now arrays - can be created using the normal array<type> obj; syntax. Additionally, - all extensions were merged into the array object. - - Added an example program which better documents how to create training - data for the object detection tools as well as how this data can be used. - See the train_object_detector.cpp example for details. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.45" date="Jan 29, 2012"> -New Features: - - 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. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.44" date="Nov 21, 2011"> -New Features: - - 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: - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.43" date="Oct 21, 2011"> -New Features: - - 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. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.42" date="Jun 24, 2011"> -New Features: - - 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: - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.41" date="Jun 12, 2011"> -New Features: - - 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. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.40" date="Jun 05, 2011"> -New Features: - - 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>. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.39" date="May 22, 2011"> -New Features: - - 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. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.38" date="May 7, 2011"> -New Features: - - 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 - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.37" date="Mar 24, 2011"> -New Features: - - 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. -</old> - -<!-- ******************************************************************************* --> - -<old name="17.36" date="Mar 2, 2011"> -New Features: - - 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> - -<!-- ******************************************************************************* --> - -<old name="17.35" date="Feb 10, 2011"> -New Features: - - Added the rr_trainer. It is a version of krr_trainer which is optimized - for use with the linear_kernel. - - Added the approximate_distance_function() routine. It is the core optimizer - behind the reduced2() trainer adapter. - - Added an any_function which supports the same functionality as std::function - from the upcoming C++0x standard. I added this so dlib can be modified to - easily support lambda functions while still being compilable with compilers - which don't support the new std::function. - - Added overloads of all the GUI event handlers so you can use general functions - as callbacks (via any_function). This way, if you have a C++0x compiler, you - can use lambda functions with the event handlers. - - Added the split() function for splitting up strings. - -Non-Backwards Compatible Changes: - - Improved the distance_function object by turning it into a properly - encapsulated class rather than just a simple struct. I also added - overloaded +, -, *, and / operators for this object so you can do the - kind of arithmetic you would expect on an object which represents a - point in a vector space. This breaks backwards compatibility with - the previous interface though as the member variables are now private. - -Bug fixes: - - Fixed a compile-time error in the kernel_matrix(). - - Fixed a bug in an assert in the spatially_filter_image() function. - - Applied a patch from Nils Labugt which fixes a runtime bug in the gui_core - component. The bug caused a crash when using X11 and Ubuntu 10.10 in - certain cases. - - Updated code so that it compiles with the clang compiler. - -Other: - - Updated the image_display widget so you can zoom in and out using the - mouse wheel. -</old> - -<!-- ******************************************************************************* --> - -<old name="17.34" date="Jan 03, 2011"> -New Features: - - 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. -</old> - -<!-- ******************************************************************************* --> - -<old name="17.33" date="Dec 05, 2010"> -New Features: - - 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. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.32" date="Nov 13, 2010"> -New Features: - - 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. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.31" date="Sep 15, 2010"> -New Features: - - 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. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.30" date="Jul 28, 2010"> -New Features: - -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: - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.29" date="Jul 25, 2010"> -New Features: - - 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 its 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. -</old> - -<!-- ******************************************************************************* --> - -<old name="17.28" date="Jun 14, 2010"> -New Features: - - 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. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.27" date="May 16, 2010"> -New Features: - - 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. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.26" date="Mar 07, 2010"> -New Features: - - 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 - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.25" date="Feb 05, 2010"> -New Features: - - 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> - -<!-- ******************************************************************************* --> - -<old name="17.24" date="Jan 04, 2010"> -New Features: - - 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. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.23" date="Oct 20, 2009"> -New Features: - - 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. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.22" date="Sep 10, 2009"> -New Features: - - 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: - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.21" date="Aug 30, 2009"> -New Features: - - 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> - -<!-- ******************************************************************************* --> - -<old name="17.20" date="Jul 11, 2009"> -New Features: - - 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: - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.19" date="May 25, 2009"> -New Features: - - 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. -</old> - -<!-- ******************************************************************************* --> - -<old name="17.18" date="Apr 5, 2009"> -New Features: - - 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 - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.17" date="Mar 16, 2009"> -New Features: - - 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> - -<!-- ******************************************************************************* --> - -<old name="17.16" date="Mar 08, 2009"> -New Features: - - Matrix related - - Added the find_min_and_max(), index_of_min(), index_of_max(), trace(), - randm(), linspace(), logspace(), and cartesian_product() functions. - - Machine learning related - - Added the offset_kernel - - Added some functions to the kcentroid to allow the user to compute - the inner_product of kcentroids as well as a few other useful things. - - Added a kernelized version of the Pegasos SVM training algorithm. - -Non-Backwards Compatible Changes: - - Changed the range() function so that it returns row vectors - instead of column vectors. - -Bug fixes: - - Changed threading code to avoid a potential race condition during - program termination. - - Fixed a few incorrect DLIB_ASSERT statements - - Fixed a bug in the way Content-type was handled in HTTP posts. - - Fixed a bug in subm() that showed up when statically dimensioned row - vectors were used to select a sub matrix. - -Other: - - Added some functions to the rectangle to make it easy - to get the corner points. - - The cross validation functions no longer allow invalid_svm_nu_error - exceptions to escape. Instead, they are assigned low CV scores. - - Made std_vector_c able to copy directly from std::vector objects. - - Added a get_socket_descriptor() function to the connection class. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.15" date="Feb 03, 2009"> -New Features: - - Matrix related - - Added QR, LU, Cholesky, and eigenvalue decomposition class objects - - Added overloads for rowm() and colm() that allow you to pick out - less than an entire vector - - Added the lowerm() and upperm() functions - - Added the const_temp_matrix class - -Non-Backwards Compatible Changes: - - Renamed the cholesky_decomposition() function to chol() - -Bug fixes: - - Fixed some errors in the requirements for calling the new rowm() and - colm() functions. - - Fixed dlib::abs() so that it returns the right type when used - with complex matrices. - - Fixed a race condition in the logger object. It was missing a needed call - to unregister_thread_end_handler(). What could happen in some scenarios is, - during program termination, a global part of the logger object could be destructed - when it still had outstanding thread end handlers registered to it. - -Other: - - Added an example program that shows how to use the optimization - functions. - - Gave the matrix object the ability to factor expressions containing - trans() function calls into more efficient forms. - - Generally cleaned up the matrix code -</old> - -<!-- ******************************************************************************* --> - -<old name="17.14" date="Jan 18, 2009"> -New Features: - - Added the multi-line text_box GUI widget. - - Added the type_safe_union object - -Non-Backwards Compatible Changes: - - Renamed the array::expand() function to array::resize() since it does - basically the same thing as std::vector::resize() and more than one - user has told me they found the name "expand" to be confusing. - -Bug fixes: - -Other: - - Added an example showing how to use the type_safe_union and pipe - together. - - Added a page to the documentation that discusses the dlib coding - standards and how to contribute to the project. -</old> - -<!-- ******************************************************************************* --> - -<old name="17.13" date="Jan 05, 2009"> -New Features: - - Added the bound_function_pointer object. - - Added support for futures to the thread_pool object. - - Added a set of objects that makes it possible to create simulations - of quantum computing algorithms. - - Added copy and paste support to the text_field. - - matrix object stuff - - Added the range() function as well as overloads of all the various - sub-matrix selection functions so that you can pick out slices of - matrices like in Matlab. - - Added a new template argument to the matrix object that allows the - user to select the memory layout. Also added a row_major_layout - and column_major_layout. - - The matrix object can now be initialized using a comma separated - list of values. - -Non-Backwards Compatible Changes: - - Changed the fatal_error exception class so that it aborts your program - and prints a message if you try to construct it more than once since - doing so indicates that you ignored the first fatal error. - - The way matrix expressions work in the library has been changed - since the last release. So if you created custom matrix expressions - then they will need to be updated to use the new matrix expression stuff. - -Bug fixes: - - Fixed a minor bug in how the zoomable_region widget drew itself after - a resize in some cases. - - Fixed a problem with draw_line where it didn't always redraw the line - properly. - -Other: - - A lot of the matrix code has been refactored and optimized. The matrix - object will now introduce temporary objects when doing so results in - better performance. I also added a simple system for binding - arbitrary matrix expressions to optimized BLAS routines. - - Cleaned up the vector and point classes. Now there is only one class, - the vector class, and it is capable of representing everything the old - vector and point class could. I also added code to make sure the - vector class does the appropriate type promotions when vector objects - with different types are used together. - - Made the vector class inherit from matrix -</old> - -<!-- ******************************************************************************* --> - -<old name="17.12" date="Nov 10, 2008"> -New Features: - - Added user settable styles to most of the gui widgets - - Added the diagm(), svd2() and svd3() matrix functions - - Added the thread_pool object - -Non-Backwards Compatible Changes: - - Removed the arrow_button widget and moved its functionality into the - button widget. - - Renamed the dragable class to draggable - - Removed the confusing and unnecessary hidden bool argument to the - gui widget style drawing functions. - - Changed some of the events that are about the mouse leaving a widget so - that they still trigger even if the widget has been disabled or hidden. - -Bug fixes: - - Added some missing mutex locks to the scroll_bar widget - - Fixed a bug in the fill_gradient_rounded() function. It didn't always - draw the entire rectangle. - - Fixed a compile time bug in the pinv() function. It didn't compile - when used on statically sized matrices when they weren't square. - -Other: - - The member_function_pointer object now never calls new or delete. - So it is safe to use in a real time environment. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.11" date="Oct 20, 2008"> -New Features: - - Added the sort_columns() and rsort_columns() functions - - Added the vector_normalizer object - - Added the normalized_function object. - - Added a tensor_product() function for the matrix object. - -Non-Backwards Compatible Changes: - -Bug fixes: - - Made it so that the gui event handler thread isn't created at all - unless some part of an application calls some of the gui_core code. - In the previous release the event handler thread was executed - briefly during program termination and could cause problems if no - windowing environment was available. - - Fixed an #include statement in the matrix utilities so that it works - even if you don't specify an include path argument to your compiler. - -Other: - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.10" date="Oct 09, 2008"> -New Features: - - Added a thread safe shared pointer object - - Added the popup_menu_region widget. - -Non-Backwards Compatible Changes: - - The on_wheel_up() and on_wheel_down() gui events now take an unsigned long - argument. - - Removed the register_program_ending_handler() function from the threading - API and also changed the dlib thread pool so that it no longer causes - a terminating program to wait for any outstanding threads to finish - before allowing the application to end. - - Changed the serialization format of the linearly_independent_subset_finder - class. - - Changed all the font pointers in the gui API's interfaces - to shared_ptr_thread_safe objects. - -Bug fixes: - - Made the kkmeans class actually use the min_change parameter. - - Fixed a bug in the linearly_independent_subset_finder object. Also - added a way to set a minimum tolerance. - - Fixed a bug in the scrollable_region widget that caused it to scroll in an - unpleasant way when the horizontal and vertical scroll increments weren't - set to the same value. - - Made one of the arguments to font::draw_string() not be a reference because - some versions of gcc don't end up doing the right thing when -O3 is - supplied. - - Fixed a bug in the covariance() function that prevented it from compiling - sometimes. - -Other: - - Changed the gui core code around so that it should be safe to make window - objects at the global scope. - - Added more control over how the scrollable_region scrolls its region. - You can now adjust how much it scrolls when the mouse wheel is scrolled - as well as enabling scrolling via a mouse drag. - - Modified the library so that it compiles with the Intel compiler. - - Added some example programs that use the relevance vector machine - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.9" date="Sep 06, 2008"> -New Features: - -Non-Backwards Compatible Changes: - -Bug fixes: - - Fixed a bug in the tooltip widget - - Fixed the cmake option to toggle the ENABLE_ASSERTS macro - - Fixed some bugs in the rvm - - Fixed the serialization code for the kkmeans object so that it actually - works - - Fixed a bug that can trigger when the thread_specific_data object is - destructed - - Fixed a bug in the directory navigation gui. If you tried to go - into a drive on windows that wasn't mounted you got an error. - This is now fixed. - -Other: - - Made the dir_nav stuff work with std::vector and dlib::std_vector_c - as well as dlib::queue objects. - - Generally cleaned up a bunch of things - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.8" date="Aug 14, 2008"> -New Features: - - Added relevance vector machine regression and classification support. - - Added the cross_validate_trainer_threaded() function - - Added the length and length_squared matrix functions. - -Non-Backwards Compatible Changes: - -Bug fixes: - - Changed gui code a little so that windows don't popup in funny - places when used with the cygwin X windows system. - -Other: - - Made it easier to use the scoped_ptr with the TCP connection object - - Optimized the matrix object a little - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.7" date="Jul 25, 2008"> -New Features: - - Machine Learning - - Added the ability to compare kcentroid objects to each other - - Added the rank_features() function - - Added the distance_function object - - Added the reduced_decision_function_trainer object and - reduced() function - - Added the reduced_decision_function_trainer2 object and - reduced2() function - - Added a radial basis function network trainer - - Added the linearly_independent_subset_finder object - - Added the sigmoid_kernel - - Matrix Utilities - - Added the inv_upper_triangular() and inv_upper_triangular() - functions. - -Non-Backwards Compatible Changes: - - Refactored a bunch of the kernel learning code into a much cleaner form. - But this does change the interface to all the training functions. - -Bug fixes: - - Fixed a bug in the min and max calculation in the running_stats object - - Removed a bug in the sum() and variance() functions that - caused them to seg fault when they were used on certain - matrix of matrix objects. - - Added a missing check for division by zero to the conjugate gradient - optimization functions. - - Added some missing member variables to the .swap and serialization - functions for the kcentroid object. So now they should work right. - -Other: - - Added an option to the cmake file to toggle the DLIB_ASSERT macro - - Added an option to the cmake file to toggle the dlib stack trace macros - - Made the library compile in Cygwin - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.6" date="Jun 22, 2008"> -New Features: - - Merged in Keita Mochizuki's unicode patches to the GUI components. So - the dlib GUI now has better unicode support. - - Added the remove_row and remove_col matrix functions. Also made all - three of the above functions capable of taking arguments at run time - as well as compile time. - - Added the ability to cap the number of dictionary vectors used by the krls - and kcentroid object at a user specified number. - - Added the pick_initial_centers() function - - Added the running_stats object - -Non-Backwards Compatible Changes: - - Changed the interface to the krls and kcentroid objects somewhat. - - All of the style objects in the GUI part of the library now use - dlib::ustring instead of std::string. This only matters to you if - you have made your own style objects. - - Changed the serialization format of the krls, kcentroid, and - directed_graph_drawer objects. Note that is also means that the - files saved by previous versions of the bayes_net_gui_ex program - won't load with the current version. - -Bug fixes: - - Fixed an aliasing bug in the set_subm(), set_rowm(), and set_colm() - functions. It was possible that you could get incorrect results - if you used these functions to copy one part of a matrix to another - part of the same matrix if the two areas overlapped. - - Fixed a minor numerical error in the krls code so now it gets slightly - better results. - -Other: - - Made the types generated by the matrix operations a lot shorter. This - avoids some compiler warnings from visual studio and even some potential - internal compiler errors in some instances. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.5" date="Jun 2, 2008"> -New Features: - - Added some macros that allow dlib to create a stack trace - - Added the wrap_function and is_function templates. - - Added two new events to the text_field object. One for detecting when the - user hits enter and another for detecting when input focus is lost. - - Machine Learning - - Added a kernel based centroid estimator/novelty detector - - Added a kernel based k-means clustering algorithm - - Numerical - - Added an identity_matrix() function that can take a runtime defined size. - - Added a bunch of unconstrained optimization stuff to the library. - It now has a conjugate gradient optimization algorithm as well as - a quasi-newton algorithm. - - Added the set_subm, set_rowm, and set_colm functions. - -Non-Backwards Compatible Changes: - - In the krls object: Added a requires clause to the set_tolerance() member - function and renamed clear() to clear_dictionary(). - -Bug fixes: - - Fixed a bug in the requires clause of the subm() function. It was - more restrictive than it should have been. - -Other: - - Added example programs for the krls object as well as the new - kcentroid and kkmeans objects. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.4" date="May 12, 2008"> -New Features: - - Added an implementation of the kernel recursive least squares algorithm - -Non-Backwards Compatible Changes: - - Broke backwards compatibility in the directed_graph_drawer's serialization - format when I fixed the bug below. - -Bug fixes: - - Fixed two bugs in the directed_graph_drawer widget. First, it sometimes - threw a dlib::fatal_error due to a race condition. Second, the color of - the nodes wasn't being serialized when save_graph() was called. - - Made vector_to_matrix() work for std::vector objects that have non-default - allocators. - -Other: - - Added some stuff to make people get a really obvious error message - when they set up the include path incorrectly. - -</old> - -<!-- ******************************************************************************* --> - -<old name="17.3" date="Apr 28, 2008"> -New Features: - - Added the vector_to_matrix() function. - - Added a cholesky_decomposition() function. - - Added the toggle_button GUI widget - - Added a default toggle button style as well as check box and - radio button styles. - - Added a single click event to list_box - - Added a save_file_box() and open_existing_file_box() function. - -Non-Backwards Compatible Changes: - - Changed the check_box and radio_button widgets to be specializations of - the new toggle_button object. This is a nearly backwards compatible - change except that the events registered to check_box and radio_button - clicks must now take the form void event(toggle_button&) or - void event(void) instead of the previous void event(check_box&) and - void event(radio_button&). - - Removed the is_mouse_over bool from the button_style::draw_button() - function. - -Bug fixes: - - Fixed a compiler error in mingw. - - Changed the preprocessor checks for the wchar_t overload of - is_built_in_scalar_type so that it works properly with visual studio. - -Other: - - Added a Bayesian Network GUI that allows you to create a network - and serialize it to disk. -</old> - -<!-- ******************************************************************************* --> - -<old name="17.2" date="Apr 21, 2008"> -New Features: - - GUI Related - - Added the scrollable_region widget - - Added the text_grid widget - - Added an event to the text_field so you can tell when the - user modifies it. - - Added the fit_to_contents() function to the tabbed_display - widget. - - Bayesian Network Related - - Added the node_first_parent_assignment(), node_next_parent_assignment(), - and node_cpt_filled_out() functions. - -Non-Backwards Compatible Changes: - - Reverted the change in 17.0 where I made drawable::lastx and - drawable::lasty not match the current location of the mouse inside - the on_mouse_move() event. I changed this back to how it was before, - so now lastx and lasty represent the most current record of where - the mouse is in *all* events. - - Changed the functions that control text color in the label and text_field - widgets to use rgb_pixel objects. Also added a function to set the - background color of a text_field. - -Bug fixes: - - Fixed a bug in the bayesian_network_join_tree object that caused it to - compute incorrect results for some networks. - - GUI Related - - Fixed a minor bug in the cursor drawing of the text_field - gui widget. - - Fixed a bug in the compute_cursor_rect() function. It would return an - incorrectly positioned rectangle for 0 length strings. - - Changed the way wchar_t is handled in the serialize.h file. Now - everything should compile correctly in visual studio regardless of how - you set the /Zc:wchar_t compiler option. - - Fixed a bug in the menu_bar widget. One of the members wasn't being - initialized when it needed to be. - - Fixed a bug in the tabbed_display where it didn't redraw itself - correctly after it was moved by set_pos() - -Other: - - Changed the xml parser so that it counts line numbers - from the start of the input stream instead of from the - root tag. - - Changed the xml parser so that you will only get the fatal_error - event once if it occurs. -</old> - -<!-- ******************************************************************************* --> - -<old name="17.1" date="Apr 13, 2008"> -New Features: - - Added a zoomable_region widget - - Added a directed_graph_drawer widget - -Non-Backwards Compatible Changes: - - Changed the first_pixel argument of the draw_string() function - to be a rectangle like all the other draw functions now use. - -Bug fixes: - - Fixed a bug in the tooltip widget that was triggered when calling - its member functions without calling set_tooltip_text(). This also - fixed a bug in the button object that triggered when calling some button - functions that referenced the tooltip widget. - - Fixed a problem in the draw_circle and draw_solid_circle functions. - They didn't draw themselves quite correctly in all cases. - -Other: -</old> - -<!-- ******************************************************************************* --> - -<old name="17.0" date="Apr 07, 2008"> -New Features: - - Added a png_loader object - - GUI related - - Added a popup_menu widget - - Added a menu_bar widget - - Added a tooltip widget - - Added a user selectable style to the gui button. - - Added the draw_rounded_rectangle() and fill_gradient_rounded() functions - - Added the mouse_over_event object to the base_widgets and made the - button_action inherit from it. - - Added the drawable::next_free_user_event_number() function - - matrix and geometry: - - Added a size() function to matrix_exp and matrix_ref objects. - - Added a class that represents 2D points - - Added the following matrix functions: - - squared(), cubed(), get_rect(), a subm() function that takes - rectangles, and normalize() - - Added the following rectangle functions: - - area(), centered_rect(), translate_rect(), move_rect(), resize_rect(), - resize_rect_height(), resize_rect_width(), and nearest_point() - -Non-Backwards Compatible Changes: - - Renamed atom() to array_to_matrix() - - Moved the rectangle object from the gui_core into a new geometry folder - (only matters if you were directly including the rectangle file) - - Moved the vector object into the geometry folder. Also removed the kernel_1a - stuff. So there is now only one possible vector implementation. - - Changed the default position for a rectangle to (0,0) instead of (1,1) - - Added edge data to the directed_graph. This breaks backwards compatibility - with the previous serialization format for directed_graphs. - - GUI related: - - Changed the base_window::on_keydown event signature so that it now - reports more keyboard modifier keys (e.g. alt) - - Made the functions for drawing on canvas objects take points and pixels - instead of just a bunch of integers. Also changed the order of the - arguments so that the canvas comes first, followed by the location - to draw on, then what to draw. - - Moved the canvas drawing functions into the gui_widgets/canvas_drawing.h - file. - - Modified the drawable_window so that the drawable::lastx and drawable::lasty - fields are updated after calls to on_mouse_move. This way the x and y that - go into the on_mouse_move actually tell you something. - -Bug fixes: - - Fixed a bug in the floating point serialization code. It - didn't handle NaN or infinities correctly. - - Fixed a bug in the win32 version of the gui_core component. It was - possible that calling set_size(), set_pos(), or set_title() could cause - the program to deadlock. - - Made the load_bmp() function more robust in the face of weirdly - written BMP files. - - Modified the draw_circle() and draw_solid_circle() functions so that they - only touch each canvas pixel once. This avoids messing up alpha blending - if an rgb_alpha_pixel is used. - -Other: - - Removed the old win32 only gui code in the dlib/gui folder. - - Changed the default GUI font to a nicer Sans Serif font -</old> - -<!-- ******************************************************************************* --> - -<old name="16.5" date="Mar 04, 2008"> -New Features: - - Added another constructor to the thread_function object. - Now it can take proper function objects as well as normal function - pointers. - - Added the probabilistic_decision_function object and svm_nu_train_prob() - function. - -Non-Backwards Compatible Changes: - - Changed the svm train functions so that the cache_size argument - now measures the max number of megabytes of memory to use rather - than number of kernel matrix rows to cache. It's default - value is now 200MB. - - changed the type typedef in the SVM kernel function objects to - be named sample_type instead of type. - -Bug fixes: - - Fixed a bug in the trim, rtrim, and ltrim functions. They - didn't return empty strings when the input string contained all - trim characters. - - Fixed a bug in the decision_function's copy constructor - -Other: - - Added an optimization to the working set selection for the svm training code. - Now the algorithm will prefer to select indices that are in the kernel - matrix cache when possible. - - Fixed a problem with the chm documentation file where many of the links - didn't work. - - Made the support vector functions capable of operating with floats, doubles, - and long doubles instead of just the double type. -</old> - -<!-- ******************************************************************************* --> - -<old name="16.4" date="Feb 22, 2008"> -New Features: - - Added aversion of the draw_line() function for images. - - Added the atom(), rowm(), colm(), and subm() matrix functions. - - Added some push/pop_back() functions to the array object that are similar - to the ones in the std::vector. - - Added the std_vector_c class that wraps std::vector and checks its - function's preconditions. - - Added the polynomial_kernel object for use with the svm algorithm. - -Non-Backwards Compatible Changes: - - Changed the svm_nu_cross_validate() function to return a vector - of both the +1 and -1 cross validation accuracies. - -Bug fixes: - - Fixed a bug in the list_box that caused it to not hide itself properly - when told to do so. - - Fixed canvas::fill() gui function so that it should work right - on 64 bit platforms. - -Other: -</old> - -<!-- ******************************************************************************* --> - -<old name="16.3" date="Feb 12, 2008"> -New Features: - - Added memory manager support to the matrix object. - -Non-Backwards Compatible Changes: - - Made the assign_pixel() function saturate grayscale values bigger - than the target pixel type can handle. Previously it would just - truncate the numbers. - - Removed rand_kernel_1 and rand_kernel_2 because they gave very - inferior results compared to rand_kernel_3. I then renamed - rand_kernel_3 to rand_kernel_1. - - Renamed rand::get_random_number() to get_random_8bit_number() and also - added a get_random_16bit_number() and get_random_32bit_number() - - Added a checksum to compress_stream_kernel_1 and kernel_2. This - breaks backwards compatibility with the previous versions. That is, - the new implementations will complain that decompression fails if - you give them data compressed with the old non-checksum version of - the compression routines. - - Removed the width() and height() functions from the array2d object. - Now only the equivalent nc() and nr() member functions remain. - - Changed array2d::set_size(width,height) to set_size(num_rows, num_cols). - That is, I switched the order of the two arguments to this function. - The reason for doing this is to make it have the same form as the - set_size() member of the matrix object. This way the usage of the - set_size() member for these two very similar data structures is - the same. Hopefully this will reduce confusion rather than - make things worse. - -Bug fixes: - - Fixed a bug in the image_widget. It didn't repaint the screen - all the way if you gave it a smaller image to display. - - Fixed a bug in the cat() function that caused the state of the queue - to be broken if you called cat with an empty queue. - - Made the queue_sort_1 use a better sorting algorithm. In particular, it - will not sort slowly for nearly sorted data. - - Fixed a bug in the queue_kernel_2 object that caused it to not work - correctly with the non-default memory managers. - -Other: - - Added example code for the member_function_pointer as well as the matrix - object. - - Added some more regression tests and made some of the longer running - ones execute a lot quicker. - - Made the unit test suite easier to use. Now tests just throw an exception - to indicate an error rather than returning an error code. - - Added an example program for the multi-layer perceptron neural network. -</old> - -<!-- ******************************************************************************* --> -<old name="16.2" date="Jan 25, 2008"> -New Features: - - Added the is_signed_type and is_unsigned_type templates - - Image Processing stuff - - Added the assign_all_pixels() function - - Added the assign_border_pixels() function - - Added the assign_pixel_intensity() function - - Added the auto_threshold_image() function - - Added the binary_union() function - - Added the edge_orientation() function - - Added the get_histogram() function - - Added the get_pixel_intensity() function - - Added the hysteresis_threshold() function - - Added the sobel_edge_detector() function - - Added the suppress_non_maximum_edges() function - - Added the zero_border_pixels() function - - Changed the pixel_traits structure so that it can support 8, 16, and 32 - bit grayscale pixels. - -Non-Backwards Compatible Changes: - - Added more fields to the pixel_traits template so if you had defined your - own pixel types you will need to update them. - -Bug fixes: - - Fixed some compiler errors in Visual Studio 2008 - -Other: - - Generally tried to clean up the documentation and code in this release - -</old> - -<!-- ******************************************************************************* --> - -<old name="16.1" date="Jan 1, 2008"> -New Features: - - Added the randomize_samples() function - - Added the set_main_font() and main_font() functions to the drawable object. - So now the drawable widgets can use a user provided font. - -Non-Backwards Compatible Changes: - - Made the named_rectangle object a little easier to use. It now won't - let you size it so small that it doesn't display its entire name. - -Bug fixes: - - Fixed a bug in the svm_nu_train() function that caused a crash with - some inputs. - - Fixed a compile time error that occurred when compiling the bayesian - network code in Mac OS X. - - Fixed a bug in the compute_cursor_pos() function where it would - return the incorrect value. - -Other: - - Added an example showing how to use the svm functions. - -</old> - -<!-- ******************************************************************************* --> - -<old name="16.0" date="Dec 10, 2007"> -New Features: - - Added the left_substr() and right_substr() functions - - Added the zero_extend_cast() function - - Added the unsigned_type template - - Added the uint8 typedef - - Bayesian Network related - - Added the assignment object - - Added the bayes_node object - - Added the joint_probability_table object - - Added the conditional_probability_table object - - Added the bayesian_network_gibbs_sampler object - This object implements an algorithm that performs approximate inference - in a Bayesian Network. - - Added the bayesian_network_join_tree object - This object implements an algorithm that performs exact inference - in a Bayesian Network. - - Set related - - Added the set_intersection_size() function - - Added the set_union() function - - Added the set_intersection() function - - Added the set_difference() function - - Graph related - - Added the graph object - - Added the is_graph template - - Added the is_directed_graph template - - Added the create_moral_graph() function - - Added the triangulate_graph_and_find_cliques() function - - Added the graph_contains_length_one_cycle() function - - Added the find_connected_nodes() function - - Added the graph_is_connected() function - - Added the is_clique() function - - Added the is_maximal_clique() function - - Added the copy_graph_structure() function - - Added the create_join_tree() function - - Added the is_join_tree() function - - Added the edge() function - - GUI related - - Added the base_window::get_display_size() function - - Added message_box_blocking() - - Added the bdf_font object which is capable of loading BDF font files into - the font object used by the gui_widgets - - Better Unicode support - - Added the basic_utf8_ifstream: An input stream that can read UTF-8 files - - Added serialization support for wchar_t and std::wstring - - Added the is_combining_char() function - - Added the convert_utf8_to_utf32() function - - Modified most of the string manipulation functions in dlib/string.h - to work with any kind of character type - - The gui widgets' font object now works with Unicode text (i.e. wchar_t - and unichar strings) as well as with normal char data. - -Non-Backwards Compatible Changes: - - The dlib/all_console.cpp and dlib/all_gui.cpp files have been deprecated - in favor of a new file. Now to build with dlib you simply add - dlib/all/source.cpp to your project regardless of what type of project - you are building. - - The GUI program entry point, winmain(), has been removed. You can now use - the normal main() entry point or some other non-standard entry point - provided by your compiler. - - Renamed directed_graph::node::item to directed_graph::node::data - -Bug fixes: - - Fixed some build issues in gcc 4.2 involving some uses of the std_allocator - - Fixed some build issues in Visual Studio involving the dir_nav component - and building with NO_MAKEFILE #defined. - - Moved the #define that disables the old WinSock API into the sockets cpp - file. This should avoid conflicts with people who are using the old WinSock - API. - - Changed the tuple template slightly to avoid a bug in Visual Studio 7.1 - that caused a compile time error in some instances. - -Other: - -</old> - -<!-- ******************************************************************************* --> - -<old name="15.12" date="Nov 18, 2007"> -New Features: - - Added a destroy() function to the map, set, hash_map, and hash_set objects. - - Added the tuple object - - Added an overload of connect() that has a timeout - - Added rand_kernel_3 as a random number generator that uses the Mersenne Twister - algorithm. - - Added the directed_graph object - - Added the graph_contains_undirected_cycle() and graph_contains_directed_cycle() - functions. - - Added the std_allocator object. It is a STL style allocator that can use - the dlib memory manager objects. - - std::string manipulation functions: - - Added the cast_to_string() function. - - Added the tolower() function - - Added the toupper() function - - Added the ltrim() function - - Added the rtrim() function - - Added the trim() function - - Added the lpad() function - - Added the rpad() function - - Added the pad() function - -Non-Backwards Compatible Changes: - - Changed the default logging level from LNONE to LERROR - - Renamed the ASSERT macro to DLIB_ASSERT and CASSERT to DLIB_CASSERT. - This rename avoids a conflict with a macro inside MFC. - - Changed the logger so that settings are inherited when a new logger - is instantiated rather than just having the new logger use the - default settings. - - Removed the logger::clear() function since it no longer really - makes sense given the above change. - - Removed the get_main_thread_id() function and replaced it with the - is_dlib_thread() function. - -Bug fixes: - - Pushed some things into cpp files because doing so avoids build and/or - runtime errors on some platforms. - -Other: - - Changed the string_cast() function so that it will recognize the words true - and false as boolean values. Also improved the error message inside the - string_cast_error exception object. - -</old> - -<!-- ******************************************************************************* --> - -<old name="15.11" date="Oct 25, 2007"> -New Features: - - Added the covariance() function - - Added the rgb_alpha_pixel pixel type and modified all relevant functions to - support it. - -Non-Backwards Compatible Changes: - - The GUI changes that are non-backwards compatible: - - The alpha parameter is now an unsigned char instead of unsigned int - and its range is now 0 to 255 instead of 0 to 256. - - The image_widget no longer has any member functions dealing with - alpha values. If you want to use alpha blending you just give it an - image that has an alpha channel. The same goes for draw_image(). - - There are now more fields in the pixel_traits template. So if you were - defining your own pixels before you will need to update your pixel_traits - specializations. - -Bug fixes: - - Made some functions non-inline and put some things on the stack - instead of heap. Doing this avoids some problems with certain - kinds of builds in visual studio. - -Other: - - Modified the message_box() function so that it is safe to call end_program() - from within its callback event. - -</old> - -<!-- ******************************************************************************* --> - -<old name="15.10" date="Oct 09, 2007"> -New Features: - - Modified the GUI drawing functions to take an alpha argument to allow - alpha blending. - - Added the svm_nu_cross_validate() function to perform k-fold - cross validation using the svm_nu_train() function. - - Added the boost enable_if templates - - Added the rand_float extension to the rand object. - - New matrix features: - - Added the pinv() function - - Changed round_zeros() to use the machine epsilon instead of 1e-6 as - its default epsilon. - - Modified the matrix object so that you can declare them with - a static dimension and a dynamic dimension. E.g. matrix<float,0,10> - is now legal and declares a matrix with a fixed number of columns(10) - and a variable number of rows. - - Added the equal() function to compare two matrices of floating - point numbers for near equality. - - Changed the matrix so that operator(long) works for both - column vectors and now also for row vectors. - - Added a set_size() and constructor that takes a single long for use in - sizing row and column vectors. - - Added the scale_columns() function - -Non-Backwards Compatible Changes: - -Bug fixes: - - Fixed an error in svm_nu_train() where it would incorrectly - complain of incorrect nu values for some datasets. - - Added a missing std:: qualifier at two points in the dlib/vector code that - could cause a compiler error in some instances. - -Other: - - Added a term index to the documentation. - -</old> - -<!-- ******************************************************************************* --> - -<old name="15.9" date="Sep 25, 2007"> -New Features: - - Added a nu support vector classifier training function. - - Added a multilayer neural network object. - - Added the "destructive aliasing" checks into the matrix code. Now temporary - matrices are only created during assignment if the right hand side aliases - the left hand side in a destructive way. This removes many of the previous - uses of temporary matrices. - - Made the sum() matrix function be able to sum matrices of matrices - - New matrix functions: - - acos(), asin(), atan(), ceil(), cos(), cosh(), exp(), floor(), log(), - log10(), mean(), norm(), pow(), reciprocal(), round_zeros(), sin(), - sinh(), sqrt(), tan(), tanh(), variance(), and more overloads of - uniform_matrix(). - -Non-Backwards Compatible Changes: - -Bug fixes: - - Added missing nr() and nc() functions to the uniform_matrix() and - identity_matrix() functions. - - Forgot to add a destructor for the dynamically sized matrix resulting in a - memory leak. This is now fixed. - - Fixed various potential compile time errors - -Other: - -</old> - -<!-- ******************************************************************************* --> - -<old name="15.8" date="Sep 11, 2007"> -New Features: - - Added a copy of the boost noncopyable base class. - - added some smart pointers: - - added shared_ptr - - added weak_ptr - - added scoped_ptr - -Non-Backwards Compatible Changes: - -Bug fixes: - -Other: - - Cleaned up the assert code and removed the need for the dlib/error.ccp file - - Made the matrix take better advantage of the compile time sized - dimensions when it can. - -</old> - -<!-- ******************************************************************************* --> - -<old name="15.7" date="Aug 26, 2007"> -New Features: - - Made it so that command line options have a default conversion to bool - and the bool tells you if they are on the command line or not. - - Added an implicit conversion to a scalar to the matrix object - when it is of dimension 1x1. - - Added the thread_function object - - Added a function to compute the singular value decomposition of a matrix. - -Non-Backwards Compatible Changes: - - Added two new arguments to the on_request() function. They allow you to - see what HTTP headers the client sends you and to control which ones - you send back. - -Bug fixes: - -Other: - -</old> - -<!-- ******************************************************************************* --> - -<old name="15.6" date="Aug 18, 2007"> -New Features: - - matrix object additions: - - Added some functions to convert between matrix and pixel objects. - - Added the clamp() function that operates on matrix objects. - - Added the sigmoid function. - - Made the matrix object capable of being sized at runtime in addition - to its original compile time static sizing capability. - - Added 3 and 4 argument versions of pointwise_multiply() - - Added the +=, -=, *= and /= operators to the matrix object. - -Non-Backwards Compatible Changes: - -Bug fixes: - - Fixed the line numbering in the color pretty printer. Wasn't being - done correctly. - - Fixed a bug in the matrix round() function. - - Fixed some miscellaneous compile time errors - - Fixed a bug in the matrix removerc() function. - - Added some missing checks to catch invalid negative index inputs to - matrix objects. - - Fixed a bug in the matrix inv() function. It could sometimes - segfault if used on certain singular matrices - -Other: - - string_cast() can now convert hex strings to integers - - You can now say myarray2d.set_size(0,0) and have it do what - you would naturally expect. - - Added some #pragma statements that tell visual studio - to link the right system libraries automatically. - So now you don't have to add these things in the - project settings anymore. - -</old> - -<!-- ******************************************************************************* --> - -<old name="15.5" date="Jul 12, 2007"> -New Features: - - Added the set_all_logging_levels(), set_all_logging_output_streams() - functions - - Added the configure_loggers_from_file() function which allows you to - easily configure all logger objects using a textual configuration - file. - -Non-Backwards Compatible Changes: - -Bug fixes: - - Added a workaround into the code that avoids a potential compilation - error on Mac OS X systems. - -Other: - -</old> - -<!-- ******************************************************************************* --> - -<old name="15.4" date="Jun 30, 2007"> -New Features: - -Non-Backwards Compatible Changes: - -Bug fixes: - - Fixed a bug in the POSIX version of the hostname_to_ip() function. It was - screwy if you asked for more than the first IP address (the same address - might be returned more than once). - - Fixed a bug in the pipe object's timeout functions. The timeouts weren't - working correctly. - -Other: - -</old> - -<!-- ******************************************************************************* --> - -<old name="15.3" date="Jun 25, 2007"> -New Features: - - Added the wait_for_num_blocked_dequeues(), enable_enqueue(), - disable_enqueue(), and is_enqueue_enabled() functions to the pipe object. - - The pipe object can now be used with a zero length buffer. - -Non-Backwards Compatible Changes: - - There is no longer a pipe::kernel_1a_c typedef since the pipe - no longer has any requirements to check (due to the change of allowing - zero length buffer sizes) - -Bug fixes: - -Other: - - Made the ASSERT and CASSERT macros call dlib_assert_breakpoint() when they - fail. This way you can easily set a breakpoint on them in a debugging - tool by breaking on calls to this new function. - - Fixed some typos and unclear parts of the pipe spec. - -</old> - -<!-- ******************************************************************************* --> - -<old name="15.2" date="Jun 11, 2007"> -New Features: - - Added a thread safe version of the config_reader object (in the form of an - extension to the config_reader) - - Added the wait_until_empty() function to the pipe object. - -Non-Backwards Compatible Changes: - - Removed the connection::close() and listener::close() functions. They have - been replaced by destructors. To upgrade old code all you have to do is - replace statements of the form "object->close();" with "delete object;". - Both statements do exactly the same thing. However, for connection objects, - you should probably be using the close_gracefully() function instead. - -Bug fixes: - - Removed a potential compile time error in the dng image format handling code. - - Fixed a bug in the bigint object. The destructor was using "delete" - when it should have been using "delete []" - - Fixed a resource leak in the POSIX version hostname_to_ip() - - Fixed a significant memory leak in memory_manager_kernel_1 - - Fixed a memory leak that could occur in memory_manager_kernel_2 - and memory_manager_kernel_3 when the constructor for the object - being constructed threw an exception. - - Added a missing delete statement to plug a memory leak - in the md5 computation code. - - Fixed an uninitialized variable warning from valgrind - (in lz77_buffer/lz77_buffer_kernel_2.h). I think this could - also potentially result in an error when decoding data but I'm not totally - sure. But either way it is fixed now. - - Changed a call to memcpy to memmove in the sockstreambuf_kernel_2 - implementation since the copy could potentially be of overlapped memory. - -Other: - - Changed the connection::read() and connection::write() functions to take - longs instead of unsigned longs as the buffer sizes. They also now - return longs instead of ints. This should be a backwards compatible change. - - Started using the valgrind tool to check for memory errors in the project and - found a few things. Very nice tool :) - -</old> - -<!-- ******************************************************************************* --> - -<old name="15.1" date="Jun 04, 2007"> -New Features: - - Added the multithreaded_object extension to the threads API - - Added the load_dng() and save_dng() functions which can load and store - the DNG lossless compressed image format (which I just made up). - -Non-Backwards Compatible Changes: - - Changed the serialization format for bool to use a 1 byte code rather than 2 - bytes. So this breaks compatibility with the old format. - -Bug fixes: - - The serialization for bool didn't always work right. This is now fixed. - -Other: - -</old> - -<!-- ******************************************************************************* --> - -<old name="15.0" date="May 16, 2007"> -New Features: - - New faster version of the bigint object (bigint_kernel_2) that uses - the Fast Fourier Transform to perform multiplications. - - The base_window can now be an "undecorated" window. This new type is suitable - for making things like popup menus and the like. - - Added the on_focus_lost() event to the base_window object - - Added the on_focus_gained() event to the base_window object - - Added the on_window_moved() event to the base_window object - - Added the get_pos() function to the base_window object - - Updated the gui_widgets's drawable interface stuff to support the three - new event types and the new window type. - - Added the drawable::draw_rectangle() function - - Added serialization support for std::complex. - - Added the assign_image() function - -Non-Backwards Compatible Changes: - - Removed the color arguments from the drawable_window object's constructor and - added a new boolean argument (if it is an undecorated window or not). This - probably won't break any code but if it does you should get a compiler error - about it. - - Made it so you must disable the events in the destructor for your - drawable gui widgets. Doing so avoids potential race conditions when - destructing drawable objects. - - Made it so that you are required to call close_window() in a window object's - destructor. This avoids a potential race condition. - -Bug fixes: - - Added a workaround for a bug in MinGW that caused the regression test suite - to crash when compiled with -O3. - - Fixed a potential bug in the X Windows version of the gui_core component. - Added an extra XFlush() to end_program() because without it a - program can crash when calling end_program() in certain instances. - - The spec for the pipe object said that objects you enqueue into it - had an "initial value for their type" after the function completes. This - is incorrect, they are swapped into the pipe so they have an undefined - value afterwards. I fixed the spec for the pipe to say this. - - Fixed a bug in the font rendering functions in the gui_widgets - component. It could cause a segmentation fault sometimes. - - Fixed some potential deadlocks in the windows version of the gui_core - component. - - Fixed a bug in the rsignaler object. When you called wait() or - wait_or_timeout() it only unlocked the associated rmutex once (it could be - locked more than once and thus might cause a deadlock since the thread - calling wait() wouldn't actually unlock the mutex in this case). - - Fixed the initialize_array() function in memory_manger_kernel_3 to be - exception safe. Previously if an exception occurred while creating - an array then a resource leak was created. - -Other: - - Changed the package format for the library somewhat. The examples are now - located in their own top level folder. Additionally, the HTML version of the - documentation also comes in the same archive as the source rather than in a - separate download. - - Started using major and minor version numbers rather than just major ones. - -</old> - -<!-- ******************************************************************************* --> - -<old name="14" date="Apr 11, 2007"> -New Features: - - Added operator<< and operator>> iostream operators to the vector object. - -Non-Backwards Compatible Changes: - - Changed the xml_parser's document_handler interface: - made empty element tags (<like_this/>) trigger the end_element() callback - and removed the is_empty bool from start_element(). - -Bug fixes: - - Fixed a potential race condition between the destruction of the thread pool - and the "program ending handlers" stuff. - -Other: - - Made the xml parser more robust to different types of new line characters. - - Modified the source slightly so that it works with mingw. - -</old> - -<!-- ******************************************************************************* --> - -<old name="13" date="Mar 01, 2007"> -New Features: - - The config_reader is now enumerable. - - Added the image_widget gui object. - - Added nr() and nc() to the array2d object. - - Added the shutdown_connection() function to the iostream extension - to the server object. - - Added the timer_kernel_2 implementation which is a version of the timer object - that is more efficient in its allocation of threads. - - Added the timeout object. - - There is now a CMakeLists.txt file located in the dlib folder. See - dlib/examples/CMakeLists.txt and dlib/test/CMakeLists.txt for examples - that use CMake to build projects using this library. - - Added the register_program_ending_handler() function to the threading API. - -Non-Backwards Compatible Changes: - - Removed the config_reader::get_blocks() function. Use the - new enumerable interface for the config_reader instead. - - The array2d object now uses longs instead of unsigned longs to report - its dimensions and access its elements. - - Added a uint64 to the on_connect() callback in the iostream - extension to the server object. - - timer::set_delay_time() now throws and timer::start() now may throw - std::bad_alloc. - -Bug fixes: - - Fixed a bug in end_program(). In X Windows it might not cause the - program to end right away if it was called from outside the event - handling thread. - - Fixed a bug in the implementation of the timeout part of the - close_gracefully() function. - -Other: - - The library now works on HP-UX - - The regression test suite now has command line arguments that - enable tests to send debug messages to a file. - -</old> - -<!-- ******************************************************************************* --> - -<old name="12" date="Feb 07, 2007"> -New Features: - - The http server extension now supports the POST HTTP method. - - The attribute list object in the xml_parser is now enumerable. - - Added the threaded object extension - - Added the uintn.h file which defines fixed sized unsigned integral types. - -Non-Backwards Compatible Changes: - - Renamed the on_get() callback in the http extension to the server object to - on_request() - - Removed the network byte order functions from the sockets api. (They are still - really there though since they come from actual OS header files. But - officially they have been replaced by the byte_orderer component). - - Renamed dlib/uint64.h to dlib/uintn.h - -Bug fixes: - -Other: - - The command line parser will now let you declare long named options with - - characters in them. - - Made it so you can use the COMPILE_TIME_ASSERT macros anywhere rather than - just inside functions. - -</old> - -<!-- ******************************************************************************* --> - -<old name="11" date="Dec 27, 2006"> -New Features: - - For dlib::matrix - - Added the tmp() function - - Added optimized specializations of inv() and det() for 1x1, 2x2, 3x3 and - 4x4 matrices. - - Added the removerc() function - - Sockets related - - Added the connect() function - - Added the is_ip_address() function. - - Added the close_gracefully() function - - Added the iostream extension to the server object. - - Added the http extension to the server object. - -Non-Backwards Compatible Changes: - - Changed the cpp_tokenizer to not convert characters to their html form. - -Bug fixes: - - Removed some potential compile time errors. See the change log for details. - -Other: - - Improved the web site - - Added some more example code - - Added more colors to cpp_pretty_printer_kernel_1. -</old> - -<!-- ******************************************************************************* --> - -<old name="10" date="Nov 28, 2006"> -New Features: - - std::map is now serializable - - Added the matrix object and a bunch of supporting code. - - Added the list_box graphical widget - - Added the fill_rect_with_vertical_gradient() function to the - drawable interfaces list of drawing helpers. - - Added the open_file_box() function which provides a simple file chooser. - -Non-Backwards Compatible Changes: - -Bug fixes: - - Made timestamper::get_timestamp() be a const function like it should. Fixes - some compile errors. - - Fixed a bug in the font::draw_string() function. It didn't redraw - multi-line strings right. - - Fixed a bug in the scroll_bar object that would cause a compile - error if you tried to call its width() function. - - Fixed a bug in the array_kernel_1 object. It would cause a segmentation fault - when used sometimes. - -Other: -</old> - -<!-- ******************************************************************************* --> - -<old name="9" date="Oct 23, 2006"> -New Features: - - Added the following image transformation functions: - - Added the equalize_histogram() function - - Added the spatially_filter_image() function - - Added the threshold_image() function - - Added the binary_dilation() function - - Added the binary_erosion() function - - Added the binary_open() function - - Added the binary_close() function - - Added the binary_intersection() function - - Added the binary_difference() function - - Added the binary_complement() function - - Added the clear(), load_from() and default constructor back into the - config_reader. - - Made the member_function_pointer copyable and also added operator== and != - to it. - -Non-Backwards Compatible Changes: - - Made the vector object templated so you can use types other than double with it. - But now you - have to specify what type you want to use which is slightly different. - - The asc_pair_remover and asc_remover abstract classes now take a third template - argument. I highly doubt this effects any code outside the library but it is - possible. - -Bug fixes: - - Fixed a bug in the base_window::set_size() function. If you specified a size - of (0,0) it caused your program to error out. This has now been fixed. - - Fixed a bug in the scroll_bar widget. - - Fixed a bug in save_bmp(). For some image sizes it would output a goofy - looking skewed image. - -Other: - - Switched everything that used to call operator< directly to instead use - std::less or to take a template argument that provides a compare functor that - defaults to std::less. -</old> - -<!-- ******************************************************************************* --> - -<old name="8" date="Oct 03, 2006"> -New Features: - - Added the assign_pixel() function - - Added the hsi pixel type - - Added the save_bmp() function - - Added the static_switch template - -Non-Backwards Compatible Changes: - - Changed how the config_reader works. It now has a more powerful syntax and - improved interface. Converting any old code to use the new version should be - simple since the new file syntax is very nearly backwards compatible with the - old syntax. (i.e. You probably won't have to change anything about your - config files) - - Renamed the dlib/image_loader.h file to dlib/image_io.h since it now includes - the image saver stuff. - - Renamed the pixel struct to rgb_pixel - - Renamed pixel_traits::color to pixel_traits::rgb - - Renamed pixel_traits::scalar to pixel_traits::grayscale - -Bug fixes: - - Fixed a bug in the load_bmp() function. It would load 24bit bmp files - incorrectly. - - Changed the logger so that it won't deadlock if you write something similar to - my_log << LINFO << function_that_also_logs();. Although this is a - dumb thing to do. But even so, it shouldn't deadlock. - - Fixed a potential linking problem with the vector object. - -Other: - - I decided I'm not going to support Borland v5.5.1 anymore. There are just too - many bugs in this compiler. It is very old at this point so I don't see this - being a big deal. - - Made the drawable::draw_image() and load_bmp() functions able to handle images - of any type of pixel. - - Pulled the imaging, algorithmic and metaprogramming stuff out of the - miscellaneous section of the web page and gave them all their own sections. -</old> - -<!-- ******************************************************************************* --> - -<old name="7" date="Sep 18, 2006"> -New Features: - - Added a logger header that prints the date and time. - - Added the LTRACE logging level - - Added a buffered implementation of sockstreambuf. - -Non-Backwards Compatible Changes: - - Changed the specs to say that sockstreambuf may be buffered. - sockstreambuf_kernel_1 is still just as it always has been though. So all old - code will still work just as it always has. But all the same, the specs have - been changed and now allow for an implementation that is not 100% backwards - compatible. - - rand_kernel_2 now emits a different string of random numbers. - -Bug fixes: - - Changed the logger object's implementation to not try to register - a thread end handler for the main program thread anymore. This was - technically a bug according to the spec but it actually did end up - working the way it was supposed to. But even so, it shouldn't have - been doing that. - - Changed binary_search_tree_kernel_1 so that it avoids a bug in the version of - gcc on SuSE Enterprise Linux 9. - - Fixed a bug in the rand_kernel_2 implementation. It wasn't giving good - random numbers. - -Other: - - Modified the code so that you don't get any warnings when -Wall is used with - GCC. -</old> - -<!-- ******************************************************************************* --> - -<old name="6" date="Aug 30, 2006"> -New Features: - - Added the ASSERT_ARE_SAME_TYPE macro - - Added the is_same_type template - - Added the get_main_thread_id() function to the threading API - - Added the thread_specific_data extension to the threading API - - Added the logger object. - - Added the auto_unlock object to the threading API. - -Non-Backwards Compatible Changes: - -Bug fixes: - -Other: - - Added an example that is specifically about using threads - - Added two examples about using the logger object -</old> - -<!-- ******************************************************************************* --> - -<old name="5" date="Aug 18, 2006"> -New Features: - - Added the memory_manager_stateless object and two implementations of it. - - Added the MACOSX macro to dlib/platform.h - - Added a templated version of create_new_thread() that allow you to start - a thread with a member function. - - Added the register_thread_end_handler() function to the threading kernel API. - - Added memory_manager_kernel_3 - -Non-Backwards Compatible Changes: - - Changed the meaning of the memory_manager_global::get_number_of_allocations() - function because the previous definition of it didn't really make sense for - this object. - - Changed the threading API to wait for all outstanding threads to terminate - before allowing the program to end. It used to just let the OS trash those - threads when main() ended but this isn't a safe or portable thing to do. I - used to assume the user would make sure all their threads were done and had - cleaned up whatever they were doing before main() ended but this is too much - of a burden on the end user. So now the library will wait for your threads to - end. You still need to have some way of telling them it is time to stop though. - -Bug fixes: - - Fixed a minor bug in dlib/timer/timer_kernel_1.h. Its implementation was - slightly off according to the specification of a timer object. - -Other: - - The byte_order object is now capable of flipping entire arrays. - - Made it so that the ENABLE_ASSERTS macro is defined whenever ASSERT is - on. - - Made the array container use the memory managers. - -</old> - -<!-- ******************************************************************************* --> - -<old name="4" date="Jul 18, 2006"> -New Features: - - Added functions to explicitly convert to/from little and big endian to the - byte_order object. - - Added the allocate_array() and deallocate_array() functions to the - memory_manager. - - Created the memory_manager_global object - - Added the remove_last_in_order(), position_enumerator() and - remove_current_element() functions to the binary_search_tree object. - -Non-Backwards Compatible Changes: - - I put an #error directive in the old GUI component to notify anyone - trying to use it that it is deprecated. I will be removing it from the - library in a few months. - - Switched the reference_counter object back to not using the memory_manager. - I realized it isn't safe for this object to use the memory_manager since - it could result in memory_managers freeing each other's allocations. - - I redefined the pixel_traits template. It is now a lot simpler and more - convenient. - -Bug fixes: - - Fixed a minor bug in dlib/rand/rand_kernel_2.cpp - -Other: - - Added some more compile time checks to the byte_orderer object. - - Changed some includes and preprocessor macros around a little so now - everything but the GUI stuff compiles in mac OS X. - - Added inclusion guards to all the .cpp files - - Added the all_gui.cpp and all_console.cpp files. They - include all the .cpp files you need to make gui and - console applications respectively into one file. - - Made more containers use the memory_manager. - -</old> - -<!-- ******************************************************************************* --> - -<old name="3" date="May 06, 2006"> -New Features: - - Added the enqueue_or_timeout() and dequeue_or_timeout() functions - to the pipe object. - - Gave the mouse_tracker the ability to display the mouse position - relative to a user selected point. - - Added the message_box() function to the gui_widgets component. - - Gave the label widget the ability to draw newlines in strings. - - added the close_window() and is_closed() methods to the base_window - object. - - Added the rsignaler extension to the threading API. - - You can now control the thread pool timeout time by setting the - DLIB_THREAD_POOL_TIMEOUT #define. - - Added the get_from_clipboard() and put_on_clipboard() functions - to the gui_core component. - - Added the stop_and_wait() function to the timer object. - - Added the trigger_user_event() function and on_user_event() event - to the base_window object. This new event is also forwarded - to drawable interfaces inside the receiving window. - - Added the wrap_around() function to the named_rectangle widget. - - Added the top(), left(), right(), bottom(), width() and height() - functions to the drawable interface. - -Non-Backwards Compatible Changes: - - Made the radio_button and check_box widgets pass references to themselves - when they call their click handlers. - - Switched the sync_extension to use the rmutex and rsignaler objects - rather than the normal non-reentrant ones. ( Chances are that old - code that used this will still compile fine anyway. ) - - Changed the return type of rand::get_random_number() to be an - unsigned char. I also changed both the implementations of - rand because they weren't very good at all. - - Changed the functions related to drawing strings in the font class. - - Changed the drawable's rectangle to default to being empty - rather than being a single point. Most code should not notice - the difference. - -Bug fixes: - - The event handlers in gui_widgets/drawable.h were private. They - should be protected. This is now fixed. - - Fixed a bug in the way the scroll_bar was drawn when it was - the HORIZONTAL type. - - Changed how the thread pool destructs itself when the program - is ending. Previously it was possible to get an error on - NetBSD when the program was ending. This is now fixed. - - The functions related to setting the jump size in the scroll_bar - widget were private. They are now public. - - There was a bug in the MS Windows version of the gui_core component - where the members of the base_window would not work if called from - within the on_window_close() event. This has now been fixed. - - Made the set_pos() function work right for the mouse_tracker widget. - - Fixed a bug in the base64 object where the string "" could potentially - be decoded incorrectly. - - Made the global swap function for crc32_kernel_1 inline. This fixes a - potential linker error. - - Fixed some potential deadlocking that could occur while using the - gui widgets. - -Other: - - I moved all the regression tests into the dlib/test folder and - made a nice driver program to run all of them. - - I have been using the sourceforge compile farms to test the library - on various platforms. It now works for Solaris and some of the BSDs - in addition to Linux and Windows. -</old> - - -<!-- ******************************************************************************* --> - - -<old name="2" date="Apr 08, 2006"> -New Features: - - Added the array_expand extension to the array object. - - Added the cmd_line_parser_check extension to the command line parser. - - Added the pipe object. - - All applicable container classes now use the memory_manager component for - their memory allocation. - - New implementations of the memory_manager object. - - Added the copy_functor class. - -Non-Backwards Compatible Changes: - - Moved the wrap_string, narrow, and string_cast functions - to a new file. You now have to include dlib/string.h to get - them. (This makes a bunch of other things work right in gcc 2.95) - - Renamed the _L macro to _dT - - Removed the scopy class - - Simplified the interface to the memory manager. It is basically the same - though. - - Removed the max_size() methods from the hash_table and binary_search_tree - objects. - - Removed the T_is_POD template arguments from the hash_table and - binary_search_tree objects. - - Simplified the template arguments to all checking components and extensions. - They now take the class they are to extend or check as their only template - argument. This only affects you if you haven't been using the kernel_nx - typedefs. - -Bug fixes: - -Other: - - I changed a few things around and now a majority of the library - again compiles under gcc 2.95. But some things don't and I currently - don't plan on making them work because it involves hackish workarounds - of 2.95's bugs. - - Changed the compress_stream_kernel_1 object so that it will detect data - corruptions better. This change will prevent it from correctly decompressing - data that was compressed with a previous version and has an uncompressed size - greater than about 20,000 bytes. - - There is a new cpp file you need to compile: dlib/error.cpp - - Moved all the regression testing stuff into the dlib/test folder and made - a nicer test driver to run them. -</old> - - -<!-- ******************************************************************************* --> - -<old name="1" date="Mar 19, 2006"> -New Features: - - Created the byte_orderer object. - - Created the mouse_tracker gui widget. - - The sliding_buffer object is now enumerable and serializable. - - Added the get_filesystem_roots() function to the dir_nar component. - - Added the create_directory() function to the misc_api component. - -Non-Backwards Compatible Changes: - - The ASSERT macro is now only enabled if DEBUG or ENABLE_ASSERTS - is defined. - -Bug fixes: - - Fixed a minor bug in the cmd_line_parser object. If you gave - an option such as --option=arg when option didn't take any - arguments it could hang your program. - - Fixed a bug in wait_or_timeout() in the posix version of the threading - api. The time to wait for was being calculated incorrectly and could - result in an excessive number of spurious returns. - - Fixed a minor bug in the on_keydown() event for windows. - I had it set such that the shift and ctrl bools would be false - if they were the actual keys being pressed. This isn't what the - specs say should happen but I had a comment in the windows code - that made it clear that I did it on purpose. Go figure :) - This is now fixed. - -Other: - - Improved the cpp_tokenizer object's ability to recognize numerical - constants. - - Improved the text_field gui widget. - - There are now two assert macros. One called ASSERT - and another CASSERT. They both do the same thing but ASSERT - is only enabled when DEBUG or ENABLE_ASSERTS is defined. - All the old ASSERT statements were changed to CASSERT statements. -</old> - -<!-- ******************************************************************************* --> - -<old name="2006-02-23.01"> -New Features: - - Added array_kernel_2 which is a simple layer on top of a C array. - - Added the tabbed_display GUI widget - - Added the widget_group GUI widget - - Added the named_rectangle GUI widget - - Added the pixel_traits template - -Non-Backwards Compatible Changes: - - The default maximum size for an array object is now 0 rather than - 20,000. -Bug fixes: - -Other: - - made the cpp_pretty_printer a little better about how it handles - C style code. Also added support for /*!A html_anchor_name !*/ - style comments. -</old> - -<!-- ******************************************************************************* --> - -<old name="2006-01-31.02"> -New Features: - - Created the array2d object. - - Created the base64 object. - - Created the pixel struct. - - Created the load_bmp() function which can load a BMP image file - into an array2d object of pixels. - - Created the drawable::draw_image() function - -Non-Backwards Compatible Changes: - - In the drawable interface I made the z order a long rather - than unsigned long. - - The cpp_tokenizer object now has a NUMBER token type. - - removed the get_ prefix from functions in the cmd_line_parser - and cmd_line_parser_option objects. Also changed the - cmd_line_parser_option::operator[] function to a normal member - function called argument(). - -Bug fixes: - -Other: - - cpp_pretty_printer now colors numeric literals a shade of yellow. -</old> - -<!-- ******************************************************************************* --> - -<old name="2006-01-15.03"> -New Features: - - Created the member_function_pointer object. - - Created the button_action object. - - Created the arrow_button object. - - Created the check_box object. - - Created the radio_button object. - - Created the scroll_bar object. - - More drawing functions to draw various things - onto a canvas object. - - Added enable/disable functions to the - drawable interface. - -Non-Backwards Compatible Changes: - - The gui widgets are no longer templated at the - class level. - - The drawable object's constructor now takes a - bit set rather than a bunch of bools to tell it - which events to enable. - - I changed the names of some of the functions in the - gui_widgets component so that they all reflected a - uniform naming style. - -Bug fixes: - - Fixed a minor bug in the cpp_tokenizer. - - Minor bug in the timer object. See change log for - details. - -Other: - - Made the timer object a little more robust -</old> - - -<!-- ******************************************************************************* --> - -</release_notes> - </body> -</doc> |