You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_net.py 4.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. # Copyright 2021 Tencent
  2. # SPDX-License-Identifier: BSD-3-Clause
  3. import numpy as np
  4. import pytest
  5. import ncnn
  6. def test_net():
  7. dr = ncnn.DataReaderFromEmpty()
  8. with ncnn.Net() as net:
  9. ret = net.load_param("tests/test.param")
  10. net.load_model(dr)
  11. assert ret == 0 and len(net.blobs()) == 3 and len(net.layers()) == 3
  12. input_names = net.input_names()
  13. output_names = net.output_names()
  14. assert len(input_names) > 0 and len(output_names) > 0
  15. in_mat = ncnn.Mat((227, 227, 3))
  16. with net.create_extractor() as ex:
  17. ex.input("data", in_mat)
  18. ret, out_mat = ex.extract("output")
  19. assert ret == 0 and out_mat.dims == 1 and out_mat.w == 1
  20. net.clear()
  21. assert len(net.blobs()) == 0 and len(net.layers()) == 0
  22. def test_net_mem():
  23. modelbin = bytearray(303940)
  24. modelbin[0:4] = 71,107,48,1
  25. modelbin[180:184] = 71,107,48,1
  26. with ncnn.Net() as net:
  27. ret = net.load_param("tests/test.param")
  28. net.load_model_mem(bytes(modelbin))
  29. assert ret == 0 and len(net.blobs()) == 3 and len(net.layers()) == 3
  30. input_names = net.input_names()
  31. output_names = net.output_names()
  32. assert len(input_names) > 0 and len(output_names) > 0
  33. in_mat = ncnn.Mat((227, 227, 3))
  34. with net.create_extractor() as ex:
  35. ex.input("data", in_mat)
  36. ret, out_mat = ex.extract("output")
  37. assert ret == 0 and out_mat.dims == 1 and out_mat.w == 1
  38. net.clear()
  39. assert len(net.blobs()) == 0 and len(net.layers()) == 0
  40. def test_net_vulkan():
  41. if not hasattr(ncnn, "get_gpu_count"):
  42. return
  43. dr = ncnn.DataReaderFromEmpty()
  44. net = ncnn.Net()
  45. net.opt.use_vulkan_compute = True
  46. ret = net.load_param("tests/test.param")
  47. net.load_model(dr)
  48. assert ret == 0 and len(net.blobs()) == 3 and len(net.layers()) == 3
  49. in_mat = ncnn.Mat((227, 227, 3))
  50. ex = net.create_extractor()
  51. ex.input("data", in_mat)
  52. ret, out_mat = ex.extract("output")
  53. assert ret == 0 and out_mat.dims == 1 and out_mat.w == 1
  54. ex.clear()
  55. net.clear()
  56. assert len(net.blobs()) == 0 and len(net.layers()) == 0
  57. def test_custom_layer():
  58. class CustomLayer(ncnn.Layer):
  59. customLayers = []
  60. def __init__(self):
  61. ncnn.Layer.__init__(self)
  62. self.one_blob_only = True
  63. self.customLayers.append(self)
  64. def forward(self, bottom_blob, top_blob, opt):
  65. x = np.array(bottom_blob)
  66. x += 1
  67. top_blob.clone_from(ncnn.Mat(x), opt.blob_allocator)
  68. if top_blob.empty():
  69. return -100
  70. return 0
  71. def CustomLayer_layer_creator():
  72. return CustomLayer()
  73. def CustomLayer_layer_destroyer(layer):
  74. for i in range(len(CustomLayer.customLayers)):
  75. if CustomLayer.customLayers[i] == layer:
  76. del CustomLayer.customLayers[i]
  77. break
  78. dr = ncnn.DataReaderFromEmpty()
  79. net = ncnn.Net()
  80. net.register_custom_layer(
  81. "CustomLayer", CustomLayer_layer_creator, CustomLayer_layer_destroyer
  82. )
  83. ret = net.load_param("tests/custom_layer.param")
  84. net.load_model(dr)
  85. assert ret == 0 and len(net.blobs()) == 2 and len(net.layers()) == 2
  86. in_mat = ncnn.Mat(1)
  87. in_mat.fill(1.0)
  88. ex = net.create_extractor()
  89. ex.input("data", in_mat)
  90. ret, out_mat = ex.extract("output")
  91. assert ret == 0 and out_mat.dims == 1 and out_mat.w == 1 and out_mat[0] == 2.0
  92. ex.clear()
  93. net.clear()
  94. assert len(net.blobs()) == 0 and len(net.layers()) == 0
  95. def test_vulkan_device_index():
  96. if not hasattr(ncnn, "get_gpu_count"):
  97. return
  98. net = ncnn.Net()
  99. assert net.vulkan_device() is None
  100. net.set_vulkan_device(0)
  101. assert net.vulkan_device() is not None
  102. def test_vulkan_device_vkdev():
  103. if not hasattr(ncnn, "get_gpu_count"):
  104. return
  105. net = ncnn.Net()
  106. assert net.vulkan_device() is None
  107. vkdev = ncnn.get_gpu_device(0)
  108. net.set_vulkan_device(vkdev)
  109. assert net.vulkan_device() is not None