利用百度AI Studio实现车牌定位

本文档详细介绍了如何在百度AIStudio平台上利用PaddlePaddle框架,结合CCPD车牌数据集,制作VOC格式数据集,进行模型训练,并最终实现车牌检测。从数据集的准备、环境配置、模型训练到模型使用,每个步骤都有清晰的操作指导和代码示例。

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

一、百度AI Studio

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

二、车牌数据集(CCPD)

  1. 下载地址
    https://pan.baidu.com/s/1JSpc9BZXFlPkXxRK4qUCyw
  2. 提取码
    ol3j

三、VOC格式的数据集的制作

  1. 标注车牌数据集
    可以使用labelImg或者labelme
    工具(labelImg)下载链接:
    https://pan.baidu.com/s/1GNFQ466fYP_SzrW5CvPUFQ
    提取码:askg
  2. 制作的文件结构(voc目录下)
    在这里插入图片描述
  3. 标注过程
    ①下载标注工具
    ②打开标注工具,点击Open Dir,打开JPEGImages文件夹,载入图片,并选择Save Dir为上Annotations
    ③点击Create RectBox,就可以进行标注
    ④输入标签名称,点击OK
    ⑤点击Save,保存XML文件
    ⑥按照上面步骤,重复操作(至少标注500以上)
    ⑦效果如下
    在这里插入图片描述

四、使用AI Studio创建环境

  1. 进入AI Studio的官网
    可以需要进行账号的注册
  2. 创建项目
    在主界面上,点击项目,进入一个新的界面后,点击创建项目
    在这里插入图片描述
    选择需要使用的类型(本次选择Notebook)
    在这里插入图片描述
    项目框架的选择
    本项目框架版本为PaddlePaddle 1.8.0
    在这里插入图片描述
    启动项目,选择运行环境
    在这里插入图片描述

五、数据集配置

  1. 下载PaddleDetection的整个框架
    下载地址:https://pan.baidu.com/s/1yS9U88OcLIQMyc8Cn2Q7DQ
    提取码:qaxe
  2. 在voc/ImageSets下创建一个Main文件夹,并且在Main目录下创建一个label_list.txt,里面存放标注的标签,此处标签为plate
  3. voc目录下,创建一个create_list.py对数据集进行划分
    具体代码内容如下
    #create_list代码如下:
    import os
    import random
    
    trainval_percent = 0.95  # 训练集验证集总占比
    train_percent = 0.9  # 训练集在trainval_percent里的train占比
    xmlfilepath = './Annotations'
    txtsavepath = './ImageSets/Main'
    total_xml = os.listdir(xmlfilepath)
    print(total_xml)
    
    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('./ImageSets/Main/trainval.txt', 'w')
    ftest = open('./ImageSets/Main/test.txt', 'w')
    ftrain = open('./ImageSets/Main/train.txt', 'w')
    fval = open('./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()
    
  4. voc目录下,创建一个list.py
    #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)
    
  5. 运行上面创建的两个py文件,运行结果如下
    在这里插入图片描述
  6. 将上面标注好的voc数据集,放到PaddleDetection/dataset目录下
  7. 修改./PaddleDetection/Configs/ssd/ssd_mobilenet_v1_voc.yml文件
    将num_classes的值修改为2,2表示1个标签加一个背景
    在这里插入图片描述
  8. 修改./PaddleDetection/ppdet/data/source/voc.py文件
    将文件中的pascalvoc_label()函数内容修改为前面label_list.txt中的内容
    在这里插入图片描述
  9. 将整个压缩上传到AI Studio创建的项目中

六、模型训练

  1. 解压上面上传的PaddleDetection项目
  2. 相关配置
    终端进入PaddleDetection目录
    安装Python依赖
    pip install -r requirements.txt
    配置Python环境变量
    env PYTHONPATH=/home/aistudio/PaddleDetection
    测试环境
    export PYTHONPATH=`pwd`:$PYTHONPATH
    python ppdet/modeling/tests/test_architectures.py
    
    在这里插入图片描述
    补充:当遇到Could not install packages due to an EnvironmentError: HTTPSConnectionPool的问题的时候
    在这里插入图片描述
    解决方法:
    对requirements.txt内容进行修改
    在这里插入图片描述
  3. 训练
    训练前可能需要先下载paddlepaddle-gpu,可以先执行看需要不需要安装,提示缺少paddlepaddle-gpu,就自行安装即可
    命令如下
    pip install paddlepaddle-gpu
    

在这里插入图片描述
开始训练
python python -u tools/train.py -c configs/ssd/ssd_mobilenet_v1_voc.yml --use_tb=True --eval
默认训练总轮数为28000轮。可以自行修改训练的轮数,位置为修改模型类别的文件。
训练过程
在这里插入图片描述
在这里插入图片描述

七、模型使用

  1. 模型识别过程
    python tools/infer.py -c configs/ssd/ssd_mobilenet_v1_voc.yml --infer_img=/home/aistudio/1.jpg(1.jpg为自己上传的测试图片)
    
    在这里插入图片描述
  2. 识别结果
    在这里插入图片描述
    定位的结果可能框选的没有那么准确,原因可能是标注的时候可能没有标注的很好。并且这个模型训练轮数也不是使用的默认训练轮数,而是自定义的训练轮数。

参考链接

https://blog.youkuaiyun.com/han422858897/article/details/118273873

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值