0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

物件检测进行模型训练的详细步骤

NVIDIA英伟达企业解决方案 来源:NVIDIA英伟达企业解决方案 作者:NVIDIA英伟达企业解 2022-05-13 10:57 次阅读

当前面的准备工作都已妥善之后,就可以进入模型训练的步骤,后面的工作就是计算设备的事情了。

4、 执行 TAO 模型训练:

TAO 工具提供提供 QAT (Quantize Aware Training) 量化感知的训练模式,不过目前 QAT 效果还在验证当中,倒也不急于使用,因此我们还是以标准模式来训练,就是将配置文件中 training_config 设置组的 “enable_qat” 参数设为 “false” 就行,然后直接执行指令块的命令,TAO 就会启动视觉类容器来执行模型训练任务。

这里提供两组执行训练所花费的时间参考数据:

  • NVIDIA Qudra RTX A4000/16GB 显存:48 秒/回合

  • NVIDIA RTX-2070/16GB 显存:67 秒/回合

  • 两张卡一起训练:40秒/回合

为了更有效率地执行,我们可以在training_config设置组里添加 “checkpoint_interval: 10” 参数,这样每 10 回合生成一个中间文件,这样能节省大约 7GB 的空间。现在检查一下所生成的中间模型文件,如下图所示总共 8 个。

e7b9fa68-d055-11ec-bce3-dac502259ad0.png

接下去我们看看这 8 个模型的训练效果如何,因为得挑一个精确度 (mAP) 最好的文件,进行后面的修剪任务。

通常越后面的模型 mAP 值越高,但这不是绝对的,最好是有明确的数据来做依据,才是比较科学的态度。在 experiment_dir_unpruned/ssd_training_log_resnet18.csv 提供这些记录,右键点击文件 -> Open With-> CSVTable 之后,就会看到如下图的内容。

e7f135aa-d055-11ec-bce3-dac502259ad0.png

表中可以看到,越下面模型的 mAP 值越高,这样就能明确的选择 “epoch_080” 的模型来进行后续工作,记得在 “%set_env EPOCH=” 后面填入参数值,例如要选择第 80 回合的模型文件,就输入 “080”,然后继续往下进行。

5、评估模型好的训练:

这个步骤的目的是为了确认模型是否符合要求?有时候可能效果最好的模型,效果还未达到预期目标,如果是这样的话,就得回到第 4 步骤,以前面找到效果最好的模型,作为迁移选项的预训练模型,就是将配置文件的 training_config 设置组的 “pretrain_model_path” 改成 ssd_resnet18_epoch_080.tlt 的完整路径,然后再做 80 回合的训练。

执行评估效果的结构在本指令块输出的最下方,如下图所示。

e82abc8a-d055-11ec-bce3-dac502259ad0.png

比对一下这里显示的精准度,与前面 ssd_training_log_resnet18.csv 记录的结果是相同的,其实这个步骤是有点冗余,可以忽略!

6、修剪模型:

如果您的模型要放在计算资源充沛的设备上执行推理的话,其实后面的步骤是可以省略的,因此修剪模型的目的,是要在精确度维持水平的基础上将模型进行优化,这对 Jetson 这类计算资源吃紧的边缘设备来说就非常重要,因为这对推理性能有很大的影响,因此要看您所需要执行推理的设备是什么,再决定是否要进行修剪。

每个神经网络都有各自的修剪重点,必须找到对应的说明文件,例如这里对ssd进行修剪,请访问https://docs.nvidia.com/tao/tao-toolkit/text/object_detection/ssd.html,在里面的 “Pruning the Model” 有非常详细的参数说明。

TAO 提供以下 6 种模型修剪的方式,设定值的粗体字为预设值

  • 标准化器 (normalizer):使用参数 -n,设定值为 “max/L2”;

  • 均衡器 (equalization_criterion):使用参数 -eq,设定值为 “union/ intersection/ arithmetic_mean/geometric_mean”;

  • 修剪粒度 (pruning_granularity):使用参数 -pq,设定值为正整数,预设值为 8

  • 修剪阈值 (pruning threshold):使用参数 -pth,设定值为小于 1 的浮点数,预设值为 0.1

  • 最小数量过滤器 (min_num_filters):使用参数 -nf,设定值为正整数,预设值为 16

  • 排除层 (excluded_layers):使用参数 -el,设定值为正整数,预设值为空值(不排除)

