目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)

目标分类

  • 一、目标分类介绍
    • 1.1 二分类和多分类的区别
    • 1.2 单标签和多标签输出的区别
  • 二、代码获取
  • 三、数据集准备
  • 四、环境搭建
    • 4.1 环境测试
  • 五、模型训练
  • 六、模型测试
    • 6.1 多标签训练-单标签输出结果
    • 6.2 多标签训练-多标签输出结果

一、目标分类介绍

目标分类是一种监督学习任务,其目标是根据输入数据的特征将其分配到预定义的类别中。这种分类方法在许多实际应用中都有广泛的应用,如垃圾邮件检测、图像识别、情感分析等。

目标分类的基本流程包括:数据预处理(如清洗、标准化)、特征提取、模型选择和训练、模型评估和优化。其中,模型的选择和训练是关键步骤,常见的分类算法有决策树、支持向量机、神经网络等。

目标分类的优点是可以自动地进行分类,无需人工干预,同时也可以通过调整模型参数来提高分类的准确性。但是,目标分类也存在一些挑战,如数据的不平衡问题、过拟合问题等。

1.1 二分类和多分类的区别

二分类是指将样本分为两个类别,多分类是指将样本分为多个类别。在机器学习中,常见的分类算法有决策树、支持向量机、神经网络等。其中,决策树是一种基于规则的分类算法,支持向量机是一种基于间隔最大化的分类算法,神经网络是一种基于非线性映射的分类算法。对于多分类问题,可以采用一对多的模型,即将一个二分类器用于多个类别的预测;也可以采用多对多的模型,即将多个二分类器用于多个类别的预测 。

1.2 单标签和多标签输出的区别

单标签输出是指模型的输出只有一个预测值,即 f (x) = y。多标签输出是指模型的输出具有多个预测值,即 f (x_1,x_2,…,x_n) = y_1, y_2,…,y_n。在多标签分类中,每个输入样本需要零个或多个标签作为输出,同时需要输出 。

二、代码获取

  • 支持自定义数据集训练
  • 支持网络架构:resnet18,resnet50,mobilenet_v2,googlenet
  • 整套训练代码和测试代码(Pytorch版本)
  • 支持多种优化器选择
  • 支持选择多种损失函数:交叉熵、labelSmoothing、BCE等
  • 所有的配置文件写在yaml文件,更方便管理

在这里插入图片描述
在这里插入图片描述

三、数据集准备

在这里插入图片描述

四、环境搭建

安装python、torch、torchvision和pip安装requirements
安装python可以通过anaconda安装虚拟环境,python == 3.7.11
torch和torchvision版本是torch 1.8.0+cpu和torchvision 0.9.0+cpu

  • 如果安装gpu就去这里面下载对应的torch和torchvision的版本就行,需要先安装cuda
  • https://download.pytorch.org/whl/torch_stable.html

参考这篇博客:点击

4.1 环境测试

在这里插入图片描述
在这里插入图片描述

五、模型训练

在这里插入图片描述
然后运行python train.py即可开始训练。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、模型测试

在这里插入图片描述
在这里插入图片描述
设置以上五个地方。由于网络真实预测的时候,可能会出现一张图片包含多种分类的目标。考虑到这种情况就不能简单的用argmax来获取最大值的索引了,所以我们应该通过设置阈值来记录相应类别的索引,然后再根据索引回溯到我们原始的目标信息。
修改后的代码如下

	  # 单标签分类pred_index = np.argmax(prob_scores, axis=1)pred_score = np.max(prob_scores, axis=1)

修改为

    def filter_array(self, arr, threshold):# 获取满足条件的索引和值arr = arr.flatten()indices = np.where(arr >= threshold)[0]values = arr[indices]return indices, valuespred_index,pred_score = self.filter_array(prob_scores, threshold)

这里的阈值可以直接通过参数来进行设置。

在这里插入图片描述
在这里插入图片描述

6.1 多标签训练-单标签输出结果

如果只需要输出单个目标,需要修改成以下地方
在这里插入图片描述

6.2 多标签训练-多标签输出结果

修改成这样
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/131926.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用AirDroid远程访问安卓设备屏幕?

屏幕镜像也叫屏幕截图或投屏,是AirDroid 个人版的一个免费功能,局域网或非局域网条件下都可以使用。 利用AirDroid的屏幕镜像功能,你可以将自己的安卓设备投屏到电脑进行直播或开会演示;也可以将安卓设备的屏幕共享到另一台手机或…

【Docker】Docker简介

Docker简介 📋导航 1. Docker简介1.1 什么是Docker?1.2 什么是容器?1.3 容器的优势?1.4 Docker的优势?1.5 虚拟技术与容器技术Docker的区别?1.6 为什么学习Docker? 2. 安装Docker3. Docker架构4. Docker命…

碎片笔记 | 大模型攻防简报

