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.
Files changed (415) hide show
  1. mlpack/__init__.py +4 -4
  2. mlpack/adaboost_classify.cp313-win_amd64.pyd +0 -0
  3. mlpack/adaboost_probabilities.cp313-win_amd64.pyd +0 -0
  4. mlpack/adaboost_train.cp313-win_amd64.pyd +0 -0
  5. mlpack/approx_kfn.cp313-win_amd64.pyd +0 -0
  6. mlpack/arma_numpy.cp313-win_amd64.pyd +0 -0
  7. mlpack/bayesian_linear_regression.cp313-win_amd64.pyd +0 -0
  8. mlpack/cf.cp313-win_amd64.pyd +0 -0
  9. mlpack/dbscan.cp313-win_amd64.pyd +0 -0
  10. mlpack/decision_tree.cp313-win_amd64.pyd +0 -0
  11. mlpack/det.cp313-win_amd64.pyd +0 -0
  12. mlpack/emst.cp313-win_amd64.pyd +0 -0
  13. mlpack/fastmks.cp313-win_amd64.pyd +0 -0
  14. mlpack/gmm_generate.cp313-win_amd64.pyd +0 -0
  15. mlpack/gmm_probability.cp313-win_amd64.pyd +0 -0
  16. mlpack/gmm_train.cp313-win_amd64.pyd +0 -0
  17. mlpack/hmm_generate.cp313-win_amd64.pyd +0 -0
  18. mlpack/hmm_loglik.cp313-win_amd64.pyd +0 -0
  19. mlpack/hmm_train.cp313-win_amd64.pyd +0 -0
  20. mlpack/hmm_viterbi.cp313-win_amd64.pyd +0 -0
  21. mlpack/hoeffding_tree.cp313-win_amd64.pyd +0 -0
  22. mlpack/image_converter.cp313-win_amd64.pyd +0 -0
  23. mlpack/include/mlpack/base.hpp +1 -0
  24. mlpack/include/mlpack/core/arma_extend/find_nan.hpp +63 -0
  25. mlpack/include/mlpack/core/cereal/low_precision.hpp +48 -0
  26. mlpack/include/mlpack/core/cv/cv_base.hpp +11 -11
  27. mlpack/include/mlpack/core/cv/cv_base_impl.hpp +7 -7
  28. mlpack/include/mlpack/core/cv/k_fold_cv.hpp +4 -4
  29. mlpack/include/mlpack/core/cv/k_fold_cv_impl.hpp +4 -4
  30. mlpack/include/mlpack/core/cv/meta_info_extractor.hpp +10 -10
  31. mlpack/include/mlpack/core/cv/metrics/f1_impl.hpp +1 -1
  32. mlpack/include/mlpack/core/cv/metrics/facilities.hpp +2 -1
  33. mlpack/include/mlpack/core/cv/metrics/precision_impl.hpp +1 -1
  34. mlpack/include/mlpack/core/cv/metrics/r2_score_impl.hpp +1 -1
  35. mlpack/include/mlpack/core/cv/metrics/silhouette_score_impl.hpp +1 -1
  36. mlpack/include/mlpack/core/cv/simple_cv.hpp +4 -4
  37. mlpack/include/mlpack/core/cv/simple_cv_impl.hpp +2 -2
  38. mlpack/include/mlpack/core/data/binarize.hpp +0 -2
  39. mlpack/include/mlpack/core/data/check_categorical_param.hpp +0 -2
  40. mlpack/include/mlpack/core/data/combine_options.hpp +151 -0
  41. mlpack/include/mlpack/core/data/confusion_matrix.hpp +0 -2
  42. mlpack/include/mlpack/core/data/confusion_matrix_impl.hpp +0 -2
  43. mlpack/include/mlpack/core/data/data.hpp +6 -4
  44. mlpack/include/mlpack/core/data/data_options.hpp +341 -18
  45. mlpack/include/mlpack/core/data/dataset_mapper.hpp +3 -5
  46. mlpack/include/mlpack/core/data/dataset_mapper_impl.hpp +0 -2
  47. mlpack/include/mlpack/core/data/detect_file_type.hpp +34 -5
  48. mlpack/include/mlpack/core/data/detect_file_type_impl.hpp +185 -11
  49. mlpack/include/mlpack/core/data/extension.hpp +2 -4
  50. mlpack/include/mlpack/core/data/font8x8_basic.h +152 -0
  51. mlpack/include/mlpack/core/data/has_serialize.hpp +0 -2
  52. mlpack/include/mlpack/core/data/image_bounding_box.hpp +36 -0
  53. mlpack/include/mlpack/core/data/image_bounding_box_impl.hpp +155 -0
  54. mlpack/include/mlpack/core/data/image_layout.hpp +63 -0
  55. mlpack/include/mlpack/core/data/image_layout_impl.hpp +75 -0
  56. mlpack/include/mlpack/core/data/image_letterbox.hpp +116 -0
  57. mlpack/include/mlpack/core/data/image_options.hpp +257 -0
  58. mlpack/include/mlpack/core/data/image_resize_crop.hpp +113 -48
  59. mlpack/include/mlpack/core/data/imputation_methods/custom_imputation.hpp +16 -32
  60. mlpack/include/mlpack/core/data/imputation_methods/listwise_deletion.hpp +19 -29
  61. mlpack/include/mlpack/core/data/imputation_methods/mean_imputation.hpp +113 -44
  62. mlpack/include/mlpack/core/data/imputation_methods/median_imputation.hpp +44 -43
  63. mlpack/include/mlpack/core/data/imputer.hpp +41 -49
  64. mlpack/include/mlpack/core/data/is_naninf.hpp +0 -2
  65. mlpack/include/mlpack/core/data/load.hpp +49 -233
  66. mlpack/include/mlpack/core/data/load_arff.hpp +0 -2
  67. mlpack/include/mlpack/core/data/load_arff_impl.hpp +2 -4
  68. mlpack/include/mlpack/core/data/load_categorical.hpp +1 -4
  69. mlpack/include/mlpack/core/data/load_categorical_impl.hpp +10 -26
  70. mlpack/include/mlpack/core/data/load_dense.hpp +279 -0
  71. mlpack/include/mlpack/core/data/load_deprecated.hpp +466 -0
  72. mlpack/include/mlpack/core/data/load_image.hpp +71 -43
  73. mlpack/include/mlpack/core/data/load_impl.hpp +95 -274
  74. mlpack/include/mlpack/core/data/load_model.hpp +62 -0
  75. mlpack/include/mlpack/core/data/load_numeric.hpp +124 -87
  76. mlpack/include/mlpack/core/data/load_sparse.hpp +91 -0
  77. mlpack/include/mlpack/core/data/map_policies/datatype.hpp +0 -2
  78. mlpack/include/mlpack/core/data/map_policies/increment_policy.hpp +0 -2
  79. mlpack/include/mlpack/core/data/map_policies/map_policies.hpp +0 -1
  80. mlpack/include/mlpack/core/data/matrix_options.hpp +152 -20
  81. mlpack/include/mlpack/core/data/normalize_labels.hpp +0 -2
  82. mlpack/include/mlpack/core/data/normalize_labels_impl.hpp +0 -2
  83. mlpack/include/mlpack/core/data/one_hot_encoding.hpp +2 -4
  84. mlpack/include/mlpack/core/data/one_hot_encoding_impl.hpp +3 -5
  85. mlpack/include/mlpack/core/data/save.hpp +26 -120
  86. mlpack/include/mlpack/core/data/save_dense.hpp +42 -0
  87. mlpack/include/mlpack/core/data/save_deprecated.hpp +308 -0
  88. mlpack/include/mlpack/core/data/save_image.hpp +82 -42
  89. mlpack/include/mlpack/core/data/save_impl.hpp +60 -245
  90. mlpack/include/mlpack/core/data/save_matrix.hpp +45 -0
  91. mlpack/include/mlpack/core/data/save_model.hpp +61 -0
  92. mlpack/include/mlpack/core/data/save_numeric.hpp +60 -0
  93. mlpack/include/mlpack/core/data/save_sparse.hpp +44 -0
  94. mlpack/include/mlpack/core/data/scaler_methods/max_abs_scaler.hpp +0 -2
  95. mlpack/include/mlpack/core/data/scaler_methods/mean_normalization.hpp +2 -4
  96. mlpack/include/mlpack/core/data/scaler_methods/min_max_scaler.hpp +0 -2
  97. mlpack/include/mlpack/core/data/scaler_methods/pca_whitening.hpp +1 -3
  98. mlpack/include/mlpack/core/data/scaler_methods/standard_scaler.hpp +2 -4
  99. mlpack/include/mlpack/core/data/scaler_methods/zca_whitening.hpp +0 -2
  100. mlpack/include/mlpack/core/data/split_data.hpp +6 -8
  101. mlpack/include/mlpack/core/data/string_algorithms.hpp +0 -2
  102. mlpack/include/mlpack/core/data/string_encoding.hpp +0 -2
  103. mlpack/include/mlpack/core/data/string_encoding_dictionary.hpp +0 -2
  104. mlpack/include/mlpack/core/data/string_encoding_impl.hpp +0 -2
  105. mlpack/include/mlpack/core/data/string_encoding_policies/bag_of_words_encoding_policy.hpp +0 -2
  106. mlpack/include/mlpack/core/data/string_encoding_policies/dictionary_encoding_policy.hpp +0 -2
  107. mlpack/include/mlpack/core/data/string_encoding_policies/policy_traits.hpp +0 -2
  108. mlpack/include/mlpack/core/data/string_encoding_policies/tf_idf_encoding_policy.hpp +0 -2
  109. mlpack/include/mlpack/core/data/text_options.hpp +91 -53
  110. mlpack/include/mlpack/core/data/tokenizers/char_extract.hpp +0 -2
  111. mlpack/include/mlpack/core/data/tokenizers/split_by_any_of.hpp +0 -2
  112. mlpack/include/mlpack/core/distributions/gamma_distribution_impl.hpp +4 -4
  113. mlpack/include/mlpack/core/distributions/laplace_distribution.hpp +9 -9
  114. mlpack/include/mlpack/core/distributions/laplace_distribution_impl.hpp +7 -7
  115. mlpack/include/mlpack/core/hpt/cv_function.hpp +2 -2
  116. mlpack/include/mlpack/core/hpt/cv_function_impl.hpp +2 -2
  117. mlpack/include/mlpack/core/hpt/hpt.hpp +4 -4
  118. mlpack/include/mlpack/core/hpt/hpt_impl.hpp +9 -9
  119. mlpack/include/mlpack/core/math/make_alias.hpp +7 -5
  120. mlpack/include/mlpack/core/math/random.hpp +19 -5
  121. mlpack/include/mlpack/core/math/shuffle_data.hpp +79 -245
  122. mlpack/include/mlpack/core/metrics/non_maximal_suppression_impl.hpp +9 -10
  123. mlpack/include/mlpack/core/stb/bundled/stb_image_resize2.h +291 -239
  124. mlpack/include/mlpack/core/tree/binary_space_tree/rp_tree_mean_split_impl.hpp +7 -7
  125. mlpack/include/mlpack/core/tree/cellbound.hpp +2 -2
  126. mlpack/include/mlpack/core/tree/cosine_tree/cosine_tree_impl.hpp +10 -10
  127. mlpack/include/mlpack/core/tree/octree/octree.hpp +10 -0
  128. mlpack/include/mlpack/core/tree/octree/octree_impl.hpp +14 -4
  129. mlpack/include/mlpack/core/util/arma_traits.hpp +25 -38
  130. mlpack/include/mlpack/core/util/coot_traits.hpp +97 -0
  131. mlpack/include/mlpack/core/util/forward.hpp +0 -2
  132. mlpack/include/mlpack/core/util/param.hpp +4 -4
  133. mlpack/include/mlpack/core/util/params_impl.hpp +2 -2
  134. mlpack/include/mlpack/core/util/using.hpp +29 -2
  135. mlpack/include/mlpack/core/util/version.hpp +5 -3
  136. mlpack/include/mlpack/core/util/version_impl.hpp +3 -6
  137. mlpack/include/mlpack/methods/adaboost/adaboost_classify_main.cpp +1 -1
  138. mlpack/include/mlpack/methods/adaboost/adaboost_main.cpp +3 -3
  139. mlpack/include/mlpack/methods/adaboost/adaboost_train_main.cpp +2 -2
  140. mlpack/include/mlpack/methods/ann/activation_functions/activation_functions.hpp +1 -0
  141. mlpack/include/mlpack/methods/ann/activation_functions/bipolar_sigmoid_function.hpp +6 -4
  142. mlpack/include/mlpack/methods/ann/activation_functions/elish_function.hpp +17 -12
  143. mlpack/include/mlpack/methods/ann/activation_functions/elliot_function.hpp +9 -7
  144. mlpack/include/mlpack/methods/ann/activation_functions/gaussian_function.hpp +7 -6
  145. mlpack/include/mlpack/methods/ann/activation_functions/gelu_exact_function.hpp +73 -0
  146. mlpack/include/mlpack/methods/ann/activation_functions/gelu_function.hpp +27 -16
  147. mlpack/include/mlpack/methods/ann/activation_functions/hard_sigmoid_function.hpp +8 -6
  148. mlpack/include/mlpack/methods/ann/activation_functions/hard_swish_function.hpp +6 -4
  149. mlpack/include/mlpack/methods/ann/activation_functions/hyper_sinh_function.hpp +13 -8
  150. mlpack/include/mlpack/methods/ann/activation_functions/identity_function.hpp +6 -4
  151. mlpack/include/mlpack/methods/ann/activation_functions/inverse_quadratic_function.hpp +8 -6
  152. mlpack/include/mlpack/methods/ann/activation_functions/lisht_function.hpp +7 -5
  153. mlpack/include/mlpack/methods/ann/activation_functions/logistic_function.hpp +14 -12
  154. mlpack/include/mlpack/methods/ann/activation_functions/mish_function.hpp +7 -5
  155. mlpack/include/mlpack/methods/ann/activation_functions/multi_quadratic_function.hpp +6 -4
  156. mlpack/include/mlpack/methods/ann/activation_functions/poisson1_function.hpp +4 -2
  157. mlpack/include/mlpack/methods/ann/activation_functions/quadratic_function.hpp +6 -4
  158. mlpack/include/mlpack/methods/ann/activation_functions/rectifier_function.hpp +10 -10
  159. mlpack/include/mlpack/methods/ann/activation_functions/silu_function.hpp +10 -8
  160. mlpack/include/mlpack/methods/ann/activation_functions/softplus_function.hpp +12 -9
  161. mlpack/include/mlpack/methods/ann/activation_functions/softsign_function.hpp +15 -23
  162. mlpack/include/mlpack/methods/ann/activation_functions/spline_function.hpp +9 -7
  163. mlpack/include/mlpack/methods/ann/activation_functions/swish_function.hpp +11 -9
  164. mlpack/include/mlpack/methods/ann/activation_functions/tanh_exponential_function.hpp +9 -7
  165. mlpack/include/mlpack/methods/ann/activation_functions/tanh_function.hpp +10 -7
  166. mlpack/include/mlpack/methods/ann/ann.hpp +3 -0
  167. mlpack/include/mlpack/methods/ann/convolution_rules/base_convolution.hpp +197 -0
  168. mlpack/include/mlpack/methods/ann/convolution_rules/convolution_rules.hpp +1 -2
  169. mlpack/include/mlpack/methods/ann/convolution_rules/im2col_convolution.hpp +215 -0
  170. mlpack/include/mlpack/methods/ann/convolution_rules/naive_convolution.hpp +109 -154
  171. mlpack/include/mlpack/methods/ann/dag_network.hpp +728 -0
  172. mlpack/include/mlpack/methods/ann/dag_network_impl.hpp +1640 -0
  173. mlpack/include/mlpack/methods/ann/dists/bernoulli_distribution_impl.hpp +1 -1
  174. mlpack/include/mlpack/methods/ann/dists/normal_distribution_impl.hpp +7 -2
  175. mlpack/include/mlpack/methods/ann/ffn.hpp +39 -3
  176. mlpack/include/mlpack/methods/ann/ffn_impl.hpp +14 -32
  177. mlpack/include/mlpack/methods/ann/init_rules/const_init.hpp +4 -4
  178. mlpack/include/mlpack/methods/ann/init_rules/gaussian_init.hpp +6 -2
  179. mlpack/include/mlpack/methods/ann/init_rules/he_init.hpp +4 -2
  180. mlpack/include/mlpack/methods/ann/init_rules/kathirvalavakumar_subavathi_init.hpp +3 -3
  181. mlpack/include/mlpack/methods/ann/init_rules/lecun_normal_init.hpp +4 -2
  182. mlpack/include/mlpack/methods/ann/init_rules/nguyen_widrow_init.hpp +2 -2
  183. mlpack/include/mlpack/methods/ann/init_rules/oivs_init.hpp +2 -2
  184. mlpack/include/mlpack/methods/ann/init_rules/orthogonal_init.hpp +2 -2
  185. mlpack/include/mlpack/methods/ann/init_rules/random_init.hpp +8 -4
  186. mlpack/include/mlpack/methods/ann/layer/adaptive_max_pooling.hpp +21 -23
  187. mlpack/include/mlpack/methods/ann/layer/adaptive_max_pooling_impl.hpp +15 -15
  188. mlpack/include/mlpack/methods/ann/layer/adaptive_mean_pooling.hpp +21 -23
  189. mlpack/include/mlpack/methods/ann/layer/adaptive_mean_pooling_impl.hpp +16 -16
  190. mlpack/include/mlpack/methods/ann/layer/add.hpp +18 -18
  191. mlpack/include/mlpack/methods/ann/layer/add_impl.hpp +13 -13
  192. mlpack/include/mlpack/methods/ann/layer/add_merge.hpp +19 -18
  193. mlpack/include/mlpack/methods/ann/layer/add_merge_impl.hpp +13 -13
  194. mlpack/include/mlpack/methods/ann/layer/alpha_dropout.hpp +17 -16
  195. mlpack/include/mlpack/methods/ann/layer/alpha_dropout_impl.hpp +14 -13
  196. mlpack/include/mlpack/methods/ann/layer/base_layer.hpp +28 -51
  197. mlpack/include/mlpack/methods/ann/layer/batch_norm.hpp +16 -18
  198. mlpack/include/mlpack/methods/ann/layer/batch_norm_impl.hpp +55 -54
  199. mlpack/include/mlpack/methods/ann/layer/c_relu.hpp +18 -20
  200. mlpack/include/mlpack/methods/ann/layer/c_relu_impl.hpp +20 -25
  201. mlpack/include/mlpack/methods/ann/layer/celu.hpp +14 -19
  202. mlpack/include/mlpack/methods/ann/layer/celu_impl.hpp +25 -34
  203. mlpack/include/mlpack/methods/ann/layer/concat.hpp +18 -18
  204. mlpack/include/mlpack/methods/ann/layer/concat_impl.hpp +13 -13
  205. mlpack/include/mlpack/methods/ann/layer/concatenate.hpp +18 -18
  206. mlpack/include/mlpack/methods/ann/layer/concatenate_impl.hpp +14 -14
  207. mlpack/include/mlpack/methods/ann/layer/convolution.hpp +42 -47
  208. mlpack/include/mlpack/methods/ann/layer/convolution_impl.hpp +170 -159
  209. mlpack/include/mlpack/methods/ann/layer/dropconnect.hpp +18 -20
  210. mlpack/include/mlpack/methods/ann/layer/dropconnect_impl.hpp +20 -20
  211. mlpack/include/mlpack/methods/ann/layer/dropout.hpp +17 -19
  212. mlpack/include/mlpack/methods/ann/layer/dropout_impl.hpp +14 -21
  213. mlpack/include/mlpack/methods/ann/layer/elu.hpp +23 -25
  214. mlpack/include/mlpack/methods/ann/layer/elu_impl.hpp +20 -27
  215. mlpack/include/mlpack/methods/ann/layer/embedding.hpp +160 -0
  216. mlpack/include/mlpack/methods/ann/layer/embedding_impl.hpp +189 -0
  217. mlpack/include/mlpack/methods/ann/layer/flexible_relu.hpp +17 -19
  218. mlpack/include/mlpack/methods/ann/layer/flexible_relu_impl.hpp +20 -20
  219. mlpack/include/mlpack/methods/ann/layer/ftswish.hpp +17 -18
  220. mlpack/include/mlpack/methods/ann/layer/ftswish_impl.hpp +17 -35
  221. mlpack/include/mlpack/methods/ann/layer/grouped_convolution.hpp +27 -33
  222. mlpack/include/mlpack/methods/ann/layer/grouped_convolution_impl.hpp +170 -163
  223. mlpack/include/mlpack/methods/ann/layer/gru.hpp +195 -0
  224. mlpack/include/mlpack/methods/ann/layer/gru_impl.hpp +325 -0
  225. mlpack/include/mlpack/methods/ann/layer/hard_tanh.hpp +13 -15
  226. mlpack/include/mlpack/methods/ann/layer/hard_tanh_impl.hpp +12 -12
  227. mlpack/include/mlpack/methods/ann/layer/identity.hpp +19 -20
  228. mlpack/include/mlpack/methods/ann/layer/identity_impl.hpp +12 -12
  229. mlpack/include/mlpack/methods/ann/layer/layer.hpp +37 -33
  230. mlpack/include/mlpack/methods/ann/layer/layer_norm.hpp +11 -13
  231. mlpack/include/mlpack/methods/ann/layer/layer_norm_impl.hpp +16 -16
  232. mlpack/include/mlpack/methods/ann/layer/layer_types.hpp +4 -1
  233. mlpack/include/mlpack/methods/ann/layer/leaky_relu.hpp +20 -23
  234. mlpack/include/mlpack/methods/ann/layer/leaky_relu_impl.hpp +12 -13
  235. mlpack/include/mlpack/methods/ann/layer/linear.hpp +16 -18
  236. mlpack/include/mlpack/methods/ann/layer/linear3d.hpp +18 -18
  237. mlpack/include/mlpack/methods/ann/layer/linear3d_impl.hpp +18 -18
  238. mlpack/include/mlpack/methods/ann/layer/linear_impl.hpp +15 -15
  239. mlpack/include/mlpack/methods/ann/layer/linear_no_bias.hpp +15 -17
  240. mlpack/include/mlpack/methods/ann/layer/linear_no_bias_impl.hpp +20 -20
  241. mlpack/include/mlpack/methods/ann/layer/linear_recurrent.hpp +25 -14
  242. mlpack/include/mlpack/methods/ann/layer/linear_recurrent_impl.hpp +60 -31
  243. mlpack/include/mlpack/methods/ann/layer/log_softmax.hpp +17 -36
  244. mlpack/include/mlpack/methods/ann/layer/log_softmax_impl.hpp +58 -74
  245. mlpack/include/mlpack/methods/ann/layer/lstm.hpp +26 -29
  246. mlpack/include/mlpack/methods/ann/layer/lstm_impl.hpp +128 -124
  247. mlpack/include/mlpack/methods/ann/layer/max_pooling.hpp +19 -19
  248. mlpack/include/mlpack/methods/ann/layer/max_pooling_impl.hpp +14 -14
  249. mlpack/include/mlpack/methods/ann/layer/mean_pooling.hpp +24 -24
  250. mlpack/include/mlpack/methods/ann/layer/mean_pooling_impl.hpp +16 -16
  251. mlpack/include/mlpack/methods/ann/layer/multi_layer.hpp +36 -6
  252. mlpack/include/mlpack/methods/ann/layer/multi_layer_impl.hpp +6 -2
  253. mlpack/include/mlpack/methods/ann/layer/multihead_attention.hpp +26 -22
  254. mlpack/include/mlpack/methods/ann/layer/multihead_attention_impl.hpp +161 -64
  255. mlpack/include/mlpack/methods/ann/layer/nearest_interpolation.hpp +28 -25
  256. mlpack/include/mlpack/methods/ann/layer/nearest_interpolation_impl.hpp +36 -37
  257. mlpack/include/mlpack/methods/ann/layer/noisylinear.hpp +39 -42
  258. mlpack/include/mlpack/methods/ann/layer/noisylinear_impl.hpp +18 -18
  259. mlpack/include/mlpack/methods/ann/layer/padding.hpp +21 -17
  260. mlpack/include/mlpack/methods/ann/layer/padding_impl.hpp +33 -19
  261. mlpack/include/mlpack/methods/ann/layer/parametric_relu.hpp +26 -28
  262. mlpack/include/mlpack/methods/ann/layer/parametric_relu_impl.hpp +18 -18
  263. mlpack/include/mlpack/methods/ann/layer/radial_basis_function.hpp +41 -28
  264. mlpack/include/mlpack/methods/ann/layer/radial_basis_function_impl.hpp +42 -17
  265. mlpack/include/mlpack/methods/ann/layer/recurrent_layer.hpp +13 -0
  266. mlpack/include/mlpack/methods/ann/layer/relu6.hpp +19 -21
  267. mlpack/include/mlpack/methods/ann/layer/relu6_impl.hpp +14 -14
  268. mlpack/include/mlpack/methods/ann/layer/repeat.hpp +24 -25
  269. mlpack/include/mlpack/methods/ann/layer/repeat_impl.hpp +10 -10
  270. mlpack/include/mlpack/methods/ann/layer/serialization.hpp +64 -54
  271. mlpack/include/mlpack/methods/ann/layer/softmax.hpp +20 -20
  272. mlpack/include/mlpack/methods/ann/layer/softmax_impl.hpp +10 -10
  273. mlpack/include/mlpack/methods/ann/layer/softmin.hpp +20 -23
  274. mlpack/include/mlpack/methods/ann/layer/softmin_impl.hpp +10 -10
  275. mlpack/include/mlpack/methods/ann/layer/sum_reduce.hpp +103 -0
  276. mlpack/include/mlpack/methods/ann/layer/sum_reduce_impl.hpp +143 -0
  277. mlpack/include/mlpack/methods/ann/loss_functions/cosine_embedding_loss_impl.hpp +3 -3
  278. mlpack/include/mlpack/methods/ann/loss_functions/mean_bias_error_impl.hpp +1 -1
  279. mlpack/include/mlpack/methods/ann/loss_functions/multilabel_softmargin_loss_impl.hpp +1 -1
  280. mlpack/include/mlpack/methods/ann/loss_functions/negative_log_likelihood.hpp +2 -2
  281. mlpack/include/mlpack/methods/ann/loss_functions/negative_log_likelihood_impl.hpp +29 -15
  282. mlpack/include/mlpack/methods/ann/loss_functions/poisson_nll_loss_impl.hpp +1 -1
  283. mlpack/include/mlpack/methods/ann/models/models.hpp +17 -0
  284. mlpack/include/mlpack/methods/ann/models/yolov3/yolov3_layer.hpp +151 -0
  285. mlpack/include/mlpack/methods/ann/models/yolov3/yolov3_layer_impl.hpp +265 -0
  286. mlpack/include/mlpack/methods/ann/models/yolov3/yolov3_tiny.hpp +187 -0
  287. mlpack/include/mlpack/methods/ann/models/yolov3/yolov3_tiny_impl.hpp +206 -0
  288. mlpack/include/mlpack/methods/ann/regularizer/orthogonal_regularizer_impl.hpp +5 -3
  289. mlpack/include/mlpack/methods/ann/rnn.hpp +136 -42
  290. mlpack/include/mlpack/methods/ann/rnn_impl.hpp +230 -38
  291. mlpack/include/mlpack/methods/approx_kfn/drusilla_select_impl.hpp +1 -1
  292. mlpack/include/mlpack/methods/bayesian_linear_regression/bayesian_linear_regression_main.cpp +1 -1
  293. mlpack/include/mlpack/methods/bias_svd/bias_svd_function_impl.hpp +1 -1
  294. mlpack/include/mlpack/methods/cf/cf_model.hpp +1 -1
  295. mlpack/include/mlpack/methods/decision_tree/decision_tree.hpp +6 -6
  296. mlpack/include/mlpack/methods/decision_tree/decision_tree_impl.hpp +12 -12
  297. mlpack/include/mlpack/methods/decision_tree/decision_tree_main.cpp +0 -1
  298. mlpack/include/mlpack/methods/decision_tree/decision_tree_regressor.hpp +6 -6
  299. mlpack/include/mlpack/methods/decision_tree/decision_tree_regressor_impl.hpp +12 -12
  300. mlpack/include/mlpack/methods/det/det_main.cpp +1 -1
  301. mlpack/include/mlpack/methods/hmm/hmm_train_main.cpp +4 -4
  302. mlpack/include/mlpack/methods/hmm/hmm_util_impl.hpp +2 -2
  303. mlpack/include/mlpack/methods/hoeffding_trees/hoeffding_tree.hpp +6 -6
  304. mlpack/include/mlpack/methods/hoeffding_trees/hoeffding_tree_impl.hpp +31 -31
  305. mlpack/include/mlpack/methods/hoeffding_trees/hoeffding_tree_main.cpp +1 -2
  306. mlpack/include/mlpack/methods/hoeffding_trees/hoeffding_tree_model.hpp +2 -2
  307. mlpack/include/mlpack/methods/hoeffding_trees/hoeffding_tree_model_impl.hpp +1 -1
  308. mlpack/include/mlpack/methods/kde/kde_rules_impl.hpp +6 -6
  309. mlpack/include/mlpack/methods/lars/lars_impl.hpp +3 -3
  310. mlpack/include/mlpack/methods/linear_svm/linear_svm_function_impl.hpp +4 -4
  311. mlpack/include/mlpack/methods/linear_svm/linear_svm_main.cpp +3 -3
  312. mlpack/include/mlpack/methods/lmnn/lmnn_main.cpp +1 -1
  313. mlpack/include/mlpack/methods/lsh/lsh_main.cpp +1 -1
  314. mlpack/include/mlpack/methods/matrix_completion/matrix_completion_impl.hpp +1 -1
  315. mlpack/include/mlpack/methods/naive_bayes/naive_bayes_classifier_impl.hpp +1 -1
  316. mlpack/include/mlpack/methods/naive_bayes/nbc_main.cpp +3 -3
  317. mlpack/include/mlpack/methods/nca/nca_main.cpp +1 -1
  318. mlpack/include/mlpack/methods/neighbor_search/kfn_main.cpp +8 -8
  319. mlpack/include/mlpack/methods/neighbor_search/knn_main.cpp +8 -8
  320. mlpack/include/mlpack/methods/neighbor_search/neighbor_search.hpp +154 -34
  321. mlpack/include/mlpack/methods/neighbor_search/neighbor_search_impl.hpp +190 -51
  322. mlpack/include/mlpack/methods/neighbor_search/neighbor_search_stat.hpp +10 -0
  323. mlpack/include/mlpack/methods/neighbor_search/ns_model.hpp +15 -15
  324. mlpack/include/mlpack/methods/neighbor_search/ns_model_impl.hpp +55 -46
  325. mlpack/include/mlpack/methods/neighbor_search/typedef.hpp +42 -2
  326. mlpack/include/mlpack/methods/pca/pca_impl.hpp +2 -2
  327. mlpack/include/mlpack/methods/perceptron/perceptron.hpp +2 -2
  328. mlpack/include/mlpack/methods/perceptron/perceptron_impl.hpp +1 -1
  329. mlpack/include/mlpack/methods/perceptron/perceptron_main.cpp +2 -2
  330. mlpack/include/mlpack/methods/preprocess/image_converter_main.cpp +2 -3
  331. mlpack/include/mlpack/methods/preprocess/preprocess_binarize_main.cpp +2 -2
  332. mlpack/include/mlpack/methods/preprocess/preprocess_describe_main.cpp +0 -1
  333. mlpack/include/mlpack/methods/preprocess/preprocess_imputer_main.cpp +50 -129
  334. mlpack/include/mlpack/methods/preprocess/preprocess_one_hot_encoding_main.cpp +6 -6
  335. mlpack/include/mlpack/methods/preprocess/preprocess_scale_main.cpp +2 -3
  336. mlpack/include/mlpack/methods/preprocess/preprocess_split_main.cpp +3 -4
  337. mlpack/include/mlpack/methods/preprocess/scaling_model.hpp +6 -8
  338. mlpack/include/mlpack/methods/preprocess/scaling_model_impl.hpp +18 -20
  339. mlpack/include/mlpack/methods/random_forest/random_forest.hpp +5 -5
  340. mlpack/include/mlpack/methods/random_forest/random_forest_impl.hpp +9 -9
  341. mlpack/include/mlpack/methods/range_search/range_search_main.cpp +1 -1
  342. mlpack/include/mlpack/methods/rann/krann_main.cpp +1 -1
  343. mlpack/include/mlpack/methods/regularized_svd/regularized_svd_function_impl.hpp +1 -1
  344. mlpack/include/mlpack/methods/reinforcement_learning/async_learning_impl.hpp +8 -8
  345. mlpack/include/mlpack/methods/reinforcement_learning/ddpg_impl.hpp +16 -16
  346. mlpack/include/mlpack/methods/reinforcement_learning/environment/acrobot.hpp +4 -4
  347. mlpack/include/mlpack/methods/reinforcement_learning/environment/cart_pole.hpp +3 -3
  348. mlpack/include/mlpack/methods/reinforcement_learning/environment/cont_double_pole_cart.hpp +6 -5
  349. mlpack/include/mlpack/methods/reinforcement_learning/environment/pendulum.hpp +6 -5
  350. mlpack/include/mlpack/methods/reinforcement_learning/policy/aggregated_policy.hpp +2 -2
  351. mlpack/include/mlpack/methods/reinforcement_learning/q_learning_impl.hpp +10 -10
  352. mlpack/include/mlpack/methods/reinforcement_learning/q_networks/categorical_dqn.hpp +21 -17
  353. mlpack/include/mlpack/methods/reinforcement_learning/q_networks/dueling_dqn.hpp +69 -77
  354. mlpack/include/mlpack/methods/reinforcement_learning/q_networks/simple_dqn.hpp +9 -9
  355. mlpack/include/mlpack/methods/reinforcement_learning/sac_impl.hpp +14 -14
  356. mlpack/include/mlpack/methods/reinforcement_learning/td3_impl.hpp +14 -14
  357. mlpack/include/mlpack/methods/softmax_regression/softmax_regression_function_impl.hpp +1 -1
  358. mlpack/include/mlpack/methods/svdplusplus/svdplusplus_function_impl.hpp +1 -1
  359. mlpack/include/mlpack/namespace_compat.hpp +1 -0
  360. mlpack/include/mlpack/prereqs.hpp +1 -0
  361. mlpack/kde.cp313-win_amd64.pyd +0 -0
  362. mlpack/kernel_pca.cp313-win_amd64.pyd +0 -0
  363. mlpack/kfn.cp313-win_amd64.pyd +0 -0
  364. mlpack/kmeans.cp313-win_amd64.pyd +0 -0
  365. mlpack/knn.cp313-win_amd64.pyd +0 -0
  366. mlpack/krann.cp313-win_amd64.pyd +0 -0
  367. mlpack/lars.cp313-win_amd64.pyd +0 -0
  368. mlpack/linear_regression_predict.cp313-win_amd64.pyd +0 -0
  369. mlpack/linear_regression_train.cp313-win_amd64.pyd +0 -0
  370. mlpack/linear_svm.cp313-win_amd64.pyd +0 -0
  371. mlpack/lmnn.cp313-win_amd64.pyd +0 -0
  372. mlpack/local_coordinate_coding.cp313-win_amd64.pyd +0 -0
  373. mlpack/logistic_regression.cp313-win_amd64.pyd +0 -0
  374. mlpack/lsh.cp313-win_amd64.pyd +0 -0
  375. mlpack/mean_shift.cp313-win_amd64.pyd +0 -0
  376. mlpack/nbc.cp313-win_amd64.pyd +0 -0
  377. mlpack/nca.cp313-win_amd64.pyd +0 -0
  378. mlpack/nmf.cp313-win_amd64.pyd +0 -0
  379. mlpack/pca.cp313-win_amd64.pyd +0 -0
  380. mlpack/perceptron.cp313-win_amd64.pyd +0 -0
  381. mlpack/preprocess_binarize.cp313-win_amd64.pyd +0 -0
  382. mlpack/preprocess_describe.cp313-win_amd64.pyd +0 -0
  383. mlpack/preprocess_one_hot_encoding.cp313-win_amd64.pyd +0 -0
  384. mlpack/preprocess_scale.cp313-win_amd64.pyd +0 -0
  385. mlpack/preprocess_split.cp313-win_amd64.pyd +0 -0
  386. mlpack/radical.cp313-win_amd64.pyd +0 -0
  387. mlpack/random_forest.cp313-win_amd64.pyd +0 -0
  388. mlpack/softmax_regression.cp313-win_amd64.pyd +0 -0
  389. mlpack/sparse_coding.cp313-win_amd64.pyd +0 -0
  390. mlpack-4.7.0.dist-info/DELVEWHEEL +2 -0
  391. {mlpack-4.6.2.dist-info → mlpack-4.7.0.dist-info}/METADATA +2 -2
  392. {mlpack-4.6.2.dist-info → mlpack-4.7.0.dist-info}/RECORD +396 -377
  393. {mlpack-4.6.2.dist-info → mlpack-4.7.0.dist-info}/WHEEL +1 -1
  394. mlpack/include/mlpack/core/data/format.hpp +0 -31
  395. mlpack/include/mlpack/core/data/image_info.hpp +0 -102
  396. mlpack/include/mlpack/core/data/image_info_impl.hpp +0 -84
  397. mlpack/include/mlpack/core/data/load_image_impl.hpp +0 -171
  398. mlpack/include/mlpack/core/data/load_model_impl.hpp +0 -115
  399. mlpack/include/mlpack/core/data/load_vec_impl.hpp +0 -154
  400. mlpack/include/mlpack/core/data/map_policies/missing_policy.hpp +0 -148
  401. mlpack/include/mlpack/core/data/save_image_impl.hpp +0 -170
  402. mlpack/include/mlpack/core/data/types.hpp +0 -61
  403. mlpack/include/mlpack/core/data/types_impl.hpp +0 -83
  404. mlpack/include/mlpack/core/data/utilities.hpp +0 -158
  405. mlpack/include/mlpack/core/util/gitversion.hpp +0 -1
  406. mlpack/include/mlpack/methods/ann/convolution_rules/fft_convolution.hpp +0 -213
  407. mlpack/include/mlpack/methods/ann/convolution_rules/svd_convolution.hpp +0 -201
  408. mlpack/include/mlpack/methods/ann/layer/not_adapted/gru.hpp +0 -226
  409. mlpack/include/mlpack/methods/ann/layer/not_adapted/gru_impl.hpp +0 -367
  410. mlpack/include/mlpack/methods/ann/layer/not_adapted/lookup.hpp +0 -139
  411. mlpack/include/mlpack/methods/ann/layer/not_adapted/lookup_impl.hpp +0 -98
  412. mlpack-4.6.2.dist-info/DELVEWHEEL +0 -2
  413. {mlpack-4.6.2.dist-info → mlpack-4.7.0.dist-info}/top_level.txt +0 -0
  414. /mlpack.libs/{libopenblas-9e6d070f769e6580e8c55c0cf83b80a5.dll → libopenblas-c7f521b507686ddc25bee7538a80c374.dll} +0 -0
  415. /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
- arma::mat grad = zeros(arma::size(weight));
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
- double s = arma::as_scalar(
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
- double s = arma::as_scalar(sign(weight.row(i) * weight.row(j).t()));
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
  }