基于轻量级模型YOLOX-Nano的菜品识别系统

工程Gitee地址:
https://gitee.com/zhong-liangtang/ncnn-android-yolox-nano

一、YOLOX简介

YOLOX是一个在2021年被旷视科技公司提出的高性能且无锚框(Anchor-free)的检测器,在YOLO系列的基础上吸收近年来目标检测学术界的最新成果,如解耦头(Decoupled Head)、数据增强、无锚框、标签分配策略SimOTA(Simplified Optimal Transport Assignment)等等。同时YOLOX继承了YOLO系列容易部署的特点,提供了支持ONNX、TensorRT、ncnn和Openvino的部署版本。

二、YOLOX网络结构

YOLOX的网络有多种版本,本文介绍YOLOX-Nano的网络结构,它由四个部分构成,分别为输入端、用于特征提取的主干网络(Backbone)、用于特征融合的颈部网络(Neck)以及预测(Prediction)。YOLOX-Nano模型网络结构图如下所示。
在这里插入图片描述

输入端采取了Mosaic和Mixup两种数据增强方法,在输入图片时将图片的高和宽统一进行等比例转换。
主干网络使用CSPDarknet网络进行特征提取,CSPDarknet网络利用52层卷积神经网络进行特征提取,1层利用1×1卷积作为全连接层,共计53层卷积神经网络。在特征提取时,会把在特征提取过程中三部分不同尺度的特征信息直接和下一部分的颈部网络相连接。
颈部网络使用FPN结构进行特征融合,在该部分,已经在主干网络获得的特征会结合不同尺度的特征信息来进一步进行特征提取,使模型的性能以及小目标的检测能力得到提升。
在预测部分,在该部分使用解耦头、无锚框、标签分配策略SimOTA等先进技术,最后将所有的特征信息统一转换成二维矩阵[16]。

三、 YOLOX主要改进部分

1、解耦头
为解决分类和回归冲突问题[8],YOLOX提出了解耦头这一解决方案。YOLO系列所采用的耦合头(Coupled Head)把分类和回归任务都放在一个1×1卷积里实现,它首先通过一个1×1卷积把前面的特征图的通道数统一进行调整,再经过2个3×3卷积层来提取特征,最后利用一个1×1卷积层,分别到分类和回归检测头,同时在回归分支还增加了IoU分支,解耦头工作流程图如图所示。在使用了解耦头之后,训练时收敛速度和准确率都有所提高,并且解耦头对端到端版本的YOLO会提高一定的准确率,这些都体现了解耦头的训练和预测价值。
在这里插入图片描述
2、数据增强
YOLOX采用了Mosaic和MixUp数据增强方法。
MixUp数据增强方法是通过线性插值的方式混合两个样本和标签,扩大了训练数据,同时提升了模型的泛化能力。
Mosaic数据增强方法是在训练期间将四张图进行裁剪、拼接成一张新图,大幅度扩充了图片数据,避免因训练集背景相似而降低模型的泛化能力。
然而,轻量化模型YOLOX-Nano如果同时使用这两种数据增强的方法,在COCO数据集上的AP反而会降低,但在不使用MixUp数据增强方法的同时削弱Mosaic数据增强方法的使用,AP反而有所上升。
3、无锚框
YOLOX是一个基于无锚框的检测器,而之前的YOLO系列都是基于锚框(Anchor-based)的检测器,但基于锚框的检测器存在较多的问题。首先,锚框大小的选择是采用聚类分析的方法,在训练之前可以得到比较好的锚框,但是这些聚类的锚框没有一定的通用性,在预测新的图片时效果不佳。其次,锚框机制增加了检测头的复杂度,并且对每张图片增加了预测的数量,因此也增加了预测的时间[20]。由于不使用锚框进行预测与使用锚框相比在COCO数据集上的AP基本相同,因此使用无锚框策略对于YOLOX检测器的预测速度和准确率都有所提升。
4、标签分配策略SimOTA
SimOTA是OTA的简化版本,OTA是解决候选框分配问题,一般在分配正负样本时是根据ground-truth的IoU与Anchor进行分配,但是正负样本的分配需要优先考虑全局[21]。所以我们通常把候选框分配问题当成一个线性规划中的优化传输问题(Optimal Transport,OT)来处理,其原理是建立一个代价矩阵,如果有M个ground-truth以及与其对应的N个候选框,即M×N为代价矩阵, 矩阵中的每个元素就是该ground-truth与候选框的Loss值,Loss值越大则说明选取这对ground-truth和候选框的代价越大,优化传输的目的是选取ground-truth与候选框相匹配,使总体代价最小。
5、YOLOX-Nano模型
轻量化模型YOLOX-Nano是所有YOLOX模型中参数量最小的模型,其参数量(Parameters)为0.9M,浮点运算数(FLOPs)为1.08G,而它比参数量相当的NanoDet模型在COCO数据集上的AP高1.8%,比YOLOv4-Tiny模型的AP高10%[8]。更为重要的是,轻量化模型YOLOX-Nano可以被部署到移动端或其他嵌入式设备上,说明它有一定的工业价值,在应对实时检测的同时也能与设备的其他功能进行配合,共同完成工作。

