mlpack 4.6.2__cp313-cp313-win_amd64.whl → 4.7.0__cp313-cp313-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mlpack/__init__.py +4 -4
- mlpack/adaboost_classify.cp313-win_amd64.pyd +0 -0
- mlpack/adaboost_probabilities.cp313-win_amd64.pyd +0 -0
- mlpack/adaboost_train.cp313-win_amd64.pyd +0 -0
- mlpack/approx_kfn.cp313-win_amd64.pyd +0 -0
- mlpack/arma_numpy.cp313-win_amd64.pyd +0 -0
- mlpack/bayesian_linear_regression.cp313-win_amd64.pyd +0 -0
- mlpack/cf.cp313-win_amd64.pyd +0 -0
- mlpack/dbscan.cp313-win_amd64.pyd +0 -0
- mlpack/decision_tree.cp313-win_amd64.pyd +0 -0
- mlpack/det.cp313-win_amd64.pyd +0 -0
- mlpack/emst.cp313-win_amd64.pyd +0 -0
- mlpack/fastmks.cp313-win_amd64.pyd +0 -0
- mlpack/gmm_generate.cp313-win_amd64.pyd +0 -0
- mlpack/gmm_probability.cp313-win_amd64.pyd +0 -0
- mlpack/gmm_train.cp313-win_amd64.pyd +0 -0
- mlpack/hmm_generate.cp313-win_amd64.pyd +0 -0
- mlpack/hmm_loglik.cp313-win_amd64.pyd +0 -0
- mlpack/hmm_train.cp313-win_amd64.pyd +0 -0
- mlpack/hmm_viterbi.cp313-win_amd64.pyd +0 -0
- mlpack/hoeffding_tree.cp313-win_amd64.pyd +0 -0
- mlpack/image_converter.cp313-win_amd64.pyd +0 -0
- mlpack/include/mlpack/base.hpp +1 -0
- mlpack/include/mlpack/core/arma_extend/find_nan.hpp +63 -0
- mlpack/include/mlpack/core/cereal/low_precision.hpp +48 -0
- mlpack/include/mlpack/core/cv/cv_base.hpp +11 -11
- mlpack/include/mlpack/core/cv/cv_base_impl.hpp +7 -7
- mlpack/include/mlpack/core/cv/k_fold_cv.hpp +4 -4
- mlpack/include/mlpack/core/cv/k_fold_cv_impl.hpp +4 -4
- mlpack/include/mlpack/core/cv/meta_info_extractor.hpp +10 -10
- mlpack/include/mlpack/core/cv/metrics/f1_impl.hpp +1 -1
- mlpack/include/mlpack/core/cv/metrics/facilities.hpp +2 -1
- mlpack/include/mlpack/core/cv/metrics/precision_impl.hpp +1 -1
- mlpack/include/mlpack/core/cv/metrics/r2_score_impl.hpp +1 -1
- mlpack/include/mlpack/core/cv/metrics/silhouette_score_impl.hpp +1 -1
- mlpack/include/mlpack/core/cv/simple_cv.hpp +4 -4
- mlpack/include/mlpack/core/cv/simple_cv_impl.hpp +2 -2
- mlpack/include/mlpack/core/data/binarize.hpp +0 -2
- mlpack/include/mlpack/core/data/check_categorical_param.hpp +0 -2
- mlpack/include/mlpack/core/data/combine_options.hpp +151 -0
- mlpack/include/mlpack/core/data/confusion_matrix.hpp +0 -2
- mlpack/include/mlpack/core/data/confusion_matrix_impl.hpp +0 -2
- mlpack/include/mlpack/core/data/data.hpp +6 -4
- mlpack/include/mlpack/core/data/data_options.hpp +341 -18
- mlpack/include/mlpack/core/data/dataset_mapper.hpp +3 -5
- mlpack/include/mlpack/core/data/dataset_mapper_impl.hpp +0 -2
- mlpack/include/mlpack/core/data/detect_file_type.hpp +34 -5
- mlpack/include/mlpack/core/data/detect_file_type_impl.hpp +185 -11
- mlpack/include/mlpack/core/data/extension.hpp +2 -4
- mlpack/include/mlpack/core/data/font8x8_basic.h +152 -0
- mlpack/include/mlpack/core/data/has_serialize.hpp +0 -2
- mlpack/include/mlpack/core/data/image_bounding_box.hpp +36 -0
- mlpack/include/mlpack/core/data/image_bounding_box_impl.hpp +155 -0
- mlpack/include/mlpack/core/data/image_layout.hpp +63 -0
- mlpack/include/mlpack/core/data/image_layout_impl.hpp +75 -0
- mlpack/include/mlpack/core/data/image_letterbox.hpp +116 -0
- mlpack/include/mlpack/core/data/image_options.hpp +257 -0
- mlpack/include/mlpack/core/data/image_resize_crop.hpp +113 -48
- mlpack/include/mlpack/core/data/imputation_methods/custom_imputation.hpp +16 -32
- mlpack/include/mlpack/core/data/imputation_methods/listwise_deletion.hpp +19 -29
- mlpack/include/mlpack/core/data/imputation_methods/mean_imputation.hpp +113 -44
- mlpack/include/mlpack/core/data/imputation_methods/median_imputation.hpp +44 -43
- mlpack/include/mlpack/core/data/imputer.hpp +41 -49
- mlpack/include/mlpack/core/data/is_naninf.hpp +0 -2
- mlpack/include/mlpack/core/data/load.hpp +49 -233
- mlpack/include/mlpack/core/data/load_arff.hpp +0 -2
- mlpack/include/mlpack/core/data/load_arff_impl.hpp +2 -4
- mlpack/include/mlpack/core/data/load_categorical.hpp +1 -4
- mlpack/include/mlpack/core/data/load_categorical_impl.hpp +10 -26
- mlpack/include/mlpack/core/data/load_dense.hpp +279 -0
- mlpack/include/mlpack/core/data/load_deprecated.hpp +466 -0
- mlpack/include/mlpack/core/data/load_image.hpp +71 -43
- mlpack/include/mlpack/core/data/load_impl.hpp +95 -274
- mlpack/include/mlpack/core/data/load_model.hpp +62 -0
- mlpack/include/mlpack/core/data/load_numeric.hpp +124 -87
- mlpack/include/mlpack/core/data/load_sparse.hpp +91 -0
- mlpack/include/mlpack/core/data/map_policies/datatype.hpp +0 -2
- mlpack/include/mlpack/core/data/map_policies/increment_policy.hpp +0 -2
- mlpack/include/mlpack/core/data/map_policies/map_policies.hpp +0 -1
- mlpack/include/mlpack/core/data/matrix_options.hpp +152 -20
- mlpack/include/mlpack/core/data/normalize_labels.hpp +0 -2
- mlpack/include/mlpack/core/data/normalize_labels_impl.hpp +0 -2
- mlpack/include/mlpack/core/data/one_hot_encoding.hpp +2 -4
- mlpack/include/mlpack/core/data/one_hot_encoding_impl.hpp +3 -5
- mlpack/include/mlpack/core/data/save.hpp +26 -120
- mlpack/include/mlpack/core/data/save_dense.hpp +42 -0
- mlpack/include/mlpack/core/data/save_deprecated.hpp +308 -0
- mlpack/include/mlpack/core/data/save_image.hpp +82 -42
- mlpack/include/mlpack/core/data/save_impl.hpp +60 -245
- mlpack/include/mlpack/core/data/save_matrix.hpp +45 -0
- mlpack/include/mlpack/core/data/save_model.hpp +61 -0
- mlpack/include/mlpack/core/data/save_numeric.hpp +60 -0
- mlpack/include/mlpack/core/data/save_sparse.hpp +44 -0
- mlpack/include/mlpack/core/data/scaler_methods/max_abs_scaler.hpp +0 -2
- mlpack/include/mlpack/core/data/scaler_methods/mean_normalization.hpp +2 -4
- mlpack/include/mlpack/core/data/scaler_methods/min_max_scaler.hpp +0 -2
- mlpack/include/mlpack/core/data/scaler_methods/pca_whitening.hpp +1 -3
- mlpack/include/mlpack/core/data/scaler_methods/standard_scaler.hpp +2 -4
- mlpack/include/mlpack/core/data/scaler_methods/zca_whitening.hpp +0 -2
- mlpack/include/mlpack/core/data/split_data.hpp +6 -8
- mlpack/include/mlpack/core/data/string_algorithms.hpp +0 -2
- mlpack/include/mlpack/core/data/string_encoding.hpp +0 -2
- mlpack/include/mlpack/core/data/string_encoding_dictionary.hpp +0 -2
- mlpack/include/mlpack/core/data/string_encoding_impl.hpp +0 -2
- mlpack/include/mlpack/core/data/string_encoding_policies/bag_of_words_encoding_policy.hpp +0 -2
- mlpack/include/mlpack/core/data/string_encoding_policies/dictionary_encoding_policy.hpp +0 -2
- mlpack/include/mlpack/core/data/string_encoding_policies/policy_traits.hpp +0 -2
- mlpack/include/mlpack/core/data/string_encoding_policies/tf_idf_encoding_policy.hpp +0 -2
- mlpack/include/mlpack/core/data/text_options.hpp +91 -53
- mlpack/include/mlpack/core/data/tokenizers/char_extract.hpp +0 -2
- mlpack/include/mlpack/core/data/tokenizers/split_by_any_of.hpp +0 -2
- mlpack/include/mlpack/core/distributions/gamma_distribution_impl.hpp +4 -4
- mlpack/include/mlpack/core/distributions/laplace_distribution.hpp +9 -9
- mlpack/include/mlpack/core/distributions/laplace_distribution_impl.hpp +7 -7
- mlpack/include/mlpack/core/hpt/cv_function.hpp +2 -2
- mlpack/include/mlpack/core/hpt/cv_function_impl.hpp +2 -2
- mlpack/include/mlpack/core/hpt/hpt.hpp +4 -4
- mlpack/include/mlpack/core/hpt/hpt_impl.hpp +9 -9
- mlpack/include/mlpack/core/math/make_alias.hpp +7 -5
- mlpack/include/mlpack/core/math/random.hpp +19 -5
- mlpack/include/mlpack/core/math/shuffle_data.hpp +79 -245
- mlpack/include/mlpack/core/metrics/non_maximal_suppression_impl.hpp +9 -10
- mlpack/include/mlpack/core/stb/bundled/stb_image_resize2.h +291 -239
- mlpack/include/mlpack/core/tree/binary_space_tree/rp_tree_mean_split_impl.hpp +7 -7
- mlpack/include/mlpack/core/tree/cellbound.hpp +2 -2
- mlpack/include/mlpack/core/tree/cosine_tree/cosine_tree_impl.hpp +10 -10
- mlpack/include/mlpack/core/tree/octree/octree.hpp +10 -0
- mlpack/include/mlpack/core/tree/octree/octree_impl.hpp +14 -4
- mlpack/include/mlpack/core/util/arma_traits.hpp +25 -38
- mlpack/include/mlpack/core/util/coot_traits.hpp +97 -0
- mlpack/include/mlpack/core/util/forward.hpp +0 -2
- mlpack/include/mlpack/core/util/param.hpp +4 -4
- mlpack/include/mlpack/core/util/params_impl.hpp +2 -2
- mlpack/include/mlpack/core/util/using.hpp +29 -2
- mlpack/include/mlpack/core/util/version.hpp +5 -3
- mlpack/include/mlpack/core/util/version_impl.hpp +3 -6
- mlpack/include/mlpack/methods/adaboost/adaboost_classify_main.cpp +1 -1
- mlpack/include/mlpack/methods/adaboost/adaboost_main.cpp +3 -3
- mlpack/include/mlpack/methods/adaboost/adaboost_train_main.cpp +2 -2
- mlpack/include/mlpack/methods/ann/activation_functions/activation_functions.hpp +1 -0
- mlpack/include/mlpack/methods/ann/activation_functions/bipolar_sigmoid_function.hpp +6 -4
- mlpack/include/mlpack/methods/ann/activation_functions/elish_function.hpp +17 -12
- mlpack/include/mlpack/methods/ann/activation_functions/elliot_function.hpp +9 -7
- mlpack/include/mlpack/methods/ann/activation_functions/gaussian_function.hpp +7 -6
- mlpack/include/mlpack/methods/ann/activation_functions/gelu_exact_function.hpp +73 -0
- mlpack/include/mlpack/methods/ann/activation_functions/gelu_function.hpp +27 -16
- mlpack/include/mlpack/methods/ann/activation_functions/hard_sigmoid_function.hpp +8 -6
- mlpack/include/mlpack/methods/ann/activation_functions/hard_swish_function.hpp +6 -4
- mlpack/include/mlpack/methods/ann/activation_functions/hyper_sinh_function.hpp +13 -8
- mlpack/include/mlpack/methods/ann/activation_functions/identity_function.hpp +6 -4
- mlpack/include/mlpack/methods/ann/activation_functions/inverse_quadratic_function.hpp +8 -6
- mlpack/include/mlpack/methods/ann/activation_functions/lisht_function.hpp +7 -5
- mlpack/include/mlpack/methods/ann/activation_functions/logistic_function.hpp +14 -12
- mlpack/include/mlpack/methods/ann/activation_functions/mish_function.hpp +7 -5
- mlpack/include/mlpack/methods/ann/activation_functions/multi_quadratic_function.hpp +6 -4
- mlpack/include/mlpack/methods/ann/activation_functions/poisson1_function.hpp +4 -2
- mlpack/include/mlpack/methods/ann/activation_functions/quadratic_function.hpp +6 -4
- mlpack/include/mlpack/methods/ann/activation_functions/rectifier_function.hpp +10 -10
- mlpack/include/mlpack/methods/ann/activation_functions/silu_function.hpp +10 -8
- mlpack/include/mlpack/methods/ann/activation_functions/softplus_function.hpp +12 -9
- mlpack/include/mlpack/methods/ann/activation_functions/softsign_function.hpp +15 -23
- mlpack/include/mlpack/methods/ann/activation_functions/spline_function.hpp +9 -7
- mlpack/include/mlpack/methods/ann/activation_functions/swish_function.hpp +11 -9
- mlpack/include/mlpack/methods/ann/activation_functions/tanh_exponential_function.hpp +9 -7
- mlpack/include/mlpack/methods/ann/activation_functions/tanh_function.hpp +10 -7
- mlpack/include/mlpack/methods/ann/ann.hpp +3 -0
- mlpack/include/mlpack/methods/ann/convolution_rules/base_convolution.hpp +197 -0
- mlpack/include/mlpack/methods/ann/convolution_rules/convolution_rules.hpp +1 -2
- mlpack/include/mlpack/methods/ann/convolution_rules/im2col_convolution.hpp +215 -0
- mlpack/include/mlpack/methods/ann/convolution_rules/naive_convolution.hpp +109 -154
- mlpack/include/mlpack/methods/ann/dag_network.hpp +728 -0
- mlpack/include/mlpack/methods/ann/dag_network_impl.hpp +1640 -0
- mlpack/include/mlpack/methods/ann/dists/bernoulli_distribution_impl.hpp +1 -1
- mlpack/include/mlpack/methods/ann/dists/normal_distribution_impl.hpp +7 -2
- mlpack/include/mlpack/methods/ann/ffn.hpp +39 -3
- mlpack/include/mlpack/methods/ann/ffn_impl.hpp +14 -32
- mlpack/include/mlpack/methods/ann/init_rules/const_init.hpp +4 -4
- mlpack/include/mlpack/methods/ann/init_rules/gaussian_init.hpp +6 -2
- mlpack/include/mlpack/methods/ann/init_rules/he_init.hpp +4 -2
- mlpack/include/mlpack/methods/ann/init_rules/kathirvalavakumar_subavathi_init.hpp +3 -3
- mlpack/include/mlpack/methods/ann/init_rules/lecun_normal_init.hpp +4 -2
- mlpack/include/mlpack/methods/ann/init_rules/nguyen_widrow_init.hpp +2 -2
- mlpack/include/mlpack/methods/ann/init_rules/oivs_init.hpp +2 -2
- mlpack/include/mlpack/methods/ann/init_rules/orthogonal_init.hpp +2 -2
- mlpack/include/mlpack/methods/ann/init_rules/random_init.hpp +8 -4
- mlpack/include/mlpack/methods/ann/layer/adaptive_max_pooling.hpp +21 -23
- mlpack/include/mlpack/methods/ann/layer/adaptive_max_pooling_impl.hpp +15 -15
- mlpack/include/mlpack/methods/ann/layer/adaptive_mean_pooling.hpp +21 -23
- mlpack/include/mlpack/methods/ann/layer/adaptive_mean_pooling_impl.hpp +16 -16
- mlpack/include/mlpack/methods/ann/layer/add.hpp +18 -18
- mlpack/include/mlpack/methods/ann/layer/add_impl.hpp +13 -13
- mlpack/include/mlpack/methods/ann/layer/add_merge.hpp +19 -18
- mlpack/include/mlpack/methods/ann/layer/add_merge_impl.hpp +13 -13
- mlpack/include/mlpack/methods/ann/layer/alpha_dropout.hpp +17 -16
- mlpack/include/mlpack/methods/ann/layer/alpha_dropout_impl.hpp +14 -13
- mlpack/include/mlpack/methods/ann/layer/base_layer.hpp +28 -51
- mlpack/include/mlpack/methods/ann/layer/batch_norm.hpp +16 -18
- mlpack/include/mlpack/methods/ann/layer/batch_norm_impl.hpp +55 -54
- mlpack/include/mlpack/methods/ann/layer/c_relu.hpp +18 -20
- mlpack/include/mlpack/methods/ann/layer/c_relu_impl.hpp +20 -25
- mlpack/include/mlpack/methods/ann/layer/celu.hpp +14 -19
- mlpack/include/mlpack/methods/ann/layer/celu_impl.hpp +25 -34
- mlpack/include/mlpack/methods/ann/layer/concat.hpp +18 -18
- mlpack/include/mlpack/methods/ann/layer/concat_impl.hpp +13 -13
- mlpack/include/mlpack/methods/ann/layer/concatenate.hpp +18 -18
- mlpack/include/mlpack/methods/ann/layer/concatenate_impl.hpp +14 -14
- mlpack/include/mlpack/methods/ann/layer/convolution.hpp +42 -47
- mlpack/include/mlpack/methods/ann/layer/convolution_impl.hpp +170 -159
- mlpack/include/mlpack/methods/ann/layer/dropconnect.hpp +18 -20
- mlpack/include/mlpack/methods/ann/layer/dropconnect_impl.hpp +20 -20
- mlpack/include/mlpack/methods/ann/layer/dropout.hpp +17 -19
- mlpack/include/mlpack/methods/ann/layer/dropout_impl.hpp +14 -21
- mlpack/include/mlpack/methods/ann/layer/elu.hpp +23 -25
- mlpack/include/mlpack/methods/ann/layer/elu_impl.hpp +20 -27
- mlpack/include/mlpack/methods/ann/layer/embedding.hpp +160 -0
- mlpack/include/mlpack/methods/ann/layer/embedding_impl.hpp +189 -0
- mlpack/include/mlpack/methods/ann/layer/flexible_relu.hpp +17 -19
- mlpack/include/mlpack/methods/ann/layer/flexible_relu_impl.hpp +20 -20
- mlpack/include/mlpack/methods/ann/layer/ftswish.hpp +17 -18
- mlpack/include/mlpack/methods/ann/layer/ftswish_impl.hpp +17 -35
- mlpack/include/mlpack/methods/ann/layer/grouped_convolution.hpp +27 -33
- mlpack/include/mlpack/methods/ann/layer/grouped_convolution_impl.hpp +170 -163
- mlpack/include/mlpack/methods/ann/layer/gru.hpp +195 -0
- mlpack/include/mlpack/methods/ann/layer/gru_impl.hpp +325 -0
- mlpack/include/mlpack/methods/ann/layer/hard_tanh.hpp +13 -15
- mlpack/include/mlpack/methods/ann/layer/hard_tanh_impl.hpp +12 -12
- mlpack/include/mlpack/methods/ann/layer/identity.hpp +19 -20
- mlpack/include/mlpack/methods/ann/layer/identity_impl.hpp +12 -12
- mlpack/include/mlpack/methods/ann/layer/layer.hpp +37 -33
- mlpack/include/mlpack/methods/ann/layer/layer_norm.hpp +11 -13
- mlpack/include/mlpack/methods/ann/layer/layer_norm_impl.hpp +16 -16
- mlpack/include/mlpack/methods/ann/layer/layer_types.hpp +4 -1
- mlpack/include/mlpack/methods/ann/layer/leaky_relu.hpp +20 -23
- mlpack/include/mlpack/methods/ann/layer/leaky_relu_impl.hpp +12 -13
- mlpack/include/mlpack/methods/ann/layer/linear.hpp +16 -18
- mlpack/include/mlpack/methods/ann/layer/linear3d.hpp +18 -18
- mlpack/include/mlpack/methods/ann/layer/linear3d_impl.hpp +18 -18
- mlpack/include/mlpack/methods/ann/layer/linear_impl.hpp +15 -15
- mlpack/include/mlpack/methods/ann/layer/linear_no_bias.hpp +15 -17
- mlpack/include/mlpack/methods/ann/layer/linear_no_bias_impl.hpp +20 -20
- mlpack/include/mlpack/methods/ann/layer/linear_recurrent.hpp +25 -14
- mlpack/include/mlpack/methods/ann/layer/linear_recurrent_impl.hpp +60 -31
- mlpack/include/mlpack/methods/ann/layer/log_softmax.hpp +17 -36
- mlpack/include/mlpack/methods/ann/layer/log_softmax_impl.hpp +58 -74
- mlpack/include/mlpack/methods/ann/layer/lstm.hpp +26 -29
- mlpack/include/mlpack/methods/ann/layer/lstm_impl.hpp +128 -124
- mlpack/include/mlpack/methods/ann/layer/max_pooling.hpp +19 -19
- mlpack/include/mlpack/methods/ann/layer/max_pooling_impl.hpp +14 -14
- mlpack/include/mlpack/methods/ann/layer/mean_pooling.hpp +24 -24
- mlpack/include/mlpack/methods/ann/layer/mean_pooling_impl.hpp +16 -16
- mlpack/include/mlpack/methods/ann/layer/multi_layer.hpp +36 -6
- mlpack/include/mlpack/methods/ann/layer/multi_layer_impl.hpp +6 -2
- mlpack/include/mlpack/methods/ann/layer/multihead_attention.hpp +26 -22
- mlpack/include/mlpack/methods/ann/layer/multihead_attention_impl.hpp +161 -64
- mlpack/include/mlpack/methods/ann/layer/nearest_interpolation.hpp +28 -25
- mlpack/include/mlpack/methods/ann/layer/nearest_interpolation_impl.hpp +36 -37
- mlpack/include/mlpack/methods/ann/layer/noisylinear.hpp +39 -42
- mlpack/include/mlpack/methods/ann/layer/noisylinear_impl.hpp +18 -18
- mlpack/include/mlpack/methods/ann/layer/padding.hpp +21 -17
- mlpack/include/mlpack/methods/ann/layer/padding_impl.hpp +33 -19
- mlpack/include/mlpack/methods/ann/layer/parametric_relu.hpp +26 -28
- mlpack/include/mlpack/methods/ann/layer/parametric_relu_impl.hpp +18 -18
- mlpack/include/mlpack/methods/ann/layer/radial_basis_function.hpp +41 -28
- mlpack/include/mlpack/methods/ann/layer/radial_basis_function_impl.hpp +42 -17
- mlpack/include/mlpack/methods/ann/layer/recurrent_layer.hpp +13 -0
- mlpack/include/mlpack/methods/ann/layer/relu6.hpp +19 -21
- mlpack/include/mlpack/methods/ann/layer/relu6_impl.hpp +14 -14
- mlpack/include/mlpack/methods/ann/layer/repeat.hpp +24 -25
- mlpack/include/mlpack/methods/ann/layer/repeat_impl.hpp +10 -10
- mlpack/include/mlpack/methods/ann/layer/serialization.hpp +64 -54
- mlpack/include/mlpack/methods/ann/layer/softmax.hpp +20 -20
- mlpack/include/mlpack/methods/ann/layer/softmax_impl.hpp +10 -10
- mlpack/include/mlpack/methods/ann/layer/softmin.hpp +20 -23
- mlpack/include/mlpack/methods/ann/layer/softmin_impl.hpp +10 -10
- mlpack/include/mlpack/methods/ann/layer/sum_reduce.hpp +103 -0
- mlpack/include/mlpack/methods/ann/layer/sum_reduce_impl.hpp +143 -0
- mlpack/include/mlpack/methods/ann/loss_functions/cosine_embedding_loss_impl.hpp +3 -3
- mlpack/include/mlpack/methods/ann/loss_functions/mean_bias_error_impl.hpp +1 -1
- mlpack/include/mlpack/methods/ann/loss_functions/multilabel_softmargin_loss_impl.hpp +1 -1
- mlpack/include/mlpack/methods/ann/loss_functions/negative_log_likelihood.hpp +2 -2
- mlpack/include/mlpack/methods/ann/loss_functions/negative_log_likelihood_impl.hpp +29 -15
- mlpack/include/mlpack/methods/ann/loss_functions/poisson_nll_loss_impl.hpp +1 -1
- mlpack/include/mlpack/methods/ann/models/models.hpp +17 -0
- mlpack/include/mlpack/methods/ann/models/yolov3/yolov3_layer.hpp +151 -0
- mlpack/include/mlpack/methods/ann/models/yolov3/yolov3_layer_impl.hpp +265 -0
- mlpack/include/mlpack/methods/ann/models/yolov3/yolov3_tiny.hpp +187 -0
- mlpack/include/mlpack/methods/ann/models/yolov3/yolov3_tiny_impl.hpp +206 -0
- mlpack/include/mlpack/methods/ann/regularizer/orthogonal_regularizer_impl.hpp +5 -3
- mlpack/include/mlpack/methods/ann/rnn.hpp +136 -42
- mlpack/include/mlpack/methods/ann/rnn_impl.hpp +230 -38
- mlpack/include/mlpack/methods/approx_kfn/drusilla_select_impl.hpp +1 -1
- mlpack/include/mlpack/methods/bayesian_linear_regression/bayesian_linear_regression_main.cpp +1 -1
- mlpack/include/mlpack/methods/bias_svd/bias_svd_function_impl.hpp +1 -1
- mlpack/include/mlpack/methods/cf/cf_model.hpp +1 -1
- mlpack/include/mlpack/methods/decision_tree/decision_tree.hpp +6 -6
- mlpack/include/mlpack/methods/decision_tree/decision_tree_impl.hpp +12 -12
- mlpack/include/mlpack/methods/decision_tree/decision_tree_main.cpp +0 -1
- mlpack/include/mlpack/methods/decision_tree/decision_tree_regressor.hpp +6 -6
- mlpack/include/mlpack/methods/decision_tree/decision_tree_regressor_impl.hpp +12 -12
- mlpack/include/mlpack/methods/det/det_main.cpp +1 -1
- mlpack/include/mlpack/methods/hmm/hmm_train_main.cpp +4 -4
- mlpack/include/mlpack/methods/hmm/hmm_util_impl.hpp +2 -2
- mlpack/include/mlpack/methods/hoeffding_trees/hoeffding_tree.hpp +6 -6
- mlpack/include/mlpack/methods/hoeffding_trees/hoeffding_tree_impl.hpp +31 -31
- mlpack/include/mlpack/methods/hoeffding_trees/hoeffding_tree_main.cpp +1 -2
- mlpack/include/mlpack/methods/hoeffding_trees/hoeffding_tree_model.hpp +2 -2
- mlpack/include/mlpack/methods/hoeffding_trees/hoeffding_tree_model_impl.hpp +1 -1
- mlpack/include/mlpack/methods/kde/kde_rules_impl.hpp +6 -6
- mlpack/include/mlpack/methods/lars/lars_impl.hpp +3 -3
- mlpack/include/mlpack/methods/linear_svm/linear_svm_function_impl.hpp +4 -4
- mlpack/include/mlpack/methods/linear_svm/linear_svm_main.cpp +3 -3
- mlpack/include/mlpack/methods/lmnn/lmnn_main.cpp +1 -1
- mlpack/include/mlpack/methods/lsh/lsh_main.cpp +1 -1
- mlpack/include/mlpack/methods/matrix_completion/matrix_completion_impl.hpp +1 -1
- mlpack/include/mlpack/methods/naive_bayes/naive_bayes_classifier_impl.hpp +1 -1
- mlpack/include/mlpack/methods/naive_bayes/nbc_main.cpp +3 -3
- mlpack/include/mlpack/methods/nca/nca_main.cpp +1 -1
- mlpack/include/mlpack/methods/neighbor_search/kfn_main.cpp +8 -8
- mlpack/include/mlpack/methods/neighbor_search/knn_main.cpp +8 -8
- mlpack/include/mlpack/methods/neighbor_search/neighbor_search.hpp +154 -34
- mlpack/include/mlpack/methods/neighbor_search/neighbor_search_impl.hpp +190 -51
- mlpack/include/mlpack/methods/neighbor_search/neighbor_search_stat.hpp +10 -0
- mlpack/include/mlpack/methods/neighbor_search/ns_model.hpp +15 -15
- mlpack/include/mlpack/methods/neighbor_search/ns_model_impl.hpp +55 -46
- mlpack/include/mlpack/methods/neighbor_search/typedef.hpp +42 -2
- mlpack/include/mlpack/methods/pca/pca_impl.hpp +2 -2
- mlpack/include/mlpack/methods/perceptron/perceptron.hpp +2 -2
- mlpack/include/mlpack/methods/perceptron/perceptron_impl.hpp +1 -1
- mlpack/include/mlpack/methods/perceptron/perceptron_main.cpp +2 -2
- mlpack/include/mlpack/methods/preprocess/image_converter_main.cpp +2 -3
- mlpack/include/mlpack/methods/preprocess/preprocess_binarize_main.cpp +2 -2
- mlpack/include/mlpack/methods/preprocess/preprocess_describe_main.cpp +0 -1
- mlpack/include/mlpack/methods/preprocess/preprocess_imputer_main.cpp +50 -129
- mlpack/include/mlpack/methods/preprocess/preprocess_one_hot_encoding_main.cpp +6 -6
- mlpack/include/mlpack/methods/preprocess/preprocess_scale_main.cpp +2 -3
- mlpack/include/mlpack/methods/preprocess/preprocess_split_main.cpp +3 -4
- mlpack/include/mlpack/methods/preprocess/scaling_model.hpp +6 -8
- mlpack/include/mlpack/methods/preprocess/scaling_model_impl.hpp +18 -20
- mlpack/include/mlpack/methods/random_forest/random_forest.hpp +5 -5
- mlpack/include/mlpack/methods/random_forest/random_forest_impl.hpp +9 -9
- mlpack/include/mlpack/methods/range_search/range_search_main.cpp +1 -1
- mlpack/include/mlpack/methods/rann/krann_main.cpp +1 -1
- mlpack/include/mlpack/methods/regularized_svd/regularized_svd_function_impl.hpp +1 -1
- mlpack/include/mlpack/methods/reinforcement_learning/async_learning_impl.hpp +8 -8
- mlpack/include/mlpack/methods/reinforcement_learning/ddpg_impl.hpp +16 -16
- mlpack/include/mlpack/methods/reinforcement_learning/environment/acrobot.hpp +4 -4
- mlpack/include/mlpack/methods/reinforcement_learning/environment/cart_pole.hpp +3 -3
- mlpack/include/mlpack/methods/reinforcement_learning/environment/cont_double_pole_cart.hpp +6 -5
- mlpack/include/mlpack/methods/reinforcement_learning/environment/pendulum.hpp +6 -5
- mlpack/include/mlpack/methods/reinforcement_learning/policy/aggregated_policy.hpp +2 -2
- mlpack/include/mlpack/methods/reinforcement_learning/q_learning_impl.hpp +10 -10
- mlpack/include/mlpack/methods/reinforcement_learning/q_networks/categorical_dqn.hpp +21 -17
- mlpack/include/mlpack/methods/reinforcement_learning/q_networks/dueling_dqn.hpp +69 -77
- mlpack/include/mlpack/methods/reinforcement_learning/q_networks/simple_dqn.hpp +9 -9
- mlpack/include/mlpack/methods/reinforcement_learning/sac_impl.hpp +14 -14
- mlpack/include/mlpack/methods/reinforcement_learning/td3_impl.hpp +14 -14
- mlpack/include/mlpack/methods/softmax_regression/softmax_regression_function_impl.hpp +1 -1
- mlpack/include/mlpack/methods/svdplusplus/svdplusplus_function_impl.hpp +1 -1
- mlpack/include/mlpack/namespace_compat.hpp +1 -0
- mlpack/include/mlpack/prereqs.hpp +1 -0
- mlpack/kde.cp313-win_amd64.pyd +0 -0
- mlpack/kernel_pca.cp313-win_amd64.pyd +0 -0
- mlpack/kfn.cp313-win_amd64.pyd +0 -0
- mlpack/kmeans.cp313-win_amd64.pyd +0 -0
- mlpack/knn.cp313-win_amd64.pyd +0 -0
- mlpack/krann.cp313-win_amd64.pyd +0 -0
- mlpack/lars.cp313-win_amd64.pyd +0 -0
- mlpack/linear_regression_predict.cp313-win_amd64.pyd +0 -0
- mlpack/linear_regression_train.cp313-win_amd64.pyd +0 -0
- mlpack/linear_svm.cp313-win_amd64.pyd +0 -0
- mlpack/lmnn.cp313-win_amd64.pyd +0 -0
- mlpack/local_coordinate_coding.cp313-win_amd64.pyd +0 -0
- mlpack/logistic_regression.cp313-win_amd64.pyd +0 -0
- mlpack/lsh.cp313-win_amd64.pyd +0 -0
- mlpack/mean_shift.cp313-win_amd64.pyd +0 -0
- mlpack/nbc.cp313-win_amd64.pyd +0 -0
- mlpack/nca.cp313-win_amd64.pyd +0 -0
- mlpack/nmf.cp313-win_amd64.pyd +0 -0
- mlpack/pca.cp313-win_amd64.pyd +0 -0
- mlpack/perceptron.cp313-win_amd64.pyd +0 -0
- mlpack/preprocess_binarize.cp313-win_amd64.pyd +0 -0
- mlpack/preprocess_describe.cp313-win_amd64.pyd +0 -0
- mlpack/preprocess_one_hot_encoding.cp313-win_amd64.pyd +0 -0
- mlpack/preprocess_scale.cp313-win_amd64.pyd +0 -0
- mlpack/preprocess_split.cp313-win_amd64.pyd +0 -0
- mlpack/radical.cp313-win_amd64.pyd +0 -0
- mlpack/random_forest.cp313-win_amd64.pyd +0 -0
- mlpack/softmax_regression.cp313-win_amd64.pyd +0 -0
- mlpack/sparse_coding.cp313-win_amd64.pyd +0 -0
- mlpack-4.7.0.dist-info/DELVEWHEEL +2 -0
- {mlpack-4.6.2.dist-info → mlpack-4.7.0.dist-info}/METADATA +2 -2
- {mlpack-4.6.2.dist-info → mlpack-4.7.0.dist-info}/RECORD +396 -377
- {mlpack-4.6.2.dist-info → mlpack-4.7.0.dist-info}/WHEEL +1 -1
- mlpack/include/mlpack/core/data/format.hpp +0 -31
- mlpack/include/mlpack/core/data/image_info.hpp +0 -102
- mlpack/include/mlpack/core/data/image_info_impl.hpp +0 -84
- mlpack/include/mlpack/core/data/load_image_impl.hpp +0 -171
- mlpack/include/mlpack/core/data/load_model_impl.hpp +0 -115
- mlpack/include/mlpack/core/data/load_vec_impl.hpp +0 -154
- mlpack/include/mlpack/core/data/map_policies/missing_policy.hpp +0 -148
- mlpack/include/mlpack/core/data/save_image_impl.hpp +0 -170
- mlpack/include/mlpack/core/data/types.hpp +0 -61
- mlpack/include/mlpack/core/data/types_impl.hpp +0 -83
- mlpack/include/mlpack/core/data/utilities.hpp +0 -158
- mlpack/include/mlpack/core/util/gitversion.hpp +0 -1
- mlpack/include/mlpack/methods/ann/convolution_rules/fft_convolution.hpp +0 -213
- mlpack/include/mlpack/methods/ann/convolution_rules/svd_convolution.hpp +0 -201
- mlpack/include/mlpack/methods/ann/layer/not_adapted/gru.hpp +0 -226
- mlpack/include/mlpack/methods/ann/layer/not_adapted/gru_impl.hpp +0 -367
- mlpack/include/mlpack/methods/ann/layer/not_adapted/lookup.hpp +0 -139
- mlpack/include/mlpack/methods/ann/layer/not_adapted/lookup_impl.hpp +0 -98
- mlpack-4.6.2.dist-info/DELVEWHEEL +0 -2
- {mlpack-4.6.2.dist-info → mlpack-4.7.0.dist-info}/top_level.txt +0 -0
- /mlpack.libs/{libopenblas-9e6d070f769e6580e8c55c0cf83b80a5.dll → libopenblas-c7f521b507686ddc25bee7538a80c374.dll} +0 -0
- /mlpack.libs/{msvcp140-50208655e42969b9a5ab8a4e0186bbb9.dll → msvcp140-a4c2229bdc2a2a630acdc095b4d86008.dll} +0 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file methods/ann/models/yolov3/yolov3_layer_impl.hpp
|
|
3
|
+
* @author Andrew Furey
|
|
4
|
+
*
|
|
5
|
+
* Implementation of the YOLOv3 layer.
|
|
6
|
+
*
|
|
7
|
+
* mlpack is free software; you may redistribute it and/or modify it under the
|
|
8
|
+
* terms of the 3-clause BSD license. You should have received a copy of the
|
|
9
|
+
* 3-clause BSD license along with mlpack. If not, see
|
|
10
|
+
* http://www.opensource.org/licenses/BSD-3-Clause for more information.
|
|
11
|
+
*/
|
|
12
|
+
#ifndef MLPACK_METHODS_ANN_MODELS_YOLOV3_YOLOV3_LAYER_IMPL_HPP
|
|
13
|
+
#define MLPACK_METHODS_ANN_MODELS_YOLOV3_YOLOV3_LAYER_IMPL_HPP
|
|
14
|
+
|
|
15
|
+
#include "yolov3_layer.hpp"
|
|
16
|
+
|
|
17
|
+
namespace mlpack {
|
|
18
|
+
|
|
19
|
+
template <typename MatType>
|
|
20
|
+
YOLOv3Layer<MatType>::YOLOv3Layer(
|
|
21
|
+
const size_t imgSize,
|
|
22
|
+
const size_t numAttributes,
|
|
23
|
+
const size_t gridSize,
|
|
24
|
+
const size_t predictionsPerCell,
|
|
25
|
+
const std::vector<ElemType>& anchors) :
|
|
26
|
+
Layer<MatType>(),
|
|
27
|
+
imgSize(imgSize),
|
|
28
|
+
numAttributes(numAttributes),
|
|
29
|
+
gridSize(gridSize),
|
|
30
|
+
grid(gridSize * gridSize),
|
|
31
|
+
anchors(anchors),
|
|
32
|
+
predictionsPerCell(predictionsPerCell)
|
|
33
|
+
{
|
|
34
|
+
if (anchors.size() != 2 * predictionsPerCell)
|
|
35
|
+
{
|
|
36
|
+
std::ostringstream errMessage;
|
|
37
|
+
errMessage << "YOLOv3 must have " << predictionsPerCell
|
|
38
|
+
<< " (w, h) anchors but you gave "
|
|
39
|
+
<< anchors.size() / 2 << ".";
|
|
40
|
+
throw std::logic_error(errMessage.str());
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
GenerateAnchors();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
template<typename MatType>
|
|
47
|
+
YOLOv3Layer<MatType>::
|
|
48
|
+
YOLOv3Layer(const YOLOv3Layer& other) :
|
|
49
|
+
Layer<MatType>(),
|
|
50
|
+
imgSize(other.imgSize),
|
|
51
|
+
numAttributes(other.numAttributes),
|
|
52
|
+
gridSize(other.gridSize),
|
|
53
|
+
grid(other.grid),
|
|
54
|
+
anchors(other.anchors),
|
|
55
|
+
predictionsPerCell(other.predictionsPerCell)
|
|
56
|
+
{
|
|
57
|
+
// Nothing to do here.
|
|
58
|
+
GenerateAnchors();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
template<typename MatType>
|
|
62
|
+
YOLOv3Layer<MatType>::
|
|
63
|
+
YOLOv3Layer(YOLOv3Layer&& other) :
|
|
64
|
+
Layer<MatType>(std::move(other)),
|
|
65
|
+
imgSize(std::move(imgSize)),
|
|
66
|
+
numAttributes(std::move(numAttributes)),
|
|
67
|
+
gridSize(std::move(gridSize)),
|
|
68
|
+
grid(std::move(grid)),
|
|
69
|
+
anchors(std::move(anchors)),
|
|
70
|
+
predictionsPerCell(std::move(predictionsPerCell))
|
|
71
|
+
{
|
|
72
|
+
// Nothing to do here.
|
|
73
|
+
GenerateAnchors();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
template<typename MatType>
|
|
77
|
+
YOLOv3Layer<MatType>&
|
|
78
|
+
YOLOv3Layer<MatType>::
|
|
79
|
+
operator=(const YOLOv3Layer& other)
|
|
80
|
+
{
|
|
81
|
+
if (&other != this)
|
|
82
|
+
{
|
|
83
|
+
Layer<MatType>::operator=(other);
|
|
84
|
+
imgSize = other.imgSize;
|
|
85
|
+
numAttributes = other.numAttributes;
|
|
86
|
+
gridSize = other.gridSize;
|
|
87
|
+
grid = other.grid;
|
|
88
|
+
anchors = other.anchors;
|
|
89
|
+
predictionsPerCell = other.predictionsPerCell;
|
|
90
|
+
GenerateAnchors();
|
|
91
|
+
}
|
|
92
|
+
return *this;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
template<typename MatType>
|
|
96
|
+
YOLOv3Layer<MatType>&
|
|
97
|
+
YOLOv3Layer<MatType>::
|
|
98
|
+
operator=(YOLOv3Layer&& other)
|
|
99
|
+
{
|
|
100
|
+
if (&other != this)
|
|
101
|
+
{
|
|
102
|
+
Layer<MatType>::operator=(std::move(other));
|
|
103
|
+
imgSize = std::move(other.imgSize);
|
|
104
|
+
numAttributes = std::move(other.numAttributes);
|
|
105
|
+
gridSize = std::move(other.gridSize);
|
|
106
|
+
grid = std::move(other.grid);
|
|
107
|
+
anchors = std::move(anchors);
|
|
108
|
+
predictionsPerCell = std::move(other.predictionsPerCell);
|
|
109
|
+
GenerateAnchors();
|
|
110
|
+
}
|
|
111
|
+
return *this;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
template <typename MatType>
|
|
115
|
+
void YOLOv3Layer<MatType>::ComputeOutputDimensions()
|
|
116
|
+
{
|
|
117
|
+
if (this->inputDimensions.size() != 3)
|
|
118
|
+
{
|
|
119
|
+
std::ostringstream errMessage;
|
|
120
|
+
errMessage << "YOLOv3Layer::ComputeOutputDimensions(): "
|
|
121
|
+
<< "Input dimensions must be 3D, but there are "
|
|
122
|
+
<< this->inputDimensions.size() << " input "
|
|
123
|
+
<< "dimensions";
|
|
124
|
+
throw std::logic_error(errMessage.str());
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (this->inputDimensions[0] != this->inputDimensions[1])
|
|
128
|
+
throw std::logic_error("YOLOv3Layer::ComputeOutputDimensions(): "
|
|
129
|
+
"Input dimensions must be square.");
|
|
130
|
+
|
|
131
|
+
if (gridSize != this->inputDimensions[0] ||
|
|
132
|
+
gridSize != this->inputDimensions[1])
|
|
133
|
+
{
|
|
134
|
+
std::ostringstream errMessage;
|
|
135
|
+
errMessage << "YOLOv3Layer::ComputeOutputDimensions(): "
|
|
136
|
+
<< "Expected grid size was " << gridSize << " but input dimensions were "
|
|
137
|
+
<< this->inputDimensions[0] << " x " << this->inputDimensions[1];
|
|
138
|
+
throw std::logic_error(errMessage.str());
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
this->outputDimensions = { numAttributes, grid * predictionsPerCell };
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
template <typename MatType>
|
|
145
|
+
void YOLOv3Layer<MatType>::Forward(const MatType& input, MatType& output)
|
|
146
|
+
{
|
|
147
|
+
ElemType stride = imgSize / (ElemType)(gridSize);
|
|
148
|
+
size_t batchSize = input.n_cols;
|
|
149
|
+
output.set_size(input.n_rows, batchSize);
|
|
150
|
+
|
|
151
|
+
CubeType inputCube;
|
|
152
|
+
MakeAlias(inputCube, input, grid * numAttributes, predictionsPerCell,
|
|
153
|
+
batchSize);
|
|
154
|
+
|
|
155
|
+
CubeType outputCube(grid * numAttributes, predictionsPerCell, batchSize,
|
|
156
|
+
arma::fill::zeros);
|
|
157
|
+
|
|
158
|
+
CubeType reshapedCube;
|
|
159
|
+
MakeAlias(reshapedCube, output, numAttributes,
|
|
160
|
+
predictionsPerCell * grid, batchSize);
|
|
161
|
+
|
|
162
|
+
// Input dimensions: gridSize
|
|
163
|
+
MatType offset = arma::regspace<MatType>(0, gridSize - 1);
|
|
164
|
+
|
|
165
|
+
#if ARMA_VERSION_MAJOR < 15
|
|
166
|
+
// If arma::repcube is not available
|
|
167
|
+
CubeType anchorsWBS(anchorsW.n_rows, anchorsW.n_cols, batchSize);
|
|
168
|
+
CubeType anchorsHBS(anchorsH.n_rows, anchorsH.n_cols, batchSize);
|
|
169
|
+
CubeType xOffset(grid, predictionsPerCell, batchSize);
|
|
170
|
+
|
|
171
|
+
arma::Col<ElemType> offsetT =
|
|
172
|
+
arma::vectorise(arma::repmat(offset.t(), gridSize, 1));
|
|
173
|
+
CubeType yOffset(grid, predictionsPerCell, batchSize);
|
|
174
|
+
for (size_t i = 0; i < batchSize; i++)
|
|
175
|
+
{
|
|
176
|
+
anchorsWBS.slice(i) = anchorsW;
|
|
177
|
+
anchorsHBS.slice(i) = anchorsH;
|
|
178
|
+
xOffset.slice(i) = arma::repmat(offset, gridSize, predictionsPerCell);
|
|
179
|
+
yOffset.slice(i) = arma::repmat(offsetT, 1, predictionsPerCell);
|
|
180
|
+
}
|
|
181
|
+
#else
|
|
182
|
+
CubeType anchorsWBS = arma::repcube(anchorsW, 1, 1, batchSize);
|
|
183
|
+
CubeType anchorsHBS = arma::repcube(anchorsH, 1, 1, batchSize);
|
|
184
|
+
CubeType xOffset = arma::repcube(offset, gridSize,
|
|
185
|
+
predictionsPerCell, batchSize);
|
|
186
|
+
|
|
187
|
+
CubeType yOffset = arma::repcube(
|
|
188
|
+
arma::vectorise(arma::repmat(offset.t(), gridSize, 1)),
|
|
189
|
+
1, predictionsPerCell, batchSize);
|
|
190
|
+
#endif
|
|
191
|
+
|
|
192
|
+
// TODO: add if (this->training). Add check for different batchSize.
|
|
193
|
+
const size_t cols = predictionsPerCell - 1;
|
|
194
|
+
|
|
195
|
+
// x1
|
|
196
|
+
outputCube.tube(0, 0, grid - 1, cols) =
|
|
197
|
+
(xOffset + 1 / (1 + arma::exp(-inputCube.tube(0, 0, grid - 1, cols))))
|
|
198
|
+
* stride
|
|
199
|
+
- anchorsWBS % arma::exp(inputCube.tube(grid * 2, 0, grid * 3 - 1, cols))
|
|
200
|
+
/ 2;
|
|
201
|
+
|
|
202
|
+
// y1
|
|
203
|
+
outputCube.tube(grid, 0, grid * 2 - 1, cols) = (yOffset + 1 /
|
|
204
|
+
(1 + arma::exp(-inputCube.tube(grid, 0, grid * 2 - 1, cols)))) * stride
|
|
205
|
+
- anchorsHBS % arma::exp(inputCube.tube(grid * 3, 0, grid * 4 - 1, cols))
|
|
206
|
+
/ 2;
|
|
207
|
+
|
|
208
|
+
// x2
|
|
209
|
+
outputCube.tube(grid * 2, 0, grid * 3 - 1, cols) =
|
|
210
|
+
(xOffset + 1 / (1 + arma::exp(-inputCube.tube(0, 0, grid - 1, cols))))
|
|
211
|
+
* stride
|
|
212
|
+
+ anchorsWBS % arma::exp(inputCube.tube(grid * 2, 0, grid * 3 - 1, cols))
|
|
213
|
+
/ 2;
|
|
214
|
+
|
|
215
|
+
// y2
|
|
216
|
+
outputCube.tube(grid * 3, 0, grid * 4 - 1, cols) = (yOffset + 1 /
|
|
217
|
+
(1 + arma::exp(-inputCube.tube(grid, 0, grid * 2 - 1, cols)))) * stride
|
|
218
|
+
+ anchorsHBS % arma::exp(inputCube.tube(grid * 3, 0, grid * 4 - 1, cols))
|
|
219
|
+
/ 2;
|
|
220
|
+
|
|
221
|
+
// apply logistic sigmoid to objectness and classification logits.
|
|
222
|
+
outputCube.tube(grid * 4, 0, outputCube.n_rows - 1, cols) = 1. /
|
|
223
|
+
(1 + arma::exp(-inputCube.tube(grid * 4, 0, inputCube.n_rows - 1, cols)));
|
|
224
|
+
|
|
225
|
+
// Reshape, for each batch item.
|
|
226
|
+
for (size_t i = 0; i < reshapedCube.n_slices; i++)
|
|
227
|
+
{
|
|
228
|
+
reshapedCube.slice(i) = arma::reshape(
|
|
229
|
+
arma::reshape(
|
|
230
|
+
outputCube.slice(i), grid, numAttributes * predictionsPerCell).t(),
|
|
231
|
+
numAttributes, predictionsPerCell * grid);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
template <typename MatType>
|
|
236
|
+
void YOLOv3Layer<MatType>::Backward(
|
|
237
|
+
const MatType& /* input */,
|
|
238
|
+
const MatType& /* output */,
|
|
239
|
+
const MatType& /* gy */,
|
|
240
|
+
MatType& /* g */)
|
|
241
|
+
{
|
|
242
|
+
throw std::runtime_error("YOLOv3Layer::Backward() not implemented.");
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
template <typename MatType>
|
|
246
|
+
template <typename Archive>
|
|
247
|
+
void YOLOv3Layer<MatType>::serialize(Archive& ar, const uint32_t /* version */)
|
|
248
|
+
{
|
|
249
|
+
ar(cereal::base_class<Layer<MatType>>(this));
|
|
250
|
+
ar(CEREAL_NVP(imgSize));
|
|
251
|
+
ar(CEREAL_NVP(numAttributes));
|
|
252
|
+
ar(CEREAL_NVP(gridSize));
|
|
253
|
+
ar(CEREAL_NVP(grid));
|
|
254
|
+
ar(CEREAL_NVP(anchors));
|
|
255
|
+
ar(CEREAL_NVP(predictionsPerCell));
|
|
256
|
+
|
|
257
|
+
if (Archive::is_loading::value)
|
|
258
|
+
{
|
|
259
|
+
GenerateAnchors();
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
} // namespace mlpack
|
|
264
|
+
|
|
265
|
+
#endif
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file methods/ann/models/yolov3_tiny.hpp
|
|
3
|
+
* @author Andrew Furey
|
|
4
|
+
*
|
|
5
|
+
* Definition of the YOLOv3-tiny model.
|
|
6
|
+
*
|
|
7
|
+
* mlpack is free software; you may redistribute it and/or modify it under the
|
|
8
|
+
* terms of the 3-clause BSD license. You should have received a copy of the
|
|
9
|
+
* 3-clause BSD license along with mlpack. If not, see
|
|
10
|
+
* http://www.opensource.org/licenses/BSD-3-Clause for more information.
|
|
11
|
+
*/
|
|
12
|
+
#ifndef MLPACK_METHODS_ANN_MODELS_YOLOV3_TINY_HPP
|
|
13
|
+
#define MLPACK_METHODS_ANN_MODELS_YOLOV3_TINY_HPP
|
|
14
|
+
|
|
15
|
+
#include <mlpack/prereqs.hpp>
|
|
16
|
+
|
|
17
|
+
#include <mlpack/methods/ann/dag_network.hpp>
|
|
18
|
+
#include <mlpack/methods/ann/loss_functions/loss_functions.hpp>
|
|
19
|
+
#include <mlpack/methods/ann/init_rules/init_rules.hpp>
|
|
20
|
+
|
|
21
|
+
#include <mlpack/methods/ann/layer/layer_types.hpp>
|
|
22
|
+
#include <mlpack/methods/ann/models/yolov3/yolov3_layer.hpp>
|
|
23
|
+
|
|
24
|
+
namespace mlpack {
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* YOLOv3-tiny is a small one-stage object detection model.
|
|
28
|
+
*
|
|
29
|
+
* The input to the model must be a square image. Look at image_letterbox.hpp
|
|
30
|
+
* to preprocess images before inference.
|
|
31
|
+
*
|
|
32
|
+
* The output of the model is a matrix. The rows are data points per
|
|
33
|
+
* bounding box (including x, y, w, h, objectness, and classifications).
|
|
34
|
+
* The columns represent each bounding box.
|
|
35
|
+
*
|
|
36
|
+
* For more information, refer to the following paper:
|
|
37
|
+
*
|
|
38
|
+
* @code
|
|
39
|
+
* @article{yolov3,
|
|
40
|
+
* title = {YOLOv3: An Incremental Improvement},
|
|
41
|
+
* author = {Redmon, Joseph and Farhadi, Ali},
|
|
42
|
+
* journal = {arXiv},
|
|
43
|
+
* year = {2018}
|
|
44
|
+
* }
|
|
45
|
+
* @endcode
|
|
46
|
+
*
|
|
47
|
+
*/
|
|
48
|
+
template <typename OutputLayerType = EmptyLoss,
|
|
49
|
+
typename InitializationRuleType = RandomInitialization,
|
|
50
|
+
typename MatType = arma::mat>
|
|
51
|
+
class YOLOv3Tiny
|
|
52
|
+
{
|
|
53
|
+
public:
|
|
54
|
+
// Helper types.
|
|
55
|
+
using ModelType =
|
|
56
|
+
DAGNetwork<OutputLayerType, InitializationRuleType, MatType>;
|
|
57
|
+
using ElemType = typename MatType::elem_type;
|
|
58
|
+
using CubeType = typename GetCubeType<MatType>::type;
|
|
59
|
+
|
|
60
|
+
YOLOv3Tiny() { /* Nothing to do. */ }
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Create the YOLOv3Tiny model.
|
|
64
|
+
*
|
|
65
|
+
* @param imgSize The width and height of input images. Pretrained weights
|
|
66
|
+
used 416.
|
|
67
|
+
* @param numClasses The number of output classes. Pretrained weights were
|
|
68
|
+
trained on COCO which has 80 classes.
|
|
69
|
+
* @param predictionsPerCell Each YOLO layer predicts `predictionsPerCell`
|
|
70
|
+
boxes per grid cell. Pretrained weights use 3.
|
|
71
|
+
* @param anchors Vector of anchor width and heights. Formatted as
|
|
72
|
+
[w0, h0, w1, h1, ... ]. Each anchors is a [w, h] pair. There must be
|
|
73
|
+
predictionsPerCell * 2 anchors, since YOLOv3Tiny has two output layers.
|
|
74
|
+
Therefore, anchors.size() must be predictionsPerCell * 4.
|
|
75
|
+
*/
|
|
76
|
+
YOLOv3Tiny(const size_t imgSize,
|
|
77
|
+
const size_t numClasses,
|
|
78
|
+
const size_t predictionsPerCell,
|
|
79
|
+
const size_t maxDetections,
|
|
80
|
+
const std::vector<ElemType>& anchors);
|
|
81
|
+
|
|
82
|
+
~YOLOv3Tiny() { /* Nothing to do. */ }
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Returns the graph representation of the model.
|
|
86
|
+
*/
|
|
87
|
+
ModelType& Model() { return model; }
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Ordinary feed forward pass of the network.
|
|
91
|
+
*
|
|
92
|
+
* @param input Input data used for evaluating the specified function.
|
|
93
|
+
The input matrix dimensions should be (imgSize * imgSize, batchSize).
|
|
94
|
+
* @param output Resulting bounding boxes.
|
|
95
|
+
* @param numDetections Number of bounding boxes in output per batch.
|
|
96
|
+
*/
|
|
97
|
+
void Predict(const MatType& input,
|
|
98
|
+
MatType& output,
|
|
99
|
+
arma::ucolvec& numDetections)
|
|
100
|
+
{
|
|
101
|
+
const size_t batchSize = input.n_cols;
|
|
102
|
+
MatType batchedOutput;
|
|
103
|
+
model.Predict(input, batchedOutput);
|
|
104
|
+
|
|
105
|
+
CubeType batchedOutputAlias;
|
|
106
|
+
MakeAlias(batchedOutputAlias, batchedOutput,
|
|
107
|
+
numAttributes, numBoxes, batchSize);
|
|
108
|
+
|
|
109
|
+
output = MatType(numAttributes * maxDetections, batchSize,
|
|
110
|
+
arma::fill::zeros);
|
|
111
|
+
CubeType outputAlias;
|
|
112
|
+
MakeAlias(outputAlias, output,
|
|
113
|
+
numAttributes, maxDetections, batchSize);
|
|
114
|
+
|
|
115
|
+
numDetections = arma::ucolvec(batchSize, arma::fill::zeros);
|
|
116
|
+
for (size_t i = 0; i < batchSize; i++)
|
|
117
|
+
{
|
|
118
|
+
arma::ucolvec indices;
|
|
119
|
+
|
|
120
|
+
const MatType& bboxes = batchedOutputAlias.slice(i);
|
|
121
|
+
const MatType& confs = batchedOutputAlias.slice(i).row(4).t();
|
|
122
|
+
NMS<true>::Evaluate<MatType, MatType, arma::ucolvec>
|
|
123
|
+
(bboxes, confs, indices);
|
|
124
|
+
|
|
125
|
+
numDetections(i) = std::min<size_t>(maxDetections, indices.n_rows);
|
|
126
|
+
for (size_t j = 0; j < numDetections(i); j++)
|
|
127
|
+
{
|
|
128
|
+
outputAlias.slice(i).col(j) =
|
|
129
|
+
batchedOutputAlias.slice(i).col(indices(j));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Serialize the model.
|
|
135
|
+
template<typename Archive>
|
|
136
|
+
void serialize(Archive& ar, const uint32_t /* version */);
|
|
137
|
+
|
|
138
|
+
private:
|
|
139
|
+
/**
|
|
140
|
+
* Adds a MultiLayer to the internal DAGNetwork. The MultiLayer includes
|
|
141
|
+
* a Convolutions, BatchNorm (if batchNorm is true) and LeakyReLU.
|
|
142
|
+
* If batchNorm is true, the convolution layer will not have a bias,
|
|
143
|
+
* otherwise it will.
|
|
144
|
+
*
|
|
145
|
+
* The convolution kernel size must be 3 or 1. If the kernel size is 3,
|
|
146
|
+
* padding will be added.
|
|
147
|
+
*
|
|
148
|
+
* @param maps Number of output maps of the convolution layer.
|
|
149
|
+
* @param kernel Size of the convolution kernel
|
|
150
|
+
* @param batchNorm Boolean for including a batchnorm layer.
|
|
151
|
+
* @param reluSlope Slope used in LeakyReLU. Default is 0.1 because
|
|
152
|
+
pretrained weights used 0.1.
|
|
153
|
+
*/
|
|
154
|
+
size_t ConvolutionBlock(const size_t maps,
|
|
155
|
+
const size_t kernel,
|
|
156
|
+
const bool batchNorm = true,
|
|
157
|
+
const ElemType reluSlope = 0.1);
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Adds a MultiLayer to the internal DAGNetwork. The MultiLayer includes
|
|
161
|
+
* a MaxPooling layer and an optional Padding layer depending on the stride
|
|
162
|
+
* size.
|
|
163
|
+
*
|
|
164
|
+
* @param stride Stride of the MaxPooling kernel.
|
|
165
|
+
*/
|
|
166
|
+
size_t MaxPool2x2(const size_t stride);
|
|
167
|
+
|
|
168
|
+
// DAGNetwork containing the graph of the YOLOv3Tiny model
|
|
169
|
+
ModelType model;
|
|
170
|
+
// Width and height of input image
|
|
171
|
+
size_t imgSize;
|
|
172
|
+
// Predictions per cell for each YOLO layer
|
|
173
|
+
size_t predictionsPerCell;
|
|
174
|
+
// Number of output classes + 5 for (x, y, w, h, objectness)
|
|
175
|
+
size_t numAttributes;
|
|
176
|
+
// Max detections used during batched inference, because NMS returns variable
|
|
177
|
+
// number of outputs.
|
|
178
|
+
size_t maxDetections;
|
|
179
|
+
// Total number of boxes
|
|
180
|
+
size_t numBoxes;
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
} // namespace mlpack
|
|
184
|
+
|
|
185
|
+
#include "yolov3_tiny_impl.hpp"
|
|
186
|
+
|
|
187
|
+
#endif
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file methods/ann/models/yolov3/yolov3_tiny_impl.hpp
|
|
3
|
+
* @author Andrew Furey
|
|
4
|
+
*
|
|
5
|
+
* Definition of the YOLOv3-tiny model.
|
|
6
|
+
*
|
|
7
|
+
* mlpack is free software; you may redistribute it and/or modify it under the
|
|
8
|
+
* terms of the 3-clause BSD license. You should have received a copy of the
|
|
9
|
+
* 3-clause BSD license along with mlpack. If not, see
|
|
10
|
+
* http://www.opensource.org/licenses/BSD-3-Clause for more information.
|
|
11
|
+
*/
|
|
12
|
+
#ifndef MLPACK_METHODS_ANN_MODELS_MODELS_YOLOV3_TINY_IMPL_HPP
|
|
13
|
+
#define MLPACK_METHODS_ANN_MODELS_MODELS_YOLOV3_TINY_IMPL_HPP
|
|
14
|
+
|
|
15
|
+
#include <mlpack/methods/ann/models/yolov3/yolov3_tiny.hpp>
|
|
16
|
+
|
|
17
|
+
namespace mlpack {
|
|
18
|
+
|
|
19
|
+
template <typename OutputLayerType,
|
|
20
|
+
typename InitializationRuleType,
|
|
21
|
+
typename MatType>
|
|
22
|
+
YOLOv3Tiny<
|
|
23
|
+
OutputLayerType,
|
|
24
|
+
InitializationRuleType,
|
|
25
|
+
MatType
|
|
26
|
+
>::YOLOv3Tiny(const size_t imgSize,
|
|
27
|
+
const size_t numClasses,
|
|
28
|
+
const size_t predictionsPerCell,
|
|
29
|
+
const size_t maxDetections,
|
|
30
|
+
const std::vector<ElemType>& anchors) :
|
|
31
|
+
imgSize(imgSize),
|
|
32
|
+
predictionsPerCell(predictionsPerCell),
|
|
33
|
+
numAttributes(numClasses + 5),
|
|
34
|
+
maxDetections(maxDetections)
|
|
35
|
+
{
|
|
36
|
+
if (anchors.size() != predictionsPerCell * 4)
|
|
37
|
+
{
|
|
38
|
+
std::ostringstream errMessage;
|
|
39
|
+
errMessage << "YOLOv3Tiny::YOLOv3Tiny(): Expected " << predictionsPerCell *
|
|
40
|
+
4 << " anchor points, but received " << anchors.size();
|
|
41
|
+
throw std::logic_error(errMessage.str());
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const size_t mid = predictionsPerCell * 2;
|
|
45
|
+
numBoxes = (imgSize / 16) * (imgSize / 16) * predictionsPerCell +
|
|
46
|
+
(imgSize / 32) * (imgSize / 32) * predictionsPerCell;
|
|
47
|
+
|
|
48
|
+
const std::vector<ElemType>
|
|
49
|
+
smallAnchors(anchors.begin(), anchors.begin() + mid),
|
|
50
|
+
largeAnchors(anchors.begin() + mid, anchors.end());
|
|
51
|
+
|
|
52
|
+
const std::vector<double> scaleFactor = { 2.0, 2.0 };
|
|
53
|
+
|
|
54
|
+
model = Model();
|
|
55
|
+
model.InputDimensions() = { imgSize, imgSize, 3 };
|
|
56
|
+
|
|
57
|
+
size_t convolution0 = ConvolutionBlock(16, 3);
|
|
58
|
+
size_t maxPool1 = MaxPool2x2(2);
|
|
59
|
+
size_t convolution2 = ConvolutionBlock(32, 3);
|
|
60
|
+
size_t maxPool3 = MaxPool2x2(2);
|
|
61
|
+
size_t convolution4 = ConvolutionBlock(64, 3);
|
|
62
|
+
size_t maxPool5 = MaxPool2x2(2);
|
|
63
|
+
size_t convolution6 = ConvolutionBlock(128, 3);
|
|
64
|
+
size_t maxPool7 = MaxPool2x2(2);
|
|
65
|
+
size_t convolution8 = ConvolutionBlock(256, 3);
|
|
66
|
+
size_t maxPool9 = MaxPool2x2(2);
|
|
67
|
+
size_t convolution10 = ConvolutionBlock(512, 3);
|
|
68
|
+
size_t maxPool11 = MaxPool2x2(1);
|
|
69
|
+
size_t convolution12 = ConvolutionBlock(1024, 3);
|
|
70
|
+
size_t convolution13 = ConvolutionBlock(256, 1);
|
|
71
|
+
|
|
72
|
+
// Detection head for larger objects.
|
|
73
|
+
size_t convolution14 = ConvolutionBlock(512, 3);
|
|
74
|
+
size_t convolution15 =
|
|
75
|
+
ConvolutionBlock(predictionsPerCell * numAttributes, 1, false);
|
|
76
|
+
size_t detections16 =
|
|
77
|
+
model.template Add<YOLOv3Layer<MatType>>(imgSize, numAttributes,
|
|
78
|
+
imgSize / 32, predictionsPerCell, largeAnchors);
|
|
79
|
+
|
|
80
|
+
size_t convolution17 = ConvolutionBlock(128, 1);
|
|
81
|
+
// Upsample for more fine-grained detections.
|
|
82
|
+
size_t upsample18 =
|
|
83
|
+
model.template Add<NearestInterpolation<MatType>>(scaleFactor);
|
|
84
|
+
|
|
85
|
+
// Detection head for smaller objects.
|
|
86
|
+
size_t convolution19 = ConvolutionBlock(256, 3);
|
|
87
|
+
size_t convolution20 =
|
|
88
|
+
ConvolutionBlock(predictionsPerCell * numAttributes, 1, false);
|
|
89
|
+
size_t detections21 =
|
|
90
|
+
model.template Add<YOLOv3Layer<MatType>>(imgSize, numAttributes,
|
|
91
|
+
imgSize / 16, predictionsPerCell, smallAnchors);
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
// the DAGNetwork class requires one explicit output layer for concatenations,
|
|
95
|
+
// so we use the Identity layer for pure concatentation, and no other compute.
|
|
96
|
+
size_t concatLayer22 = model.template Add<Identity<MatType>>();
|
|
97
|
+
|
|
98
|
+
model.Connect(convolution0, maxPool1);
|
|
99
|
+
model.Connect(maxPool1, convolution2);
|
|
100
|
+
model.Connect(convolution2, maxPool3);
|
|
101
|
+
model.Connect(maxPool3, convolution4);
|
|
102
|
+
model.Connect(convolution4, maxPool5);
|
|
103
|
+
model.Connect(maxPool5, convolution6);
|
|
104
|
+
model.Connect(convolution6, maxPool7);
|
|
105
|
+
model.Connect(maxPool7, convolution8);
|
|
106
|
+
|
|
107
|
+
model.Connect(convolution8, maxPool9);
|
|
108
|
+
model.Connect(maxPool9, convolution10);
|
|
109
|
+
model.Connect(convolution10, maxPool11);
|
|
110
|
+
model.Connect(maxPool11, convolution12);
|
|
111
|
+
model.Connect(convolution12, convolution13);
|
|
112
|
+
|
|
113
|
+
model.Connect(convolution13, convolution14);
|
|
114
|
+
model.Connect(convolution14, convolution15);
|
|
115
|
+
model.Connect(convolution15, detections16);
|
|
116
|
+
|
|
117
|
+
model.Connect(convolution13, convolution17);
|
|
118
|
+
model.Connect(convolution17, upsample18);
|
|
119
|
+
|
|
120
|
+
// Concat convolution8 + upsample18 => convolution19
|
|
121
|
+
model.Connect(upsample18, convolution19);
|
|
122
|
+
model.Connect(convolution8, convolution19);
|
|
123
|
+
// Set axis not necessary, since default is concat along channels.
|
|
124
|
+
|
|
125
|
+
model.Connect(convolution19, convolution20);
|
|
126
|
+
model.Connect(convolution20, detections21);
|
|
127
|
+
// Again, set axis not necessary, since default is concat along channels.
|
|
128
|
+
|
|
129
|
+
// Concatenation order shouldn't matter.
|
|
130
|
+
model.Connect(detections16, concatLayer22);
|
|
131
|
+
model.Connect(detections21, concatLayer22);
|
|
132
|
+
|
|
133
|
+
model.SetNetworkMode(false);
|
|
134
|
+
model.Reset();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
template <typename OutputLayerType,
|
|
138
|
+
typename InitializationRuleType,
|
|
139
|
+
typename MatType>
|
|
140
|
+
size_t YOLOv3Tiny<OutputLayerType, InitializationRuleType, MatType>
|
|
141
|
+
::ConvolutionBlock(const size_t maps,
|
|
142
|
+
const size_t kernel,
|
|
143
|
+
const bool batchNorm,
|
|
144
|
+
const ElemType reluSlope)
|
|
145
|
+
{
|
|
146
|
+
if (kernel != 3 && kernel != 1)
|
|
147
|
+
{
|
|
148
|
+
std::ostringstream errMessage;
|
|
149
|
+
errMessage << "Kernel size for convolutions in yolov3-tiny must be 3"
|
|
150
|
+
"or 1, but you gave " << kernel;
|
|
151
|
+
throw std::logic_error(errMessage.str());
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
size_t pad = kernel == 3 ? 1 : 0;
|
|
155
|
+
MultiLayer<MatType> block;
|
|
156
|
+
block.template Add<Convolution<MatType>>(
|
|
157
|
+
maps, kernel, kernel, 1, 1, pad, pad, "none", !batchNorm);
|
|
158
|
+
|
|
159
|
+
// set epsilon to zero, not used in darknet.
|
|
160
|
+
if (batchNorm)
|
|
161
|
+
block.template Add<BatchNorm<MatType>>(2, 2, 0, false);
|
|
162
|
+
|
|
163
|
+
block.template Add<LeakyReLU<MatType>>(reluSlope);
|
|
164
|
+
return model.Add(block);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
template <typename OutputLayerType,
|
|
168
|
+
typename InitializationRuleType,
|
|
169
|
+
typename MatType>
|
|
170
|
+
size_t YOLOv3Tiny<OutputLayerType, InitializationRuleType, MatType>
|
|
171
|
+
::MaxPool2x2(const size_t stride)
|
|
172
|
+
{
|
|
173
|
+
// All max pool layers have kernel size 2
|
|
174
|
+
MultiLayer<MatType> block;
|
|
175
|
+
if (stride == 1)
|
|
176
|
+
{
|
|
177
|
+
// One layer with odd input size, with kernel size 2, stride 1.
|
|
178
|
+
// Padding on the right and bottom are needed.
|
|
179
|
+
ElemType min = -arma::Datum<ElemType>::inf;
|
|
180
|
+
block.template Add<Padding<MatType>>(0, 1, 0, 1, min);
|
|
181
|
+
}
|
|
182
|
+
block.template Add<MaxPooling<MatType>>(2, 2, stride, stride);
|
|
183
|
+
return model.Add(block);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
template<typename OutputLayerType,
|
|
187
|
+
typename InitializationRuleType,
|
|
188
|
+
typename MatType>
|
|
189
|
+
template<typename Archive>
|
|
190
|
+
void YOLOv3Tiny<
|
|
191
|
+
OutputLayerType,
|
|
192
|
+
InitializationRuleType,
|
|
193
|
+
MatType
|
|
194
|
+
>::serialize(Archive& ar, const uint32_t /* version */)
|
|
195
|
+
{
|
|
196
|
+
ar(CEREAL_NVP(model));
|
|
197
|
+
ar(CEREAL_NVP(imgSize));
|
|
198
|
+
ar(CEREAL_NVP(predictionsPerCell));
|
|
199
|
+
ar(CEREAL_NVP(numAttributes));
|
|
200
|
+
ar(CEREAL_NVP(maxDetections));
|
|
201
|
+
ar(CEREAL_NVP(numBoxes));
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
} // namespace mlpack
|
|
205
|
+
|
|
206
|
+
#endif
|
|
@@ -26,7 +26,9 @@ inline OrthogonalRegularizer::OrthogonalRegularizer(double factor) :
|
|
|
26
26
|
template<typename MatType>
|
|
27
27
|
void OrthogonalRegularizer::Evaluate(const MatType& weight, MatType& gradient)
|
|
28
28
|
{
|
|
29
|
-
|
|
29
|
+
typedef typename MatType::elem_type ElemType;
|
|
30
|
+
|
|
31
|
+
MatType grad = zeros(size(weight));
|
|
30
32
|
|
|
31
33
|
for (size_t i = 0; i < weight.n_rows; ++i)
|
|
32
34
|
{
|
|
@@ -34,13 +36,13 @@ void OrthogonalRegularizer::Evaluate(const MatType& weight, MatType& gradient)
|
|
|
34
36
|
{
|
|
35
37
|
if (i == j)
|
|
36
38
|
{
|
|
37
|
-
|
|
39
|
+
ElemType s = arma::as_scalar(
|
|
38
40
|
sign((weight.row(i) * weight.row(i).t()) - 1));
|
|
39
41
|
grad.row(i) += 2 * s * weight.row(i);
|
|
40
42
|
}
|
|
41
43
|
else
|
|
42
44
|
{
|
|
43
|
-
|
|
45
|
+
ElemType s = arma::as_scalar(sign(weight.row(i) * weight.row(j).t()));
|
|
44
46
|
grad.row(i) += s * weight.row(j);
|
|
45
47
|
grad.row(j) += s * weight.row(i);
|
|
46
48
|
}
|