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

机器学习入门目标检测之印章检测和分类_第1张图片

识别效果如上图
模型下载地址:

采用技术架构 Flask PaddlePaddle PaddleX

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

使用说明

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

训练方法:

1.准备数据集

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

2.环境配置

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

3.选择目标检测算法
机器学习入门目标检测之印章检测和分类_第2张图片
4.对图片集标注,使用百度Easydata在线标注(https://ai.baidu.com/easydata/app/dataset/list),或者精灵标注(标注后需要转成paddlex的格式)
机器学习入门目标检测之印章检测和分类_第3张图片
5.图片分类训练集和和验证集以及测试集
机器学习入门目标检测之印章检测和分类_第4张图片
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://download.csdn.net/download/zuiyuewentian/85813425)

你可能感兴趣的:(机器学习,机器学习,目标检测,分类)