四、试验环境与模型训练

模型训练的GPU为NVIDIA GeForce RTX 3070 Laptop GPU 8GB,在基于安装Anaconda 4.10.3和CUDA 11.1的Windows 10操作系统下进行训练,采用cuDNN 8.0深度学习库,处理器为AMD Ryzen 7 5800H with Radeon Graphics,计算机内存为16G,使用开源深度学习框架Pytorch作为开发环境。
模型训练方式及模型评价指标
本文利用采集的数据集训练轻量化模型YOLOX-Nano,使用YOLOX官方提供的代码进行训练,训练时,不启动优先使用显存和混合精度训练,data_num_workers设置为0,batch size设置为16,以YOLOX官方提供的YOLOX-Nano模型文件作为预训练权重文件,训练300代,在训练时,前285代每10代记录一次训练信息,后15代每代记录一次训练信息,其他训练参数默认。作为对比,food-101的披萨数据集也采用以上所述方式进行训练。
为了评价YOLOX-Nano模型对菜品的检测效果,对样本进行测试后计算AP50、AP50_95(AP50和AP50_95是MS COCO比赛的map计算方式,其中AP指的是准确率(Precision)和召回率(Recall)为X,Y轴作图围成的面积,50指的是IoU设置为0.5时的AP值,50_95 指的是IoU设置为 0.5~0.95,以0.05为步长计算AP的平均值)以及total_loss来对模型进行评价。
五、结果与分析
训练结果与分析
在完全相同的训练条件下,无论是采集的数据集还是food-101的披萨数据集,总损失值都有一定的降低,模型在采集的数据集和food-101的披萨数据集上的AP50在训练300代之后分别为99.4%和90.8%,AP50_95分别为71.9%和79.8%。从训练的效果可以看出,无论是采集的数据集还是food-101的披萨数据集,AP50和AP50_95在训练第10代之后都达到了较高值,这也说明了YOLOX采用解耦头之后,收敛速度快的特点。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32--SPI通信协议(3)SPI通信外设

前言 硬件SPI:通过硬件电路实现,所以硬件SPI速度更快,有专门的寄存器和 库函数 ,使用起来更方便。 软件SPI:也称模拟SPI,通过程序控制IO口电平模拟SPI时序实现,需要程序不断控制IO电平翻转&am…

Python 数据分析(PYDA)第三版(二)

原文:wesmckinney.com/book/ 译者:飞龙 协议:CC BY-NC-SA 4.0 四、NumPy 基础知识:数组和向量化计算 原文:wesmckinney.com/book/numpy-basics 译者:飞龙 协议:CC BY-NC-SA 4.0 此开放访问网络版…

Maven私服部署与JAR文件本地安装

Nexus3 是一个仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。 平常我们在获取 maven 仓库资源的时候,都是从 maven 的官方(或者国内的镜像)获取。团队的多人员同样的依赖都要从远程获取一遍,从网络方…

Cilium CNI深度指南

Cilium是基于eBPF的功能强大的CNI插件,为云原生环境提供了强大的网络和安全支持。原文: Cilium CNI: A Comprehensive Deep Dive Guide for Networking and Security Enthusiasts! 🌓简介 欢迎阅读为网络和安全爱好者提供的全面深入的指南! 本…

PCIe学习笔记(1)Hot-Plug机制

文章目录 Hot-Plug InitHot Add FlowSurprise Remove FlowNPEM Flow Hot-Plug Init PCIe hot-plug是一种支持在不关机情况下从支持的插槽添加或删除设备的功能,PCIe架构定义了一些寄存器以支持原生热插拔。相关寄存器主要分布在Device Capabilities, Slot Capabili…

进程间通信(5):信号灯集

信号灯也叫信号量,是不同进程间或一个给定进程内部不同线程间同步的机制。 信号灯集为信号量的集合,实现同步、互斥机制,配合共享内存使用,解决资源竞争问题。 函数:semget、semctl、semop 实现流程: 1…

《Git 简易速速上手小册》第5章:高级 Git 技巧(2024 最新版)

