首页 > 编程语言 >轻量级图像识别算法笔记(一)

轻量级图像识别算法笔记(一)

时间:2024-07-26 20:58:17浏览次数:13  
标签:级联 图像识别 卷积 cv2 分类器 算法 轻量级

轻量级图像识别算法

一、什么是轻量级图像识别算法?为什么要用轻量级图像识别算法?

什么是轻量级图像识别算法?

​ 轻量级识别算法是指那些设计和优化以在资源受限环境中高效运行的机器学习和深度学习算法。

为什么要使用轻量级图像识别算法?

  1. 设备限制:很多实际应用场景中,嵌入式设备、移动设备和物联网设备的计算能力和存储空间有限。
  2. 实时性要求:在一些应用场景中,如自动驾驶、实时监控等,需要快速响应,轻量级算法可以提供更快的处理速度。
  3. 节能环保:减少计算资源的消耗,降低能耗,对于能源受限的场景尤为重要。

二、轻量级图像识别算法的发展历程及主要研究团队

​ 随着深度学习的发展,轻量级图像识别算法逐渐成为研究热点。以下是一些重要的轻量级图像识别算法及其研究团队:

  1. MobileNet:Google团队于2017年提出的基于深度可分离卷积(Depthwise Separable Convolution)的轻量级网络MobileNetv1。后续该团队于2018年推出了MobileNetv2,又于2019年推出了MobileNetv3。
  2. ShuffleNet:ShuffleNet是Face++(旷视)在2017年发布的一个高效率可以运行在手机等移动设备的网络结构。后续该团队于2018年推出了ShuffleNetv2。
  3. SqueezeNet:由加州大学伯克利分校和斯坦福大学的研究人员于2016年发布。
  4. EfficientNet:Google团队于 2019 年发布。

三、各种轻量级图像识别算法的基本原理、优缺点

  1. MobileNet

    • 基本原理:MobileNet使用深度可分离卷积,将标准卷积分解为深度卷积和逐点卷积,显著减少了计算量和参数量。
      在这里插入图片描述

    • 优点:由于采用深度可分离卷积和通道折叠技术,MobileNet 模型参数量远小于传统的卷积神经网络模型,计算复杂度显著降低,适用于移动设备和嵌入式系统。同时MobileNet 支持通过设置宽度乘子和输入通道折叠系数来调节模型复杂度,从而适应不同的资源环境和应用需求。

    • 缺点:为了节省计算资源和减少参数数量,MobileNet 可能在一些计算机视觉任务中会存在一定的准确率损失,尤其是在精度要求较高的场合。与传统的卷积神经网络模型相比,MobileNet 需要更多的训练数据来获得良好的识别性能,因此在数据量有限的情况下可能训练不足。

  2. ShuffleNet

    • 基本原理:ShuffleNet 使用了分组卷积的策略,即将输入通道分成多个组,并在每个组上应用卷积。这减少了计算量且有助于降低模型复杂度。在分组卷积之后,ShuffleNet 采用通道打乱的机制,将不同组之间的通道进行重排。这步操作的目的是增强不同组间的信息交流,确保网络能学习到更丰富的特征。ShuffleNet 还利用了深度可分离卷积,深度卷积只在每个输入通道上执行卷积,而逐点卷积则在所有通道上进行卷积,从而减少参数和计算量。最后作者进一步将分组卷积和深度可分离卷积推广为一种新的形式——利用通道洗牌操作( Channel Shuffle Operation )。
      在这里插入图片描述

    • 优点:在降低计算量的同时,ShuffleNet 仍然能够提供相对较高的分类准确率。ShuffleNet 还可以与其他神经网络架构结合,应用于不同的任务中,增强了其适应性。

    • 缺点:ShuffleNet使用分组卷积来减少计算量,但这可能导致某些信息的丢失,因为组卷积限制了不同组之间的交互。而且ShuffleNet对输入数据的预处理和增强比较敏感,如果输入数据质量不高或者预处理不当,可能会影响模型的识别性能。

  3. SqueezeNet

    • 基本原理:SqueezeNet通过引入"Fire模块",其中包含一个squeeze层(使用1x1卷积)和一个expand层(使用1x1和3x3卷积)。这种设计极大地减少了模型的参数量。
      在这里插入图片描述

    • 优点:模型参数少,占用存储空间小;适合在内存受限的设备上运行。

    • 缺点:在极端压缩的情况下,可能会导致识别精度下降。

  4. EfficientNet

    • 基本原理:EfficientNet通过复合缩放方法,同时缩放网络的深度、宽度和分辨率,以优化性能和效率。
      在这里插入图片描述

    • 优点:在多种资源受限条件下表现出色;具有较高的识别精度。

    • 缺点:模型设计相对复杂,训练过程中需要较大的计算资源。

