百度开源了一款黑科技!超轻量级目标检测算法,网友:这也太好用了!

PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices 提供了一个新的轻量级的物体探测器,它在移动设备的物体检测方面具有优越的性能。PP-PicoDet-S模型是第一个mAP(0.5:0.95)超过30,同时在ARM CPU上保持1M参数和100+ FPS。 此外,PP-PicoDet-L模型的mAP(0.5:0.95)仅在3.3M参数下就超过40。 阅读详情

说到目标检测,那可谓当前的自动驾驶、新零售、智慧工业等热门行业中的关键技术之一。目标检测不仅在行人、车辆、商品以及火灾检测等任务中发挥着极其关键的价值,在目标跟踪、姿态识别、手势控制、图像搜索等复合任务中也至关重要。

33e7845be289bfee0e984c59787091e4.gif

注*:以上视频引用于公开数据集[1]

图1 PaddleDetection产业应用效果示例

而在当前端侧智能、端云协同的行业发展趋势下,算法在移动端的部署应用则显得尤其重要。相较于统一的中心化处理,智能终端可以更好的适应差异化的环境,运维成本也更低。然而开发一个高质量的轻量目标检测模型却并不那么容易,现实环境中往往存在诸多挑战:

  1. 速度要快。比如工业视觉质量检测、自动驾驶等实时场景,延迟可以接受的范围往往需要在毫秒级别,要求极其严苛。

  2. 精度要高。在自动驾驶、火灾检测等场景,一个微小的错误都可能带来严重的损失,对误检、漏检的容忍度非常低。

  3. 体积要小。在手机端、车载、IOT等边缘端部署,算力和内存都有限,算法需要做到极致压缩。

  4. 部署环境复杂多样。硬件设备功耗、规格各色各样。适配和部署成本简直不要太大!

而今天介绍的最新开源的轻量级目标检测PP-PicoDet正是为了解决以上痛难点问题,针对模型的速度、精度和部署友好性做出优化,并取得了显著的成果。

其系列中的PP-PicoDet-S参数量仅有0.99M,却有30.6%mAP的精度,当输入尺寸为320时,推理速度甚至可达150FPS,不仅mAP比YOLOX-Nano高4.8%,端侧推理速度还提升了55%;相比NanoDet,mAP也高出了7.1%。

而PP-PicoDet-L则在仅有3.3M参数量的情况下mAP达到40.9%,比YOLOv5s高3.7%,推理速度提升44%。

8e68544329fa684938581e576a628f8b.png

注*:以上图片引用于报告[2]

图2 PP-PicoDet性能对比图

5e342b632eac67a2ecceac929841c7e6.gif

注*:GIF中FPS是包含前处理、预测、后处理的端到端耗时,以上视频引用于公开数据集[1]

图3 PP-PicoDet移动端和不同模型效果对比

不仅如此,在此次飞桨目标检测开发套件PaddleDetection v2.3推出的多目标实时跟踪系统PP-Tracking和超轻量人体关键点模型PP-TinyPose中,PP-PicoDet也是极其关键的技术模块。甚至在近日引起业界广泛关注的通用图像识别系统PP-ShiTu中,PP-PicoDet也被用作主体检测模块,以超轻量的体积实现了超越服务端大模型的效果!

话不多说,直接奉上开源代码实现:

https://github.com/PaddlePaddle/PaddleDetection

强烈建议各位Star收藏,深入研究使用。

PP-PicoDet技术报告地址:

https://arxiv.org/abs/2111.00902

PP-PicoDet Android APP下载体验指路:

https://paddledet.bj.bcebos.com/deploy/third_engine/PP-PicoDet.apk

(如链接不能正常访问,可复制到浏览器进行下载)

下面,就让我们来一起看看具体都有哪些优化策略,让PP-PicoDet又小又快又准:

更高性能的骨干网络

一个高性能的骨干网络对目标检测模型的性能提升有着至关重要的作用,PP-PicoDet采用了百度自研的超轻量、高精度骨干网络--ESNet(Enhanced ShuffleNet),使得整个目标检测模型不仅计算量更小、延迟更低、精度更高,同时还拥有更好的鲁棒性,能够更好地适配多种硬件环境。

