前言

我现在在准备做一个全流程的机器视觉的工程,之前做了很多理论相关的工作。大概理解了机器视觉的原理,然后大概了解了一下,我发现现在的库其实已经很发展了,完全不需要用到非常多的理论,只需要知道开发过程就可以了,甚至paddlex已经直接有了傻瓜式模型训练的软件,所以我现在准备来做一个全流程机器视觉工程开发,不涉及过多理论。

书接上文,我们在先前的文章全流程机器视觉工程开发(一)环境准备,paddledetection和labelme中说明了如何准备PaddleDetection环境和Labelme工具,现在我们来做后续的开发工作。

到这里开始我们就可以开始尝试训练模型了。当然了,工欲善其事,必先利其器,我们在正式训练模型之前,先要学会如何获得数据集。

在正式开始训练和使用之前,可以先来测试一下如何使用paddledetection库。与传统的python库不同,PaddleDetection库与其说是一个库,不如说是一个类似于ffmpg那样的一个程序,通过给程序入口点参数来控制PaddleDetection库的行为

在当前的文章中,所有的操作都是直接通过python直接操作具体的文件执行的,所以我们现在在CMD上默认你已经转到了PaddleDetection的目录下,比如我的电脑上是这样:

cd /d E:\Leventure\WorkShop\Python\PaddleDetection

然后所有的命令也都是通过cmd执行的,当然了你也可以通过脚本或者python终端去完成这些任务,这些都是无所谓的。

注:为了写文档的方便,下文中为了编写的方便,Paddledetection库统一称为PD库,当前目录指的是PaddleDetection的库根目录

试用

首先我们安装完成后,按照教程,先尝试这个命令检查库的安装情况:

python ppdet/modeling/tests/test_architectures.py

通过后会提示如下信息:

..........
----------------------------------------------------------------------
Ran 12 tests in 2.480s
OK (skipped=2)

在PD库中,已经提供了一些Demo图片以供测试,就在当前目录下的demo文件夹中



我们这里取000000014439.jpg进行测试,在cmd中输入如下命令:

python tools/infer.py -c configs/ppyolo/ppyolo.yml -o use_gpu=true weights=https://paddlemodels.bj.bcebos.com/object_detection/ppyolo.pdparams --infer_img=demo/000000014439.jpg

这里我暂时先不解释这条命令做了什么,我们先来看结果。结果输出到当前目录/output文件夹下

开发流程

开发一个训练模型,我们大概有如下流程:

  1. 使用labelme对数据集标签进行划分
  2. 转换labelme数据集到COCO数据集或者VOC数据集,这里转换成COCO数据集
  3. 修改PaddleDetection的配置文件,以我们给定的数据集为训练集
  4. 进行训练
  5. 进行预测

使用labelme 对数据集进行划分

这个部分比较简单,参考图片标注工具Labelme的安装及使用方法

然后我们获得了图片和标签,我们画好文件夹,如图:

图片在文件夹:

标签在

J:\Train\labelme_annos

转换labelme数据集到COCO数据集或者VOC数据集,这里转换成COCO数据集

我们这里要用到PD项目下的工具,tools/x2coco.py

我们在cmd中输入:

python tools/x2coco.py --dataset_type labelme --json_input_dir J:\Train\labelme_annos --image_input_dir J:\Train\labelme_imgs --output_dir J:\Train\cocome --train_proportion 0.8 --val_proportion 0.2 --test_proportion 0.0

上面每一个--标签 空格后面的内容就是参数的内容

--dataset_type :当前转换的数据类型

--json_input_dir:标签json文件的目录路径

--image_input_dir:图片文件的目录路径

--output_dir:输出路径

--train_proportion:训练集数据占比

--val_proportion:评估集数据占比

--test_proportion:测试集数据占比

我们这里输入这个命令,就会在J:\Train\cocome文件夹下创建一个COCO数据格式的数据集

修改PaddleDetection的配置文件,以我们给定的数据集为训练集

