Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/how-to-use-and-FAQ/ncnn-load-model.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
|load from|alexnet.param|alexnet.param.bin|alexnet.bin|
|---|---|---|---|
|file path|load_param(const char*)|load_param_bin(const char*)|load_model(const char*)|
|file path<br/>(wchar_t for windows)|load_param(const wchar_t*)|load_param_bin(const wchar_t*)|load_model(const wchar_t*)|
|file descriptor|load_param(FILE*)|load_param_bin(FILE*)|load_model(FILE*)|
|file memory|load_param_mem(const char*)|load_param(const unsigned char*)|load_model(const unsigned char*)|
|android asset|load_param(AAsset*)|load_param_bin(AAsset*)|load_model(AAsset*)|
Expand Down
21 changes: 21 additions & 0 deletions python/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -950,11 +950,32 @@ PYBIND11_MODULE(ncnn, m)

#if NCNN_STDIO
#if NCNN_STRING
#if _WIN32
.def(
"load_param", [](Net& self, const std::wstring& path) {
return self.load_param(path.c_str());
},
py::arg("protopath"))
#else
.def("load_param", (int (Net::*)(const char*)) & Net::load_param, py::arg("protopath"))
#endif
.def("load_param_mem", (int (Net::*)(const char*)) & Net::load_param_mem, py::arg("mem"))
#endif // NCNN_STRING
#if _WIN32
.def(
"load_param_bin", [](Net& self, const std::wstring& path) {
return self.load_param_bin(path.c_str());
},
py::arg("protopath"))
.def(
"load_model", [](Net& self, const std::wstring& path) {
return self.load_model(path.c_str());
},
py::arg("modelpath"))
#else
.def("load_param_bin", (int (Net::*)(const char*)) & Net::load_param_bin, py::arg("protopath"))
.def("load_model", (int (Net::*)(const char*)) & Net::load_model, py::arg("modelpath"))
#endif
.def(
"load_model_mem", [](Net& net, const char* mem) {
const unsigned char* _mem = (const unsigned char*)mem;
Expand Down
19 changes: 19 additions & 0 deletions src/c_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1511,6 +1511,25 @@ int ncnn_net_load_model(ncnn_net_t net, const char* path)
{
return ((Net*)net->pthis)->load_model(path);
}

#if _WIN32
#if NCNN_STRING
int ncnn_net_load_param_w(ncnn_net_t net, const wchar_t* path)
{
return ((Net*)net->pthis)->load_param(path);
}
#endif /* NCNN_STRING */

int ncnn_net_load_param_bin_w(ncnn_net_t net, const wchar_t* path)
{
return ((Net*)net->pthis)->load_param_bin(path);
}

int ncnn_net_load_model_w(ncnn_net_t net, const wchar_t* path)
{
return ((Net*)net->pthis)->load_model(path);
}
#endif /* _WIN32 */
#endif /* NCNN_STDIO */

#if NCNN_STDIO
Expand Down
7 changes: 7 additions & 0 deletions src/c_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,13 @@ NCNN_EXPORT int ncnn_net_load_param(ncnn_net_t net, const char* path);
#endif /* NCNN_STRING */
NCNN_EXPORT int ncnn_net_load_param_bin(ncnn_net_t net, const char* path);
NCNN_EXPORT int ncnn_net_load_model(ncnn_net_t net, const char* path);
#if _WIN32
#if NCNN_STRING
NCNN_EXPORT int ncnn_net_load_param_w(ncnn_net_t net, const wchar_t* path);
#endif /* NCNN_STRING */
NCNN_EXPORT int ncnn_net_load_param_bin_w(ncnn_net_t net, const wchar_t* path);
NCNN_EXPORT int ncnn_net_load_model_w(ncnn_net_t net, const wchar_t* path);
#endif /* _WIN32 */
#endif /* NCNN_STDIO */

#if NCNN_STDIO
Expand Down
48 changes: 48 additions & 0 deletions src/net.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1731,6 +1731,22 @@ int Net::load_param(const char* protopath)
fclose(fp);
return ret;
}

#if _WIN32
int Net::load_param(const wchar_t* protopath)
{
FILE* fp = _wfopen(protopath, L"rb");
if (!fp)
{
NCNN_LOGE("_wfopen %ls failed", protopath);
return -1;
}

int ret = load_param(fp);
fclose(fp);
return ret;
}
#endif
#endif // NCNN_STRING

int Net::load_param_bin(FILE* fp)
Expand All @@ -1753,6 +1769,22 @@ int Net::load_param_bin(const char* protopath)
return ret;
}

#if _WIN32
int Net::load_param_bin(const wchar_t* protopath)
{
FILE* fp = _wfopen(protopath, L"rb");
if (!fp)
{
NCNN_LOGE("_wfopen %ls failed", protopath);
return -1;
}

int ret = load_param_bin(fp);
fclose(fp);
return ret;
}
#endif

int Net::load_model(FILE* fp)
{
DataReaderFromStdio dr(fp);
Expand All @@ -1772,6 +1804,22 @@ int Net::load_model(const char* modelpath)
fclose(fp);
return ret;
}

#if _WIN32
int Net::load_model(const wchar_t* modelpath)
{
FILE* fp = _wfopen(modelpath, L"rb");
if (!fp)
{
NCNN_LOGE("_wfopen %ls failed", modelpath);
return -1;
}

int ret = load_model(fp);
fclose(fp);
return ret;
}
#endif
#endif // NCNN_STDIO

int Net::load_param(const unsigned char* _mem)
Expand Down
9 changes: 9 additions & 0 deletions src/net.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ class NCNN_EXPORT Net
// return 0 if success
int load_param(FILE* fp);
int load_param(const char* protopath);
#if _WIN32
int load_param(const wchar_t* protopath);
#endif

// load network structure from in-memory plain param string, must be NULL-terminated
// return 0 if success
Expand All @@ -79,11 +82,17 @@ class NCNN_EXPORT Net
// return 0 if success
int load_param_bin(FILE* fp);
int load_param_bin(const char* protopath);
#if _WIN32
int load_param_bin(const wchar_t* protopath);
#endif

// load network weight data from model file
// return 0 if success
int load_model(FILE* fp);
int load_model(const char* modelpath);
#if _WIN32
int load_model(const wchar_t* modelpath);
#endif
#endif // NCNN_STDIO

// load network structure from external memory
Expand Down
4 changes: 4 additions & 0 deletions tests/test_squeezenet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -241,8 +241,10 @@ class MyConvolution : public ncnn::Layer
support_inplace = impl->support_inplace;

support_packing = impl->support_packing;
support_any_packing = impl->support_any_packing;
support_vulkan = impl->support_vulkan;
support_vulkan_packing = impl->support_vulkan_packing;
support_vulkan_any_packing = impl->support_vulkan_any_packing;
support_bf16_storage = impl->support_bf16_storage;
support_fp16_storage = impl->support_fp16_storage;
support_int8_storage = impl->support_int8_storage;
Expand Down Expand Up @@ -275,8 +277,10 @@ class MyConvolution : public ncnn::Layer
support_inplace = impl->support_inplace;

support_packing = impl->support_packing;
support_any_packing = impl->support_any_packing;
support_vulkan = impl->support_vulkan;
support_vulkan_packing = impl->support_vulkan_packing;
support_vulkan_any_packing = impl->support_vulkan_any_packing;
support_bf16_storage = impl->support_bf16_storage;
support_fp16_storage = impl->support_fp16_storage;
support_int8_storage = impl->support_int8_storage;
Expand Down
Loading