ESNet是在ShuffleNetV2的基础上引入了SE模块和GhostNet中的Ghost模块,并新增深度可分离卷积,对不同通道信息进行融合来提升模型精度,同时还使用神经网络搜索(NAS)搜索更高效的模型结构,进一步提升模型性能,最终得到了在精度、速度全方面提升的骨干网络。

d0fd139d614cfb5e8b89fc22970d7192.png

注*:以上图片和数据引用于报告[2]

图4 ESNet & ShuffleNetV2性能对比

更轻量的Neck和Head

在Neck部分,PP-PicoDet提出了CSP-PAN结构,使用1*1的卷积将特征的通道数与BackBone输出的最小通道数进行统一,从而减少计算量,并保证特征融合性能不受影响。此外,PP-PicoDet还在CSP-PAN的基础上再下采样一次,添加一个更小的特征尺度来提升大物体的检测效果(见下图P6分支)。

与此同时,PP-PicoDet在Neck和Head部分均采用深度可分离卷积,将3 x 3卷积核增大至5×5,来增大感受野,还保持了速度不变。并且PP-PicoDet采用了通道数和Neck一致的“耦合头”,相比于小通道数的“解耦头”有更快的预测速度。

e57c0c5611998e0786b010d26d929ea8.png

注*:以上图片和数据引用于报告[2]

图5 PP-PicoDet整体架构示意图

更精准的采样策略

PP-PicoDet受到YOLOX等优秀算法的启发,使用了更精准的SimOTA采样策略,随训练过程动态变换标签分配方式,通过在目标区域采集高质量的样本来有效加速模型收敛。在此基础上对其中的cost矩阵计算进行改造,使用VFL+GIoU替代原本的CELoss+IoU,在速度无损的情况下还能有效提升1%的精度。

除此之外,PP-PicoDet还使用了H-Swish激活函数替代Relu;使用Cosine学习率衰减策略;使用Cycle-EMA;加入少量的如Crop、Flip、Multi-Scale等数据增强策略进行更稳定的训练,使得模型精度再次提升3%。

下面就让我们一起看看以上这一系列优化策略的最终效果,从中可以看到:无论是精度还是速度,PP-PicoDet都表现卓越!

2c52e9d09dc835caf724d82a69da5cd2.png

注*:测试设备为骁龙865,Threads=4,FP16,NCNN(Paddle Lite测试结果为*),以上图片和数据引用于报告[2]

图6 PP-PicoDet在COCO上和其他轻量级检测器性能试验对比

更完备的部署支持

作为真正的产业级开发利器,PaddleDetection通过完备支持飞桨原生推理库Paddle Inference、飞桨轻量化推理引擎Paddle Lite,使开发者可以快速在主流服务器、端侧芯片上实现高性能部署。

并且支持快速导出为ONNX格式,使开发者可以通过ONNX生态能力进行更广泛的算法部署应用,可以通过自己熟悉的移动端引擎进行PP-PicoDet的部署和推理。

除此以外,还提供OpenVINO加速部署方案、Android Demo,并且所有流程代码均已开源,全方位满足各类硬件环境部署需求,让深度学习落地的最后一公里再无障碍!

30fbe9edd5551e1ad4994ee81389452b.png

这样的一个目标检测开发神器已经被多家像国家电网、武汉铁路局、宁德时代这样的行业巨头公司所应用,真正实现了助力开发者,赋能产业智能化!

链接指路:

https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.3/configs/picodet

后续工作

PP-PicoDet的诞生源于开源,也是回馈开源。考虑到工业、互联网、自动驾驶等各行各业对移动端、边缘端部署轻量化目标检测模型的需求越来越强烈,PP-PicoDet致力于提供一种真正面向产业实践的,更高性能、轻量化、更易落地的目标检测方案,而非单纯追求模型指标。

与此同时,希望PP-PicoDet的算法本身以及优化思路,可以在给业界开发者带来更好算法的同时,也带来更多的算法优化启发,能够在此基础上继续提升产出更多优秀成果,也欢迎大家通过用户群、Issue等方式和我们探讨交流。在此希望和业界开发者携手为中国的开源技术而努力!

以上所有代码实现,均在PaddleDetection飞桨目标检测开发套件中开源提供:

https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.3

欢迎感兴趣的小伙伴一起体验、反馈建议并参与共建!你的Star是对我们工作的最大鼓励~

2e9b88d86b5dd4b4d451c8970afd3186.gif

课程预告

