vs2019使用Darknet调用YOLOV3模型并测试(CPU+GPU)

前言

之前我们通过libtorch实现了在C++项目中调用pytorch网络模型。

下面将分享使用另一种方法(Darknet)实现yolo模型的调用,其大概思路和libtorch方法差不多,都是先在pycharm上训练模型,然后在C++端调用模型。
但具体实现方法有一些区别:

Libtorch方法:

1、pycharm训练模型,保存pth权值文件
2、将模型和pth文件保存为pt模型文件
3、在c++端调用pt模型

Darknet方法:

1、pycharm训练模型,保存pth权值文件
2、将pth文件转换为weights文件
3、下载yolo模型结构文件(.cfg格式)
3、在c++端调用模型

实现步骤

1

训练模型,将.pth权值文件转换为.weights权值文件,实际就是按照网络结构保存每层的权值
----如果仅仅只需要看yolo检测的效果,可以在网络上下载已经在公开数据集上训练好的.weights文件,这里的转换,是为了方便导入自己训练好的模型。
在这里插入图片描述

需要代码文件的话,可以在评论区给我留言。😃

:可能在进行转换时,会报以下错误。
在这里插入图片描述
显示键值错误--------这是因为我网络里的每层的名称和你的名称不一样

解决方法
在导入net的代码下打一个断点,用debug方式运行py文件。如下:
在这里插入图片描述
点开net,即可看见每层的名称,在代码相应位置将名称修改成和自己网络的一致就ok了。😀
在这里插入图片描述

2

下载yolov3.cfg 文件,里面是模型的网络结构信息。
因为在后续导入模型时,需要从.cfg文件中获取模型结构,所以需要提前准备好
yolov3.cfg(提取码:bjyx)

tip:若自己在训练网络时,更改了anchors等参数,记得在文档中相应位置也要修改(注意共有三处)
在这里插入图片描述

3

在vs项目里导入模型,需要用到Darknet结构体,所以需要准备好Darknet.hDarknet.cpp文件。
Darknet(提取码:bjyx)

CPU: 使用cpu运算,可直接创建项目进行编译
1.导入头文件

#include "Darknet.h"

2.设置使用cpu或gpu (darknet的构造函数需要,可自行重写构造函数,此处不做详述)

torch::DeviceType device_type;
if (torch::cuda::is_available() ) {        
    device_type = torch::kCUDA;
    std::cout << "Using cuda..." << endl;
} else {
    device_type = torch::kCPU;
    std::cout << "Using cpu..." << endl;
}
torch::Device device(device_type);

3.加载模型

int input_image_size =608;

Darknet net("../models/yolov3.cfg", &device);      //.cfg

map<string, string> *info = net.get_net_info();

info->operator[]("height") = std::to_string(input_image_size);

net.load_weights("../models/12_13_yolov3.weights");        //.weights
std::cout << "模型导入成功 ..." << endl;

4.图片预测

auto output = net.forward(img_tensor);         //直接传入tensor进行预测
std::cout << "图像已预测完成。。" << endl;
// filter result by NMS 
// class_num = 23
// confidence = 0.5
// nms_conf = 0.3
auto result = net.write_results(output, 23, 0.5, 0.3);      //对预测结果进行筛选

当被测图像中没有目标时,result维度为1;含有目标时,维度为2,第0维的size数目标个数
如:在这里插入图片描述

GPU: 使用gpu运算时,需要利用cmake进行编译,相关操作可看我另一篇文章
☞直通车
.cpp文件写法和cpu方法中一样。可以参考的cmakelists.txt写法:

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(yolo-app)

find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )

find_package(Torch REQUIRED)

aux_source_directory(. DIR_SRCS)

add_executable(yolo-app ${DIR_SRCS})
target_link_libraries(yolo-app "${TORCH_LIBRARIES}" "${OpenCV_LIBS}")
set_property(TARGET yolo-app PROPERTY CXX_STANDARD 14)

--------tbc-----------
有用可以点个大拇指哦 🤭

【作者有话说】
以上内容仅为博主自主整理分享,很多内容也是来源于网络,若有侵权,请私聊告知
大家有任何问题可在评论区讨论交流~

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

8倍

谢谢大佬~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值