热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深度学习平台——PaddlePaddle参数优化与配置

摘要本文主要介绍的是的有关于的百度飞桨的目标的检测的算法的实战案例。通过使用的百度飞桨来实现的对自己目标进行识别的。后面本人将继续深入原理来对的目标的检测的原理和算法和系统的来实
摘要

本文主要介绍的是的有关于的百度飞桨的目标的检测的算法的实战案例。通过使用的百度飞桨来实现的对自己目标进行识别的。后面本人将继续深入原理来对的目标的检测的原理和算法和系统的来实现讲解。基于飞桨(PaddlePaddle)最大的优点就是的不需要想TensorFlow的版本一样复杂。配置简单。其次是的这个系统的的运行的操作也是简单的。同时兼容window10和Ubuntu系统。本文将深入得研究和学习了解的相关的网络的原理和网络的参数已经网络的选择。

配置模块设计与介绍

简介

为了使配置过程更加自动化并减少配置错误,PaddleDetection的配置管理采取了较为严谨的设计。

设计思想

目前主流框架全局配置基本是一个Python dict,这种设计对配置的检查并不严格,拼写错误或者遗漏的配置项往往会造成训练过程中的严重错误,进而造成时间及资源的浪费。为了避免这些陷阱,从自动化和静态分析的原则出发,PaddleDetection采用了一种用户友好、 易于维护和扩展的配置设计。

基本设计

利用Python的反射机制,PaddleDection的配置系统从Python类的构造函数抽取多种信息 - 如参数名、初始值、参数注释、数据类型(如果给出type hint)- 来作为配置规则。 这种设计便于设计的模块化,提升可测试性及扩展性。

API

配置系统的大多数功能由 ppdet.core.workspace 模块提供

  • register: 装饰器,将类注册为可配置模块;能够识别类定义中的一些特殊标注。
    • __category__: 为便于组织,模块可以分为不同类别。
    • __inject__: 如果模块由多个子模块组成,可以这些子模块实例作为构造函数的参数注入。对应的默认值及配置项可以是类名字符串,yaml序列化的对象,指向序列化对象的配置键值或者Python dict(构造函数需要对其作出处理,参见下面的例子)。
    • __op__: 配合 __append_doc__ (抽取目标OP的 注释)使用,可以方便快速的封装PaddlePaddle底层OP。
  • serializable: 装饰器,利用 pyyaml 的序列化机制,可以直接将一个类实例序列化及反序列化。
  • create: 根据全局配置构造一个模块实例。
  • load_config and merge_config: 加载yaml文件,合并命令行提供的配置项。

示例

以 RPNHead 模块为例,该模块包含多个PaddlePaddle OP,先将这些OP封装成类,并将其实例在构造 RPNHead 时注入。

# excerpt from `ppdet/modeling/ops.py`
from ppdet.core.workspace import register, serializable# ... more operators@register
@serializable
class GenerateProposals(object):# NOTE this class simply wraps a PaddlePaddle operator__op__ = fluid.layers.generate_proposals# NOTE docstring for args are extracted from PaddlePaddle OP__append_doc__ = Truedef __init__(self,pre_nms_top_n=6000,post_nms_top_n=1000,nms_thresh=.5,min_size=.1,eta=1.):super(GenerateProposals, self).__init__()self.pre_nms_top_n = pre_nms_top_nself.post_nms_top_n = post_nms_top_nself.nms_thresh = nms_threshself.min_size = min_sizeself.eta = eta# ... more operators# excerpt from `ppdet/modeling/anchor_heads/rpn_head.py`
from ppdet.core.workspace import register
from ppdet.modeling.ops import AnchorGenerator, RPNTargetAssign, GenerateProposals@register
class RPNHead(object):"""RPN HeadArgs:anchor_generator (object): `AnchorGenerator` instancerpn_target_assign (object): `RPNTargetAssign` instancetrain_proposal (object): `GenerateProposals` instance for trainingtest_proposal (object): `GenerateProposals` instance for testing"""__inject__ = ['anchor_generator', 'rpn_target_assign', 'train_proposal','test_proposal']def __init__(self,anchor_generator=AnchorGenerator().__dict__,rpn_target_assign=RPNTargetAssign().__dict__,train_proposal=GenerateProposals(12000, 2000).__dict__,test_proposal=GenerateProposals().__dict__):super(RPNHead, self).__init__()self.anchor_generator = anchor_generatorself.rpn_target_assign = rpn_target_assignself.train_proposal = train_proposalself.test_proposal = test_proposalif isinstance(anchor_generator, dict):self.anchor_generator = AnchorGenerator(**anchor_generator)if isinstance(rpn_target_assign, dict):self.rpn_target_assign = RPNTargetAssign(**rpn_target_assign)if isinstance(train_proposal, dict):self.train_proposal = GenerateProposals(**train_proposal)if isinstance(test_proposal, dict):self.test_proposal = GenerateProposals(**test_proposal)

对应的yaml配置如下,请注意这里给出的是 完整 配置,其中所有默认值配置项都可以省略。上面的例子中的模块所有的构造函数参数都提供了默认值,因此配置文件中可以完全略过其配置。

