陈程的技术博客

  • 关于作者
全栈软件工程师
一个专注于技术研究创新的程序员
  1. 首页
  2. python
  3. 正文

机器学习目标检测之印章检测和分类

2021年5月18日 3458点热度 1人点赞 0条评论

识别效果如上图

开源地址:https://gitee.com/zuiyuewentian/chapter_tagging

采用技术架构 Flask PaddlePaddle PaddleX

安装环境

  1. 安装框架:Flask,PaddlePaddle,PaddleX
  2. python3.6以上版本

使用说明

  1. 采用300多张印章的A4文件图片进行训练,采用slim工具进行压缩处理,模型大小为47M左右,在多核cpu下计算速度为0.1~0.2s之间,gpu为0.015s左右
  2. 请再服务器开放5002端口,访问http://localhost:5002 既可访问体验web版本

训练方法:

1.准备数据集

https://quqi.gblhgk.com/s/1832596/7IUtYKm839DrcMha

2.环境配置

安装python3.6 ,安装gpu运行环境cuda等,安装paddlepaddle 后再安装paddlex

3.选择目标检测算法

4.对图片集标注,使用百度Easydata在线标注(https://ai.baidu.com/easydata/app/dataset/list),或者精灵标注(标注后需要转成paddlex的格式)

5.图片分类训练集和和验证集以及测试集

6.在gpu服务上执行训练(参考github文档使用,不同的算法不同使用方法)

# 环境变量配置,用于控制是否使用GPU
# 说明文档:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html#gpu
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'

from paddlex.cls import transforms
import paddlex as pdx

# 下载和解压蔬菜分类数据集
veg_dataset = 'https://bj.bcebos.com/paddlex/datasets/vegetables_cls.tar.gz'
pdx.utils.download_and_decompress(veg_dataset, path='./')

# 定义训练和验证时的transforms
# API说明https://paddlex.readthedocs.io/zh_CN/develop/apis/transforms/cls_transforms.html
train_transforms = transforms.Compose([
    transforms.RandomCrop(crop_size=224), transforms.RandomHorizontalFlip(),
    transforms.Normalize()
])
eval_transforms = transforms.Compose([
    transforms.ResizeByShort(short_size=256),
    transforms.CenterCrop(crop_size=224), transforms.Normalize()
])

# 定义训练和验证所用的数据集
# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/datasets.html#paddlex-datasets-imagenet
train_dataset = pdx.datasets.ImageNet(
    data_dir='vegetables_cls',
    file_list='vegetables_cls/train_list.txt',
    label_list='vegetables_cls/labels.txt',
    transforms=train_transforms,
    shuffle=True)
eval_dataset = pdx.datasets.ImageNet(
    data_dir='vegetables_cls',
    file_list='vegetables_cls/val_list.txt',
    label_list='vegetables_cls/labels.txt',
    transforms=eval_transforms)

# 初始化模型,并进行训练
# 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html
model = pdx.cls.ResNet50_vd_ssld(num_classes=len(train_dataset.labels))

# API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/classification.html#train
# 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html
model.train(
    num_epochs=10,
    train_dataset=train_dataset,
    train_batch_size=32,
    eval_dataset=eval_dataset,
    lr_decay_epochs=[4, 6, 8],
    learning_rate=0.025,
    save_dir='output/resnet50_vd_ssld',
    use_vdl=True)

7.训练好之后,下载模型测试,测试代码如下:

# 脚本运行依赖paddlex
# pip install paddlex

import paddlex as pdx

# 模型加载, 请将path_to_model替换为你的模型导出路径
# 可使用 mode = pdx.load_model('path_to_model') 加载
# 而使用Predictor方式加载模型,会对模型计算图进行优化,预测速度会更快
print("Loading model...")
model = pdx.deploy.Predictor('inference_model', use_gpu=False)
print("Model loaded.")

# 模型预测, 可以将图片替换为你需要替换的图片地址
# 使用Predictor时,刚开始速度会比较慢,参考此issue
# https://github.com/PaddlePaddle/PaddleX/issues/116
result = model.predict('test//unnamed.jpg')


# 可视化结果, 对于检测、实例分割务进行可视化
if model.model_type == "detector":
    # threshold用于过滤低置信度目标框
    # 可视化结果保存在当前目录
    pdx.det.visualize('test//unnamed.jpg', result, threshold=0.5, save_dir='./')

8.部署模型导出

在服务端部署模型时需要将训练过程中保存的模型导出为inference格式模型,导出的inference格式模型包括__model__、__params__和model.yml三个文件,分别表示模型的网络结构、模型权重和模型的配置文件(包括数据预处理参数等)。

检查你的模型文件夹,如果里面是model.pdparams, model.pdmodel和model.yml3个文件时,那么就需要按照下面流程进行模型导出
在安装完PaddleX后,在命令行终端使用如下命令将模型导出。可直接下载小度熊分拣模型来测试本文档的流程xiaoduxiong_epoch_12.tar.gz。

paddlex --export_inference --model_dir=./xiaoduxiong_epoch_12 --save_dir=./inference_model

9.模型压缩,根据具体使用情景,提高识别率或者减小体积,选择对应的算法,此时模型应该非导出的模型,而是训练完的模型格式

 

 

参考文档:

https://paddlex.readthedocs.io/zh_CN/develop/slim/prune.html

https://github.com/PaddlePaddle/PaddleX

在线体验:

http://124.70.164.70:5003/

开源地址:

https://gitee.com/zuiyuewentian/chapter_tagging

 

标签: python 图像识别 机器学习 目标检测
最后更新:2021年6月10日

博主

全栈工程师,侧重项目技术解决方案规划和开发

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复

分类
  • .NET (65)
  • docker (3)
  • linux (12)
  • python (20)
  • web (14)
  • 小程序 (4)
  • 数据库 (2)
  • 未分类 (4)
  • 杂七杂八 (10)
标签聚合
winform centos nginx linux python js C# DevExpress
最新 热点 随机
最新 热点 随机
.NET开发手册标准参考 招募兼职前端开发 Centos安装dotnet6环境 VS上切换分支,vs编译运行出现bug,A fatal error was encountered彻底解决方案 用C#封装一个线程安全的缓存器,达到目标定时定量更新入库 C#通过特性的方式去校验指定数据是否为空
C# 采用Automation控制自动化操作第三方软件 自己写了个C# 生成简单验证码和加减算法验证码 DreamSkin自定义美化控件-TreeView控件 使用C#+Jumony开发网络爬虫并对数据做相关分析 DevExpress控件-使用LookUpEdit控件 用C#封装一个线程安全的缓存器,达到目标定时定量更新入库

COPYRIGHT © 2021 陈程的技术博客. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS