C++调用YOLOv4模型对INRIA行人数据集进行识别

本文主要介绍了使用C++调用YOLOv4模型测试,并对INRIA行人数据集进行识别,识别率可达86.62%

一、编程环境

1.OpenCV4.4VS2019,安装包我已经打包到百度云,两个软件安装过程都是非常简单,有需要的同学可以在下面链接下载:
链接:https://pan.baidu.com/s/1HW1fPt8hO1uH5mWNRi7wdg
提取码:mdhv

OpenCV4.4和VS2019配置方法参考下面博客:
https://blog.csdn.net/shuiyixin/article/details/105998661

博主用的是VS2015,配置不同之处在于VS2017及以下版本选择的是vc14文件夹,而VS2019选择vc15文件夹,其他配置步骤不变。

p:OpenCV我只测试了这一个版本,VS2015,17,19都可以

二、程序编译

1.主程序

主程序参考了其他大佬的代码,根据自己的项目需求,进行了一些小修改,为了方便大家下载,文末最后提供了下载地址
下面给出了部分代码:

int main()
{clock_t startTime, endTime; //定义程序开始运行时间和结束时间startTime = clock();  //计时开始//---------------------------------------加载类别---------------------------------------ifstream classNamesFile("coco.names");//coco文件中有类别名字//ifstream classNamesFile("./model/coco.names");vector<string> classNamesVec;//将coco类别名字插入classNamesVec容器中if (classNamesFile.is_open()){string className = "";while (std::getline(classNamesFile, className))classNamesVec.push_back(className);}//定义已经训练好的.cfg文件和权重文件String cfg = "yolov4.cfg";String weight = "yolov4.weights";//模型读入,把两个文件放入net神经网络dnn::Net net = readNetFromDarknet(cfg, weight);//预处理读取的图像,并将图像读入网络Mat frame = imread("000000579238.jpg");

2.相关配置文件

配置文件使用YOLOv4的coco.name(识别类别库),yolov4.cfg和yolov4.weights两个配置文件,三个文件和源代码放在一个路径。
配置文件下载地址:
链接:https://pan.baidu.com/s/15D_nRHtW1ffy4Mypn144Qg
提取码:x42u

3.程序测试

环境配置完毕后,先生成解决方案,成功编译后运行,结果如下图所示:

因为我这个项目只需要对人进行识别,所以在代码中进行了修改,当然你也可以只对其他类别(例如car)进行识别,或者不做修改,对所有类别进行识别。

for (size_t i = 0; i < indices.size();i++) {idx = indices[i];className = classNamesVec[classIds[idx]];//这里加了对人识别的类别进行判断,是person则跳出,你也可以改成其他的,或者注释掉if (className != "person") continue;labelSize = getTextSize(className, FONT_HERSHEY_SIMPLEX, 0.5, 1, 0);box = boxes[idx];textBox = Rect(Point(box.x - 1, box.y),Point(box.x + labelSize.width, box.y - labelSize.height));rectColor = Scalar(idx * 11 % 256, idx * 22 % 256, idx * 33 % 256);textColor = Scalar(255 - idx * 11 % 256, 255 - idx * 22 % 256, 255 - idx * 33 % 256);rectangle(frame, box, rectColor, 2, 8, 0);rectangle(frame, textBox, rectColor, -1, 8, 0);putText(frame, className.c_str(), Point(box.x, box.y - 2), FONT_HERSHEY_SIMPLEX, 0.5, textColor, 1, 8);}

4.实验

根据项目需求在INRIA行人数据集上进行了测试,首先读取数据集全部图片路径,然后对每一张图片进行识别检测并另存到另一个文件夹,最后对识别率进行了计算。

在train文件夹中 613幅图片识别,重命名并另存,用时1372.39s(笔记本配置有点低,导致识别速度慢)
其中完全识别正确536幅,识别错误图像1幅,拥挤人群场景识别不作考虑(因为我们项目不可能有这么多人)42幅,未识别出34幅。

识别率 94.29%
这仅仅是用了coco数据集的权重文件,而非我目前样本库的训练权重文件

下面是1幅识别错误图像

5.总结

这次的实验依托项目背景,让我对YOLOv4进行了学习研究,YOLOv4模型良好的性能,尤其是复杂背景条件下,识别率依旧可以很高。
从项目需求来看,还需要在更加复杂的背景下拥有更高的识别率,这次实验才算刚刚起步。

源代码/项目百度云下载:
链接:https://pan.baidu.com/s/1xl_Kcmn5Ut7fQamqzrIlHg
提取码:3pqa

如果大家遇到什么问题,可以在下方留言哦,每天看到就会回复。

C++调用YOLOv4模型对INRIA行人数据集进行识别相关推荐

  1. 【计算机视觉】INRIA 行人数据集 (INRIA Person Dataset)

    官网: http://pascal.inrialpes.fr/data/human/ 下载地址: ftp://ftp.inrialpes.fr/pub/lear/douze/data/INRIAPer ...

  2. caffe上手2:使用INRIA行人数据集对BVLC Caffe进行fine-tuning

    上次使用mnist对caffe进行了初步了解,这一次就要开始对毕设的任务进行尝试了.这次打算对ImageNet进行fine tune,使用的是行人检测数据集INRIA. 首先下载下来INRIA数据集, ...

  3. INRIA Person Dataset(INRIA 行人数据集)介绍

    该文主要内容为译文:http://pascal.inrialpes.fr/data/human/ 该数据集是原作者在行人检测研究工作中在图像和视频中收集的直立人样本,该研究的细节见论文: Histog ...

  4. yolov4用1050ti_c++调用yolov4模型进行目标检测-使用yolov4官方接口

    前言 yolo系列用c写的,在工程中的部署特别方便.4月份yolov4横空出世,之前试了试效果,精度确实有了很大的提升,AB大神nb.最近需要在C++项目中使用yolov4,尝试了opencv的调用( ...

  5. VS+Opencv3.3下用HOG+SVM实现INRIA行人检测

    利用SVM训练一个分类器,用训练好的分类器对测试集里的数据进行检测. 这里是数据下载地址:INRIA行人数据集 点击页面下方的蓝色here即可下载. 下载完成之后,解压缩(为方便操作,建议放于项目目录 ...

  6. Tensorflow C++ 编译和调用图模型

    简介 最近在研究如何打通tensorflow线下 python 的脚本训练建模, 利用freeze_graph工具输出.pb图文件,之后再线上生产环境用C++代码直接调用预先训练好的模型完成预测的工作 ...

  7. pythonvbb转换txt_Caltech行人数据集转化VOC数据集

    Caltech行人数据集转化VOC数据集 发布时间:2018-04-09 17:31, 浏览次数:1213 , 标签: Caltech VOC CaltechPestrian2VOC 代码仓库地址 1 ...

  8. alexeyab darknet 编译_【目标检测实战】Darknet—yolov3模型训练(VOC数据集)

    原文发表在:语雀文档 0.前言 本文为Darknet框架下,利用官方VOC数据集的yolov3模型训练,训练环境为:Ubuntu18.04下的GPU训练,cuda版本10.0:cudnn版本7.6.5 ...

  9. 行人属性数据集pa100k_基于InceptionV3的多数据集联合训练的行人外观属性识别方法与流程...

    本发明涉及模式识别技术.智能监控技术等领域,具体的说,是基于Inception V3的多数据集联合训练的行人外观属性识别方法. 背景技术: 近年来,视频监控系统已经被广泛应用于安防领域.安防人员通过合 ...

最新文章

  1. webview Java与JS互调
  2. Android 编译报错:Could not get resource
  3. LeetCode 208. 实现 Trie (前缀树) —— 提供一套前缀树模板
  4. CSS: 首字母字体变大时下划线不对齐的解决方法
  5. groovy学习(一)
  6. 基于纤程(Fiber)实现C++异步编程库(一):原理及示例
  7. 安装open3d python
  8. 问题描述_vortex_新浪博客
  9. java中String字符串
  10. 没有电脑却想运行代码?有手机就够了
  11. PSS E v33.40 1CD(大型电力系统仿真计算软件)
  12. Ognl表达式的一些用法
  13. 机房收费系统个人重构—图(文档)
  14. 哔哩哔哩手机缓存的m4s音频和视频文件电脑观看?
  15. 原型工具axure7.0
  16. matlab如何模拟数字舵机,模拟舵机和数字舵机区别
  17. AC_automaton 模板
  18. 自定义dns服务器是什么,dns服务器有什么用(电脑设置DNS的方法)
  19. ESP32S 数据手册
  20. 校招生的中场战事:意向书,offer选择与三方

热门文章

  1. 一秒7步解决校园网刷知乎显示不了图片
  2. 动态规划的状态表示分析
  3. 个人站长福音:接入支付宝接口,实现在线支付功能
  4. c语言:抽签游戏实现
  5. 8年开发经验,帮你总结这帮双面HR们
  6. linux网页自动化,使用 Selenium 自动化 Web 浏览器
  7. 软件测试之黑盒测试用例的四种设计方法
  8. 工业现场总线 linux 服务器,基于Linux的现场总线无线通信卡的实现
  9. 初步操作3dmax可编辑多边形建模-做一个杯子
  10. mpich2+gfortran+siesta3.1安装过程