在大家还不熟悉这些参数用法时,最简单的方法就是调整阈值 (-pth) 的大小去找到平衡点,通常这个值越高就会损失较大的精度值,模型也会比较更小大。参数预设值为 0.1,差不多达0.3 已经是极限,再大可能就会让精准度低于一般要求。

这个步骤会用到 ssd_train_resnet18_kitti.txt 配置文件,修剪完的模型会存放在 -o参数所指定的目录,这里是“$USER_EXPERIMENT_DIR/experiment_dir_pruned”,输出的模型文件名为 “ssd_resnet18_pruned.tlt”,后面的“重新训练剪裁模型”步骤,就会以这个文件作为迁移学习的训练基础。

这个修剪过的模型文件还不能作为部署用途,还得经过下个步骤去重新训练之后,是我们最终所需要的版本。

7、重新训练修剪过的模型:

这个步骤与前面的模型训练几乎是一样的,唯一不同的地方就是前面以 NCG 下载resnet_18.hdf5 为基础导入迁移学习的功能,这里是以 ssd_resnet18_pruned.tlt 这个修剪过的文件为基础,同样用最前面的数据集进行训练。

以这个项目为例,未剪裁模型的大小为 101.7MB,用阈值为 0.1 所剪裁的重新训练模型大小只剩 22.5MB、阈值为 0.3 所剪裁的模型大小只剩 9.8MB。重新训练后同样会生成很多模型文件,同样查看 experiment_dir_retrain 目录下面的 ssd_training_log_resnet18.csv,挑出精度最好的一个准备下个评估环节。

8、评价重新训练的模型:

与前面的评估方式一样,找到效果最好的一个,然后将数值填入 “%set_envEPOCH=” 里,准备在训练设备上测试一下推理的效果。

如果修剪后重新训练的模型精度与未修剪的相差不多,这个模型就可以用来作为后面的推理测试,如果精度差距较大,就得回到第 6 步骤重新执行修剪工作与第 7 步骤重新训练,一直到获得满意精度的模型为止。

原文标题:NVIDIA Jetson Nano 2GB 系列文章(62):物件检测的模型训练与优化-2

文章出处:【微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    4588

    浏览量

    101702
  • TAO
    TAO
    +关注

    关注

    0

    文章

    10

    浏览量

    6971
  • 模型训练
    +关注

    关注

    0

    文章

    11

    浏览量

    1312

原文标题:NVIDIA Jetson Nano 2GB 系列文章(62):物件检测的模型训练与优化-2