四、级联分类器算法

1. 提出背景

​ 在计算机视觉领域,尤其是在目标检测任务中,如何快速而准确地从图像中识别出特定对象是一个挑战。传统的基于规则的方法和简单的机器学习分类器难以达到实时性和准确性的平衡。因此,为了提高目标检测的效率和准确性,Paul Viola和Michael Jones在2001年提出了级联分类器算法。

2. 原理

​ 级联分类器算法的核心思想是通过级联多个弱分类器来形成一个强分类器。每个弱分类器都相对简单,可能只是一个简单的特征检测器,比如基于Haar特征的分类器。单独来看,这些弱分类器的性能可能并不出色,但当它们级联起来时,可以在保持较高准确性的同时,显著提高处理速度。 这种方法通过Adaboost算法来实现。Adaboost是一种迭代算法,它选择一系列的弱分类器,并将它们结合起来形成一个在数据集上表现强劲的强分类器。在级联分类器中,每个强分类器都关注之前分类器错分的样本,通过赋予这些样本更高的权重,让后续的分类器更加关注这些难以分类的样本。

  • Haar特征
    在这里插入图片描述

  • LBP特征
    在这里插入图片描述

  • 级联结构
    在这里插入图片描述

3. 如何运用

训练级联分类器
  • 数据收集:首先需要收集大量的正样本(包含目标的图像)和负样本(不包含目标的图像)。
  • 特征提取:使用Haar特征或其他特征(如LBP、HOG等)来提取图像特征。
  • Adaboost训练:应用Adaboost算法,迭代选择和训练弱分类器,并将它们组合成强分类器。
  • 级联构建:将多个强分类器级联起来,每个分类器都关注前一级分类器错分的样本。
在目标检测中使用
  • 图像预处理:将输入图像进行归一化、灰度化处理,使其适用于分类器。
  • 特征计算:计算图像的Haar特征或其他选定的特征。
  • 分类器检测:将图像特征送入级联分类器进行检测。
  • 速度与准确度平衡:由于级联结构,只有在前一个分类器确定物体不存在时,后续分类器才不会再对当前窗口进行检测,这样可以在保持较高准确性的同时,提高处理速度。 级联分类器算法在人脸检测等领域已经取得了显著的应用效果。通过OpenCV等计算机视觉库,研究者可以方便地实现和部署级联分类器。在实际应用中,通过不断的优化和改进,这一算法已经可以满足许多实时性要求较高的场景。

五、在树莓派4B上部署级联分类器算法

1.搭建环境

2.调用自带的xml文件识别人脸

  1. 代码:
import cv2
import time

# 加载Haar级联分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# 初始化摄像头
cap = cv2.VideoCapture(0)

# 初始化帧率计数
fps = 0
start_time = time.time()