百度飞桨为了帮助大家能快速、深入、全面地了解目标检测技术,将于11月23-26日19:00-20:00特地开设“目标检测4日直播课”。由资深研发工程师倾囊相授多年“炼丹”经验,配套真实工业落地场景案例,最先进的调优方式、训练技巧、优化技巧和工业部署方案,带您一网打尽,千万不要错过!

微信扫码报名课程,即可加入官方技术交流群,在这里您可以获得更高效的问题答疑,与各行各业开发者充分交流,期待您的加入!更多飞桨的相关内容,请参阅以下内容。

扫码报名直播课,加入技术交流群

f69b9543577cbe94cf160a1add909534.png

精彩内容抢先看

e8ff0cdaf5c0296b8ba6edb722e55bbc.png


官网地址:

https://www.paddlepaddle.org.cn

飞桨PaddleDetection项目地址:

GitHub: https://github.com/PaddlePaddle/PaddleDetection

Gitee: https://gitee.com/paddlepaddle/PaddleDetection

(如果您觉得PP-PicoDet对您带来了一些启发或者的确实用的话,也欢迎您可以给PaddleDetection项目点亮Star。)

飞桨开源框架项目地址:

GitHub: https://github.com/PaddlePaddle/Paddle

Gitee: https://gitee.com/paddlepaddle/Paddle

图片数据引用说明:

[1] 所用到的所有数据分别来源于以下数据集:

《表计读数》数据来源于:中兴克拉数据集

《安全帽检测》数据来源于:https://github.com/njvisionpower/Safety-Helmet-Wearing-Dataset   

《自动驾驶》数据集来源于:Yu F, Chen H, Wang X, et al. Bdd100k: A diverse driving dataset for heterogeneous multitask learning[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2020: 2636-2645.

《人员摔倒检测》数据来源于:泰思通数据集

《火灾/烟雾检测》数据来源于:https://github.com/gengyanlei/fire-smoke-detect-yolov4

《PCB瑕疵检测》数据来源于:北京大学印刷电路板(PCB)瑕疵数据集

《多人舞蹈关键点检测》数据集来源于YouTube. (2016, August 10). 100 People of Dance [Video file]. Retrieved from https://www.youtube.com/watch?v=qrTi2aLx8dw  

《行人检测与跟踪》数据来源于公开数据集:Milan A, Leal-Taixé L, Reid I, et al. MOT16: A benchmark for multi-object tracking[J]. arXiv preprint arXiv:1603.00831, 2016.

《飞行器跟踪》、《战斗机跟踪》数据集来源于:Bai H, Cheng W, Chu P, et al. GMOT-40: A Benchmark for Generic Multiple Object Tracking[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 6719-6728.

《车辆跟踪》数据集来源于Zhu P, Wen L, Du D, et al. Vision meets drones: Past, present and future[J]. arXiv preprint arXiv:2001.06303, 2020.

《人头跟踪》数据来源于:Sundararaman R, De Almeida Braga C, Marchand E, et al. Tracking Pedestrian Heads in Dense Crowd[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 3865-3875.

[2] 图片及数据来自PP-PicoDet技术报告:https://arxiv.org/abs/2111.00902

飞桨 PP-PicoDet 配置与训练 论文 PP-PicoDet 项目github地址 conda 安装 paddlepaddle conda create -n paddle python=3.8 # 创建python环境 conda activate paddle # 进入环境 python3 -c "import platform;print(platform.architecture()[0]);print(platform.machine())" # 输出x86_64。确认Python和pip是64bit,并且处理器 阅读详情

相关推荐

PP-PicoDet: 超轻量级移动端目标检测算法助力超实时检测

YOLOv5是一种高效的目标检测算法,它通过使用轻量级的模型架构和一系列的优化策略,在保持高检测精度的同时,大幅提升了检测速度。而PicoDet是一种超轻量级的目标检测算法,它通过设计紧凑的主干网络和特征金字塔结构,实现了在移动设备上的高效目标检测。在这篇文章中,我们介绍了一种基于YOLOv5和PicoDet主干的移动端超轻量级目标检测算法,命名为PP-PicoDet,它能够在移动设备上实现超实时的目标检测。它在保持较高的检测精度的同时,达到了超实时的检测速度,为移动端的目标检测应用提供了强有力的支持。

QvisCs的博客 524

目标检测——PP-PicoDet算法解读

百度移动端检测算法PP-PicoDet算法解读

lishanlu136的博客 6322

ICT调试技巧:从基础到实战的全面指南

本文提供了一份全面的ICT调试技巧指南,涵盖从基础认知到实战应用的全过程。详细解析了ICT设备硬件结构、程序文件构成,并重点讲解了调试界面的核心参数与高效快捷键。通过跳线、电阻、电容及二极管等常见元器件的实战调试案例,分享了参数设置要点与典型问题解决方案,帮助工程师快速掌握ICT调试核心技能,提升测试效率与准确性。

weixin_29202213的博客 342

PP-PicoDet算法训练行人检测模型

PP-PicoDet模型特点:方案选择PP-PicoDet轻量化模型,主要看中PP-PicoDet体积小、速度快、精度较高的优势,非常适合本项目的部署环境和性能要求。同时,飞桨提供的预训练模型也可以最大程度上提升模型的收敛速度和精度。

qq_45437316的博客 2306

让Claude连续写代码24小时会发生什么?揭秘长时运行”架构背后的工程逻辑与未来

AI长时运行实验揭示软件开发新范式 Claude Opus通过Harness框架24小时独立开发全栈应用的成功实验,展示了AI从辅助工具向异步协作者的进化。实验采用"上下文轮转"机制解决记忆管理难题,将任务拆解为微周期并通过文件系统同步进度。核心突破在于:1)TDD成为AI自治基石,200+测试用例确保开发不偏航;2)文件取代对话成为AI间高效沟通介质;3)开发者角色重构为需求定义和框架设计者。该实验证明,通过严谨的架构约束和验收标准,AI可完成复杂长周期任务,预示着软件开发将从手工作坊

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 1093