前言:与传统的AI攻防(后门攻击、对抗样本、投毒攻击等)不同,如今的大模型攻防涉及以下多个方面的内容: 目录 一、大模型的可信问题1.1 虚假内容生成1.2 隐私泄露 二、大模型的模型安全问题(传统AI攻防&…

Apache Doris 2.0 如何实现导入性能提升 2-8 倍

数据导入吞吐是 OLAP 系统性能的重要衡量标准之一,高效的数据导入能力能够加速数据实时处理和分析的效率。随着 Apache Doris 用户规模的不断扩大, 越来越多用户对数据导入提出更高的要求,这也为 Apache Doris 的数据导入能力带来了更大的挑战…

Unity ProBuilder(自己创建斜面、拐角)

目录 基础操作 下载 打开面板 新增对象 材质保存 1.斜面实例 2.拐角实例 3.切割实例 4.单独面赋值 基础操作 下载 打开面板 新增对象 选中想创建的块体后,在编辑器见面拉出块体 材质保存 打开材质编辑器后,将材质赋值,之后&am…

简单记录一下Splunk ES 升级

1: 背景: 现在有些app 产品对splunk ES (enterprise security) 的版本有要求,这个就要求splunk ES 随着Splunk enterprise 也一起升级,下面先列一下各个版本的兼容: Splunk products version compatibility matrix - Splunk Documentation 下面列出的8.2.11 的版本: 2:…

2023/9/13 -- C++/QT

作业&#xff1a; 1> 将之前定义的栈类和队列类都实现成模板类 栈&#xff1a; #include <iostream> #define MAX 40 using namespace std;template <typename T> class Stack{ private:T *data;int top; public:Stack();~Stack();Stack(const Stack &ot…

时序数据库 TimescaleDB 安装与使用

TimescaleDB 是一个时间序列数据库&#xff0c;建立在 PostgreSQL 之上。然而&#xff0c;不仅如此&#xff0c;它还是时间序列的关系数据库。使用 TimescaleDB 的开发人员将受益于专门构建的时间序列数据库以及经典的关系数据库 (PostgreSQL)&#xff0c;所有这些都具有完整的…

数据库与身份认证

1. 数据库的基本概念 1.1 什么是数据库 数据库&#xff08;database&#xff09;是用来组织、存储和管理数据的仓库。 当今世界是一个充满着数据的互联网世界&#xff0c;充斥着大量的数据。数据的来源有很多&#xff0c;比如出行记录、消费记录、浏览的网页、发送的消息…

防火墙(Firewall)

目录 一、概述 二、iptables 三、iptable的用法 一、概述 防火墙的作用 用于保护内网安全的一种设备 依据规则进行防护 用户定义规则 允许或拒绝外部用户访问 防火墙分类 逻辑上划分&#xff0c;防火墙可以大体分为主机防火墙和网络防火墙主机防火墙&#xff1a;针对…

Redis缓存设计与性能优化

多级缓存架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c; 缓存层和存储层都不会命中&#xff0c; 通常出于容错的考虑&#xff0c; 如果从存储层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询&#xff0c; 失去…

WebDAV之π-Disk派盘 + BubbleUPnP

BubbleUPnP是一款功能强大的Android播放器,支持UPnP/DLNA多屏互动。它可以将手机内容投屏到电视大屏上,与家人和朋友一起共享。此外,BubbleUPnP还提供了丰富的音乐和影视资源,您可以在线搜索并播放喜欢的内容。 以下是BubbleUPnP的一些主要特点: 1. 支持Chromecast和转码…

在PHP8中向数组添加元素-PHP8知识详解

在php8中向数组添加元素有多种方法&#xff0c;在这里主要讲解几个常用的方法&#xff1a;使用方括号[]添加元素、使用array_unshift()函数&#xff0c;向数组的头部添加元素、使用array_push()函数&#xff0c;向数组的尾部添加元素、使用array_splice()函数添加元素。 1、使用…

【新版】系统架构设计师 - 软件架构设计<SOA与微服务>

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 架构 - 软件架构设计&#xff1c;SOA与微服务&#xff1e; 考点摘要 面向服务SOA&#xff08;★★★★&#xff09;微服务&#xff08;★★★★&#xff09; 基于/面向服务的&#xff08;SOA&#xff09; 在SO…

【深度学习-注意力机制attention 在seq2seq中应用】

注意力机制 为什么需要注意力机制attention机制的架构总体设计一、attention本身实现评分函数 attention在网络模型的应用-Bahdanau 注意力加性注意力代码实现 为什么需要注意力机制 这是一个普通的seq2seq结构&#xff0c;用以实现机器对话&#xff0c;Encoder需要把一个输入的…

Linux下的系统编程——信号(十一)

前言&#xff1a; 信号在我们的生活中随处可见&#xff0c; 如&#xff1a;古代战争中摔杯为号&#xff1b;现代战争中的信号弹&#xff1b;体育比赛中使用的信号枪...... 他们都有共性&#xff0c;信号是信息的载体&#xff0c;Linux/UNIX 环境下&#xff0c;古老、经典的通信…

SpringBoot系列(12):SpringBoot集成log4j2日志配置

最近项目上有使用到log4j2日志模板配置&#xff0c;本文简单总结一下之前的学习笔记&#xff0c;如有纰漏之处&#xff0c;请批评指正。 1. log4j2日志依赖 使用log4j2日志模板时&#xff0c;需要引入相关依赖&#xff0c;下边的两种依赖方式均可。 1.1 使用sl4j依赖时 <…

Mapbox加载arcgis的底图

成果图 这种底图基本上都是按照raster来加载的&#xff0c;主要就是知道地址了&#xff0c;拼参数 具体参数请参考官网 https://developers.arcgis.com/rest/services-reference/enterprise/export-map.htm 源码 我的服务列表是这样的 http://XXXX:XXXX/arcgis/rest/services/…

电子游戏冷知识

电子游戏一直在试图用技术还原一个真实或虚幻的世界&#xff0c;并在其中演绎和倾诉人类种种的情感和欲望。 对信息技术发展的贡献 游戏推动了芯片、网络、VR/AR等领域的技术进步和创新。根据中科院的研究报告&#xff0c;游戏技术对芯片产业的科技进步贡献率是14.9%&#xff…

Android13 大屏设备底部显示TaskBar并NavagatonBar居右

Android 13大屏设备时底下显示任务栏以及虚拟按键靠右的问题&#xff0c; 当前需求是去掉底部任务栏的显示&#xff0c;并把虚拟按键导航栏居中显示。 修改前的效果&#xff1a; 修改后的效果&#xff1a; 通过查看源码逻辑&#xff0c;可以发现只需把isTablet相关的逻辑和…