test_proposal:eta: 1.0min_size: 0.1nms_thresh: 0.5post_nms_top_n: 1000pre_nms_top_n: 6000train_proposal:eta: 1.0min_size: 0.1nms_thresh: 0.5post_nms_top_n: 2000pre_nms_top_n: 12000anchor_generator:# ...rpn_target_assign:# ...

RPNHead 模块实际使用代码示例。

from ppdet.core.workspace import load_config, merge_config, createload_config('some_config_file.yml')
merge_config(more_config_options_from_command_line)rpn_head = create('RPNHead')
# ... code that use the created module!

配置文件用可以直接序列化模块实例,用 ! 标示,如

LearningRate:base_lr: 0.01schedulers:- !PiecewiseDecaygamma: 0.1milestones: [60000, 80000]- !LinearWarmupstart_factor: 0.3333333333333333steps: 500

安装依赖

配置系统用到两个Python包,均为可选安装。

  • typeguard 在Python 3中用来进行数据类型验证。
  • docstring_parser 用来解析注释。

如需安装,运行下面命令即可。

pip install typeguard http://github.com/willthefrog/docstring_parser/tarball/master

相关工具

为了方便用户配置,PaddleDection提供了一个工具 (tools/configure.py), 共支持四个子命令:

  1. list: 列出当前已注册的模块,如需列出具体类别的模块,可以使用 --category 指定。

  2. help: 显示指定模块的帮助信息,如描述,配置项,配置文件模板及命令行示例。

  3. analyze: 检查配置文件中的缺少或者多余的配置项以及依赖缺失,如果给出type hint, 还可以检查配置项中错误的数据类型。非默认配置也会高亮显示。

  4. generate: 根据给出的模块列表生成配置文件,默认生成完整配置,如果指定 --minimal ,生成最小配置,即省略所有默认配置项。例如,执行下列命令可以生成Faster R-CNN (ResNet backbone + FPN) 架构的配置文件:

python tools/configure.py generate FasterRCNN ResNet RPNHead RoIAlign BBoxAssigner BBoxHead LearningRate OptimizerBuilder

如需最小配置,运行:

python tools/configure.py generate --minimal FasterRCNN BBoxHead
博文参考


推荐阅读
  • Envoy 流量分配策略优化
    在本研究中,我们对Envoy的流量分配策略进行了优化,旨在提高系统的稳定性和性能。实验环境包括一个前端代理服务(Envoy,IP地址为172.31.57.10)和五个后端服务。通过调整Envoy的配置,实现了更高效的流量分发和负载均衡,显著提升了整体系统的响应速度和可靠性。 ... [详细]
  • 基于TensorFlow的鸢尾花数据集神经网络模型深度解析
    基于TensorFlow的鸢尾花数据集神经网络模型深度解析 ... [详细]
  • 前面:链表的排序参考:链表的排序-冒泡,简单选择,插入排序,归并,快排——以leetcode14 ... [详细]
  • 理工科男女不容错过的神奇资源网站
    十一长假即将结束,你的假期学习计划进展如何?无论你是在家中、思念家乡,还是身处异国他乡,理工科学生都不容错过一些神奇的资源网站。这些网站提供了丰富的学术资料、实验数据和技术文档,能够帮助你在假期中高效学习和提升专业技能。 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 深入解析JWT的实现与应用
    本文深入探讨了JSON Web Token (JWT) 的实现机制及其应用场景。JWT 是一种基于 RFC 7519 标准的开放性认证协议,用于在各方之间安全地传输信息。文章详细分析了 JWT 的结构、生成和验证过程,并讨论了其在现代 Web 应用中的实际应用案例,为开发者提供了全面的理解和实践指导。 ... [详细]
  • 在Spring Boot项目中,通过YAML配置文件为静态变量设置值的方法与实践涉及以下几个步骤:首先,创建一个新的配置类。需要注意的是,自动生成的setter方法默认是非静态的,因此需要手动将其修改为静态方法,以确保静态变量能够正确初始化。此外,建议使用`@Value`注解或`@ConfigurationProperties`注解来注入配置属性,以提高代码的可读性和维护性。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 根据不同环境需求,利用 Vue CLI 的 `npm run build` 命令对项目进行定制化打包,如测试、预发布和生产环境。通过配置 `process.env` 变量,实现不同环境下接口和服务的动态切换,确保应用在各阶段都能高效运行和调试。 ... [详细]
  • 题目描述:21世纪水果公司专注于开发新型水果品种。本研究通过高级水果的最长公共子序列路径分析,探讨了不同水果品种之间的遗传关系和进化路径,为新品种的培育提供了科学依据。该方法不仅提高了品种鉴定的准确性,还为遗传多样性研究提供了新的视角。 ... [详细]
  • 本文提供了PyTorch框架中常用的预训练模型的下载链接及详细使用指南,涵盖ResNet、Inception、DenseNet、AlexNet、VGGNet等六大分类模型。每种模型的预训练参数均经过精心调优,适用于多种计算机视觉任务。文章不仅介绍了模型的下载方式,还详细说明了如何在实际项目中高效地加载和使用这些模型,为开发者提供全面的技术支持。 ... [详细]
  • 往期文章Prom ... [详细]
  • Causedby:java.nio.charset.MalformedInputException:Inputlength=1
    java.lang.IllegalStateException:Failedtoloadpropertysourcefromlocationclasspath:applicatio ... [详细]
author-avatar
心有阳光2502937567_240
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有