从零开始搭建一个高性能电流镜:手把手教你设计Wide-Swing Cascode结构

本文详细解析了Wide-Swing Cascode电流镜的设计原理与实战流程。针对低压高性能模拟电路设计的核心挑战,文章手把手指导如何从理论分析、参数计算到仿真验证,搭建一个兼具高输出阻抗和低输出电压裕度的电流镜结构,并深入探讨了偏置电路生成、性能优化及版图匹配等关键要点。

weixin_29294975的博客 625

目标检测--轻量级网络(截至2022-04-21)

百度开放的一款轻量级网络结构,可以直接下载apk安装在安卓手机上运行 百度开源了一款黑科技!超轻量级目标检测算法,网友:这也太好用了!_菜鸟学Python的博客-优快云博客说到目标检测,那可谓当前的自动驾驶、新零售、智慧工业等热门行业中的关键技术之一。目标检测不仅在行人、车辆、商品以及火灾检测等任务中发挥着极其关键的价值,在目标跟踪、姿态识别、手势控制、图像...https://blog.youkuaiyun.com/cainiao_python/article/details/12146337...

GGY1102的博客 5570

YOLOv11 损失函数进阶:Varifocal Loss 让正负样本精度双升

创建self.alpha = alpha # 正样本权重系数self.gamma = gamma # 聚焦系数self.lambda_reg = lambda_reg # 回归损失权重# 分类损失:Varifocal Classification Loss# 正样本权重:基于预测置信度# 计算 BCE 损失并加权cls_loss = cls_loss.sum() / (cls_true.sum() + 1e-6) # 按正样本数归一化。

m0_71589036的博客 441

目标检测--从陌生到熟悉

一、计算机视觉中所说的目标检测是什么 二、目标检测的输入图像的尺寸问题 深度学习网络对处理图像的尺寸大小有限制吗? - 知乎结论:用CNN处理图像对尺寸不受大小限制。题主的问题主要有两个,一个是为何要resize,一个是是否要固定…https://www.zhihu.com/question/423889886/answer/1504270691解决目标检测中对输入图像大小的限制方法? - 知乎图像分类、检测算法中,要求输入图像必须是固定大小的,如Alexnet要求输入图像必须是227*227...

GGY1102的博客 2679

基于Simscape的双PID比例调速阀与比例溢流阀液压控制系统建模与仿真

本文提出了一种基于Simscape的双PID液压控制系统建模方法,通过比例调速阀和比例溢流阀实现液压缸速度与压力的解耦控制。系统采用Simscape Fluids物理建模,精确模拟液压元件非线性特性。文章详细介绍了液压被控对象建模过程,包括动力单元、比例阀组合建模、执行机构及传感器配置。同时设计了双PID控制器架构,分别控制速度环和压力环,并给出参数整定建议。该方法通过物理网络直接模拟流体流动和压力动态,相比传统传递函数法具有更高精度,为液压系统仿真提供了有效解决方案。

