全流程机器视觉工程开发(二)PaddleDetection:拉框,然后开始训练模型
前言
我现在在准备做一个全流程的机器视觉的工程,之前做了很多理论相关的工作。大概理解了机器视觉的原理,然后大概了解了一下,我发现现在的库其实已经很发展了,完全不需要用到非常多的理论,只需要知道开发过程就可以了,甚至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文件夹下
开发流程
开发一个训练模型,我们大概有如下流程:
- 使用labelme对数据集标签进行划分
- 转换labelme数据集到COCO数据集或者VOC数据集,这里转换成COCO数据集
- 修改PaddleDetection的配置文件,以我们给定的数据集为训练集
- 进行训练
- 进行预测
使用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:拉框,然后开始训练模型的更多相关文章
- 全球首个全流程跨平台界面开发套件,PowerUI分析
一. 首个全流程跨平台界面开发套件,PowerUI正式发布 UIPower在DirectUI的基础上,自主研发全球首个全流程跨平台界面开发套件PowerUI(PUI)正式发布,PowerU ...
- FineReport——JS二次开发(下拉框)
下拉框显示多列时,输入的内容检索的内容为显示值整行数据,而不是实际值. 下拉框选择之后,控件显示的是显示值而非实际值. 对于下拉框显示队列,可以有多种方法,但是经过测试大多数方法不适用,检索效率太低, ...
- Dorado开发——树形下拉框
最近在学习Dorado开发的过程中,遇到了一个问题,Dorado的树形下拉框选择:Dorado默认情况下父节点和子节点都是可选的,而我要实现的是父节点不可选. 解决办法:在下拉框中,判断父子节点,点击 ...
- android 开发-spinner下拉框控件的实现
Android提供实现下拉框功能的非常实用的控件Spinner. spinner控件需要向xml资源文件中添加spinner标签,如下: <Spinner android:id="@+ ...
- halcon机器视觉工程开发思路
参考:halcon学习笔记——机器视觉工程应用的开发思路https://www.cnblogs.com/hanzhaoxin/archive/2013/02/15/2912879.html
- 微信小程序开发——获取小程序带参二维码全流程
前言: 想要获取微信小程序带参数二维码,如这种: 官方文档只说了获取小程序码和二维码的三种接口及调用(参考链接:https://developers.weixin.qq.com/miniprogram ...
- 十分钟带你了解CANN应用开发全流程
摘要:CANN作为昇腾AI处理器的发动机,支持业界多种主流的AI框架,包括MindSpore.TensorFlow.Pytorch.Caffe等,并提供1200多个基础算子. 2021年7月8日,第四 ...
- Halcon学习笔记——机器视觉应用工程开发思路及相机标定
机器视觉应用工程开发思路 机器视觉应用工程主要可划分为两大部分,硬件部分和软件部分. 1.硬件部分,硬件的选型至关重要,决定了后续工作是否可以正常开展,其中关键硬件部分包括:光源,相机以及镜头. 2. ...
- 基于Jenkins的开发测试全流程持续集成实践
今年一直在公司实践CI,本文将近半年来的一些实践总结一下,可能不太完善或优美,但的确初步解决了我目前所在项目组的一些痛点.当然这仅是一家之言也不够完整,后续还会深入实践和引入Kubernetes进行容 ...
- AI全流程开发难题破解之钥
摘要:通过对ModelArts.盘古大模型.ModelBox产品技术的解读,帮助开发者更好的了解AI开发生产线. 本文分享自华为云社区<[大厂内参]第16期:华为云AI开发生产线,破解AI全流程 ...
随机推荐
- ConcurrentModificationException日志关键字报警引发的思考
本文将记录和分析日志中的ConcurrentModificationException关键字报警,还有一些我的思考,希望对大家有帮助. 一.背景 近期,在日常的日志关键字报警分析时,发现我负责的一个电 ...
- Python 潮流周刊第 31 期(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- Google Guava提供的特殊的Table集合
1.Table 是个啥? 是一个特殊的映射,其中两个键可以在组合的方式被指定为单个值.它类似于创建映射的映射. 当你想使用多个键做索引的时候,你可能会用类似 Map<rowKey, Map< ...
- 『Flutter』开发环境搭建
1.前言 大家好,我是 BNTang,今天给大家介绍一下 Flutter 的开发环境搭建.在之前我已经将 Dart 的基本语法给大家介绍了,所以今天就不再介绍 Dart 的基本语法了,直接进入 Flu ...
- Python——第四章:作用域
作用域: 变量的访问权限 全局变量 -> 全局作用域 局部变量 -> 局部作用域(比如在函数内定义的变量,只能在函数内调用) a = 10 # 全局变量 -> 全局作用域 print ...
- 七天.NET 8操作SQLite入门到实战 - 第七天BootstrapBlazor UI组件库引入(1)
前言 由于第七天Blazor前端页面编写和接口对接的内容比较的多,所以这一章节将会分为三篇文章来进行讲解,大家可以认为分为早.中.晚来进行阶段性学习,从而提高学习效率. 七天.NET 8 操作 SQL ...
- DevExpress源码编译(部分翻译)
环境准备(DevExpress v18.2 ~22.2): vs2015至2022版本 .net framework 4.7.2或更高(实际我们项目用4.5.2可以编译,并不是所有的工程都需要高版本) ...
- Java 查找并高亮PDF中的跨行文本
以下内容介绍如何在Java后端程序中查找并高亮PDF文档中的跨行文本.本次测试环境如下: 源文档:PDF 编译工具:IntelliJ IDEA2018 JDK:1.8.0 PDF类库:free spi ...
- 超详细API插件使用教程,教你开发AI垃圾分类机器人
本文分享自华为云社区[案例教学]华为云API对话机器人的魅力-体验AI垃圾分类机器人,作者:华为云PaaS服务小智. 体验用Huawei Cloud API开发AI垃圾分类机器人,并学习AI自然语言的 ...
- GaussDB技术解读丨数据库迁移创新实践
本文分享自华为云社区<DTCC 2023专家解读丨GaussDB技术解读系列之数据库迁移创新实践>,作者:GaussDB 数据库. 近日,以"数智赋能 共筑未来"为主题 ...