如何利用百度AI Studio做一个车牌定位系统

本文介绍如何使用百度AIStudio和PaddlePaddle搭建车牌定位系统,包括数据集制作、模型训练和测试全流程。采用ssd_mobilenet_v1_voc算法,以中科大的CCPD数据集为基础,详细记录从数据标注到模型部署的每个步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何利用百度AI Studio做一个车牌定位系统


本文将使用ssd_mobilenet_v1_voc算法,以车牌定位为例,如何利用paddleDetection完成一个项目

1.百度AI Studio

AI Studio是百度推出的基于PaddlePaddle框架的一站式深度学习平台,提供Jupyter notebook的定制修改版本的编程环境,并且提供免费GPU算力加速模型开发,类似于谷歌colab。
AI Studio官网:https://aistudio.baidu.com/aistudio。

2.PaddlePaddle

PaddlePaddle是百度推出的深度学习框架,类似于谷歌推出的Tensorflow

3.数据集制作

本项目是用的数据集格式是VOC格式,标注工具为labelimg,图像数据为中科大的CCPD数据集的前1000张图片,并进行手工标注。
labelimg:链接:https://pan.baidu.com/s/1GNFQ466fYP_SzrW5CvPUFQ
提取码:askg
下载完成后,按照如下步骤进行标注
1.点击Open Dir,打开文件夹,载入图片;
2.点击Create RectBox,即可在图像上画框标注;
3.输入标签,点击OK;
4.点击Save保存,保存下来的是XML文件;
标注效果如下:
在这里插入图片描述
然后把标注好的图片整理成VOC格式的数据集:
1.创建三个文件夹:Annotations、ImageSets、JPEGImages
在这里插入图片描述
将标注生成的XML文件存入Annotations,图片存入JPEGImages,训练集、测试集、验证集的划分情况存入ImageSets。 在ImageSets下创建一个Main文件夹,并且在Mian文件夹下建立label_list.txt,里面存入标注的标签。 此label_list.txt文件复制一份与Annotations、ImageSets、JPEGImages同级位置放置。 label_list.txt内容如下:
在这里插入图片描述
2.创建一个py文件,命名为create_list
运行该代码将会生成trainval.txt、train.txt、val.txt、test.txt,将我们标注的1000张图像按照训练集、验证集、测试集的形式做一个划分。

create_list代码如下:
import os
import random

trainval_percent = 0.95  # 训练集验证集总占比
train_percent = 0.9  # 训练集在trainval_percent里的train占比
xmlfilepath = 'D:/Aplate/Annotations'
txtsavepath = 'D:/Aplate/ImageSets/Main'
total_xml = os.listdir(xmlfilepath)

num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)

ftrainval = open('D:/Aplate/ImageSets/Main/trainval.txt', 'w')
ftest = open('D:/Aplate/ImageSets/Main/test.txt', 'w')
ftrain = open('D:/Aplate/ImageSets/Main/train.txt', 'w')
fval = open('D:/Aplate/ImageSets/Main/val.txt', 'w')

for i in list:
name = total_xml[i][:-4] + '\n'
if i in trainval:
    ftrainval.write(name)
    if i in train:
        ftrain.write(name)
    else:
        fval.write(name)
else:
    ftest.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

3.创建一个py文件,命名为list,用于根据在Main文件夹中划分好的数据集进行位置索引,生成含有图像及对应的XML文件的地址信息的文件。

list.py代码如下:
import os
import re
import random

devkit_dir = './'
output_dir = './'

def get_dir(devkit_dir,  type):
	return os.path.join(devkit_dir, type)

def walk_dir(devkit_dir):
filelist_dir = get_dir(devkit_dir, 'ImageSets/Main')
annotation_dir = get_dir(devkit_dir, 'Annotations')
img_dir = get_dir(devkit_dir, 'JPEGImages')
trainval_list = []
train_list = []
val_list = []
test_list = []

added = set()