while True:
    # 捕捉帧
    ret, frame = cap.read()

    if not ret:
        break

    # 转换为灰度图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 检测人脸
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

    # 绘制人脸矩形框
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

    # 计算帧率
    end_time = time.time()
    fps = 1 / (end_time - start_time)
    start_time = end_time

    # 显示帧率
    cv2.putText(frame, f'FPS: {fps:.2f}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)

    # 显示结果帧
    cv2.imshow('Face Recognition', frame)

    # 按q键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()

  1. 运行结果
    在这里插入图片描述

标签:级联,图像识别,卷积,cv2,分类器,算法,轻量级
From: https://blog.csdn.net/Z2242078395/article/details/140720932

相关文章

  • 算法笔记|Day8字符串II
    算法笔记|Day8字符串II☆☆☆☆☆leetcode151.翻转字符串里的单词题目分析代码☆☆☆☆kamacoder55.右旋字符串(待补充)题目分析代码☆☆☆☆☆leetcode28.实现strStr()题目分析代码☆☆☆☆☆leetcode459.重复的子字符串题目分析代码☆☆☆☆☆leetcode151......
  • 2024“钉耙编程”中国大学生算法设计超级联赛(3)
    Preface徐神是我们的红太阳,最后2min切了一道极难的string使得在这场前期爆炸的局面最后没有崩得太难看这场前期的开题顺序有点问题导致前5题出的很慢,中后期开始三人一人写一题,然后经典三开三卡好在最后我在WA了五发后写对拍把B过了,徐神又压线过了string,但比较可惜的......
  • 数学建模竞赛中应掌握的10类算法
    数学建模竞赛中应掌握的10类算法这篇文章是搬运自2004年发表在MATHEMATICALMODELING即《数模》上的一篇文章,作者是董乘宇,曾任SHUMO.COM论坛“编程交流”版版主,获2002年全国大学生数学建模竞赛一等奖。尽管这篇文章至今已经有了整整20年的时间,但考虑到在数学建模领域或者......
  • 深度学习与图像识别学习笔记day2(numpy数组的方法)
    创建numpy数组importnumpyasnpnparray=np.array([iforiinrange(10)])print(nparray)创建数值都为0的数组importnumpyasnpa=np.zeros(10)print(a)得到的结果0都有一个小数点,调用a.dtype创建的向量类型为dtype(‘float64‘)创建整数型a=np.zeros(10,d......
  • 算法与算法分析
    目录一.前言二.算法的特性和要求三.分析算法--时间效率四.分析算法--空间效率一.前言    算法就是对特定问题求解方法和步骤的一种描述,它是指令的有限序列。其中,每个指令表示一个或多个操作。总而言之,我们数据结构就是通过算法实现操作。而我们的算法又是根......
  • 【MATLAB源码-第159期】基于matlab的胡桃夹子优化算法(NOA)机器人栅格路径规划,输出做短
    操作环境:MATLAB2022a1、算法描述胡桃夹子优化算法(NutcrackerOptimizationAlgorithm,NOA)是一个灵感来源于胡桃夹子的故事的元启发式优化算法。这个故事中,胡桃夹子是一个能够将坚果壳轻易地破开以获取内部果仁的工具。在优化算法的语境下,这个过程被比喻为寻找问题解决方案......
  • 【基础算法】高精度算法
    高精度算法高精度加法模板:模板题+详解高精度减法模板:模板题+详解高精度乘法模板模板题+详解高精度除法模板模板题+详解计算机最初、也是最重要的应用就是数值运算。在编程进行数值运算时,有时会遇到运算的精度要求特别高,远远超过各种数据类型的精度范围;有时数......
  • 灭火器检测算法:防患未然,精准高效,AI智能守护加油站消防安全
    随着科技的飞速发展和安全意识的不断提升,加油站作为易燃易爆场所,其消防安全管理显得尤为重要。其中,消防灭火器的有效部署和及时维护是保障加油站安全的关键环节。近年来,AI技术在消防安全领域的应用日益广泛,特别是加油站消防灭火器检测AI算法的研发与应用,为加油站的消防安全管理提......
  • 「代码随想录算法训练营」第二十一天 | 回溯算法 part3
    93.复原IP地址题目链接:https://leetcode.cn/problems/restore-ip-addresses/题目难度:中等文章讲解:https://programmercarl.com/0093.复原IP地址.html视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/题目状态:好难,看题解通过思路:和分割回文串一样,甚至更难,在单层......
  • 【数据结构与算法】快速排序万字全攻略:hoare版本、挖坑法、前后指针法、优化版、非递
          ......