当前位置: 首页 > article >正文

PaddleClas学习3——使用PPLCNet模型对车辆朝向进行识别(c++)

使用PPLCNet模型对车辆朝向进行识别

  • 1 准备环境
  • 2 准备模型
    • 2.1 模型导出
    • 2.2 修改配置文件
  • 3 编译
    • 3.1 使用CMake生成项目文件
    • 3.2 编译
    • 3.3 执行
    • 3.4 添加后处理程序
      • 3.4.1 postprocess.h
      • 3.4.2 postprocess.cpp
      • 3.4.3 在cls.h中添加函数声明
      • 3.4.4 在cls.cpp中添加函数定义
      • 3.4.5 在main.cpp中调用
  • 4 模型预测
    • 4.1 测试结果
    • 4.2 与python预测结果对比

1 准备环境

参考上一篇:Windows PaddleSeg c++部署

2 准备模型

2.1 模型导出

对上一篇 使用PPLCNet模型对车辆朝向进行识别 训练得到模型进行转换。将该模型转为 inference 模型只需运行如下命令:

python tools\export_model.py -c .\ppcls\configs\PULC\vehicle_attribute\PPLCNet_x1_0.yaml -o Global.pretrained_model=output/PPLCNet_x1_0/best_model -o Global.save_inference_dir=./deploy/models/class_vehicle_attribute_infer

训练得到的模型
图2.1 训练得到的模型
在这里插入图片描述
图2.2 导出的模型

2.2 修改配置文件

deploy/configs/PULC/vehicle_attribute/inference_vehicle_attribute.yaml
修改Global下的infer_imgsinference_model_dir

Global:
  infer_imgs: "./images/PULC/vehicle_attribute/0002_c002_00030670_0.jpg"
  inference_model_dir: "./models/class_vehicle_attribute_infer"
  batch_size: 1
  use_gpu: True
  enable_mkldnn: True
  cpu_num_threads: 10
  #benchmark: False
  enable_benchmark: False
  use_fp16: False
  ir_optim: True
  use_tensorrt: False
  gpu_mem: 8000
  enable_profile: False

3 编译

工程整体目录结构如下:

G:/paddle/c++
  ├── paddle_inference
G:/paddle
  ├── PaddleClas-release-2.5

3.1 使用CMake生成项目文件

在这里插入图片描述

3.2 编译

用Visual Studio 2022打开cpp\build\clas_system.sln,将编译模式设置为Release,点击生成->生成解决方案,在cpp\build\Release文件夹内生成clas_system.exe

3.3 执行

进入到build/Release目录下,将准备的模型和图片放到clas_system.exe同级目录,build/Release目录结构如下:

Release
├──clas_system.exe                # 可执行文件
├──images         				  # 测试图片
    ├── PULC
        ├── vehicle_attribute
        	├── 0002_c002_00030670_0.jpg
├──configs         				  # 配置文件
    ├── PULC
        ├── vehicle_attribute
        	├── inference_vehicle_attribute.yaml
├──models      					  # 推理用到的模型
    ├── class_vehicle_attribute_infer
    	├── inference.pdmodel          # 预测模型的拓扑结构文件
    	├── inference.pdiparams        # 预测模型的权重文件
    	└── inference.pdiparams.info   # 参数额外信息,一般无需关注
├──*.dll                          # dll文件

3.4 添加后处理程序

3.4.1 postprocess.h

// postprocess.h
#include <iostream>
#include <vector>

namespace PaddleClas {
   

	class VehicleAttribute {
   

	public:
		float color_threshold = 0.5;
		float type_threshold = 0.5;
		float direction_threshold = 0.5;

		std::vector<std::string> color_list = {
    "yellow", "orange", "green", "gray", "red", "blue", "white",
			"golden", "brown", "black" };
		std::vector<std::string> type_list = {
    "sedan", "suv", "van", "hatchback", "mpv", "pickup", "bus",
			"truck", "estate" };
		std::vector<std::string> direction_list = {
    "forward", "sideward", "backward" };

		std::string run(std::vector<float>& pred_data);
	};
}

3.4.2 postprocess.cpp

// postprocess.cpp

#include "include/postprocess.h"
#include <string>
namespace PaddleClas {
   
	std::string VehicleAttribute::run(std::vector<float>& pred_data) {
   
		int color_num = 10;
		int type_num = 9;
		int direction_num = 3;

		int index_color = std::distance(&pred_data[0], std::max_element(&pred_data[0

http://www.kler.cn/a/163092.html

相关文章:

  • TCP/IP协议,TCP和UDP区别
  • Unity3D 包体裁剪与优化详解
  • python实战(八)——情感识别(多分类)
  • 推荐一款好用的postman替代工具2024
  • Systemd: disable和mask的区别
  • c#使用COM接口设置excel单元格宽高匹配图片,如何计算?
  • 希尔排序详解:一种高效的排序方法
  • go语言 grpc 拦截器
  • 前端使用视频作为背景图的方法
  • 深入了解 Axios 拦截器
  • log4j(日志的配置)
  • C语言WFC实现绘制贝塞尔曲线的函数
  • 【交流】PHP生成唯一邀请码
  • 安装node.js并创建第一个vue项目
  • 【EI会议征稿中】2024年第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024)
  • Navicat 技术指引 | 适用于 GaussDB 分布式的数据迁移工具
  • 华为配置Smart Link主备备份示例
  • vue3递归组件---树形组件
  • 【数据仓库-10】-- 数据仓库、数据湖和湖仓一体对比
  • 剑指 Offer(第2版)面试题 21:调整数组顺序使奇数位于偶数前面
  • 做数据分析为何要学统计学(4)——什么问题适合使用卡方检验?
  • 考研真题数据结构
  • python3安装redis
  • Navicat 技术指引 | 适用于 GaussDB 分布式的模型功能
  • Django的logging-日志模块的简单使用方法
  • 微信小程序网络请求二次封装