文章出处:【微信号:NVIDIA-Enterprise,微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    谷歌模型训练软件有哪些?谷歌模型训练软件哪个好?

    谷歌在模型训练方面提供了一些强大的软件工具和平台。以下是几个常用的谷歌模型训练软件及其特点。
    的头像 发表于 03-01 16:24 276次阅读

    gis应用模型建模的步骤有哪些

    、精度和范围,分析用户的操作流程和功能需求,并确定模型的输入和输出。在这一步骤中,可以使用需求调查问卷、用户会议和需求分析报告等工具进行详细的需求分析。 2.数据获取和准备:在建立GI
    的头像 发表于 02-25 14:58 743次阅读

    如何基于深度学习模型训练实现圆检测与圆心位置预测

    Hello大家好,今天给大家分享一下如何基于深度学习模型训练实现圆检测与圆心位置预测,主要是通过对YOLOv8姿态评估模型在自定义的数据集上训练
    的头像 发表于 12-21 10:50 679次阅读
    如何基于深度学习<b class='flag-5'>模型</b><b class='flag-5'>训练</b>实现圆<b class='flag-5'>检测</b>与圆心位置预测

    【飞腾派4G版免费试用】第三章:抓取图像,手动标注并完成自定义目标检测模型训练和测试

    自己获取素材并进行标注然后完成模型训练,本章就介绍下,如何从网络抓取素材并完成佩奇的目标检测。 整个过程由如下几个部分: 抓取素材,这里我使用下面的python脚本完成 #!/bin
    发表于 12-16 10:05

    【飞腾派4G版免费试用】 第二章:在PC端使用 TensorFlow2 训练目标检测模型

    本章记录了如何使用TensorFlow2 进行目标检测模型训练的过程。
    的头像 发表于 12-15 06:40 1200次阅读
    【飞腾派4G版免费试用】 第二章:在PC端使用 TensorFlow2 <b class='flag-5'>训练</b>目标<b class='flag-5'>检测</b><b class='flag-5'>模型</b>

    深度学习如何训练出好的模型

    和足够的计算资源,还需要根据任务和数据的特点进行合理的超参数调整、数据增强和模型微调。在本文中,我们将会详细介绍深度学习模型训练流程,探讨
    的头像 发表于 12-07 12:38 656次阅读
    深度学习如何<b class='flag-5'>训练</b>出好的<b class='flag-5'>模型</b>

    【触觉智能 Purple Pi OH 开发板体验】三、Ubuntu镜像安装OpenCV边缘检测开发

    缺陷检测的原理可以基于人工智能或机器视觉进行解释。 在人工智能领域,缺陷检测主要通过采集数据、特征提取、模型训练和测试、
    发表于 09-09 13:20

    使用OpenVINO优化并部署训练好的YOLOv7模型

    在《英特尔锐炫 显卡+ oneAPI 和 OpenVINO 实现英特尔 视频 AI 计算盒训推一体-上篇》一文中,我们详细介绍基于英特尔 独立显卡搭建 YOLOv7 模型训练环境,并完成了 YOLOv7
    的头像 发表于 08-25 11:08 917次阅读
    使用OpenVINO优化并部署<b class='flag-5'>训练</b>好的YOLOv7<b class='flag-5'>模型</b>

    卷积神经网络模型训练步骤

    模型训练是将模型结构和模型参数相结合,通过样本数据的学习训练模型,使得
    的头像 发表于 08-21 16:42 1054次阅读

    训练好的ai模型导入cubemx不成功怎么解决?

    训练好的ai模型导入cubemx不成功咋办,试了好几个模型压缩了也不行,ram占用过大,有无解决方案?
    发表于 08-04 09:16

    如何使用TensorFlow将神经网络模型部署到移动或嵌入式设备上

    。 使用TensorFlow对经过训练的神经网络模型进行优化,步骤如下: 1.确定图中输入和输出节点的名称以及输入数据的维度。 2.使用TensorFlow的transform_gra
    发表于 08-02 06:43

    基于一个完整的 LLM 训练流程

        在这篇文章中,我们将尽可能详细地梳理一个完整的 LLM 训练流程。包括模型训练(Pretrain)、Tokenizer 训练、指令
    的头像 发表于 06-29 10:08 1278次阅读
    基于一个完整的 LLM <b class='flag-5'>训练</b>流程

    NLP中的迁移学习:利用预训练模型进行文本分类

    迁移学习彻底改变了自然语言处理(NLP)领域,允许从业者利用预先训练模型来完成自己的任务,从而大大减少了训练时间和计算资源。在本文中,我们将讨论迁移学习的概念,探索一些流行的预训练
    发表于 06-14 09:30 311次阅读

    什么是预训练AI模型

    训练 AI 模型是为了完成特定任务而在大型数据集上训练的深度学习模型。这些模型既可以直接使用,也可以根据不同行业的应用需求
    的头像 发表于 05-25 17:10 632次阅读

    yolov5训练的tflite模型进行对象检测不适用于NNStreamer 2.2.0-r0?

    yolov5 训练的 tflite 模型进行对象检测不适用于 NNStreamer 2.2.0-r0。在之前的 NNStreamer 2.1.1 版本中,我曾经获取
    发表于 05-17 12:44