Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 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