在使用之前,我们要先选定一个模型

能用的模型有挺多的,我们这里以yolov3为例

找到yolov3_mobilenet_v1_270e_coco的配置文件,在.configs/yolov3/yolov3_mobilenet_v1_270e_coco.yml



这里这个../datasets/coco_detection.yml就是当前这个模型配置数据集的目录,我们转到这个文件

./configs/datasets/coco_detection.yml

这里我已经改了,你可以按照我给的目录和注释自己修改。

到此就已经配置好了我们想要的数据集。

进行训练

进行训练的话,比较简单,就是直接调库。

python -u tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_270e_coco.yml --eval

这里的configs路径是根据我们前面挑选和使用的模型来进行修改,不同的模型有不同的优势,准确度或者训练时间或者mAP值都不同,这里我们不关心细节,只关心结果。

这里就已经开始进行了训练,这里可以看到需要训练好几个小时,慢慢等吧。

等训练结束后,输入命令

python -u tools/export_model.py -c configs/yolov3/yolov3_mobilenet_v1_270e_coco.yml --output_dir=./inference_model

导出这个模型,当然了这个模型也会保存在C盘一个临时位置,后面再训练模型的话会把原先这个模型覆盖掉也是很正常的。

导出之后,会导出一个.pdparams文件,这个文件之后我们会用。

进行预测

进行预测的命令也很简单,这个时候我们就可以来看看我们本文开头的那个测试命令了:

python tools/infer.py -c configs/ppyolo/ppyolo.yml -o use_gpu=true weights=https://paddlemodels.bj.bcebos.com/object_detection/ppyolo.pdparams --infer_img=demo/000000014439.jpg

我们通过这个infer.py来进行的预测工作,参数列表如下:

-c :模型的配置文件

-o : use_gpu=true 是否使用gpu weights= 用什么模型,这里我们可以使用我们自己训练的,网上实际上也提供了一些训练好的模型,当你在初始化训练的时候实际上已经把训练好的模型下载到你本地了,训练完成后你也可以自行导出到本地。你可以自己找找

--infer_img :需要推测的图片

在这里插入图片描述

