cuda释放显存_CenterNet的Caffe-C++/CUDA推理实现(下篇)

本文紧接CenterNet的Caffe-C++/CUDA推理实现(上篇)。

在上文中,虽然通过编写C++/cuda方式实现了CenterNet的后处理部分,但显然不是很优雅,频繁地对显存进行申请和释放可能会影响推理过程中的稳定性和吞吐量,因此我们有必要将后处理部分以Caffe层的形式执行。

将后处理移至Caffe层中

如果移到caffe层中,相当于自己添加一个新的层,那么需要使用protobuf定义新的层,首先我们需要修改caffe.proto。

修改caffe.proto

这里我定义了一个CenternetOutput层,作为CenterNet的后处理部分,需要在caffe.proto中的合适位置添加以下内容:

optional CenternetOutputParameter centernet_output_param = 209;
message CenternetOutputParameterParameter {
    
  // Number of classes that are actually predicted. Required!
  optional uint32 num_classes = 1;
  optional uint32 kernel_size = 2 [default = 3];
  optional float vis_threshold = 3 [default = 0.3];
  optional bool apply_nms = 4 [default = false];
  optional uint32 feature_map_h = 5 [default = 0];
  optional uint32 feature_map_w = 6 [default = 0];
}

并且在之前的res50.prototxt中最后添加以下部分,三个bottom分别为CenterNet最后三个输出:hm、hw、reg:

layer {
    
  name: "centernet_output"
  type: "CenternetOutput"
  bottom: "conv_blob55"
  bottom: "conv_blob57"
  bottom: "conv_blob59"
  top: "result_out"
  centernet_output_param {
    
    num_classes: 2
    kernel_size: 3
    vis_threshold: 0.3
  }
}

修改完prototxt后模型最后几层的结果是这样的,CenternetOutpu即我们定义的后处理层:

be01d15bc19bce95e1451eeb3a9ba695.png

修改后记得造出新的caffe.pb.cccaffe.pb.h,否则会Error parsing text-format caffe.NetParameter: 2715:26: Message type "caffe.LayerParameter" has no field named "centernet_output_param",最好make clean一下再重新编译。

对于这些后处理层,我们不需要只需要前向过程,不需要反向的过程,所以直接将其设置为:

  virtual void Backward_cpu(const vector<Blob<Dtype>*>& top,
      const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom) {
    
    NOT_IMPLEMENTED;
  }
  virtual void Backward_gpu(const vector<Blob<Dtype>*>& top,
      const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom) {
    
    NOT_IMPLEMENTED;
  }

而我们的centernet_output_layer.hpp这样写:

#ifndef CAFFE_CENTERNET_OUTPUT_LAYER_H
#define CAFFE_CENTERNET_OUTPUT_LAYER_H

#include <vector>

#include "caffe/blob.hpp"
#include "caffe/layer.hpp"
#include "caffe/proto/caffe.pb.h"

struct Box{
    
  float x1;
  float y1;
  float x2;
  float y2;
};

struct Detection{
    
  //x1 y1 x2 y2
  Box bbox;
  int classId;
  float prob;
};

namespace caffe {
    

/**
 * @brief Combine CenterNet (hm|wh|reg) layers to BoxOutput
 *
 */
template <typename Dtype>
class CenternetOutputLayer : public Layer<Dtype> {
    
public:
  explicit CenternetOutputLayer(const LayerParameter& param)
      : Layer<Dtype>(param) {}
  virtual
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个报错是由于在运行Python脚本时,出现了一个导入错误。具体的错误信息是:ImportError: /lib/x86_64-linux-gnu/libfreeimage.so.3: undefined symbol: TIFFFieldDataType, version LIBTIFF_4.0。根据引用\[1\]和引用\[3\]的信息,这个错误可能与libtiff.so.5库中的一个未定义的符号有关。 为了解决这个问题,可以尝试以下方法: 1. 安装python-numpy库:根据引用\[2\]的解决方法,可以尝试使用以下命令安装python-numpy库:sudo apt-get install python-numpy。这个库可能会提供所需的依赖项,从而解决导入错误。 2. 更新libtiff库:根据引用\[1\]和引用\[3\]的信息,这个错误可能与libtiff.so.5库中的一个未定义的符号有关。尝试更新libtiff库,可以使用以下命令:sudo apt-get update && sudo apt-get upgrade libtiff5。这将更新libtiff库并解决可能存在的符号未定义问题。 3. 检查依赖项:检查是否存在其他缺失的依赖项。可以使用ldd命令来检查可执行文件或共享库的依赖项。例如,使用ldd命令检查libfreeimage.so.3库的依赖项:ldd /lib/x86_64-linux-gnu/libfreeimage.so.3。确保所有依赖项都已正确安装。 请注意,这些解决方法是基于提供的引用内容,并且可能因系统环境和具体情况而有所不同。建议根据实际情况选择适合的解决方法。 #### 引用[.reference_title] - *1* [python报错: /usr/lib/libgdal.so.20: symbol TIFFReadRGBATileExt version LIBTIFF_4.0 not defined](https://blog.csdn.net/qq_39779233/article/details/127596089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [caffe编译遇到的问题(持续更新)](https://blog.csdn.net/m0_37407756/article/details/70789271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值