for _, _, files in os.walk(filelist_dir):
    for fname in files:
        print(fname)
        img_ann_list = []
        if re.match('trainval.txt', fname):
            img_ann_list = trainval_list
        elif re.match('train.txt', fname):
            img_ann_list = train_list
        elif re.match('val.txt', fname):
            img_ann_list = val_list
        elif re.match('test.txt', fname):
            img_ann_list = test_list
        else:
            continue
        fpath = os.path.join(filelist_dir, fname)
        for line in open(fpath):
            name_prefix = line.strip().split()[0]
            print(name_prefix)

            added.add(name_prefix)
            #ann_path = os.path.join(annotation_dir, name_prefix + '.xml')
            ann_path = annotation_dir + '/' + name_prefix + '.xml'
            print(ann_path)
            #img_path = os.path.join(img_dir, name_prefix + '.jpg')
            img_path = img_dir + '/' + name_prefix + '.jpg'
            assert os.path.isfile(ann_path), 'file %s not found.' % ann_path
            assert os.path.isfile(img_path), 'file %s not found.' % img_path
            img_ann_list.append((img_path, ann_path))
        print(img_ann_list)

return trainval_list, train_list, val_list, test_list


def prepare_filelist(devkit_dir, output_dir):
trainval_list = []
train_list = []
val_list = []
test_list = []

trainval, train, val, test = walk_dir(devkit_dir)

trainval_list.extend(trainval)
train_list.extend(train)
val_list.extend(val)
test_list.extend(test)
#print(trainval)
with open(os.path.join(output_dir, 'trainval.txt'), 'w') as ftrainval:
    for item in trainval_list:
        ftrainval.write(item[0] + ' ' + item[1] + '\n')

with open(os.path.join(output_dir, 'train.txt'), 'w') as ftrain:
    for item in train_list:
        ftrain.write(item[0] + ' ' + item[1] + '\n')

with open(os.path.join(output_dir, 'val.txt'), 'w') as fval:
    for item in val_list:
        fval.write(item[0] + ' ' + item[1] + '\n')

with open(os.path.join(output_dir, 'test.txt'), 'w') as ftest:
    for item in test_list:
        ftest.write(item[0] + ' ' + item[1] + '\n')

if name == ‘main’:
prepare_filelist(devkit_dir, output_dir)
4.此时创建好的数据集如下:
在这里插入图片描述
5.将整个文件拷贝至 ./PaddleDetection/dataset/voc 下,以上全部完成后,还需要修改两个地方,ssd_mobilenet_v1_voc源码中是以20类目标为准设计的,本项目的目标仅为1类.

1)找到 ./PaddleDetection/configs/ssd/ssd_mobilenet_v1_voc.yml文件,修改第12行的num_classes,2代表1个标签加一个背景.
2)找到 ./PaddleDetection/ppdet/data/source/voc.py文件,修改167行的pascalvoc_label()函数,按照前面设定的label_list.txt文件里的标签顺序依次修改,并将多余的内容删掉.

6.至此,整个数据集制作及配置完成。数据集制作完成后,上传至AI Studio,准备开始训练模型。

4. 训练

1.数据集准备

1.解压数据集
!unzip data/data25497/plate.zip

2.进入PaddleDetection目录
%cd /home/aistudio/PaddleDetection
/home/aistudio/PaddleDetection

2.环境准备

1.安装Python依赖库
!pip install -r requirements.txt

2.配置python环境变量
%env PYTHONPATH=/home/aistudio/PaddleDetection
env: PYTHONPATH=/home/aistudio/PaddleDetection
3,测试环境
!export PYTHONPATH=`pwd`:$PYTHONPATH
!python ppdet/modeling/tests/test_architectures.py

出现 No module named ‘ppdet’ 是环境配置的问题,有两种解决办法:

1.设置环境变量
%env PYTHONPATH=/home/aistudio/PaddleDetection
2.找到报错的文件添加以下代码
import sys
DIR = '/home/aistudio/PaddleDetection'
sys.path.append(DIR)

测试通过后,就可以进行训练了。

3.训练
1.开始训练

%cd home/aistudio/PaddleDetection/
!python -u tools/train.py -c configs/ssd/ssd_mobilenet_v1_voc.yml --use_tb=True --eval

训练完成后输出的模型保存在 ./PaddleDetection/output/ssd_mobilenet_v1_voc 文件夹下,本次训练总轮数默认为28000轮,每隔2000轮保存一次模型,以轮次命名的均为阶段性模型,model_final为训练结束时保存的模型,best_model是每次评估后的最佳mAP模型。

2.测试,查看模型效果

%cd /home/aistudio/PaddleDetection/
!python tools/infer.py -c configs/ssd/ssd_mobilenet_v1_voc.yml --infer_img=/home/aistudio/1.jpg

测试结果如下:在这里插入图片描述

5. 结论

随机选择数据集之外的50张图片进行测试,其中47张能够检测出车牌的位置,3张漏检,总的来说,精度还是不错的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值