diff --git a/README.md b/README.md
index afbf7c317..5c2cf7dda 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,8 @@ This repository contains extra data for the OpenCV library.
#### Resources
* Homepage: http://opencv.org
* Docs: http://docs.opencv.org
-* Q&A forum: http://answers.opencv.org
+* Q&A forum: https://forum.opencv.org
+ * previous forum (read only): http://answers.opencv.org
* Issue tracking: https://github.com/opencv/opencv/issues
#### Contributing
diff --git a/testdata/cv/aruco/trivial_board_detection.png b/testdata/cv/aruco/trivial_board_detection.png
new file mode 100644
index 000000000..8fee7bb43
Binary files /dev/null and b/testdata/cv/aruco/trivial_board_detection.png differ
diff --git a/testdata/cv/dnn_face/README.md b/testdata/cv/dnn_face/README.md
new file mode 100644
index 000000000..f2cf9b327
--- /dev/null
+++ b/testdata/cv/dnn_face/README.md
@@ -0,0 +1,26 @@
+# Test data for deep learning-based face detection and face recognition
+
+This directory contains images and labels for the unit tests of deep learning-based face detection and face recognition.
+
+## Data in `./detection`
+
+- `cascades_labels.txt`: contains the ground truth generated by [libfacedetection](https://github.com/ShiqiYu/libfacedetection) from the images under `../cascadeandhog/images`. The format is as follows:
+ - image_name_1
+ - number_of_faces_in_image_1
+ - face_1_in_image_1: `x, y, w, h, x0, y0, x1, y1, x2, y2, x3, y3, x4, y4`
+ - face_2_in_image_1: ...
+ - ...
+ - image_name_2
+ - number_of_faces_in_image_2
+ - face_1_in_image_2: ...
+ - ...
+
+ where `x, y, w, h` stands for the top-left coordinates and the width and height of the bounding box, `x0, y0` stands for the coordinates of the pupile of the right eye, `x1, y1` stands for the left eye, `x2, y2` stands for the coordinates of the nose tip, `x3, y3` and `x4, y4` stands for the coordinates of right and left corner of the mouth.
+
+## Data in `./recognition`
+
+- `*.jpg`: these images can be found on [LFW dataset](http://vis-www.cs.umass.edu/lfw/).
+- `cascades_label.txt`: contains two pairs (same and different identities) for the recognition unit test. The format is as follows:
+ - image_name_1 image_name_2 label
+
+ where `label` is either 0 or 1, and `0` means same identity, `1` means different identities.
\ No newline at end of file
diff --git a/testdata/cv/dnn_face/detection/cascades_labels.txt b/testdata/cv/dnn_face/detection/cascades_labels.txt
new file mode 100644
index 000000000..c687037af
--- /dev/null
+++ b/testdata/cv/dnn_face/detection/cascades_labels.txt
@@ -0,0 +1,127 @@
+addams-family.png
+7
+327 166 48 66 341 193 363 192 352 204 343 216 362 215
+136 393 57 70 154 421 178 421 167 434 155 445 174 446
+74 501 45 54 92 521 111 523 104 533 92 541 107 543
+426 138 55 69 436 164 455 166 439 179 438 191 452 192
+736 541 51 69 747 568 771 568 758 582 750 593 769 593
+713 77 58 73 728 106 750 105 738 121 733 134 751 132
+654 383 56 62 675 405 695 405 685 417 675 429 691 429
+audrybt1.png
+1
+129 36 42 48 141 54 159 54 151 64 144 71 158 71
+bttf301.png
+6
+510 121 47 56 520 140 541 139 529 150 523 160 541 159
+59 19 58 68 77 45 101 45 89 57 77 68 98 68
+136 86 46 61 148 110 168 111 157 122 148 131 165 132
+452 66 46 57 470 88 489 89 483 101 471 108 486 109
+211 98 47 54 224 119 245 119 235 130 226 138 244 139
+329 38 46 64 340 62 361 62 348 74 341 85 359 85
+churchill-downs.png
+0
+class57.png
+57
+151 228 31 41 158 246 172 244 164 251 161 258 173 258
+346 181 31 39 355 196 369 196 362 204 356 210 368 210
+967 486 44 53 978 504 997 504 986 513 980 524 996 523
+811 497 43 52 823 517 841 516 833 527 826 535 841 534
+667 491 45 53 680 509 699 509 690 519 682 529 698 528
+1128 507 44 52 1141 525 1160 526 1150 535 1143 544 1158 544
+1007 422 43 48 1018 440 1035 440 1026 449 1019 457 1034 457
+534 214 31 38 543 226 557 226 551 233 544 240 556 240
+479 480 45 53 491 500 510 500 501 509 493 518 509 517
+198 187 31 36 206 200 219 200 212 208 207 213 218 213
+789 382 41 47 802 399 818 398 811 406 804 415 818 415
+1088 356 42 46 1100 373 1117 374 1108 382 1101 390 1115 390
+481 344 42 46 492 361 510 361 501 369 494 377 509 377
+476 163 31 38 484 177 498 176 490 184 486 191 498 190
+948 309 32 40 957 323 972 323 964 330 958 338 971 338
+111 352 41 45 124 370 141 369 133 378 126 385 140 385
+345 292 33 41 354 306 370 308 361 315 354 322 367 323
+97 500 42 49 110 519 128 519 120 527 112 535 127 535
+836 348 41 47 848 366 865 365 857 374 851 382 865 381
+843 413 40 48 856 430 871 430 863 438 856 447 869 447
+707 168 31 38 715 181 729 181 722 188 716 195 728 195
+605 406 42 47 618 423 635 425 625 433 617 439 631 440
+794 274 33 42 800 289 816 288 807 296 803 304 816 303
+825 184 32 39 833 198 847 197 840 204 834 212 846 212
+877 184 29 34 886 198 899 197 894 203 889 210 899 209
+576 321 42 47 587 339 603 340 594 349 588 355 602 355
+1043 210 32 39 1052 223 1067 224 1060 232 1053 238 1066 239
+356 360 33 45 363 375 378 376 369 384 364 392 378 392
+999 189 31 39 1007 203 1021 203 1013 211 1008 217 1020 217
+942 215 31 38 950 231 963 228 957 236 953 243 964 242
+452 290 31 40 461 304 475 304 467 312 462 319 474 319
+219 408 43 51 234 425 251 427 242 435 233 444 248 445
+1110 273 32 42 1119 288 1134 289 1127 297 1120 304 1133 304
+630 223 31 38 638 238 653 237 646 245 639 251 652 252
+1166 416 43 47 1175 433 1192 431 1182 440 1178 449 1192 448
+287 490 45 55 298 509 316 510 305 519 299 528 314 529
+743 421 33 44 752 437 768 437 759 445 753 453 766 453
+1056 319 40 43 1068 336 1084 335 1077 342 1071 351 1084 350
+379 227 32 37 388 240 401 240 395 247 390 254 401 253
+341 430 41 45 353 447 370 447 362 456 355 463 369 463
+246 359 33 40 256 371 272 373 264 380 256 388 269 388
+975 255 40 46 990 273 1005 273 998 281 990 289 1002 289
+830 255 26 33 836 267 848 268 842 274 837 279 847 280
+733 238 32 41 740 255 755 253 748 261 743 269 755 268
+597 172 31 40 605 187 619 187 613 195 607 202 618 201
+479 246 32 38 488 258 502 259 495 266 489 273 501 273
+706 301 41 47 718 318 734 318 727 326 720 335 734 334
+280 298 34 45 290 315 307 315 299 323 291 331 305 331
+881 245 32 41 887 260 901 259 892 267 889 274 901 274
+648 272 30 39 659 286 672 287 665 294 659 301 670 301
+672 378 41 44 684 395 700 395 693 403 686 410 700 410
+185 262 41 43 200 276 215 277 208 284 200 292 213 293
+963 375 41 44 976 392 993 393 984 402 977 408 990 409
+417 352 32 39 426 364 440 365 432 373 426 380 439 380
+161 300 41 41 175 314 191 316 181 322 173 328 186 330
+272 212 32 40 281 225 296 225 290 232 282 241 295 241
+573 255 39 40 584 270 598 270 590 278 585 285 597 285
+er.png
+6
+406 86 33 45 409 104 421 103 412 112 412 120 423 119
+339 36 31 40 344 52 357 51 348 59 346 65 356 65
+118 47 31 42 128 64 143 64 136 72 130 79 143 79
+259 230 30 39 268 245 281 244 277 251 270 258 281 258
+141 256 32 42 150 273 165 272 159 281 153 288 165 287
+68 127 31 38 78 140 92 140 86 147 80 155 91 154
+image_00000000_0.png
+1
+317 160 14 16 321 166 327 167 324 169 322 172 326 172
+karen-and-rob.png
+2
+191 30 47 61 206 54 227 55 217 66 206 75 225 76
+85 191 46 57 96 216 116 213 108 226 102 235 119 232
+larroquette.png
+9
+99 215 30 36 109 228 122 228 117 235 110 242 121 242
+331 148 30 35 340 161 352 161 345 168 341 174 351 174
+134 148 25 34 140 161 152 160 146 167 142 173 152 172
+218 91 29 34 227 104 239 104 233 110 228 116 238 116
+261 139 30 36 268 153 281 153 275 161 270 166 280 166
+107 99 29 34 117 110 130 111 124 117 118 123 128 123
+377 109 31 37 383 126 396 123 390 131 387 138 398 136
+71 112 30 33 81 125 94 124 88 131 82 137 92 137
+180 127 25 35 187 140 200 141 193 147 187 153 197 153
+mickymouse-self-p.png
+2
+529 262 125 167 557 333 615 330 585 366 566 392 614 390
+190 450 102 107 227 484 264 476 255 491 241 525 270 518
+mona-lisa.png
+1
+185 107 127 160 208 181 264 179 229 212 215 237 261 235
+rehg-thanksgiving-1994.png
+7
+350 84 28 33 359 96 370 96 365 103 360 109 369 108
+410 90 31 38 416 104 430 103 421 110 418 118 429 118
+290 69 30 36 299 80 311 81 306 88 299 95 310 95
+116 83 32 43 126 99 141 99 135 107 127 115 139 115
+218 78 24 34 225 91 237 90 232 97 227 103 238 103
+294 118 30 34 303 130 316 130 309 137 304 144 314 144
+155 155 40 40 170 169 186 170 179 177 171 184 184 184
+waynesworld2.png
+2
+119 81 56 61 137 100 160 101 147 110 136 125 156 125
+249 50 54 60 264 74 286 74 274 87 266 96 285 96
\ No newline at end of file
diff --git a/testdata/cv/dnn_face/recognition/Aaron_Tippin_0001.jpg b/testdata/cv/dnn_face/recognition/Aaron_Tippin_0001.jpg
new file mode 100644
index 000000000..2832f6a70
Binary files /dev/null and b/testdata/cv/dnn_face/recognition/Aaron_Tippin_0001.jpg differ
diff --git a/testdata/cv/dnn_face/recognition/Alvaro_Uribe_0028.jpg b/testdata/cv/dnn_face/recognition/Alvaro_Uribe_0028.jpg
new file mode 100644
index 000000000..320c134d0
Binary files /dev/null and b/testdata/cv/dnn_face/recognition/Alvaro_Uribe_0028.jpg differ
diff --git a/testdata/cv/dnn_face/recognition/Alvaro_Uribe_0029.jpg b/testdata/cv/dnn_face/recognition/Alvaro_Uribe_0029.jpg
new file mode 100644
index 000000000..eb25c2ad7
Binary files /dev/null and b/testdata/cv/dnn_face/recognition/Alvaro_Uribe_0029.jpg differ
diff --git a/testdata/cv/dnn_face/recognition/Jose_Luis_Rodriguez_Zapatero_0001.jpg b/testdata/cv/dnn_face/recognition/Jose_Luis_Rodriguez_Zapatero_0001.jpg
new file mode 100644
index 000000000..affae9c35
Binary files /dev/null and b/testdata/cv/dnn_face/recognition/Jose_Luis_Rodriguez_Zapatero_0001.jpg differ
diff --git a/testdata/cv/dnn_face/recognition/cascades_label.txt b/testdata/cv/dnn_face/recognition/cascades_label.txt
new file mode 100644
index 000000000..f0a132048
--- /dev/null
+++ b/testdata/cv/dnn_face/recognition/cascades_label.txt
@@ -0,0 +1,2 @@
+Alvaro_Uribe_0028.jpg Alvaro_Uribe_0029.jpg 1
+Aaron_Tippin_0001.jpg Jose_Luis_Rodriguez_Zapatero_0001.jpg 0
diff --git a/testdata/cv/io/3_4/Core_InputOutput--filestorage_base64_basic_rw_JSON.json b/testdata/cv/io/3_4/Core_InputOutput--filestorage_base64_basic_rw_JSON.json
new file mode 100644
index 000000000..d445f6785
--- /dev/null
+++ b/testdata/cv/io/3_4/Core_InputOutput--filestorage_base64_basic_rw_JSON.json
@@ -0,0 +1,29 @@
+{
+ "normal_2d_mat": {
+ "type_id": "opencv-matrix",
+ "rows": 10,
+ "cols": 20,
+ "dt": "3u",
+ "data": "$base64$M3UgICAgICAgICAgICAgICAgICAgICAgAQB/AQF/AQJ/AQN/AQR/AQV/AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/AQF/AQJ/AQN/AQR/AQV/AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/AQJ/AQN/AQR/AQV/AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/AQN/AQR/AQV/AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/AQR/AQV/AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/AQV/AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/ARh/AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/ARh/ARl/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/ARh/ARl/ARp/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/ARh/ARl/ARp/ARt/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/ARh/ARl/ARp/ARt/ARx/"
+ },
+ "normal_nd_mat": {
+ "type_id": "opencv-nd-matrix",
+ "sizes": "$base64$aSAgICAgICAgICAgICAgICAgICAgICAgAgAAAAIAAAABAAAAAgAAAA==",
+ "dt": "4d",
+ "data": "$base64$NGQgICAgICAgICAgICAgICAgICAgICAg0SLb+X5q7D/RItv5fmq8Px1aZDvfT+U/0SLb+X5q3D/RItv5fmrsP9Ei2/l+arw/HVpkO99P5T/RItv5fmrcP9Ei2/l+auw/0SLb+X5qvD8dWmQ730/lP9Ei2/l+atw/0SLb+X5q7D/RItv5fmq8Px1aZDvfT+U/0SLb+X5q3D/RItv5fmrsP9Ei2/l+arw/HVpkO99P5T/RItv5fmrcP9Ei2/l+auw/0SLb+X5qvD8dWmQ730/lP9Ei2/l+atw/0SLb+X5q7D/RItv5fmq8Px1aZDvfT+U/0SLb+X5q3D/RItv5fmrsP9Ei2/l+arw/HVpkO99P5T/RItv5fmrcPw=="
+ },
+ "empty_2d_mat": {
+ "type_id": "opencv-matrix",
+ "rows": 0,
+ "cols": 0,
+ "dt": "u",
+ "data": []
+ },
+ "random_mat": {
+ "type_id": "opencv-matrix",
+ "rows": 8,
+ "cols": 16,
+ "dt": "d",
+ "data": "$base64$MWQgICAgICAgICAgICAgICAgICAgICAgfwEAcyOC5D8wXwTRWhniPyoSRI0e1dE/zFLwU7v42z/PJzrYwBfUP6QPykt9Q78/0HCaMombuT8tPaWjIPjcP+B97Ci5KL8/3EpzlPKQ5j9Y8DJWszqyP6K5UaHz1+E/SE0OJBN6sD9Bg9FMnsrvP2Sgnp28ENM/bsLYppV96j9AiEX5UWCSP4US8M0ySO0/2Aln6fWhsT89TmPFY3PdP4DL3WcVeOY/vBeZ29QuxT+dplSPW9DjP5Vlx4it5tg/PLbc9vmtsD9cTIwuIba+P+95Jq8cJNo/YWF47boL2j/eJLwXl0HuPySmWwaQ5tM/GypZhvfx5T/Bh8tU4cDeP5Bp81RTPrA/GOCLak2+sT9wVI0CHFWyP9a8UelJX+A/nHGByrLGxT+6LVMxaC7OPxLV1szv1eM/zuAOyXc/yT8sF602bUqyP4q7kQ+qkOs/CNwsx7Xawz8pVNSDBeviPzSjFuWZhLA/HhJGNeJXzT8gQi3xOYPVP2Dkc1qWGd4/Kjg8Z+Y+1D/wVPl//4/qP3T4KEX47cA/JPWcs6uDtD8VAaSwRKPfP7DX9sUVhr0/HRgTQld/5T/IpSqoWnCwPxSC8VAJLuo/Ht8JNNfP6D8OF9GlRAXQP/6QrssVotE/qBC4aQU05z8u/GaaFi/mP5j8l/OLOc4/FF9bhblHzD8WX9aYcKnsP0hHTHzNH+s/QCYrHW1Azj9w2Ta67n/tP0cXraad+OU/U8plWz/G5D94QsnShQvZP6Wou0C5qeg/kGYoLD/V5j9GoIau+ATvP4mQDqP47uc/eLHHT0gq4D8QIAWMQ+ydPzHYYILd3tw/yDfY0bYfoj8qnbC/deXkPwF/Sdd7itY/qeO0BdXE2D9ehtvuzaflP4D9Xml9P44/Svlvcz7e5j8AqabN+DLqP+D5eGowJ44/2PGf6Y++0z9sLfJxQ4HVPzzx+YKlpug/lWNIKXCq5j/DduYOqpLkPzZvhGJInu4/9Cwu9KHZ6D8GlUikkGLqPw4SagrxyeQ/IJqUoH1Dlz/fcGChHhPYP2hgtrIst9U/YAu6RVff6D8eNZFZK07dP3S5PfB1Bug/+EE+1l1utT/9HBJ+rFDlP/BOCpDo9Nk/mzP4pbU/3z+wqh5bBt3sP9iUx9QRcqI/nohCraEGyD8OV9VI9TjpP3bxaCsFU+8/ONwOBhDc5z9EPg80VULSP1peOLxZSuI/mDjC4HtF5D9fJMQkmSbiP5C9QjgOWp0/qp5Bhzlxzz9UI3dUx2DtP0TkszN7EcM/wEYocT9y1T/16ZnndgrhP5QJBK2AGs0/LpI2myBa6j/gCcr7UeDlPyCWLdl2rbs/pr2lqmuu0z/iDhn2JJPkPw=="
+ },
+ "rawdata": "$base64$MnUzaTJkaSAgICAgICAgICAgICAgICAgAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/AAAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPwEAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8CAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/AwAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPwQAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8FAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/BgAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPwcAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8IAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/CQAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPwoAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8LAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/DAAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPw0AAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8OAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/DwAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPxAAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8RAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/EgAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPxMAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8UAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/FQAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPxYAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8XAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/GAAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPxkAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8aAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/GwAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPxwAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8dAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/HgAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPx8AAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8gAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/IQAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPyIAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8jAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/JAAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPyUAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8mAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/JwAAAA=="}
diff --git a/testdata/cv/io/3_4/Core_InputOutput--filestorage_base64_basic_rw_XML.xml b/testdata/cv/io/3_4/Core_InputOutput--filestorage_base64_basic_rw_XML.xml
new file mode 100644
index 000000000..a64265a28
--- /dev/null
+++ b/testdata/cv/io/3_4/Core_InputOutput--filestorage_base64_basic_rw_XML.xml
@@ -0,0 +1,99 @@
+
+
+
+ 10
+ 20
+ "3u"
+
+ M3UgICAgICAgICAgICAgICAgICAgICAgAQB/AQF/AQJ/AQN/AQR/AQV/AQZ/AQd/
+ AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/AQF/AQJ/AQN/AQR/
+ AQV/AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/
+ AQJ/AQN/AQR/AQV/AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/
+ ARJ/ARN/ARR/ARV/AQN/AQR/AQV/AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/
+ AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/AQR/AQV/AQZ/AQd/AQh/AQl/AQp/AQt/
+ AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/AQV/AQZ/AQd/AQh/
+ AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/ARh/
+ AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/
+ ARZ/ARd/ARh/ARl/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/
+ ARN/ARR/ARV/ARZ/ARd/ARh/ARl/ARp/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/
+ ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/ARh/ARl/ARp/ARt/AQl/AQp/AQt/AQx/
+ AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/ARh/ARl/ARp/ARt/ARx/
+
+
+
+ aSAgICAgICAgICAgICAgICAgICAgICAgAgAAAAIAAAABAAAAAgAAAA==
+
+ "4d"
+
+ NGQgICAgICAgICAgICAgICAgICAgICAg0SLb+X5q7D/RItv5fmq8Px1aZDvfT+U/
+ 0SLb+X5q3D/RItv5fmrsP9Ei2/l+arw/HVpkO99P5T/RItv5fmrcP9Ei2/l+auw/
+ 0SLb+X5qvD8dWmQ730/lP9Ei2/l+atw/0SLb+X5q7D/RItv5fmq8Px1aZDvfT+U/
+ 0SLb+X5q3D/RItv5fmrsP9Ei2/l+arw/HVpkO99P5T/RItv5fmrcP9Ei2/l+auw/
+ 0SLb+X5qvD8dWmQ730/lP9Ei2/l+atw/0SLb+X5q7D/RItv5fmq8Px1aZDvfT+U/
+ 0SLb+X5q3D/RItv5fmrsP9Ei2/l+arw/HVpkO99P5T/RItv5fmrcPw==
+
+
+ 0
+ 0
+ u
+
+
+ 8
+ 16
+ d
+
+ MWQgICAgICAgICAgICAgICAgICAgICAgfwEAcyOC5D8wXwTRWhniPyoSRI0e1dE/
+ zFLwU7v42z/PJzrYwBfUP6QPykt9Q78/0HCaMombuT8tPaWjIPjcP+B97Ci5KL8/
+ 3EpzlPKQ5j9Y8DJWszqyP6K5UaHz1+E/SE0OJBN6sD9Bg9FMnsrvP2Sgnp28ENM/
+ bsLYppV96j9AiEX5UWCSP4US8M0ySO0/2Aln6fWhsT89TmPFY3PdP4DL3WcVeOY/
+ vBeZ29QuxT+dplSPW9DjP5Vlx4it5tg/PLbc9vmtsD9cTIwuIba+P+95Jq8cJNo/
+ YWF47boL2j/eJLwXl0HuPySmWwaQ5tM/GypZhvfx5T/Bh8tU4cDeP5Bp81RTPrA/
+ GOCLak2+sT9wVI0CHFWyP9a8UelJX+A/nHGByrLGxT+6LVMxaC7OPxLV1szv1eM/
+ zuAOyXc/yT8sF602bUqyP4q7kQ+qkOs/CNwsx7Xawz8pVNSDBeviPzSjFuWZhLA/
+ HhJGNeJXzT8gQi3xOYPVP2Dkc1qWGd4/Kjg8Z+Y+1D/wVPl//4/qP3T4KEX47cA/
+ JPWcs6uDtD8VAaSwRKPfP7DX9sUVhr0/HRgTQld/5T/IpSqoWnCwPxSC8VAJLuo/
+ Ht8JNNfP6D8OF9GlRAXQP/6QrssVotE/qBC4aQU05z8u/GaaFi/mP5j8l/OLOc4/
+ FF9bhblHzD8WX9aYcKnsP0hHTHzNH+s/QCYrHW1Azj9w2Ta67n/tP0cXraad+OU/
+ U8plWz/G5D94QsnShQvZP6Wou0C5qeg/kGYoLD/V5j9GoIau+ATvP4mQDqP47uc/
+ eLHHT0gq4D8QIAWMQ+ydPzHYYILd3tw/yDfY0bYfoj8qnbC/deXkPwF/Sdd7itY/
+ qeO0BdXE2D9ehtvuzaflP4D9Xml9P44/Svlvcz7e5j8AqabN+DLqP+D5eGowJ44/
+ 2PGf6Y++0z9sLfJxQ4HVPzzx+YKlpug/lWNIKXCq5j/DduYOqpLkPzZvhGJInu4/
+ 9Cwu9KHZ6D8GlUikkGLqPw4SagrxyeQ/IJqUoH1Dlz/fcGChHhPYP2hgtrIst9U/
+ YAu6RVff6D8eNZFZK07dP3S5PfB1Bug/+EE+1l1utT/9HBJ+rFDlP/BOCpDo9Nk/
+ mzP4pbU/3z+wqh5bBt3sP9iUx9QRcqI/nohCraEGyD8OV9VI9TjpP3bxaCsFU+8/
+ ONwOBhDc5z9EPg80VULSP1peOLxZSuI/mDjC4HtF5D9fJMQkmSbiP5C9QjgOWp0/
+ qp5Bhzlxzz9UI3dUx2DtP0TkszN7EcM/wEYocT9y1T/16ZnndgrhP5QJBK2AGs0/
+ LpI2myBa6j/gCcr7UeDlPyCWLdl2rbs/pr2lqmuu0z/iDhn2JJPkPw==
+
+
+ MnUzaTJkaSAgICAgICAgICAgICAgICAgAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZ
+ mZmZmck/AAAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPwEAAAABAgEA
+ AAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8CAAAAAQIBAAAAAgAAAAMAAACamZmZ
+ mZm5P5qZmZmZmck/AwAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPwQA
+ AAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8FAAAAAQIBAAAAAgAAAAMA
+ AACamZmZmZm5P5qZmZmZmck/BgAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZ
+ mZnJPwcAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8IAAAAAQIBAAAA
+ AgAAAAMAAACamZmZmZm5P5qZmZmZmck/CQAAAAECAQAAAAIAAAADAAAAmpmZmZmZ
+ uT+amZmZmZnJPwoAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8LAAAA
+ AQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/DAAAAAECAQAAAAIAAAADAAAA
+ mpmZmZmZuT+amZmZmZnJPw0AAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZ
+ yT8OAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/DwAAAAECAQAAAAIA
+ AAADAAAAmpmZmZmZuT+amZmZmZnJPxAAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/
+ mpmZmZmZyT8RAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/EgAAAAEC
+ AQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPxMAAAABAgEAAAACAAAAAwAAAJqZ
+ mZmZmbk/mpmZmZmZyT8UAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/
+ FQAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPxYAAAABAgEAAAACAAAA
+ AwAAAJqZmZmZmbk/mpmZmZmZyT8XAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZ
+ mZmZmck/GAAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPxkAAAABAgEA
+ AAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8aAAAAAQIBAAAAAgAAAAMAAACamZmZ
+ mZm5P5qZmZmZmck/GwAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPxwA
+ AAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8dAAAAAQIBAAAAAgAAAAMA
+ AACamZmZmZm5P5qZmZmZmck/HgAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZ
+ mZnJPx8AAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8gAAAAAQIBAAAA
+ AgAAAAMAAACamZmZmZm5P5qZmZmZmck/IQAAAAECAQAAAAIAAAADAAAAmpmZmZmZ
+ uT+amZmZmZnJPyIAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8jAAAA
+ AQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/JAAAAAECAQAAAAIAAAADAAAA
+ mpmZmZmZuT+amZmZmZnJPyUAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZ
+ yT8mAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/JwAAAA==
+
+
diff --git a/testdata/cv/io/3_4/Core_InputOutput--filestorage_base64_basic_rw_YAML.yml b/testdata/cv/io/3_4/Core_InputOutput--filestorage_base64_basic_rw_YAML.yml
new file mode 100644
index 000000000..462b44d10
--- /dev/null
+++ b/testdata/cv/io/3_4/Core_InputOutput--filestorage_base64_basic_rw_YAML.yml
@@ -0,0 +1,93 @@
+%YAML:1.0
+---
+normal_2d_mat: !!opencv-matrix
+ rows: 10
+ cols: 20
+ dt: "3u"
+ data: !!binary |
+ M3UgICAgICAgICAgICAgICAgICAgICAgAQB/AQF/AQJ/AQN/AQR/AQV/AQZ/AQd/
+ AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/AQF/AQJ/AQN/AQR/
+ AQV/AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/
+ AQJ/AQN/AQR/AQV/AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/
+ ARJ/ARN/ARR/ARV/AQN/AQR/AQV/AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/
+ AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/AQR/AQV/AQZ/AQd/AQh/AQl/AQp/AQt/
+ AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/AQV/AQZ/AQd/AQh/
+ AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/ARh/
+ AQZ/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/
+ ARZ/ARd/ARh/ARl/AQd/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/ARB/ARF/ARJ/
+ ARN/ARR/ARV/ARZ/ARd/ARh/ARl/ARp/AQh/AQl/AQp/AQt/AQx/AQ1/AQ5/AQ9/
+ ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/ARh/ARl/ARp/ARt/AQl/AQp/AQt/AQx/
+ AQ1/AQ5/AQ9/ARB/ARF/ARJ/ARN/ARR/ARV/ARZ/ARd/ARh/ARl/ARp/ARt/ARx/
+normal_nd_mat: !!opencv-nd-matrix
+ sizes: !!binary |
+ aSAgICAgICAgICAgICAgICAgICAgICAgAgAAAAIAAAABAAAAAgAAAA==
+ dt: "4d"
+ data: !!binary |
+ NGQgICAgICAgICAgICAgICAgICAgICAg0SLb+X5q7D/RItv5fmq8Px1aZDvfT+U/
+ 0SLb+X5q3D/RItv5fmrsP9Ei2/l+arw/HVpkO99P5T/RItv5fmrcP9Ei2/l+auw/
+ 0SLb+X5qvD8dWmQ730/lP9Ei2/l+atw/0SLb+X5q7D/RItv5fmq8Px1aZDvfT+U/
+ 0SLb+X5q3D/RItv5fmrsP9Ei2/l+arw/HVpkO99P5T/RItv5fmrcP9Ei2/l+auw/
+ 0SLb+X5qvD8dWmQ730/lP9Ei2/l+atw/0SLb+X5q7D/RItv5fmq8Px1aZDvfT+U/
+ 0SLb+X5q3D/RItv5fmrsP9Ei2/l+arw/HVpkO99P5T/RItv5fmrcPw==
+empty_2d_mat: !!opencv-matrix
+ rows: 0
+ cols: 0
+ dt: u
+ data: []
+random_mat: !!opencv-matrix
+ rows: 8
+ cols: 16
+ dt: d
+ data: !!binary |
+ MWQgICAgICAgICAgICAgICAgICAgICAgfwEAcyOC5D8wXwTRWhniPyoSRI0e1dE/
+ zFLwU7v42z/PJzrYwBfUP6QPykt9Q78/0HCaMombuT8tPaWjIPjcP+B97Ci5KL8/
+ 3EpzlPKQ5j9Y8DJWszqyP6K5UaHz1+E/SE0OJBN6sD9Bg9FMnsrvP2Sgnp28ENM/
+ bsLYppV96j9AiEX5UWCSP4US8M0ySO0/2Aln6fWhsT89TmPFY3PdP4DL3WcVeOY/
+ vBeZ29QuxT+dplSPW9DjP5Vlx4it5tg/PLbc9vmtsD9cTIwuIba+P+95Jq8cJNo/
+ YWF47boL2j/eJLwXl0HuPySmWwaQ5tM/GypZhvfx5T/Bh8tU4cDeP5Bp81RTPrA/
+ GOCLak2+sT9wVI0CHFWyP9a8UelJX+A/nHGByrLGxT+6LVMxaC7OPxLV1szv1eM/
+ zuAOyXc/yT8sF602bUqyP4q7kQ+qkOs/CNwsx7Xawz8pVNSDBeviPzSjFuWZhLA/
+ HhJGNeJXzT8gQi3xOYPVP2Dkc1qWGd4/Kjg8Z+Y+1D/wVPl//4/qP3T4KEX47cA/
+ JPWcs6uDtD8VAaSwRKPfP7DX9sUVhr0/HRgTQld/5T/IpSqoWnCwPxSC8VAJLuo/
+ Ht8JNNfP6D8OF9GlRAXQP/6QrssVotE/qBC4aQU05z8u/GaaFi/mP5j8l/OLOc4/
+ FF9bhblHzD8WX9aYcKnsP0hHTHzNH+s/QCYrHW1Azj9w2Ta67n/tP0cXraad+OU/
+ U8plWz/G5D94QsnShQvZP6Wou0C5qeg/kGYoLD/V5j9GoIau+ATvP4mQDqP47uc/
+ eLHHT0gq4D8QIAWMQ+ydPzHYYILd3tw/yDfY0bYfoj8qnbC/deXkPwF/Sdd7itY/
+ qeO0BdXE2D9ehtvuzaflP4D9Xml9P44/Svlvcz7e5j8AqabN+DLqP+D5eGowJ44/
+ 2PGf6Y++0z9sLfJxQ4HVPzzx+YKlpug/lWNIKXCq5j/DduYOqpLkPzZvhGJInu4/
+ 9Cwu9KHZ6D8GlUikkGLqPw4SagrxyeQ/IJqUoH1Dlz/fcGChHhPYP2hgtrIst9U/
+ YAu6RVff6D8eNZFZK07dP3S5PfB1Bug/+EE+1l1utT/9HBJ+rFDlP/BOCpDo9Nk/
+ mzP4pbU/3z+wqh5bBt3sP9iUx9QRcqI/nohCraEGyD8OV9VI9TjpP3bxaCsFU+8/
+ ONwOBhDc5z9EPg80VULSP1peOLxZSuI/mDjC4HtF5D9fJMQkmSbiP5C9QjgOWp0/
+ qp5Bhzlxzz9UI3dUx2DtP0TkszN7EcM/wEYocT9y1T/16ZnndgrhP5QJBK2AGs0/
+ LpI2myBa6j/gCcr7UeDlPyCWLdl2rbs/pr2lqmuu0z/iDhn2JJPkPw==
+rawdata: !!binary |
+ MnUzaTJkaSAgICAgICAgICAgICAgICAgAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZ
+ mZmZmck/AAAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPwEAAAABAgEA
+ AAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8CAAAAAQIBAAAAAgAAAAMAAACamZmZ
+ mZm5P5qZmZmZmck/AwAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPwQA
+ AAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8FAAAAAQIBAAAAAgAAAAMA
+ AACamZmZmZm5P5qZmZmZmck/BgAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZ
+ mZnJPwcAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8IAAAAAQIBAAAA
+ AgAAAAMAAACamZmZmZm5P5qZmZmZmck/CQAAAAECAQAAAAIAAAADAAAAmpmZmZmZ
+ uT+amZmZmZnJPwoAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8LAAAA
+ AQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/DAAAAAECAQAAAAIAAAADAAAA
+ mpmZmZmZuT+amZmZmZnJPw0AAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZ
+ yT8OAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/DwAAAAECAQAAAAIA
+ AAADAAAAmpmZmZmZuT+amZmZmZnJPxAAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/
+ mpmZmZmZyT8RAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/EgAAAAEC
+ AQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPxMAAAABAgEAAAACAAAAAwAAAJqZ
+ mZmZmbk/mpmZmZmZyT8UAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/
+ FQAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPxYAAAABAgEAAAACAAAA
+ AwAAAJqZmZmZmbk/mpmZmZmZyT8XAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZ
+ mZmZmck/GAAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPxkAAAABAgEA
+ AAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8aAAAAAQIBAAAAAgAAAAMAAACamZmZ
+ mZm5P5qZmZmZmck/GwAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZmZnJPxwA
+ AAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8dAAAAAQIBAAAAAgAAAAMA
+ AACamZmZmZm5P5qZmZmZmck/HgAAAAECAQAAAAIAAAADAAAAmpmZmZmZuT+amZmZ
+ mZnJPx8AAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8gAAAAAQIBAAAA
+ AgAAAAMAAACamZmZmZm5P5qZmZmZmck/IQAAAAECAQAAAAIAAAADAAAAmpmZmZmZ
+ uT+amZmZmZnJPyIAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZyT8jAAAA
+ AQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/JAAAAAECAQAAAAIAAAADAAAA
+ mpmZmZmZuT+amZmZmZnJPyUAAAABAgEAAAACAAAAAwAAAJqZmZmZmbk/mpmZmZmZ
+ yT8mAAAAAQIBAAAAAgAAAAMAAACamZmZmZm5P5qZmZmZmck/JwAAAA==
diff --git a/testdata/dnn/download_models.py b/testdata/dnn/download_models.py
index 2eac3b150..543487cf0 100755
--- a/testdata/dnn/download_models.py
+++ b/testdata/dnn/download_models.py
@@ -51,7 +51,8 @@ def verify(self):
break
sha.update(buf)
print(' actual {}'.format(sha.hexdigest()))
- return self.sha == sha.hexdigest()
+ self.sha_actual = sha.hexdigest()
+ return self.sha == self.sha_actual
except Exception as e:
print(' catch {}'.format(e))
@@ -82,7 +83,10 @@ def get(self):
print(' done')
print(' file {}'.format(self.filename))
- return self.verify()
+ candidate_verify = self.verify()
+ if not candidate_verify:
+ self.handle_bad_download()
+ return candidate_verify
def download(self):
try:
@@ -112,6 +116,27 @@ def save(self, r):
print('>', end='')
sys.stdout.flush()
+ def handle_bad_download(self):
+ if os.path.exists(self.filename):
+ # rename file for further investigation
+ try:
+ # NB: using `self.sha_actual` may create unbounded number of files
+ rename_target = self.filename + '.invalid'
+ # TODO: use os.replace (Python 3.3+)
+ try:
+ if os.path.exists(rename_target): # avoid FileExistsError on Windows from os.rename()
+ os.remove(rename_target)
+ finally:
+ os.rename(self.filename, rename_target)
+ print(' renaming invalid file to ' + rename_target)
+ except:
+ import traceback
+ traceback.print_exc()
+ finally:
+ if os.path.exists(self.filename):
+ print(' deleting invalid file')
+ os.remove(self.filename)
+
def GDrive(gid):
def download_gdrive(dst):
@@ -565,6 +590,29 @@ def get_confirm_token(response): # in case of large files
member='resnet50v1/test_data_set_0/output_0.pb',
sha='40deb324ddba7db4117568e1e3911e7a771fb260',
filename='onnx/data/output_resnet50v1.pb'),
+ Model(
+ name='ResNet50-Int8 (ONNX)',
+ url='https://github.com/onnx/models/raw/master/vision/classification/resnet/model/resnet50-v1-12-int8.tar.gz',
+ sha='2ff2a58f4a27362ee6234915452e86287cdcf269',
+ filename='resnet50-v1-12-int8.tar.gz'),
+ Model(
+ name='ResNet50-Int8 (ONNX)',
+ archive='resnet50-v1-12-int8.tar.gz',
+ member='resnet50-v1-12-int8/resnet50-v1-12-int8.onnx',
+ sha='5fbeac70e1a3af3253c21e0e4008a784aa61929f',
+ filename='onnx/models/resnet50_int8.onnx'),
+ Model(
+ name='ResNet50-Int8 (ONNX)',
+ archive='resnet50-v1-12-int8.tar.gz',
+ member='resnet50-v1-12-int8/test_data_set_0/input_0.pb',
+ sha='0946521c8afcfea9340390298a41fb11496b3556',
+ filename='onnx/data/input_resnet50_int8.pb'),
+ Model(
+ name='ResNet50-Int8 (ONNX)',
+ archive='resnet50-v1-12-int8.tar.gz',
+ member='resnet50-v1-12-int8/test_data_set_0/output_0.pb',
+ sha='6d45d2f06150e9045631c7928093728b07c8b12d',
+ filename='onnx/data/output_resnet50_int8.pb'),
Model(
name='ssd_mobilenet_v1_ppn_coco (TensorFlow)',
url='http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_ppn_shared_box_predictor_300x300_coco14_sync_2018_07_03.tar.gz',
@@ -859,6 +907,11 @@ def get_confirm_token(response): # in case of large files
url='https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.weights',
sha='d110379b7b86899226b591ad4affc7115f707157',
filename='yolov4-tiny.weights'),
+ Model(
+ name='YOLOv4x-mish', # https://github.com/opencv/opencv/issues/18975
+ url='https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4x-mish.weights',
+ sha='a6f2879af2241de2e9730d317a55db6afd0af00b',
+ filename='yolov4x-mish.weights'),
Model(
name='GSOC2016-GOTURN', # https://github.com/opencv/opencv_contrib/issues/941
downloader=GDrive('1j4UTqVE4EGaUFiK7a5I_CYX7twO9c5br'),
@@ -889,6 +942,16 @@ def get_confirm_token(response): # in case of large files
url='https://drive.google.com/uc?export=dowload&id=19YWhArrNccaoSza0CfkXlA8im4-lAGsR',
sha='1b4dd21a6baa5e3523156776970895bd3db6960a',
filename='onnx/models/DB_TD500_resnet50.onnx'),
+ Model(
+ name='YuNet',
+ url='https://github.com/ShiqiYu/libfacedetection.train/raw/7a9738d6ca7bc4a3216578b06a739126435d40ef/tasks/task1/onnx/yunet.onnx',
+ sha='49c52f484b1895e8298dc59e37f262ba7841a601',
+ filename='onnx/models/yunet-202109.onnx'),
+ Model(
+ name='face_recognizer_fast',
+ url='https://drive.google.com/uc?export=dowload&id=1ClK9WiB492c5OZFKveF3XiHCejoOxINW',
+ sha='12ff8b1f5c8bff62e8dd91eabdacdfc998be255e',
+ filename='onnx/models/face_recognizer_fast.onnx'),
]
# Note: models will be downloaded to current working directory
diff --git a/testdata/dnn/layers/gru.B.npy b/testdata/dnn/layers/gru.B.npy
new file mode 100644
index 000000000..aa442683c
Binary files /dev/null and b/testdata/dnn/layers/gru.B.npy differ
diff --git a/testdata/dnn/layers/gru.R.npy b/testdata/dnn/layers/gru.R.npy
new file mode 100644
index 000000000..3321ad025
Binary files /dev/null and b/testdata/dnn/layers/gru.R.npy differ
diff --git a/testdata/dnn/layers/gru.W.npy b/testdata/dnn/layers/gru.W.npy
new file mode 100644
index 000000000..6d3cc3090
Binary files /dev/null and b/testdata/dnn/layers/gru.W.npy differ
diff --git a/testdata/dnn/layers/gru.h0.npy b/testdata/dnn/layers/gru.h0.npy
new file mode 100644
index 000000000..889bdd4ca
Binary files /dev/null and b/testdata/dnn/layers/gru.h0.npy differ
diff --git a/testdata/dnn/layers/gru.input.npy b/testdata/dnn/layers/gru.input.npy
new file mode 100644
index 000000000..4b36d6f6f
Binary files /dev/null and b/testdata/dnn/layers/gru.input.npy differ
diff --git a/testdata/dnn/layers/gru.output.npy b/testdata/dnn/layers/gru.output.npy
new file mode 100644
index 000000000..0bc90b580
Binary files /dev/null and b/testdata/dnn/layers/gru.output.npy differ
diff --git a/testdata/dnn/layers/lstm.hidden.B.npy b/testdata/dnn/layers/lstm.hidden.B.npy
new file mode 100644
index 000000000..ca178d675
Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.B.npy differ
diff --git a/testdata/dnn/layers/lstm.hidden.R.npy b/testdata/dnn/layers/lstm.hidden.R.npy
new file mode 100644
index 000000000..b4ff454c1
Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.R.npy differ
diff --git a/testdata/dnn/layers/lstm.hidden.W.npy b/testdata/dnn/layers/lstm.hidden.W.npy
new file mode 100644
index 000000000..f35a32424
Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.W.npy differ
diff --git a/testdata/dnn/layers/lstm.hidden.c0.npy b/testdata/dnn/layers/lstm.hidden.c0.npy
new file mode 100644
index 000000000..1f43a8dce
Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.c0.npy differ
diff --git a/testdata/dnn/layers/lstm.hidden.h0.npy b/testdata/dnn/layers/lstm.hidden.h0.npy
new file mode 100644
index 000000000..889bdd4ca
Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.h0.npy differ
diff --git a/testdata/dnn/layers/lstm.hidden.input.npy b/testdata/dnn/layers/lstm.hidden.input.npy
new file mode 100644
index 000000000..4b36d6f6f
Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.input.npy differ
diff --git a/testdata/dnn/layers/lstm.hidden.output.npy b/testdata/dnn/layers/lstm.hidden.output.npy
new file mode 100644
index 000000000..8770791d5
Binary files /dev/null and b/testdata/dnn/layers/lstm.hidden.output.npy differ
diff --git a/testdata/dnn/onnx/data/input_PReLU_slope.npy b/testdata/dnn/onnx/data/input_PReLU_slope.npy
new file mode 100644
index 000000000..b850fc49b
Binary files /dev/null and b/testdata/dnn/onnx/data/input_PReLU_slope.npy differ
diff --git a/testdata/dnn/onnx/data/input_concat_const_blobs.npy b/testdata/dnn/onnx/data/input_concat_const_blobs.npy
new file mode 100644
index 000000000..988e07f97
Binary files /dev/null and b/testdata/dnn/onnx/data/input_concat_const_blobs.npy differ
diff --git a/testdata/dnn/onnx/data/input_conv_asymmetric_pads.npy b/testdata/dnn/onnx/data/input_conv_asymmetric_pads.npy
new file mode 100644
index 000000000..9416d545c
Binary files /dev/null and b/testdata/dnn/onnx/data/input_conv_asymmetric_pads.npy differ
diff --git a/testdata/dnn/onnx/data/input_cumsum_1d_exclusive_1.npy b/testdata/dnn/onnx/data/input_cumsum_1d_exclusive_1.npy
new file mode 100644
index 000000000..5001c1109
Binary files /dev/null and b/testdata/dnn/onnx/data/input_cumsum_1d_exclusive_1.npy differ
diff --git a/testdata/dnn/onnx/data/input_cumsum_1d_exclusive_1_reverse.npy b/testdata/dnn/onnx/data/input_cumsum_1d_exclusive_1_reverse.npy
new file mode 100644
index 000000000..5001c1109
Binary files /dev/null and b/testdata/dnn/onnx/data/input_cumsum_1d_exclusive_1_reverse.npy differ
diff --git a/testdata/dnn/onnx/data/input_cumsum_1d_reverse.npy b/testdata/dnn/onnx/data/input_cumsum_1d_reverse.npy
new file mode 100644
index 000000000..5001c1109
Binary files /dev/null and b/testdata/dnn/onnx/data/input_cumsum_1d_reverse.npy differ
diff --git a/testdata/dnn/onnx/data/input_cumsum_2d_dim_1.npy b/testdata/dnn/onnx/data/input_cumsum_2d_dim_1.npy
new file mode 100644
index 000000000..3dd99de52
Binary files /dev/null and b/testdata/dnn/onnx/data/input_cumsum_2d_dim_1.npy differ
diff --git a/testdata/dnn/onnx/data/input_cumsum_3d_dim_2.npy b/testdata/dnn/onnx/data/input_cumsum_3d_dim_2.npy
new file mode 100644
index 000000000..58b7ad796
Binary files /dev/null and b/testdata/dnn/onnx/data/input_cumsum_3d_dim_2.npy differ
diff --git a/testdata/dnn/onnx/data/input_dynamic_batch.npy b/testdata/dnn/onnx/data/input_dynamic_batch.npy
new file mode 100644
index 000000000..6146df46f
Binary files /dev/null and b/testdata/dnn/onnx/data/input_dynamic_batch.npy differ
diff --git a/testdata/dnn/onnx/data/input_expand.npy b/testdata/dnn/onnx/data/input_expand.npy
new file mode 100644
index 000000000..5c2c1c121
Binary files /dev/null and b/testdata/dnn/onnx/data/input_expand.npy differ
diff --git a/testdata/dnn/onnx/data/input_expand_identity.npy b/testdata/dnn/onnx/data/input_expand_identity.npy
new file mode 100644
index 000000000..b2adf81de
Binary files /dev/null and b/testdata/dnn/onnx/data/input_expand_identity.npy differ
diff --git a/testdata/dnn/onnx/data/input_gru.npy b/testdata/dnn/onnx/data/input_gru.npy
new file mode 100644
index 000000000..d0a66a994
Binary files /dev/null and b/testdata/dnn/onnx/data/input_gru.npy differ
diff --git a/testdata/dnn/onnx/data/input_gru_bi.npy b/testdata/dnn/onnx/data/input_gru_bi.npy
new file mode 100644
index 000000000..54a762197
Binary files /dev/null and b/testdata/dnn/onnx/data/input_gru_bi.npy differ
diff --git a/testdata/dnn/onnx/data/input_hidden_lstm.npy b/testdata/dnn/onnx/data/input_hidden_lstm.npy
new file mode 100644
index 000000000..d0a66a994
Binary files /dev/null and b/testdata/dnn/onnx/data/input_hidden_lstm.npy differ
diff --git a/testdata/dnn/onnx/data/input_hidden_lstm_bi.npy b/testdata/dnn/onnx/data/input_hidden_lstm_bi.npy
new file mode 100644
index 000000000..406844163
Binary files /dev/null and b/testdata/dnn/onnx/data/input_hidden_lstm_bi.npy differ
diff --git a/testdata/dnn/onnx/data/input_lstm_cntk_tanh.pb b/testdata/dnn/onnx/data/input_lstm_cntk_tanh.pb
new file mode 100644
index 000000000..3523f13bb
Binary files /dev/null and b/testdata/dnn/onnx/data/input_lstm_cntk_tanh.pb differ
diff --git a/testdata/dnn/onnx/data/input_min_0.npy b/testdata/dnn/onnx/data/input_min_0.npy
new file mode 100644
index 000000000..2fcd58621
Binary files /dev/null and b/testdata/dnn/onnx/data/input_min_0.npy differ
diff --git a/testdata/dnn/onnx/data/input_min_1.npy b/testdata/dnn/onnx/data/input_min_1.npy
new file mode 100644
index 000000000..f0d172b19
Binary files /dev/null and b/testdata/dnn/onnx/data/input_min_1.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_avgpool.npy b/testdata/dnn/onnx/data/input_quantized_avgpool.npy
new file mode 100644
index 000000000..771c38879
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_avgpool.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_concat.npy b/testdata/dnn/onnx/data/input_quantized_concat.npy
new file mode 100644
index 000000000..306862a46
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_concat.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_concat_const_blob.npy b/testdata/dnn/onnx/data/input_quantized_concat_const_blob.npy
new file mode 100644
index 000000000..6801046a7
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_concat_const_blob.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_constant.npy b/testdata/dnn/onnx/data/input_quantized_constant.npy
new file mode 100644
index 000000000..ea7157617
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_constant.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_conv_int8_weights.npy b/testdata/dnn/onnx/data/input_quantized_conv_int8_weights.npy
new file mode 100644
index 000000000..df711356e
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_conv_int8_weights.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_conv_per_channel_weights.npy b/testdata/dnn/onnx/data/input_quantized_conv_per_channel_weights.npy
new file mode 100644
index 000000000..d659c0821
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_conv_per_channel_weights.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_conv_uint8_weights.npy b/testdata/dnn/onnx/data/input_quantized_conv_uint8_weights.npy
new file mode 100644
index 000000000..ff2418d7a
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_conv_uint8_weights.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_eltwise.npy b/testdata/dnn/onnx/data/input_quantized_eltwise.npy
new file mode 100644
index 000000000..1e29c175b
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_eltwise.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_eltwise_broadcast.npy b/testdata/dnn/onnx/data/input_quantized_eltwise_broadcast.npy
new file mode 100644
index 000000000..2bebff940
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_eltwise_broadcast.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_eltwise_scalar.npy b/testdata/dnn/onnx/data/input_quantized_eltwise_scalar.npy
new file mode 100644
index 000000000..f1433df15
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_eltwise_scalar.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_leaky_relu.npy b/testdata/dnn/onnx/data/input_quantized_leaky_relu.npy
new file mode 100644
index 000000000..d08e6220f
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_leaky_relu.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_matmul_int8_weights.npy b/testdata/dnn/onnx/data/input_quantized_matmul_int8_weights.npy
new file mode 100644
index 000000000..604fa66ad
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_matmul_int8_weights.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_matmul_per_channel_weights.npy b/testdata/dnn/onnx/data/input_quantized_matmul_per_channel_weights.npy
new file mode 100644
index 000000000..7edb2404f
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_matmul_per_channel_weights.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_matmul_uint8_weights.npy b/testdata/dnn/onnx/data/input_quantized_matmul_uint8_weights.npy
new file mode 100644
index 000000000..02157d155
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_matmul_uint8_weights.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_matmul_variable_inputs.npy b/testdata/dnn/onnx/data/input_quantized_matmul_variable_inputs.npy
new file mode 100644
index 000000000..c96ecefc7
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_matmul_variable_inputs.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_maxpool.npy b/testdata/dnn/onnx/data/input_quantized_maxpool.npy
new file mode 100644
index 000000000..ffa4240a3
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_maxpool.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_padding.npy b/testdata/dnn/onnx/data/input_quantized_padding.npy
new file mode 100644
index 000000000..f7d0e81d4
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_padding.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_reshape.npy b/testdata/dnn/onnx/data/input_quantized_reshape.npy
new file mode 100644
index 000000000..a04bdbfdc
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_reshape.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_resize_bilinear.npy b/testdata/dnn/onnx/data/input_quantized_resize_bilinear.npy
new file mode 100644
index 000000000..2c73a1931
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_resize_bilinear.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_resize_bilinear_align.npy b/testdata/dnn/onnx/data/input_quantized_resize_bilinear_align.npy
new file mode 100644
index 000000000..d7d3dac3b
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_resize_bilinear_align.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_resize_nearest.npy b/testdata/dnn/onnx/data/input_quantized_resize_nearest.npy
new file mode 100644
index 000000000..eac96b993
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_resize_nearest.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_sigmoid.npy b/testdata/dnn/onnx/data/input_quantized_sigmoid.npy
new file mode 100644
index 000000000..0781874bf
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_sigmoid.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_split.npy b/testdata/dnn/onnx/data/input_quantized_split.npy
new file mode 100644
index 000000000..a6d482688
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_split.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_squeeze.npy b/testdata/dnn/onnx/data/input_quantized_squeeze.npy
new file mode 100644
index 000000000..6782bb9b9
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_squeeze.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_transpose.npy b/testdata/dnn/onnx/data/input_quantized_transpose.npy
new file mode 100644
index 000000000..2a9d7fba8
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_transpose.npy differ
diff --git a/testdata/dnn/onnx/data/input_quantized_unsqueeze.npy b/testdata/dnn/onnx/data/input_quantized_unsqueeze.npy
new file mode 100644
index 000000000..c79508e97
Binary files /dev/null and b/testdata/dnn/onnx/data/input_quantized_unsqueeze.npy differ
diff --git a/testdata/dnn/onnx/data/input_reduceL2_subgraph2_2.npy b/testdata/dnn/onnx/data/input_reduceL2_subgraph2_2.npy
new file mode 100644
index 000000000..a69a25a2a
Binary files /dev/null and b/testdata/dnn/onnx/data/input_reduceL2_subgraph2_2.npy differ
diff --git a/testdata/dnn/onnx/data/input_resize_humanseg.npy b/testdata/dnn/onnx/data/input_resize_humanseg.npy
new file mode 100644
index 000000000..21953e023
Binary files /dev/null and b/testdata/dnn/onnx/data/input_resize_humanseg.npy differ
diff --git a/testdata/dnn/onnx/data/input_scale_broadcast_0.npy b/testdata/dnn/onnx/data/input_scale_broadcast_0.npy
new file mode 100644
index 000000000..84e55f5f6
Binary files /dev/null and b/testdata/dnn/onnx/data/input_scale_broadcast_0.npy differ
diff --git a/testdata/dnn/onnx/data/input_scale_broadcast_1.npy b/testdata/dnn/onnx/data/input_scale_broadcast_1.npy
new file mode 100644
index 000000000..b08129156
Binary files /dev/null and b/testdata/dnn/onnx/data/input_scale_broadcast_1.npy differ
diff --git a/testdata/dnn/onnx/data/input_scale_broadcast_2.npy b/testdata/dnn/onnx/data/input_scale_broadcast_2.npy
new file mode 100644
index 000000000..95938facb
Binary files /dev/null and b/testdata/dnn/onnx/data/input_scale_broadcast_2.npy differ
diff --git a/testdata/dnn/onnx/data/input_scale_broadcast_mid_0.npy b/testdata/dnn/onnx/data/input_scale_broadcast_mid_0.npy
new file mode 100644
index 000000000..59fe767af
Binary files /dev/null and b/testdata/dnn/onnx/data/input_scale_broadcast_mid_0.npy differ
diff --git a/testdata/dnn/onnx/data/input_scale_broadcast_mid_1.npy b/testdata/dnn/onnx/data/input_scale_broadcast_mid_1.npy
new file mode 100644
index 000000000..4175e2dc7
Binary files /dev/null and b/testdata/dnn/onnx/data/input_scale_broadcast_mid_1.npy differ
diff --git a/testdata/dnn/onnx/data/input_slice_neg_starts.npy b/testdata/dnn/onnx/data/input_slice_neg_starts.npy
new file mode 100644
index 000000000..796895eaf
Binary files /dev/null and b/testdata/dnn/onnx/data/input_slice_neg_starts.npy differ
diff --git a/testdata/dnn/onnx/data/input_split_neg_axis.npy b/testdata/dnn/onnx/data/input_split_neg_axis.npy
new file mode 100644
index 000000000..7aa3924e7
Binary files /dev/null and b/testdata/dnn/onnx/data/input_split_neg_axis.npy differ
diff --git a/testdata/dnn/onnx/data/input_split_sizes.npy b/testdata/dnn/onnx/data/input_split_sizes.npy
new file mode 100644
index 000000000..3cffa7442
Binary files /dev/null and b/testdata/dnn/onnx/data/input_split_sizes.npy differ
diff --git a/testdata/dnn/onnx/data/input_sub_from_const1.npy b/testdata/dnn/onnx/data/input_sub_from_const1.npy
new file mode 100644
index 000000000..7ebf75d8a
Binary files /dev/null and b/testdata/dnn/onnx/data/input_sub_from_const1.npy differ
diff --git a/testdata/dnn/onnx/data/input_sub_from_const_broadcast.npy b/testdata/dnn/onnx/data/input_sub_from_const_broadcast.npy
new file mode 100644
index 000000000..5f34483a0
Binary files /dev/null and b/testdata/dnn/onnx/data/input_sub_from_const_broadcast.npy differ
diff --git a/testdata/dnn/onnx/data/input_sub_from_const_eltwise.npy b/testdata/dnn/onnx/data/input_sub_from_const_eltwise.npy
new file mode 100644
index 000000000..38408b6ed
Binary files /dev/null and b/testdata/dnn/onnx/data/input_sub_from_const_eltwise.npy differ
diff --git a/testdata/dnn/onnx/data/input_unsqueeze_opset_13.npy b/testdata/dnn/onnx/data/input_unsqueeze_opset_13.npy
new file mode 100644
index 000000000..18f34a6f9
Binary files /dev/null and b/testdata/dnn/onnx/data/input_unsqueeze_opset_13.npy differ
diff --git a/testdata/dnn/onnx/data/output_PReLU_slope.npy b/testdata/dnn/onnx/data/output_PReLU_slope.npy
new file mode 100644
index 000000000..e8d0d5d20
Binary files /dev/null and b/testdata/dnn/onnx/data/output_PReLU_slope.npy differ
diff --git a/testdata/dnn/onnx/data/output_concat_const_blobs.npy b/testdata/dnn/onnx/data/output_concat_const_blobs.npy
new file mode 100644
index 000000000..3840e6287
Binary files /dev/null and b/testdata/dnn/onnx/data/output_concat_const_blobs.npy differ
diff --git a/testdata/dnn/onnx/data/output_conv_asymmetric_pads.npy b/testdata/dnn/onnx/data/output_conv_asymmetric_pads.npy
new file mode 100644
index 000000000..d754cf1ff
Binary files /dev/null and b/testdata/dnn/onnx/data/output_conv_asymmetric_pads.npy differ
diff --git a/testdata/dnn/onnx/data/output_cumsum_1d_exclusive_1.npy b/testdata/dnn/onnx/data/output_cumsum_1d_exclusive_1.npy
new file mode 100644
index 000000000..bdae94cbc
Binary files /dev/null and b/testdata/dnn/onnx/data/output_cumsum_1d_exclusive_1.npy differ
diff --git a/testdata/dnn/onnx/data/output_cumsum_1d_exclusive_1_reverse.npy b/testdata/dnn/onnx/data/output_cumsum_1d_exclusive_1_reverse.npy
new file mode 100644
index 000000000..762379f8b
Binary files /dev/null and b/testdata/dnn/onnx/data/output_cumsum_1d_exclusive_1_reverse.npy differ
diff --git a/testdata/dnn/onnx/data/output_cumsum_1d_reverse.npy b/testdata/dnn/onnx/data/output_cumsum_1d_reverse.npy
new file mode 100644
index 000000000..c567ed9d4
Binary files /dev/null and b/testdata/dnn/onnx/data/output_cumsum_1d_reverse.npy differ
diff --git a/testdata/dnn/onnx/data/output_cumsum_2d_dim_1.npy b/testdata/dnn/onnx/data/output_cumsum_2d_dim_1.npy
new file mode 100644
index 000000000..c4d9bd1ac
Binary files /dev/null and b/testdata/dnn/onnx/data/output_cumsum_2d_dim_1.npy differ
diff --git a/testdata/dnn/onnx/data/output_cumsum_3d_dim_2.npy b/testdata/dnn/onnx/data/output_cumsum_3d_dim_2.npy
new file mode 100644
index 000000000..105115228
Binary files /dev/null and b/testdata/dnn/onnx/data/output_cumsum_3d_dim_2.npy differ
diff --git a/testdata/dnn/onnx/data/output_dynamic_batch.npy b/testdata/dnn/onnx/data/output_dynamic_batch.npy
new file mode 100644
index 000000000..4a69fa177
Binary files /dev/null and b/testdata/dnn/onnx/data/output_dynamic_batch.npy differ
diff --git a/testdata/dnn/onnx/data/output_expand.npy b/testdata/dnn/onnx/data/output_expand.npy
new file mode 100644
index 000000000..dd95e515f
Binary files /dev/null and b/testdata/dnn/onnx/data/output_expand.npy differ
diff --git a/testdata/dnn/onnx/data/output_expand_identity.npy b/testdata/dnn/onnx/data/output_expand_identity.npy
new file mode 100644
index 000000000..b2adf81de
Binary files /dev/null and b/testdata/dnn/onnx/data/output_expand_identity.npy differ
diff --git a/testdata/dnn/onnx/data/output_gru.npy b/testdata/dnn/onnx/data/output_gru.npy
new file mode 100644
index 000000000..5058a0b39
Binary files /dev/null and b/testdata/dnn/onnx/data/output_gru.npy differ
diff --git a/testdata/dnn/onnx/data/output_gru_bi.npy b/testdata/dnn/onnx/data/output_gru_bi.npy
new file mode 100644
index 000000000..949bf112c
Binary files /dev/null and b/testdata/dnn/onnx/data/output_gru_bi.npy differ
diff --git a/testdata/dnn/onnx/data/output_hidden_lstm.npy b/testdata/dnn/onnx/data/output_hidden_lstm.npy
new file mode 100644
index 000000000..1de0fa377
Binary files /dev/null and b/testdata/dnn/onnx/data/output_hidden_lstm.npy differ
diff --git a/testdata/dnn/onnx/data/output_hidden_lstm_bi.npy b/testdata/dnn/onnx/data/output_hidden_lstm_bi.npy
new file mode 100644
index 000000000..1b3ebdc3d
Binary files /dev/null and b/testdata/dnn/onnx/data/output_hidden_lstm_bi.npy differ
diff --git a/testdata/dnn/onnx/data/output_lstm_cntk_tanh.pb b/testdata/dnn/onnx/data/output_lstm_cntk_tanh.pb
new file mode 100644
index 000000000..02fd903dc
--- /dev/null
+++ b/testdata/dnn/onnx/data/output_lstm_cntk_tanh.pb
@@ -0,0 +1,2 @@
+BSplice1349_Output_0Jx�3=f�=%G�s!�=�l�߽Խ�=A�={ٽ�h>�te�)�*�R��<'��=b݉�O[�=���:
com.microsoft
+�
+2_scale
+2_zero_point
+input_quantized
+input_scale
+input_zero_point
+1_quantized
+1_scale
+1_zero_point2_quantizedConcat_1_quant"
QLinearConcat*
+axis�:
com.microsoft
+M
+2_quantized
+2_scale
+2_zero_point22_DequantizeLinear"DequantizeLineartorch-jit-export**,B1_zero_point*"r�;B1_scale**�Binput_zero_point*"��;Binput_scale**�B2_zero_point*"��;B2_scaleZ
+input
+
+
+
+
+b
+2
+
+
+
+
+j
+1
+
+
+
+
+BB
+com.microsoft.experimentalB
+ai.onnx.preview.trainingB
+com.microsoft.nchwcB
+com.microsoft.mlfeaturizersB
+
+ai.onnx.mlB
+
com.microsoftB
+ai.onnx.training
\ No newline at end of file
diff --git a/testdata/dnn/onnx/models/quantized_concat_const_blob.onnx b/testdata/dnn/onnx/models/quantized_concat_const_blob.onnx
new file mode 100644
index 000000000..30d0e0d45
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_concat_const_blob.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_constant.onnx b/testdata/dnn/onnx/models/quantized_constant.onnx
new file mode 100644
index 000000000..1374018eb
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_constant.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_conv_int8_weights.onnx b/testdata/dnn/onnx/models/quantized_conv_int8_weights.onnx
new file mode 100644
index 000000000..dec41d14e
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_conv_int8_weights.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_conv_per_channel_weights.onnx b/testdata/dnn/onnx/models/quantized_conv_per_channel_weights.onnx
new file mode 100644
index 000000000..9104cdad2
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_conv_per_channel_weights.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_conv_uint8_weights.onnx b/testdata/dnn/onnx/models/quantized_conv_uint8_weights.onnx
new file mode 100644
index 000000000..fe684c515
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_conv_uint8_weights.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_eltwise.onnx b/testdata/dnn/onnx/models/quantized_eltwise.onnx
new file mode 100644
index 000000000..481569218
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_eltwise.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_eltwise_broadcast.onnx b/testdata/dnn/onnx/models/quantized_eltwise_broadcast.onnx
new file mode 100644
index 000000000..140725064
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_eltwise_broadcast.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_eltwise_scalar.onnx b/testdata/dnn/onnx/models/quantized_eltwise_scalar.onnx
new file mode 100644
index 000000000..df95d71ae
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_eltwise_scalar.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_leaky_relu.onnx b/testdata/dnn/onnx/models/quantized_leaky_relu.onnx
new file mode 100644
index 000000000..441988777
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_leaky_relu.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_matmul_int8_weights.onnx b/testdata/dnn/onnx/models/quantized_matmul_int8_weights.onnx
new file mode 100644
index 000000000..92b891cf1
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_matmul_int8_weights.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_matmul_per_channel_weights.onnx b/testdata/dnn/onnx/models/quantized_matmul_per_channel_weights.onnx
new file mode 100644
index 000000000..1f183f3fc
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_matmul_per_channel_weights.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_matmul_uint8_weights.onnx b/testdata/dnn/onnx/models/quantized_matmul_uint8_weights.onnx
new file mode 100644
index 000000000..2bd3cd7c0
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_matmul_uint8_weights.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_matmul_variable_inputs.onnx b/testdata/dnn/onnx/models/quantized_matmul_variable_inputs.onnx
new file mode 100644
index 000000000..beb7d24ce
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_matmul_variable_inputs.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_maxpool.onnx b/testdata/dnn/onnx/models/quantized_maxpool.onnx
new file mode 100644
index 000000000..b00558350
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_maxpool.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_padding.onnx b/testdata/dnn/onnx/models/quantized_padding.onnx
new file mode 100644
index 000000000..befd2cf33
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_padding.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_reshape.onnx b/testdata/dnn/onnx/models/quantized_reshape.onnx
new file mode 100644
index 000000000..eba3ea222
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_reshape.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_resize_bilinear.onnx b/testdata/dnn/onnx/models/quantized_resize_bilinear.onnx
new file mode 100644
index 000000000..ae7eefc72
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_resize_bilinear.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_resize_bilinear_align.onnx b/testdata/dnn/onnx/models/quantized_resize_bilinear_align.onnx
new file mode 100644
index 000000000..b8e41008b
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_resize_bilinear_align.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_resize_nearest.onnx b/testdata/dnn/onnx/models/quantized_resize_nearest.onnx
new file mode 100644
index 000000000..b4a346ef4
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_resize_nearest.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_sigmoid.onnx b/testdata/dnn/onnx/models/quantized_sigmoid.onnx
new file mode 100644
index 000000000..f423c731f
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_sigmoid.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_split.onnx b/testdata/dnn/onnx/models/quantized_split.onnx
new file mode 100644
index 000000000..b57b436cf
--- /dev/null
+++ b/testdata/dnn/onnx/models/quantized_split.onnx
@@ -0,0 +1,89 @@
+
onnx.quantize0.1.0:�
+l
+tensor.1
+tensor.1_scale
+tensor.1_zero_pointtensor.1_quantizedtensor.1_QuantizeLinear"QuantizeLinear
+_
+tensor.1_quantized
+1quantized
+2quantized
Split_0_quant"Split*
+axis�*
+split@@�
+Z
+
+1quantized
+tensor.1_scale
+tensor.1_zero_point11_DequantizeLinear"DequantizeLinear
+W
+
+2quantized
+3quantized
+4quantized
Split_1_quant"Split*
+axis�*
+split@@�
+Z
+
+3quantized
+tensor.1_scale
+tensor.1_zero_point33_DequantizeLinear"DequantizeLinear
+Z
+
+4quantized
+tensor.1_scale
+tensor.1_zero_point44_DequantizeLinear"DequantizeLinear
+
+3
+45Max_2"Max
+
+1
+56Max_3"Maxtorch-jit-export**�Btensor.1_zero_point*"V��;Btensor.1_scaleZ"
+tensor.1
+
+
+
+
+b
+6
+
+
+
+
+j
+1
+
+
+
+
+j
+2
+
+
+
+
+j
+3
+
+
+
+
+j
+4
+
+
+
+
+j
+5
+
+
+
+
+BB
+com.microsoft.experimentalB
+ai.onnx.preview.trainingB
+com.microsoft.nchwcB
+com.microsoft.mlfeaturizersB
+
+ai.onnx.mlB
+
com.microsoftB
+ai.onnx.training
\ No newline at end of file
diff --git a/testdata/dnn/onnx/models/quantized_squeeze.onnx b/testdata/dnn/onnx/models/quantized_squeeze.onnx
new file mode 100644
index 000000000..3e5b7fa11
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_squeeze.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_transpose.onnx b/testdata/dnn/onnx/models/quantized_transpose.onnx
new file mode 100644
index 000000000..99ced695c
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_transpose.onnx differ
diff --git a/testdata/dnn/onnx/models/quantized_unsqueeze.onnx b/testdata/dnn/onnx/models/quantized_unsqueeze.onnx
new file mode 100644
index 000000000..9db72c622
Binary files /dev/null and b/testdata/dnn/onnx/models/quantized_unsqueeze.onnx differ
diff --git a/testdata/dnn/onnx/models/reduceL2_subgraph2_2.onnx b/testdata/dnn/onnx/models/reduceL2_subgraph2_2.onnx
new file mode 100644
index 000000000..141301bb4
Binary files /dev/null and b/testdata/dnn/onnx/models/reduceL2_subgraph2_2.onnx differ
diff --git a/testdata/dnn/onnx/models/resize_humanseg.onnx b/testdata/dnn/onnx/models/resize_humanseg.onnx
new file mode 100644
index 000000000..061aa65fa
Binary files /dev/null and b/testdata/dnn/onnx/models/resize_humanseg.onnx differ
diff --git a/testdata/dnn/onnx/models/scale_broadcast.onnx b/testdata/dnn/onnx/models/scale_broadcast.onnx
new file mode 100644
index 000000000..c45a4f5fa
--- /dev/null
+++ b/testdata/dnn/onnx/models/scale_broadcast.onnx
@@ -0,0 +1,30 @@
+pytorch1.9:�
+
+0
+13Mul_0"Mul
+
+3
+24Mul_1"Multorch-jit-exportZ
+0
+
+
+
+
+Z
+1
+
+
+
+Z
+2
+
+
+
+
+b
+4
+
+
+
+
+B
\ No newline at end of file
diff --git a/testdata/dnn/onnx/models/scale_broadcast_mid.onnx b/testdata/dnn/onnx/models/scale_broadcast_mid.onnx
new file mode 100644
index 000000000..766bdb73e
--- /dev/null
+++ b/testdata/dnn/onnx/models/scale_broadcast_mid.onnx
@@ -0,0 +1,19 @@
+pytorch1.9:t
+
+0
+12Mul_0"Multorch-jit-exportZ
+0
+
+
+
+Z
+1
+
+
+
+b
+2
+
+
+
+B
\ No newline at end of file
diff --git a/testdata/dnn/onnx/models/slice_neg_starts.onnx b/testdata/dnn/onnx/models/slice_neg_starts.onnx
new file mode 100644
index 000000000..07c0c9966
Binary files /dev/null and b/testdata/dnn/onnx/models/slice_neg_starts.onnx differ
diff --git a/testdata/dnn/onnx/models/split_neg_axis.onnx b/testdata/dnn/onnx/models/split_neg_axis.onnx
new file mode 100644
index 000000000..b2b5fceb7
--- /dev/null
+++ b/testdata/dnn/onnx/models/split_neg_axis.onnx
@@ -0,0 +1,22 @@
+pytorch1.9:�
+S
+tensor12345Split_0"Split*
+axis����������*
+split@@@@@�
+1
+1
+2
+3
+4
+56Concat_1"Concat*
+axis�torch-jit-exportZ
+tensor
+
+
+
+b
+6
+
+
+
+B
\ No newline at end of file
diff --git a/testdata/dnn/onnx/models/split_sizes.onnx b/testdata/dnn/onnx/models/split_sizes.onnx
new file mode 100644
index 000000000..58f867693
Binary files /dev/null and b/testdata/dnn/onnx/models/split_sizes.onnx differ
diff --git a/testdata/dnn/onnx/models/sub_from_const1.onnx b/testdata/dnn/onnx/models/sub_from_const1.onnx
new file mode 100644
index 000000000..4809de5f2
Binary files /dev/null and b/testdata/dnn/onnx/models/sub_from_const1.onnx differ
diff --git a/testdata/dnn/onnx/models/sub_from_const_broadcast.onnx b/testdata/dnn/onnx/models/sub_from_const_broadcast.onnx
new file mode 100644
index 000000000..feabfa849
--- /dev/null
+++ b/testdata/dnn/onnx/models/sub_from_const_broadcast.onnx
@@ -0,0 +1,15 @@
+pytorch1.9:�
+;1
+Constant_0"Constant*
+value*JW@�@-�oy��
+
+1
+02Sub_1"Subtorch-jit-exportZ
+0
+
+
+b
+2
+
+
+B
\ No newline at end of file
diff --git a/testdata/dnn/onnx/models/sub_from_const_eltwise.onnx b/testdata/dnn/onnx/models/sub_from_const_eltwise.onnx
new file mode 100644
index 000000000..feb661f7c
--- /dev/null
+++ b/testdata/dnn/onnx/models/sub_from_const_eltwise.onnx
@@ -0,0 +1,19 @@
+pytorch1.9:�
+�1
+Constant_0"Constant*x
+value*lJ`�)h����Vg>]D���t8���
��/�0?F��ko]��3���uI?�X�=.&����,��[W�����>a��Z]��ǒ�?�2V־�݂��
+
+1
+02Sub_1"Subtorch-jit-exportZ
+0
+
+
+
+
+b
+2
+
+
+
+
+B
\ No newline at end of file
diff --git a/testdata/dnn/onnx/models/unsqueeze_opset_13.onnx b/testdata/dnn/onnx/models/unsqueeze_opset_13.onnx
new file mode 100644
index 000000000..680413a43
Binary files /dev/null and b/testdata/dnn/onnx/models/unsqueeze_opset_13.onnx differ
diff --git a/testdata/dnn/onnx/readme.lstm_cntk_tanh.txt b/testdata/dnn/onnx/readme.lstm_cntk_tanh.txt
new file mode 100644
index 000000000..453da22a5
--- /dev/null
+++ b/testdata/dnn/onnx/readme.lstm_cntk_tanh.txt
@@ -0,0 +1,3 @@
+Original location:
+- https://github.com/microsoft/onnxruntime/blob/master/onnxruntime/test/testdata/CNTK/test_LSTM.tanh.bidirectional/model.onnx
+- https://github.com/microsoft/onnxruntime/tree/master/onnxruntime/test/testdata/CNTK/test_LSTM.tanh.bidirectional/test_data_set_0
diff --git a/testdata/dnn/soft_nms_reference.yml b/testdata/dnn/soft_nms_reference.yml
new file mode 100644
index 000000000..19c3aff4f
--- /dev/null
+++ b/testdata/dnn/soft_nms_reference.yml
@@ -0,0 +1,31 @@
+%YAML:1.0
+---
+boxes: [ 409, 55, 82, 25, 157, 71, 65, 25, 427, 25, 35, 23, 131, 133,
+ 322, 94, 403, 55, 80, 24, 155, 72, 66, 22, 416, 28, 48, 24, 50, 106,
+ 485, 155, 78, 286, 460, 64, 176, 76, 64, 17, 0, 0, 598, 346, 36, 78,
+ 58, 46, 24, 6, 258, 164, 98, 189, 423, 145, 407, 56, 81, 25, 159, 69,
+ 62, 25, 431, 28, 36, 21, 123, 121, 336, 113, 41, 51, 181, 72, 430,
+ 27, 36, 21, 399, 49, 86, 30, 155, 72, 61, 24, 84, 102, 426, 166, 128,
+ 0, 336, 347, 127, 251, 337, 101, 390, 22, 78, 39, 432, 26, 38, 23,
+ 156, 72, 61, 23, 414, 55, 79, 22, 215, 135, 165, 88, 276, 166, 84,
+ 48, 301, 22, 81, 45, 402, 59, 77, 28, 521, 11, 76, 35, 12, 73, 48,
+ 54, 193, 163, 197, 36, 146, 127, 127, 49, 44, 75, 60, 49 ]
+probs: [ 1., 1., 9.50373888e-01, 2.62993928e-02, 9.99991059e-01,
+ 9.97794747e-01, 1.65874109e-01, 5.08980490e-02, 2.25577131e-02,
+ 2.18296256e-02, 1.93440001e-02, 1.31233213e-02, 1.28434300e-02,
+ 1.08395228e-02, 1., 9.99996901e-01, 9.98169780e-01, 3.46690901e-02,
+ 1.00121163e-02, 9.99895453e-01, 9.68177438e-01, 9.65382040e-01,
+ 6.64785877e-02, 2.35476252e-02, 1.25701502e-02, 1.25500374e-02, 1.,
+ 1., 9.99995470e-01, 2.12208077e-01, 3.39371487e-02, 2.36911718e-02,
+ 1.37866093e-02, 1.24980714e-02, 1.21721951e-02, 1.16886804e-02,
+ 1.12007223e-02, 1.11661423e-02 ]
+indices: [ 0, 1, 26, 20, 2, 15, 28, 16, 21, 29, 14, 19, 5, 4, 22, 27, 6,
+ 30, 7, 31, 8, 17, 23, 11, 33, 12, 34, 36 ]
+updated_scores: [ 1.000000000000000, 1.000000000000000, 1.000000000000000,
+ 0.634520173072815, 0.624747872352600, 0.514399647712708, 0.376939475536346,
+ 0.329439252614975, 0.283865988254547, 0.212208077311516, 0.190269082784653,
+ 0.146278440952301, 0.118331797420979, 0.095820419490337, 0.063734129071236,
+ 0.053496349602938, 0.050462152808905, 0.031316649168730, 0.024680756032467,
+ 0.023691171780229, 0.022557713091373, 0.017200922593474, 0.014761860482395,
+ 0.013121815398335, 0.012498071417212, 0.011637533083558, 0.011319587938488,
+ 0.010369089432061 ]
diff --git a/testdata/dnn/tensorflow/bias_add_1_in.npy b/testdata/dnn/tensorflow/bias_add_1_in.npy
new file mode 100644
index 000000000..2e749acdd
Binary files /dev/null and b/testdata/dnn/tensorflow/bias_add_1_in.npy differ
diff --git a/testdata/dnn/tensorflow/bias_add_1_net.pb b/testdata/dnn/tensorflow/bias_add_1_net.pb
new file mode 100644
index 000000000..517a5a559
Binary files /dev/null and b/testdata/dnn/tensorflow/bias_add_1_net.pb differ
diff --git a/testdata/dnn/tensorflow/bias_add_1_out.npy b/testdata/dnn/tensorflow/bias_add_1_out.npy
new file mode 100644
index 000000000..e0fcb7290
Binary files /dev/null and b/testdata/dnn/tensorflow/bias_add_1_out.npy differ
diff --git a/testdata/dnn/tensorflow/broken_layer_net.pb b/testdata/dnn/tensorflow/broken_layer_net.pb
new file mode 100644
index 000000000..a962c259d
--- /dev/null
+++ b/testdata/dnn/tensorflow/broken_layer_net.pb
@@ -0,0 +1,18 @@
+
+6
+xPlaceholder*
+dtype0*
+shape:
+8
+x_1Placeholder*
+dtype0*
+shape:
+3
+ model_24/tf.math.multiply_24/MulMulx*
+T0
+W
+ model_24/tf.math.multiply_25/MulMul model_24/tf.math.multiply_24/Mulx_1*
+T0
+?
+IdentityIdentity model_24/tf.math.multiply_25/Mul*
+T0"�
\ No newline at end of file
diff --git a/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nchw_in.npy b/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nchw_in.npy
new file mode 100644
index 000000000..3dc59dbb9
Binary files /dev/null and b/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nchw_in.npy differ
diff --git a/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nchw_net.pb b/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nchw_net.pb
new file mode 100644
index 000000000..4fb64436a
Binary files /dev/null and b/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nchw_net.pb differ
diff --git a/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nchw_out.npy b/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nchw_out.npy
new file mode 100644
index 000000000..822c21fea
Binary files /dev/null and b/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nchw_out.npy differ
diff --git a/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nhwc_in.npy b/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nhwc_in.npy
new file mode 100644
index 000000000..a67675944
Binary files /dev/null and b/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nhwc_in.npy differ
diff --git a/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nhwc_net.pb b/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nhwc_net.pb
new file mode 100644
index 000000000..14fce4876
Binary files /dev/null and b/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nhwc_net.pb differ
diff --git a/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nhwc_out.npy b/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nhwc_out.npy
new file mode 100644
index 000000000..11bedf41e
Binary files /dev/null and b/testdata/dnn/tensorflow/conv2d_asymmetric_pads_nhwc_out.npy differ
diff --git a/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nchw_in.npy b/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nchw_in.npy
new file mode 100644
index 000000000..7f7a1f372
Binary files /dev/null and b/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nchw_in.npy differ
diff --git a/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nchw_net.pb b/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nchw_net.pb
new file mode 100644
index 000000000..533cc309a
Binary files /dev/null and b/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nchw_net.pb differ
diff --git a/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nchw_out.npy b/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nchw_out.npy
new file mode 100644
index 000000000..9b884a818
Binary files /dev/null and b/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nchw_out.npy differ
diff --git a/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nhwc_in.npy b/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nhwc_in.npy
new file mode 100644
index 000000000..f2b9746e6
Binary files /dev/null and b/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nhwc_in.npy differ
diff --git a/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nhwc_net.pb b/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nhwc_net.pb
new file mode 100644
index 000000000..f2716d484
Binary files /dev/null and b/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nhwc_net.pb differ
diff --git a/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nhwc_out.npy b/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nhwc_out.npy
new file mode 100644
index 000000000..24246981d
Binary files /dev/null and b/testdata/dnn/tensorflow/conv2d_backprop_input_asymmetric_pads_nhwc_out.npy differ
diff --git a/testdata/dnn/tensorflow/expand_dims_1_in.npy b/testdata/dnn/tensorflow/expand_dims_1_in.npy
new file mode 100644
index 000000000..63d6f8aab
Binary files /dev/null and b/testdata/dnn/tensorflow/expand_dims_1_in.npy differ
diff --git a/testdata/dnn/tensorflow/expand_dims_1_net.pb b/testdata/dnn/tensorflow/expand_dims_1_net.pb
new file mode 100644
index 000000000..33f8309d5
Binary files /dev/null and b/testdata/dnn/tensorflow/expand_dims_1_net.pb differ
diff --git a/testdata/dnn/tensorflow/expand_dims_1_out.npy b/testdata/dnn/tensorflow/expand_dims_1_out.npy
new file mode 100644
index 000000000..088312056
Binary files /dev/null and b/testdata/dnn/tensorflow/expand_dims_1_out.npy differ
diff --git a/testdata/dnn/tensorflow/expand_dims_2_in.npy b/testdata/dnn/tensorflow/expand_dims_2_in.npy
new file mode 100644
index 000000000..ebd7fdd0a
Binary files /dev/null and b/testdata/dnn/tensorflow/expand_dims_2_in.npy differ
diff --git a/testdata/dnn/tensorflow/expand_dims_2_net.pb b/testdata/dnn/tensorflow/expand_dims_2_net.pb
new file mode 100644
index 000000000..4d7dfe9d8
Binary files /dev/null and b/testdata/dnn/tensorflow/expand_dims_2_net.pb differ
diff --git a/testdata/dnn/tensorflow/expand_dims_2_out.npy b/testdata/dnn/tensorflow/expand_dims_2_out.npy
new file mode 100644
index 000000000..a79044597
Binary files /dev/null and b/testdata/dnn/tensorflow/expand_dims_2_out.npy differ
diff --git a/testdata/dnn/tensorflow/generate_tf2_models.py b/testdata/dnn/tensorflow/generate_tf2_models.py
index c157ff185..0834ec85d 100644
--- a/testdata/dnn/tensorflow/generate_tf2_models.py
+++ b/testdata/dnn/tensorflow/generate_tf2_models.py
@@ -15,16 +15,16 @@ def gen_data(placeholder):
return np.random.standard_normal(shape).astype(placeholder.dtype.as_numpy_dtype())
-def writeBlob(data, name):
+def writeBlob(data, name, nchw = False):
try:
data = data.numpy()
except:
pass
- if data.ndim == 4:
+ if not nchw and data.ndim == 4:
# NHWC->NCHW
data = data.transpose(0, 3, 1, 2)
- elif data.ndim == 5:
+ elif not nchw and data.ndim == 5:
# NDHWC->NCDHW
data = data.transpose(0, 4, 1, 2, 3)
@@ -32,7 +32,7 @@ def writeBlob(data, name):
np.save(name + '.npy', data)
-def save(model, name, **kwargs):
+def save(model, name, nchw = False, **kwargs):
model.save(name)
assert(len(kwargs) == 1)
@@ -40,8 +40,8 @@ def save(model, name, **kwargs):
inputData = gen_data(next(iter(kwargs.values())))
outputData = model(inputData)
- writeBlob(inputData, name + '_in')
- writeBlob(outputData, name + '_out')
+ writeBlob(inputData, name + '_in', nchw)
+ writeBlob(outputData, name + '_out', nchw)
# Freeze model
loaded = tf.saved_model.load(name)
@@ -58,6 +58,15 @@ def save(model, name, **kwargs):
shutil.rmtree(name)
+def getGraph(model):
+ func = tf.function(lambda x: model(x))
+ func = func.get_concrete_function([tf.TensorSpec(model_input.shape, model_input.dtype) for model_input in model.inputs])
+
+ frozen_func = convert_variables_to_constants_v2(func)
+ return frozen_func.graph.as_graph_def()
+
+def saveBroken(graph, name):
+ tf.io.write_graph(graph_or_graph_def=graph, logdir='.', name=name + '_net.pb', as_text=False)
# Test cases ###################################################################
model = tf.keras.models.Sequential([
@@ -78,6 +87,67 @@ def save(model, name, **kwargs):
])
save(model, 'tf2_permute_nhwc_ncwh', average_pooling2d_input=tf.TensorSpec(shape=[None, 4, 6, 3], dtype=tf.float32))
################################################################################
+# TF 2.5.0 + python 3.6.13
+x_0 = tf.keras.layers.Input(batch_shape = (2, 3, 4))
+mid_0 = tf.expand_dims(x_0, axis=0)
+x_1 = tf.keras.layers.Input(batch_shape = (2, 3, 4))
+mid_1 = tf.reshape(x_1, [1, 2, 3, 4])
+out = tf.math.multiply(mid_0, mid_1)
+graph = getGraph(tf.keras.Model([x_0, x_1], out))
+graph.node[3].op = 'UnknownLayer' # replace ExpandDims op with womething that will never be implemented
+saveBroken(graph, 'not_implemented_layer')
+################################################################################
+# TF 2.5.0 + python 3.6.13
+x_0 = tf.keras.layers.Input(batch_shape = (1, 3, 4))
+x_1 = tf.keras.layers.Input(batch_shape = (1, 3, 4))
+mid = tf.math.multiply(x_0, x_1)
+out = tf.math.multiply(mid, x_1)
+graph = getGraph(tf.keras.Model([x_0, x_1], out))
+graph.node[2].input.pop() # break the connection in the graph
+saveBroken(graph, 'broken_layer')
+# TF 2.5.0 + python 3.6.13
+tf.keras.backend.set_image_data_format('channels_first')
+x = tf.keras.layers.Input(batch_shape = (1, 2, 3, 4), name='x')
+kernel = np.random.standard_normal((3, 3, 2, 3)).astype(np.float32)
+y = tf.nn.conv2d(x, tf.constant(kernel, dtype=tf.float32), data_format = 'NCHW', padding = [[0, 0], [0, 0], [2, 1], [2, 1]], strides = [1, 1, 3, 2])
+model = tf.keras.Model(x, y)
+save(model, 'conv2d_asymmetric_pads_nchw', True, x=tf.TensorSpec(shape=[1, 2, 3, 4], dtype=tf.float32))
+################################################################################
+# TF 2.5.0 + python 3.6.13
+tf.keras.backend.set_image_data_format('channels_last')
+x = tf.keras.layers.Input(batch_shape = (1, 3, 4, 2), name='x')
+kernel = np.random.standard_normal((3, 3, 2, 3)).astype(np.float32)
+y = tf.nn.conv2d(x, tf.constant(kernel, dtype=tf.float32), data_format = 'NHWC', padding = [[0, 0], [2, 1], [2, 1], [0, 0]], strides = [1, 3, 2, 1])
+model = tf.keras.Model(x, y)
+save(model, 'conv2d_asymmetric_pads_nhwc', False, x=tf.TensorSpec(shape=[1, 3, 4, 2], dtype=tf.float32))
+################################################################################
+# TF 2.5.0 + python 3.6.13
+tf.keras.backend.set_image_data_format('channels_first')
+x = tf.keras.layers.Input(batch_shape = (1, 1, 2, 3), name='x')
+y = tf.nn.max_pool(x, ksize=2, data_format = "NCHW", padding = [[0, 0], [0, 0], [1, 0], [1, 1]], strides = [1, 1, 3, 2])
+model = tf.keras.Model(x, y)
+save(model, 'max_pool2d_asymmetric_pads_nchw', True, x=tf.TensorSpec(shape=(1, 1, 2, 3), dtype=tf.float32))
+################################################################################
+# TF 2.5.0 + python 3.6.13
+tf.keras.backend.set_image_data_format('channels_last')
+x = tf.keras.layers.Input(batch_shape = (1, 2, 3, 1), name='x')
+y = tf.nn.max_pool(x, ksize=2, data_format = "NHWC", padding = [[0, 0], [1, 0], [1, 1], [0, 0]], strides = [1, 3, 2, 1])
+model = tf.keras.Model(x, y)
+save(model, 'max_pool2d_asymmetric_pads_nhwc', False, x=tf.TensorSpec(shape=(1, 2, 3, 1), dtype=tf.float32))
+################dd################################################################
+tf.keras.backend.set_image_data_format('channels_first')
+x = tf.keras.layers.Input(batch_shape = (1, 3, 2, 3), name='x')
+kernel = np.random.standard_normal((3, 3, 2, 3)).astype(np.float32)
+y = tf.compat.v1.nn.conv2d_backprop_input(input_sizes=tf.constant([1, 2, 3, 4]), filter=kernel, out_backprop=x, data_format = "NCHW", padding = [[0, 0], [0, 0], [2, 1], [2, 1]], strides = [1, 1, 3, 2])
+model = tf.keras.Model(x, y)
+save(model, 'conv2d_backprop_input_asymmetric_pads_nchw', True, x=tf.TensorSpec(shape=(1, 3, 2, 3), dtype=tf.float32))
+################################################################################
+tf.keras.backend.set_image_data_format('channels_last')
+x = tf.keras.layers.Input(batch_shape = (1, 2, 3, 3), name='x')
+kernel = np.random.standard_normal((3, 3, 2, 3)).astype(np.float32)
+y = tf.compat.v1.nn.conv2d_backprop_input(input_sizes=tf.constant([1, 3, 4, 2]), filter=kernel, out_backprop=x, data_format = "NHWC", padding = [[0, 0], [2, 1], [2, 1], [0, 0]], strides = [1, 3, 2, 1])
+model = tf.keras.Model(x, y)
+save(model, 'conv2d_backprop_input_asymmetric_pads_nhwc', False, x=tf.TensorSpec(shape=(1, 2, 3, 3), dtype=tf.float32))
# Uncomment to print the final graph.
# with tf.io.gfile.GFile('tf2_prelu_net.pb', 'rb') as f:
diff --git a/testdata/dnn/tensorflow/generate_tf_models.py b/testdata/dnn/tensorflow/generate_tf_models.py
index 8ef276956..36949356c 100644
--- a/testdata/dnn/tensorflow/generate_tf_models.py
+++ b/testdata/dnn/tensorflow/generate_tf_models.py
@@ -572,6 +572,22 @@ def keras_relu6(x):
save(inp, reduced, 'reduce_mean')
################################################################################
inp = tf.placeholder(tf.float32, [2, 3, 4, 5], 'input')
+reduced = tf.reduce_max(inp, axis=[1, 2], keepdims=True)
+save(inp, reduced, 'reduce_max')
+################################################################################
+inp = tf.placeholder(tf.float32, [1, 2, 2, 4], 'ReduceMax')
+out = tf.reduce_max([inp, inp * 2], axis=0)
+save(inp, out, 'max_pool_by_axis')
+################################################################################
+inp = tf.placeholder(tf.float32, [1, 4, 2, 3], 'input')
+out = tf.math.reduce_max(inp, axis=-1)
+save(inp, out, 'reduce_max_channel')
+################################################################################
+inp = tf.placeholder(tf.float32, [1, 4, 2, 3], 'input')
+out = tf.math.reduce_max(inp, axis=-1, keep_dims=True)
+save(inp, out, ('reduce_max_channel', 'keep_dims'), is_gen_data=False)
+################################################################################
+inp = tf.placeholder(tf.float32, [2, 3, 4, 5], 'input')
reduced = tf.reduce_sum(inp, axis=[1, 2], keepdims=True)
save(inp, reduced, 'reduce_sum')
################################################################################
@@ -1003,6 +1019,29 @@ def pad_depth(x, desired_channels):
input_down = tf.image.resize(conv, size=[hi, wi], method=0, name='resize_down')
save(inp, input_down, 'resize_bilinear_down')
################################################################################
+inp = tf.placeholder(tf.float32, [1, None, None, 3], 'input')
+biased = tf.nn.bias_add(inp, [1, 2, 3], data_format='NHWC')
+resized1 = tf.image.resize(biased, [5, 6])
+concat = tf.concat([resized1, biased], 3)
+# blob = np.random.standard_normal([1, 5, 6, 3]).astype(tf.float32.as_numpy_dtype())
+# writeBlob(blob, 'resize_concat_optimization_in')
+save(inp, concat, 'resize_concat_optimization', optimize=False, is_gen_data=False)
+################################################################################
+inp = tf.placeholder(tf.float32, [1, 2, 3, 4], 'input')
+sub = inp - 3.0
+sub = 4.0 + sub
+save(inp, sub, prefix + 'bias_add_1', optimize=False)
+################################################################################
+inp = tf.placeholder(tf.float32, [1, 2, 3, 4], 'input')
+expand_dim = inp + 1
+expand_dim = tf.expand_dims(expand_dim, -2)
+save(inp, expand_dim, prefix + 'expand_dims_1', optimize=False)
+################################################################################
+inp = tf.placeholder(tf.float32, [1, 2, 3, 4, 5], 'input')
+expand_dim = inp + 1
+expand_dim = tf.expand_dims(expand_dim, 2)
+save(inp, expand_dim, prefix + 'expand_dims_2', optimize=False)
+################################################################################
# Uncomment to print the final graph.
# with tf.gfile.FastGFile('fused_batch_norm_net.pb', 'rb') as f:
diff --git a/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nchw_in.npy b/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nchw_in.npy
new file mode 100644
index 000000000..17434123f
Binary files /dev/null and b/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nchw_in.npy differ
diff --git a/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nchw_net.pb b/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nchw_net.pb
new file mode 100644
index 000000000..8160bc4d6
Binary files /dev/null and b/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nchw_net.pb differ
diff --git a/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nchw_out.npy b/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nchw_out.npy
new file mode 100644
index 000000000..e09869948
Binary files /dev/null and b/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nchw_out.npy differ
diff --git a/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nhwc_in.npy b/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nhwc_in.npy
new file mode 100644
index 000000000..095c93c7b
Binary files /dev/null and b/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nhwc_in.npy differ
diff --git a/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nhwc_net.pb b/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nhwc_net.pb
new file mode 100644
index 000000000..3d642661e
Binary files /dev/null and b/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nhwc_net.pb differ
diff --git a/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nhwc_out.npy b/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nhwc_out.npy
new file mode 100644
index 000000000..b135a46c3
Binary files /dev/null and b/testdata/dnn/tensorflow/max_pool2d_asymmetric_pads_nhwc_out.npy differ
diff --git a/testdata/dnn/tensorflow/max_pool_by_axis_in.npy b/testdata/dnn/tensorflow/max_pool_by_axis_in.npy
new file mode 100644
index 000000000..810e11375
Binary files /dev/null and b/testdata/dnn/tensorflow/max_pool_by_axis_in.npy differ
diff --git a/testdata/dnn/tensorflow/max_pool_by_axis_net.pb b/testdata/dnn/tensorflow/max_pool_by_axis_net.pb
new file mode 100644
index 000000000..3af32187f
Binary files /dev/null and b/testdata/dnn/tensorflow/max_pool_by_axis_net.pb differ
diff --git a/testdata/dnn/tensorflow/max_pool_by_axis_out.npy b/testdata/dnn/tensorflow/max_pool_by_axis_out.npy
new file mode 100644
index 000000000..41ae850e8
Binary files /dev/null and b/testdata/dnn/tensorflow/max_pool_by_axis_out.npy differ
diff --git a/testdata/dnn/tensorflow/not_implemented_layer_net.pb b/testdata/dnn/tensorflow/not_implemented_layer_net.pb
new file mode 100644
index 000000000..172606220
Binary files /dev/null and b/testdata/dnn/tensorflow/not_implemented_layer_net.pb differ
diff --git a/testdata/dnn/tensorflow/reduce_max_channel_in.npy b/testdata/dnn/tensorflow/reduce_max_channel_in.npy
new file mode 100644
index 000000000..f153fe44a
Binary files /dev/null and b/testdata/dnn/tensorflow/reduce_max_channel_in.npy differ
diff --git a/testdata/dnn/tensorflow/reduce_max_channel_keep_dims_net.pb b/testdata/dnn/tensorflow/reduce_max_channel_keep_dims_net.pb
new file mode 100644
index 000000000..19bfa8748
Binary files /dev/null and b/testdata/dnn/tensorflow/reduce_max_channel_keep_dims_net.pb differ
diff --git a/testdata/dnn/tensorflow/reduce_max_channel_keep_dims_out.npy b/testdata/dnn/tensorflow/reduce_max_channel_keep_dims_out.npy
new file mode 100644
index 000000000..53c42d1e6
Binary files /dev/null and b/testdata/dnn/tensorflow/reduce_max_channel_keep_dims_out.npy differ
diff --git a/testdata/dnn/tensorflow/reduce_max_channel_net.pb b/testdata/dnn/tensorflow/reduce_max_channel_net.pb
new file mode 100644
index 000000000..708e74613
Binary files /dev/null and b/testdata/dnn/tensorflow/reduce_max_channel_net.pb differ
diff --git a/testdata/dnn/tensorflow/reduce_max_channel_out.npy b/testdata/dnn/tensorflow/reduce_max_channel_out.npy
new file mode 100644
index 000000000..3d03a60a9
Binary files /dev/null and b/testdata/dnn/tensorflow/reduce_max_channel_out.npy differ
diff --git a/testdata/dnn/tensorflow/reduce_max_in.npy b/testdata/dnn/tensorflow/reduce_max_in.npy
new file mode 100644
index 000000000..1f39c0608
Binary files /dev/null and b/testdata/dnn/tensorflow/reduce_max_in.npy differ
diff --git a/testdata/dnn/tensorflow/reduce_max_net.pb b/testdata/dnn/tensorflow/reduce_max_net.pb
new file mode 100644
index 000000000..544e05f1b
Binary files /dev/null and b/testdata/dnn/tensorflow/reduce_max_net.pb differ
diff --git a/testdata/dnn/tensorflow/reduce_max_out.npy b/testdata/dnn/tensorflow/reduce_max_out.npy
new file mode 100644
index 000000000..d5707e45f
Binary files /dev/null and b/testdata/dnn/tensorflow/reduce_max_out.npy differ
diff --git a/testdata/dnn/tensorflow/resize_concat_optimization_in.npy b/testdata/dnn/tensorflow/resize_concat_optimization_in.npy
new file mode 100644
index 000000000..a56e39e32
Binary files /dev/null and b/testdata/dnn/tensorflow/resize_concat_optimization_in.npy differ
diff --git a/testdata/dnn/tensorflow/resize_concat_optimization_net.pb b/testdata/dnn/tensorflow/resize_concat_optimization_net.pb
new file mode 100644
index 000000000..27256c1e8
Binary files /dev/null and b/testdata/dnn/tensorflow/resize_concat_optimization_net.pb differ
diff --git a/testdata/dnn/tensorflow/resize_concat_optimization_out.npy b/testdata/dnn/tensorflow/resize_concat_optimization_out.npy
new file mode 100644
index 000000000..759289158
Binary files /dev/null and b/testdata/dnn/tensorflow/resize_concat_optimization_out.npy differ
diff --git a/testdata/dnn/yolov4x-mish.cfg b/testdata/dnn/yolov4x-mish.cfg
new file mode 100644
index 000000000..ec93c6312
--- /dev/null
+++ b/testdata/dnn/yolov4x-mish.cfg
@@ -0,0 +1,1436 @@
+[net]
+# Testing
+batch=2
+subdivisions=1
+# Training
+#batch=64
+#subdivisions=8
+width=640
+height=640
+channels=3
+momentum=0.949
+decay=0.0005
+angle=0
+saturation = 1.5
+exposure = 1.5
+hue=.1
+
+learning_rate=0.001
+burn_in=1000
+max_batches = 500500
+policy=steps
+steps=400000,450000
+scales=.1,.1
+
+mosaic=1
+
+letter_box=1
+
+#optimized_memory=1
+
+[convolutional]
+batch_normalize=1
+filters=32
+size=3
+stride=1
+pad=1
+activation=mish
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=80
+size=3
+stride=2
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=40
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=80
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=3
+stride=2
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=80
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -2
+
+[convolutional]
+batch_normalize=1
+filters=80
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=80
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=80
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=80
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=80
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=80
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=80
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=80
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -1,-13
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=3
+stride=2
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -2
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -1,-34
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=3
+stride=2
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -2
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -1,-34
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+# Downsample
+
+[convolutional]
+batch_normalize=1
+filters=1280
+size=3
+stride=2
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -2
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=3
+stride=1
+pad=1
+activation=mish
+
+[shortcut]
+from=-3
+activation=linear
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -1,-19
+
+[convolutional]
+batch_normalize=1
+filters=1280
+size=1
+stride=1
+pad=1
+activation=mish
+
+########################## 6 0 6 6 3
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -2
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=640
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+### SPP ###
+[maxpool]
+stride=1
+size=5
+
+[route]
+layers=-2
+
+[maxpool]
+stride=1
+size=9
+
+[route]
+layers=-4
+
+[maxpool]
+stride=1
+size=13
+
+[route]
+layers=-1,-3,-5,-6
+### End SPP ###
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=640
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=640
+activation=mish
+
+[route]
+layers = -1, -15
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[upsample]
+stride=2
+
+[route]
+layers = 94
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -1, -3
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -2
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=320
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=320
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=320
+activation=mish
+
+[route]
+layers = -1, -8
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[upsample]
+stride=2
+
+[route]
+layers = 57
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -1, -3
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -2
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=160
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=160
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=160
+activation=mish
+
+[route]
+layers = -1, -8
+
+[convolutional]
+batch_normalize=1
+filters=160
+size=1
+stride=1
+pad=1
+activation=mish
+stopbackward=800
+
+##########################
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=320
+activation=mish
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=255
+activation=logistic
+
+
+[yolo]
+mask = 0,1,2
+anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401
+classes=80
+num=9
+jitter=.1
+scale_x_y = 2.0
+objectness_smooth=0
+ignore_thresh = .7
+truth_thresh = 1
+#random=1
+resize=1.5
+iou_thresh=0.2
+iou_normalizer=0.05
+cls_normalizer=0.5
+obj_normalizer=4.0
+iou_loss=ciou
+nms_kind=diounms
+beta_nms=0.6
+new_coords=1
+max_delta=5
+
+[route]
+layers = -4
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=2
+pad=1
+filters=320
+activation=mish
+
+[route]
+layers = -1, -22
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -2
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=320
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=320
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=320
+activation=mish
+
+[route]
+layers = -1,-8
+
+[convolutional]
+batch_normalize=1
+filters=320
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=640
+activation=mish
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=255
+activation=logistic
+
+
+[yolo]
+mask = 3,4,5
+anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401
+classes=80
+num=9
+jitter=.1
+scale_x_y = 2.0
+objectness_smooth=1
+ignore_thresh = .7
+truth_thresh = 1
+#random=1
+resize=1.5
+iou_thresh=0.2
+iou_normalizer=0.05
+cls_normalizer=0.5
+obj_normalizer=1.0
+iou_loss=ciou
+nms_kind=diounms
+beta_nms=0.6
+new_coords=1
+max_delta=5
+
+[route]
+layers = -4
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=2
+pad=1
+filters=640
+activation=mish
+
+[route]
+layers = -1, -55
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[route]
+layers = -2
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=640
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=640
+activation=mish
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=640
+activation=mish
+
+[route]
+layers = -1,-8
+
+[convolutional]
+batch_normalize=1
+filters=640
+size=1
+stride=1
+pad=1
+activation=mish
+
+[convolutional]
+batch_normalize=1
+size=3
+stride=1
+pad=1
+filters=1280
+activation=mish
+
+[convolutional]
+size=1
+stride=1
+pad=1
+filters=255
+activation=logistic
+
+
+[yolo]
+mask = 6,7,8
+anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401
+classes=80
+num=9
+jitter=.1
+scale_x_y = 2.0
+objectness_smooth=1
+ignore_thresh = .7
+truth_thresh = 1
+#random=1
+resize=1.5
+iou_thresh=0.2
+iou_normalizer=0.05
+cls_normalizer=0.5
+obj_normalizer=0.4
+iou_loss=ciou
+nms_kind=diounms
+beta_nms=0.6
+new_coords=1
+max_delta=2
diff --git a/testdata/gpu/video/1920x1080.avi b/testdata/gpu/video/1920x1080.avi
deleted file mode 100755
index 528c4c9a6..000000000
Binary files a/testdata/gpu/video/1920x1080.avi and /dev/null differ
diff --git a/testdata/gpu/video/768x576.avi b/testdata/gpu/video/768x576.avi
deleted file mode 100644
index 02e69141b..000000000
Binary files a/testdata/gpu/video/768x576.avi and /dev/null differ