项目介绍:车牌识别器
车牌识别器(License Plate Recognizer)是一款专门设计用于识别和提取车牌图像中字母和数字的模型。这个模型是在微软发布的microsoft/trocr-base-handwritten模型的基础上进行微调的,专注于车牌的光学字符识别(OCR)任务。模型使用了PawanKrGunjan/license_plates数据集进行训练,非常适合用于车牌识别场景。
模型描述
TrOCR模型概述
TrOCR模型采用了一种编码器-解码器架构,是Li等人在其论文TrOCR: 用于光学字符识别的基于Transformer的预训练模型中首次提出的。该模型的代码最初在此仓库中发布。
- 编码器(Encoder): 基于Transformer的图像编码器,初始化自BEiT权重。
- 解码器(Decoder): 基于Transformer的文本解码器,初始化自RoBERTa权重。
该模型通过将图像分为一系列大小为16x16的补丁进行处理,并自动生成文本。微调后的TrOCR模型在IAM数据集上进行过进一步训练,以提高其在手写文本OCR任务中的表现,使其在车牌文本识别上特别有效。
微调细节
- 基础模型: 微调自microsoft/trocr-base-handwritten模型。
- 数据集: 使用PawanKrGunjan/license_plates数据集进行微调。
使用意图与限制
用例
- 车牌识别: 从车牌图像中提取文本,以供各种自动化系统使用。
- 自动监控: 可集成到自动监控系统中实现实时监控。
限制
- 环境约束: 在光线不足或图像分辨率较低时,性能可能下降。
- 区域差异: 对于训练数据集中不存在的车牌设计,模型的表现可能较差。
如何使用
以下是如何在Python中使用此模型的示例代码:
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image
import requests
# 加载处理器和模型
processor = TrOCRProcessor.from_pretrained("PawanKrGunjan/license_plate_recognizer")
model = VisionEncoderDecoderModel.from_pretrained("PawanKrGunjan/license_plate_recognizer")
# 加载车牌图像
image_url = "https://datasets-server.huggingface.co/assets/PawanKrGunjan/license_plates/--/c1a289cb616808b2a834fae90d9625c2f78b82c9/--/default/train/34/image/image.jpg?Expires=1723689029&Signature=jlu~8q7l2MT2IhbS5UttYLkPaMX3416a9CByGBa9M5QKNqi9ezSTYLkDsliKKgO2c-TbiJ8LsEAOB8jmcXwQkN6eNBjrJpnyGqBZ7T99P-cXk5XwHiJa27bn6jINvBUBVID8ganhqBv-DubyyM4RcksxyjZNAE7yatBTBbaDk1-mno5pbL7fpFb~gHfMvMGalPWa-vO3teeoS0yHhp5yNzSjObmwzqn42bZpCFA3dleRPnzikyKPR3OzFK1BaPyr2bzJsLUlg3H7E8c3NGz~ryLjBREa2KpyM2X0JkhzvT0fEGsdaiyN36Tkqoi2aeH~KM8YzztD7W-jSH83dckdxw__&Key-Pair-Id=K3EI6M078Z3AC3"
image = Image.open(requests.get(image_url, stream=True).raw)
# 处理图像
pixel_values = processor(image, return_tensors="pt").pixel_values
# 生成文本预测
generated_ids = model.generate(pixel_values)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(generated_text)
训练过程
训练超参数
在训练过程中使用了以下超参数:
- 学习率(learning_rate): 2e-05
- 训练批次大小(train_batch_size): 8
- 验证批次大小(eval_batch_size): 8
- 随机种子(seed): 42
- 优化器: Adam(betas=(0.9,0.999),epsilon=1e-08)
- 学习率调度类型: 线性
- 训练周期(num_epochs): 20
训练结果
训练损失 | 周期 | 步骤 | 验证损失 | 字符错误率(CER) |
---|---|---|---|---|
0.1379 | 1.0 | 397 | 0.0408 | 0.0124 |
0.0817 | 2.0 | 794 | 0.0313 | 0.0093 |
0.0641 | 3.0 | 1191 | 0.0253 | 0.0089 |
0.0431 | 4.0 | 1588 | 0.0221 | 0.0089 |
0.0246 | 5.0 | 1985 | 0.0233 | 0.0067 |
0.0192 | 6.0 | 2382 | 0.0193 | 0.0053 |
0.0205 | 7.0 | 2779 | 0.0221 | 0.0062 |
0.0158 | 8.0 | 3176 | 0.0134 | 0.0062 |
0.0074 | 9.0 | 3573 | 0.0086 | 0.0040 |
0.0074 | 10.0 | 3970 | 0.0056 | 0.0027 |
0.0036 | 11.0 | 4367 | 0.0033 | 0.0018 |
0.0079 | 12.0 | 4764 | 0.0075 | 0.0049 |
0.002 | 13.0 | 5161 | 0.0039 | 0.0027 |
0.0004 | 14.0 | 5558 | 0.0028 | 0.0022 |
0.0001 | 15.0 | 5955 | 0.0039 | 0.0027 |
0.0001 | 16.0 | 6352 | 0.0047 | 0.0035 |
0.0011 | 17.0 | 6749 | 0.0041 | 0.0027 |
0.0001 | 18.0 | 7146 | 0.0053 | 0.0018 |
0.0001 | 19.0 | 7543 | 0.0047 | 0.0018 |
0.0001 | 20.0 | 7940 | 0.0047 | 0.0018 |
框架版本
- Transformers 4.42.3
- Pytorch 2.1.2
- Datasets 2.20.0
- Tokenizers 0.19.1
通过这些详细的信息,用户可以更好地了解车牌识别器项目的架构、用途、限制以及如何在自己的项目中应用该模型。