paddle_图像识别实战(一)----如何根据已有图片生成测试和训练信息并保存到文件

手势识别训练数据准备

图像识别实战(一)----如何根据已有图片生成测试和训练信息并保存到文件

提前知道

本实验为手势识别,具体图片可以参考下图,经过训练我们得知,标签为5.

在这里插入图片描述

总体目标

Dataset文件夹下面有0-9十个文件,其中有几十张代表文件夹数值的手势图片。

我们的目标便是将Dataset文件夹下面的图片进行训练,最后得出模型进行预测。

本次目标

将Dataset下面的所有图片的路径及其标签保存到两个文件train.list&test.list中,便于模型训练时调用。

1、导入库

import os
import time
import random
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import paddle
import paddle.fluid as fluid
import paddle.fluid.layers as layers
from multiprocessing import cpu_count
from paddle.fluid.dygraph import Pool2D,Conv2D
from paddle.fluid.dygraph import Linear

导入库的时候可以导入多余的库,所以可以放心导入。

2、生成保存信息的文件

data_path = '/home/aistudio/data/data23668/Dataset'
#每个人的数据都可能保存
<think>我们已知用户需要段利用PaddleOCR训练图像识别的代码示例。根据之前提供的训练步骤,这里重点给出文本识别(Recognition)模型的训练代码示例,因为用户特别提到“图像识别训练”,在OCR上下文中通常指文本识别部分。 注意:完整的OCR训练包括文本检测(Detection)文本识别(Recognition)两个步骤,但用户可能更关注识别部分。以下代码示例将展示如何准备数据、配置模型启动训练。 步骤: 1. 准备数据集:按照PaddleOCR要求的格式组织图像标注文件。 2. 修改配置文件:选择或创建适合的配置文件(如rec_chinese_lite_train.yml)。 3. 启动训练:使用PaddleOCR提供的训练脚本。 由于训练代码通常通过命令行调用,我们将提供命令行示例必要的Python代码示例(如自定义数据集读取等)。 此外,根据引用[1],PaddleOCR支持多语言场景,我们将以中英文识别为例。 注意:以下代码示例假设已经安装PaddleOCRPaddlePaddle。 </think>以下是个利用PaddleOCR训练文本识别模型的完整代码示例,结合了数据准备、模型配置、训练评估的全流程: ### 1. 环境安装准备 ```bash # 安装PaddlePaddlePaddleOCR pip install paddlepaddle-gpu==2.5.1 postcard paddleocr==2.7.0.2 ``` ### 2. 数据准备脚本 ```python import os import shutil from paddleocr.ppocr.utils.utility import initial_logger logger = initial_logger() # 创建数据集目录结构 def prepare_dataset(raw_dir, output_dir): os.makedirs(f"{output_dir}/train", exist_ok=True) os.makedirs(f"{output_dir}/val", exist_ok=True) # 生成标注文件(示例) with open(f"{output_dir}/train/train_label.txt", "w") as f_train, \ open(f"{output_dir}/val/val_label.txt", "w") as f_val: for i, img_name in enumerate(os.listdir(raw_dir)): if img_name.endswith(('.jpg', '.png')): # 实际应用中应替换为真实标签 label = "TEXT" + str(i).zfill(3) # 80%作为训练集 if i % 5 != 0: shutil.copy(f"{raw_dir}/{img_name}", f"{output_dir}/train/{img_name}") f_train.write(f"train/{img_name}\t{label}\n") # 20%作为验证集 else: shutil.copy(f"{raw_dir}/{img_name}", f"{output_dir}/val/{img_name}") f_val.write(f"val/{img_name}\t{label}\n") logger.info(f"数据集准备完成,共处理 {i+1} 张图片") # 调用示例 prepare_dataset("/path/to/raw_images", "/dataset/ocr_data") ``` ### 3. 训练配置执行 ```python # train_rec.py import paddle from paddleocr import PPOCRModelTrainer import os # 设置运行设备 paddle.set_device('gpu') # 或 'cpu' # 文本识别训练配置 model_type = "ch_PP-OCRv4_rec" # 最新轻量级模型[^1] config = { "Global": { "pretrained_model": None, # 可替换为预训练模型路径 "epoch_num": 100, "log_smooth_window": 20, "print_batch_step": 10, "save_model_dir": "./output/rec_model", "save_epoch_step": 5, "eval_batch_step": [0, 1000], "cal_metric_during_train": True, "character_dict_path": "ppocr/utils/ppocr_keys_v1.txt", "max_text_length": 25, "infer_mode": False, "use_space_char": True }, "Optimizer": { "name": "Adam", "beta1": 0.9, "beta2": 0.999, "lr": { "name": "Cosine", "learning_rate": 0.001, "warmup_epoch": 5 }, "regularizer": { "name": "L2", "factor": 0.00001 } }, "Train": { "dataset": { "name": "SimpleDataSet", "data_dir": "/dataset/ocr_data", "label_file_list": ["./dataset/ocr_data/train/train_label.txt"], "transforms": [ {"DecodeImage": {"img_mode": "BGR", "channel_first": False}}, {"RecResizeImg": {"image_shape": [3, 48, 320]}}, {"KeepKeys": {"keep_keys": ["image", "label"]}} ], "batch_size": 64, "shuffle": True }, "loader": { "num_workers": 8, "use_shared_memory": True } }, "Eval": { "dataset": { "name": "SimpleDataSet", "data_dir": "/dataset/ocr_data", "label_file_list": ["./dataset/ocr_data/val/val_label.txt"], "transforms": [ {"DecodeImage": {"img_mode": "BGR", "channel_first": False}}, {"RecResizeImg": {"image_shape": [3, 48, 320]}}, {"KeepKeys": {"keep_keys": ["image", "label"]}} ], "batch_size": 64 }, "loader": { "num_workers": 4 } } } # 初始化训练开始训练 trainer = PPOCRModelTrainer(config, model_type) trainer.train() ``` ### 4. 模型评估推理 ```python # eval_and_infer.py from paddleocr import PaddleOCR, draw_ocr from PIL import Image # 1. 加载训练好的模型 ocr = PaddleOCR( rec_model_dir='./output/rec_model/best_accuracy', use_angle_cls=True, lang='ch' ) # 2. 评估模型性能 eval_results = trainer.eval() print(f"模型准确率: {eval_results['acc']:.2%}") # 3. 单图推理示例 result = ocr.ocr('test_image.jpg', cls=True) image = Image.open('test_image.jpg').convert('RGB') boxes = [line[0] for line in result[0]] txts = [line[1][0] for line in result[0]] scores = [line[1][1] for line in result[0]] # 可视化结果 im_show = draw_ocr(image, boxes, txts, scores) im_show = Image.fromarray(im_show) im_show.save('result.jpg') ``` ### 关键参数说明 1. **模型选择**: - `ch_PP-OCRv4_rec`:最新轻量级识别模型,平衡精度速度[^1] - `ch_ppocr_server_v2.0_rec`:高精度服务器版模型 2. **训练优化**: - **学习率调度**:余弦退火(Cosine)配合5轮预热 $$ \eta_t = \eta_{min} + \frac{1}{2}(\eta_{max} - \eta_{min})(1 + \cos(\frac{T_{cur}}{T_{max}}\pi)) $$ - **数据增强**:`RecResizeImg`自动调整输入尺寸 3. **部署优化**: ```bash # 模型导出为推理格式 paddleocr --rec_model_dir output/rec_model/best_accuracy \ --output inference/rec_model \ --rec_image_shape 3,48,320 ``` > **注意**:实际使用时需调整以下参数: > - 数据路径(`data_dir`) > - 字符字典路径(`character_dict_path`) > - 输入图像尺寸(`image_shape`) > - 批量大小(`batch_size`)根据显存调整
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值