文章目录 5.1 交互式暂存5.1.1 基础知识讲解5.1.2 重点案例:为 Python 项目分阶段提交5.1.3 拓展案例 1:细粒度控制更改5.1.4 拓展案例 2:处理遗漏的更改 5.2 使用 Rebase 优化提交历史5.2.1 基础知识讲解5.2.2 重点案例:整理 Pyt…

【Java】eclipse连接MySQL数据库使用笔记(自用)

注意事项 相关教程:java连接MySQL数据库_哔哩哔哩_bilibilijava连接MySQL数据库, 视频播放量 104662、弹幕量 115、点赞数 1259、投硬币枚数 515、收藏人数 2012、转发人数 886, 视频作者 景苒酱, 作者简介 有时任由其飞翔,有时禁锢其翅膀。粉丝群1&…

Vue中v-if和v-show区别

Vue中v-if和v-show是两个常用的指令,用于控制元素的显示和隐藏。虽然它们都能达到相同的效果,但在实现机制和使用场景上有一些区别。本文将详细介绍v-if和v-show的区别,并且通过示例代码来演示它们的使用。 首先,让我们来看一下v…

深度学习图像分类相关概念简析+个人举例2(CNN相关原理概念与计算)

(2)卷积神经网络:英文全称Convolutional Neural Network,简称 CNN 是一种常用于图像分类的深度学习模型,其主要特点是包含了卷积层和池化层,能够提取图像的局部特征。输入层、卷积层、池化层、全连接层和输出层都是卷积…

不必为发“压岁钱”或“红包”烦恼

中国人的民俗——过年要发“压岁钱”,也称发“ 红包 ”,时间确定在除夕夜12点正。因为按照传统观念,除夕夜是阴阳交替重要时刻;发“压岁钱”,也代表着辟邪驱鬼、保佑平安。“岁”字的谐音“祟”,即灾祸&…

Win10系统启动盘制作

前面简单介绍了操作系统,但是怎样将操作系统安装到磁盘上呢。 一、操作系统引导 电脑启动大致流程: 预引导阶段:计算机通电后,系统自检,检查硬件是否正常。 引导阶段:BIOS或EFI在完成基本的硬件检测和平台初…

【GAMES101】Lecture 19 相机

目录 相机 视场 Field of View (FOV) 曝光(Exposure) 感光度(ISO) 光圈 快门 相机 成像可以通过我们之前学过的光栅化成像和光线追踪成像来渲染合成,也可以用相机拍摄成像 今天就来学习一下相机是如何成像的…

【模板初阶】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3. 类模板 3.1 类模板的定义…

夜天之书 #95 GreptimeDB 社群观察报告

GreptimeDB 是格睿科技(Greptime)公司研发的一款开源时序数据库,其源代码[1]在 GitHub 平台公开发布。 https://github.com/GreptimeTeam/greptimedb 我从 2022 年开始知道有 GreptimeDB 这个项目。2023 年,我注意到他们的 Commun…

Spring Boot + 七牛OSS: 简化云存储集成

引言 Spring Boot 是一个非常流行的、快速搭建应用的框架,它无需大量的配置即可运行起来,而七牛云OSS提供了稳定高效的云端对象存储服务。利用两者的优势,可以为应用提供强大的文件存储功能。 为什么选择七牛云OSS? 七牛云OSS提供了高速的…

【vscode】windows11在vscode终端控制台中打印console.log()出现中文乱码问题解决

1. 问题描述 在前端开发过程中使用vscode编写node.js,需要在控制台中打印一些中文信息,但是一直出现中文乱码问题,英文和数字都显示正常。在网上试了很多设置的办法,最终找到windos11设置中解决。 2. 原因 首先打开控制台&…

GEE入门篇|栅格数据集概述(四):其他卫星产品

目录 1.甲烷数据集 2.天气及气候数据 3.预先分类的土地用途和土地覆盖数据集 3.1ESA WorldCover 3.2 全球森林变化数据集 卫星还可以收集有关气候、天气和大气中存在的各种化合物的信息。这些卫星利用部分电磁频谱,以及不同物体和化合物在不同波长的阳光照射下…

Verilog刷题笔记22

题目: Build a priority encoder for 8-bit inputs. Given an 8-bit vector, the output should report the first (least significant) bit in the vector that is 1. Report zero if the input vector has no bits that are high. For example, the input 8’b100…

父母老了,耳朵听不清怎么办?

你有没有发现,随着年纪的增长,父母的耳朵好像越来越不好使了: 家里的电视声越放越大; 和他们说话常常讲到一半就被打岔; 一件事情要重复说好几遍才能听清; …… 也许父母没意识到问题的严重性&#xff0…