全流程机器视觉工程开发(二)PaddleDetection:拉框,然后开始训练模型的更多相关文章

  1. 全球首个全流程跨平台界面开发套件,PowerUI分析

    一.       首个全流程跨平台界面开发套件,PowerUI正式发布 UIPower在DirectUI的基础上,自主研发全球首个全流程跨平台界面开发套件PowerUI(PUI)正式发布,PowerU ...

  2. FineReport——JS二次开发(下拉框)

    下拉框显示多列时,输入的内容检索的内容为显示值整行数据,而不是实际值. 下拉框选择之后,控件显示的是显示值而非实际值. 对于下拉框显示队列,可以有多种方法,但是经过测试大多数方法不适用,检索效率太低, ...

  3. Dorado开发——树形下拉框

    最近在学习Dorado开发的过程中,遇到了一个问题,Dorado的树形下拉框选择:Dorado默认情况下父节点和子节点都是可选的,而我要实现的是父节点不可选. 解决办法:在下拉框中,判断父子节点,点击 ...

  4. android 开发-spinner下拉框控件的实现

    Android提供实现下拉框功能的非常实用的控件Spinner. spinner控件需要向xml资源文件中添加spinner标签,如下: <Spinner android:id="@+ ...

  5. halcon机器视觉工程开发思路

    参考:halcon学习笔记——机器视觉工程应用的开发思路https://www.cnblogs.com/hanzhaoxin/archive/2013/02/15/2912879.html

  6. 微信小程序开发——获取小程序带参二维码全流程

    前言: 想要获取微信小程序带参数二维码,如这种: 官方文档只说了获取小程序码和二维码的三种接口及调用(参考链接:https://developers.weixin.qq.com/miniprogram ...

  7. 十分钟带你了解CANN应用开发全流程

    摘要:CANN作为昇腾AI处理器的发动机,支持业界多种主流的AI框架,包括MindSpore.TensorFlow.Pytorch.Caffe等,并提供1200多个基础算子. 2021年7月8日,第四 ...

  8. Halcon学习笔记——机器视觉应用工程开发思路及相机标定

    机器视觉应用工程开发思路 机器视觉应用工程主要可划分为两大部分,硬件部分和软件部分. 1.硬件部分,硬件的选型至关重要,决定了后续工作是否可以正常开展,其中关键硬件部分包括:光源,相机以及镜头. 2. ...

  9. 基于Jenkins的开发测试全流程持续集成实践

    今年一直在公司实践CI,本文将近半年来的一些实践总结一下,可能不太完善或优美,但的确初步解决了我目前所在项目组的一些痛点.当然这仅是一家之言也不够完整,后续还会深入实践和引入Kubernetes进行容 ...

  10. AI全流程开发难题破解之钥

    摘要:通过对ModelArts.盘古大模型.ModelBox产品技术的解读,帮助开发者更好的了解AI开发生产线. 本文分享自华为云社区<[大厂内参]第16期:华为云AI开发生产线,破解AI全流程 ...

随机推荐

  1. 【UniApp】-uni-app-OptionAPI应用生命周期和页面生命周期

    前言 好,经过上个章节的介绍完毕之后,了解了一下 uni-app-修改组件主题和样式 那么了解完了uni-app-修改组件主题和样式之后,这篇文章来给大家介绍一下 uni-app-OptionAPI应 ...

  2. 重磅:谷歌发布最强大AI模型【Google Gemini】

    一.前言 北京时间 2023年12 月 13 日Google 发布了最新的 Gemini Pro模型,并且提供了 API 访问. 一个更好的消息是:Gemini Pro 可免费使用.赶紧体验起来吧~ ...

  3. 《HelloGitHub》第 93 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  4. cgroup的入门资料

    近期在准备特性的设计文档,按照评审专家的建议,需要排查现有产品中算力资源比如CPU.内存的分配方案,确认现有的硬件款型是否具备充足的资源来启用本特性. 依据前辈提供的建议,检查了产品的部署脚本,发现当 ...

  5. Windows Server 2016 Standard RemoteApp应用发布配置举例

    RemoteApp 应用发布介绍 RemoteApp 是微软在Windows Server 2008 之后,在其系统中集成的一项服务功能,用户可以通过远程桌面访问远端服务器的桌面与程序,客户端本机在无 ...

  6. C#汉诺塔递归算法实现

    目录: 一.什么是递归 1.先来看一下一个递归的例子 2.递归的基本原理 二.汉诺塔问题 1.汉诺塔的故事 2.回到编程,汉诺塔问题主要就是解决这个问题: 3.怎么解决汉诺塔问题 要解决汉诺塔问题就要 ...

  7. 使用Spring AI让你的Spring Boot应用快速拥有生成式AI能力

    之前分享了关于Spring新项目Spring AI的介绍视频.视频里演示了关于使用Spring AI将Open AI的能力整合到Spring应用中的操作,但有不少读者提到是否有博客形式的学习内容.所以 ...

  8. C++中map,multimap和unordered_map的区别

    map.multimap容器 map的所有元素都是pair,同时拥有键值(key)和实值(value) pair的第一元素被视为键值,第二元素被视为实值 性质: 以rb_tree为底层结构,因此元素有 ...

  9. 春眠不觉晓,Java数据类型知多少?基础牢不牢看完本文就有数了

    文编|JavaBuild 哈喽,大家好呀!我是JavaBuild,以后可以喊我鸟哥!俺滴座右铭是不在沉默中爆发,就在沉默中灭亡,一起加油学习,珍惜现在来之不易的学习时光吧,等工作之后,你就会发现,想学 ...

  10. Mybatis源码5 StatementHandler ,ParameterHandler

    Mybatis5 StatementHandler ,ParameterHandler 一丶概述 前面我们总结了SqlSession--->CachingExecutor--->BaseE ...