fix(代码优化): 优化了yolov5数据处理过程中的内存使用
1. 在处理yolov5输出数据时,替换了使用memcpy进行内存复制的操作,直接使用原数据进行赋值,减少了内存复制的开销。 2. 在处理完数据后,将ncnn::Mat的data指针设置为nullptr,避免了原数据在ncnn::Mat析构时被释放导致的内存访问异常。这一改动确保了数据的稳定性和安全性。
This commit is contained in:
parent
b3dff8f798
commit
0a34d62b35
@ -930,7 +930,9 @@ int ncnn_result(const float *src, unsigned int len) {
|
||||
ncnn::Mat out;
|
||||
out.create(85, 80, 80, 3);
|
||||
// ex.extract("output", out);
|
||||
memcpy(out.data, src, len * sizeof(float));
|
||||
// memcpy(out.data, src, len * sizeof(float));
|
||||
// 替换memcpy内存复制操作,直接使用原数据
|
||||
out.data = const_cast<void*>(static_cast<const void*>(src));
|
||||
|
||||
// out = out.reshape( 85);
|
||||
printf("w = %d,h=%d,d=%d,c=%d\n", out.w, out.h, out.d, out.c);
|
||||
@ -949,6 +951,8 @@ int ncnn_result(const float *src, unsigned int len) {
|
||||
|
||||
proposals.insert(proposals.end(), objects8.begin(), objects8.end());
|
||||
|
||||
// 去除对原数据的引用,避免原数据数据被释放。(出代码块之后,ncnn::Mat析构会自动释放内存,原数据会被释放,导致内存访问异常)
|
||||
out.data = nullptr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -960,7 +964,10 @@ int ncnn_result(const float *src, unsigned int len) {
|
||||
// out.create(85, 480, 1, 3);
|
||||
|
||||
// ex.extract("353", out);
|
||||
memcpy(out.data, src, len * sizeof(float));
|
||||
// memcpy(out.data, src, len * sizeof(float));
|
||||
// 替换memcpy内存复制操作,直接使用原数据
|
||||
out.data = const_cast<void*>(static_cast<const void*>(src));
|
||||
|
||||
ncnn::Mat anchors(6);
|
||||
anchors[0] = 30.f;
|
||||
anchors[1] = 61.f;
|
||||
@ -973,6 +980,10 @@ int ncnn_result(const float *src, unsigned int len) {
|
||||
generate_proposals(anchors, 16, in_pad, out, prob_threshold, objects16);
|
||||
printf("objects16.size():%d\n", (int)objects16.size());
|
||||
proposals.insert(proposals.end(), objects16.begin(), objects16.end());
|
||||
|
||||
// 去除对原数据的引用,避免原数据数据被释放。(出代码块之后,ncnn::Mat析构会自动释放内存,原数据会被释放,导致内存访问异常)
|
||||
out.data = nullptr;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -981,7 +992,9 @@ int ncnn_result(const float *src, unsigned int len) {
|
||||
printf("----------------3 * 20 * 20 * 85--------------------\n");
|
||||
ncnn::Mat out;
|
||||
out.create(85, 20, 20, 3);
|
||||
memcpy(out.data, src, len * sizeof(float));
|
||||
// memcpy(out.data, src, len * sizeof(float));
|
||||
// 替换memcpy内存复制操作,直接使用原数据
|
||||
out.data = const_cast<void*>(static_cast<const void*>(src));
|
||||
|
||||
ncnn::Mat anchors(6);
|
||||
anchors[0] = 116.f;
|
||||
@ -995,6 +1008,9 @@ int ncnn_result(const float *src, unsigned int len) {
|
||||
generate_proposals(anchors, 32, in_pad, out, prob_threshold, objects32);
|
||||
printf("objects32.size():%d\n", (int)objects32.size());
|
||||
proposals.insert(proposals.end(), objects32.begin(), objects32.end());
|
||||
|
||||
// 去除对原数据的引用,避免原数据数据被释放。(出代码块之后,ncnn::Mat析构会自动释放内存,原数据会被释放,导致内存访问异常)
|
||||
out.data = nullptr;
|
||||
}
|
||||
// sort all proposals by score from highest to lowest
|
||||
qsort_descent_inplace(proposals);
|
||||
|
Loading…
Reference in New Issue
Block a user