AI的内部世界的博客 284

CAPL通过lookupSignal和DBLookup获取DBC信号的属性信息

CAPL通过lookupSignal和DBLookup获取DBC信号的属性信息以及一些相关问题

天赐好车的博客 2889

毕设 深度学习行人口罩佩戴检测

摘要 本文介绍了一个基于深度学习的人脸口罩检测系统,该系统采用改进的SSD目标检测算法,能够准确识别戴口罩和不戴口罩的人脸。项目使用了一个小型化网络结构(28层卷积,仅101.5万参数),通过精心设计的anchor配置(1:1、1.6:1和2.4:1三种宽高比)优化检测效果。数据集包含500张戴口罩和1500张不戴口罩的人脸图片(1:3比例),并通过数据增强(如随机遮挡嘴巴区域)提升模型鲁棒性。实验结果表明,该系统能有效避免"手捂嘴欺骗检测"等问题,在WIDER Face数据集上性能显著优于传统Viola-

mabile123444的博客 158

跨应用服务器的自定义 IDoc 传输实战:以 CATSDB 工时为例,打通两套 SAP 系统的数据通道

本文介绍了在企业多SAP系统环境下,使用SAP ALE/IDoc技术实现工时数据跨系统传输的解决方案。文章从技术选型、系统架构到具体配置步骤进行了详细说明,重点阐述了IDoc/ALE在异步传输、全链路追踪和数据重放方面的优势。 文章详细讲解了端到端实施流程,包括Logical System配置、RFC Destination创建、Message Type定义、Segment和Basic Type设计等关键步骤。同时提供了出站封装的ABAP代码示例,强调调用MASTER_IDOC_DISTRIBUTE函数后执

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 173

毕业设计项目 深度学习行人口罩佩戴检测

摘要 本文介绍了一个基于深度学习的人脸口罩检测系统。该项目采用SSD架构的轻量级模型(仅28层卷积),通过分析人脸宽高比分布优化anchor设置,并加入特殊数据增强策略(如遮挡嘴巴)来提高模型鲁棒性。系统可实时检测图像/视频中佩戴口罩情况,准确区分戴口罩与未戴口罩的人脸。文章详细阐述了模型结构设计、数据集处理(500张戴口罩+1500张未戴口罩图片)及训练方法,提供了数据重命名等预处理代码示例。该方案在WIDER Face数据集上性能显著优于传统Viola-Jones算法,适合作为计算机视觉相关的毕业设计选

weixin_41562157的博客 167

手把手教你学Simulink--基于Simulink的微电网用DC-DC变换器仿真建模

微电网概述微电网:包括可再生能源发电设备、储能系统和负载,可以独立于大电网运行,也可以并网运行。重要性提高能源可靠性:通过本地化供电减少对外部电网的依赖。促进可再生能源利用:支持高效整合多种可再生能源。挑战多源管理:不同类型的能源产生方式各异,需设计灵活的电源管理系统。能量转换效率:需要高效的能量转换装置来确保能源的有效利用。通过上述步骤,我们简要介绍了如何基于Simulink进行微电网中DC-DC变换器的仿真建模。

MHD0815的博客 161

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

毕业设计 深度学习口罩佩戴检测系统

在深度学习时代之前,人脸检测一般采用传统的、基于手动设计特征的方法,其中最知名的莫过于Viola-Jones算法,至今部分手机和数码相机内置的人脸检测算法,仍旧采用Viola-Jones算法。然而,随着深度学习技术的蓬勃发展,基于深度学习的人脸检测算法逐步取代了传统的计算机视觉算法。在人脸检测最常用的数据集——WIDER Face数据集的评估结果上来看,使用深度学习的模型在准确率和召回率上极大的超过了传统算法。下图的青线是Viola-Jones的Precision-Recall图。

m0_69481576的博客 177

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 来点干货!3招Python 处理CSV、JSON和XML数据的简便方法!
下一篇: 清华大学四连冠,南科大获得最高性能奖!国际大学生超算竞赛SC21结果出炉
菜鸟学Python
博客等级 码龄9年 8062粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值