CenterNet caffe版编译和训练自己数据集记录

github上面发现有人实现了caffe版的centernet

大佬的github地址:https://github.com/yuqj1990/caffe_train

这篇博客记录下我在windows下编译支持centernet的caffe环境的编译过程以及尝试训练和测试。

一、编译caffe环境

首先看看作者实现的训练centernet所需的loss层:CenterObjectLoss

作者提供了:

CenternetLossLayer.cppCenternetLossLayer.hpp

此外在loss层里面对热力图分类使用了focalloss-sigmoid-loss,单独实现为:

focal_loss_layer_centernet.cppfocal_loss_layer_centernet.cufocal_loss_layer_centernet.hpp

这三个文件刚开始并没有注意,以为就一个CenternetLossLayer就完了,但是当我只把CenternetLossLayer层加进我的caffe中时,训练出错:

发现有一个focalSigmoidWithLoss相关的层没有注册,才发现这个层没放进去,回头去找,将cpp,cu,hpp文件添加进去。

修改caffe.proto文件,添加新层:

然后重新编译caffe,途中遇到错误:

boost 1.62:.\boost/type_traits/common_types.h(42) : fatal error C1001: 编译发生内部错误

根据博客:https://blog.csdn.net/10km/article/details/74190410

按照提示,在c++预处理器->预处理器定义中添加:BOOST_NO_CXX11_VARIADIC_TEMPLATES 宏定义就可以了。

编译结束,开始训练。

二、训练

训练数据:自己的目标检测数据集(8个类别,包括人,小车,自行车,摩托车,公交车,卡车,火车,狗)

网络结构:主干:mobilenetv2,FPN,分类分支:conv+focal_sigmoid,检测分支:conv+smooth l1

训练参数:

开始训练:

报错,显示focal_loss_centernet.cpp中输入的两个维度不匹配,上层输出的特征图通道是8,但是标签通道是1。

检查这个focal_loss_centernet.cpp文件查看两个输入是什么:

这个层是用来计算分类loss的,将输入标签应该转成多通道的heatmap,而通道数就是类别数,上层特征图输出通道数是8,也就是8类,我这里总共也是8类,说明没错,但是标签却是1通道,这就说明标签通道数错误,检查下标签的处理:

在centernetlosslayer.cpp中,送入focal-sigmoid之前,上层预测值经过了一次reshape, conf_pred_.Reshape(conf_shape);而这个shape里面是包含num_classes的,但是标签值并没有经过这个reshape,因此维度会对不上,所以应该对标签也进行一次包含num_classes维度的reshape,如下图所示:

这样就可以正常训练了:

实际训练中,batch_size设置成4直接显存不足,所以设置成了2,总算是可以正常训练了,后续再考虑图像尺寸的问题,增大batch。 

注:作者实现这个是用来做人脸检测的,而我是用来做多类别目标检测,所以有些通道相关的变量还是得修改修改。

三、测试

模型还没正式训练,待更...

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值