You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何跳过标注步骤,利用现有数据训练YOLO检测巴基斯坦车牌?

嘿,既然你已经有现成的标注好的巴基斯坦车牌训练数据,那跳过重新标注步骤直接训YOLOv2完全没问题!我来给你一步步讲清楚怎么做:

1. 先确认现有标注数据的格式

YOLOv2对标注文件有严格要求:每张图片必须对应一个同名的.txt文件,里面的标注格式是:

<class_id> <x_center> <y_center> <width> <height>

解释一下每个参数:

  • <class_id>:因为你只检测车牌这一个类别,直接设为0就行
  • <x_center>/<y_center>:车牌框的中心坐标,是相对于图片宽高的比例值(比如图片宽1000像素,框中心x坐标是500,那就是0.5
  • <width>/<height>:车牌框的宽度和高度,同样是相对于图片宽高的比例值

如果你的现有标注不是这个格式(比如是XML、JSON这类),得先转成YOLO格式——网上有很多现成的Python脚本可以批量转换,搜一下对应格式的转换工具就行,很方便。

2. 整理你的数据集结构

把图片和标注文件按YOLO要求的结构摆好,大概是这样:

巴基斯坦车牌数据集/
├── 图片文件夹/
│   ├── 训练集/
│   │   ├── 车1.jpg
│   │   ├── 车2.jpg
│   │   └── ...
│   └── 测试集/
│       ├── 测试车1.jpg
│       ├── 测试车2.jpg
│       └── ...
└── 标注文件夹/
    ├── 训练集/
    │   ├── 车1.txt
    │   ├── 车2.txt
    │   └── ...
    └── 测试集/
        ├── 测试车1.txt
        ├── 测试车2.txt
        └── ...

要保证每张图片和它的标注文件名完全一致,比如车1.jpg对应车1.txt,不然YOLO找不到标注。

3. 准备训练用的配置文件

这一步是关键,要搞定4个配置文件:

(1)数据配置文件(比如命名为plate_data.data

打开文本编辑器写下面内容,把路径改成你自己的:

classes=1
train=/你的数据集路径/训练集图片列表.txt
valid=/你的数据集路径/测试集图片列表.txt
names=/你的数据集路径/类别名称.txt
backup=/你想保存模型的文件夹路径/
  • classes:填1,因为只有车牌一个类别
  • trainvalid:分别指向训练集和测试集的图片路径列表文件(下面教你生成)
  • names:类别名称文件
  • backup:训练时自动保存模型权重的文件夹,提前建好就行

(2)类别名称文件(命名为plate.names

里面只需要一行内容:

license_plate

这就是你要检测的类别名称,YOLO会用它来显示检测结果。

(3)生成训练/测试集图片列表(训练集图片列表.txt测试集图片列表.txt

这两个文件里,每行是一张图片的绝对路径。比如在Linux/macOS下,用终端命令就能批量生成:

# 生成训练集列表
find /你的数据集路径/图片文件夹/训练集 -name "*.jpg" > 训练集图片列表.txt
# 生成测试集列表
find /你的数据集路径/图片文件夹/测试集 -name "*.jpg" > 测试集图片列表.txt

Windows的话可以用PowerShell或者写个简单的批处理脚本,把所有图片路径导出到txt里就行。

(4)修改YOLOv2的网络配置文件

复制Darknet框架里的cfg/yolov2.cfg,改个名字比如yolov2_plate.cfg,然后修改3个地方:

  • 找到[net]部分的batchsubdivisions:根据你的GPU显存调整,显存小的话把subdivisions设大一点(比如16),避免显存溢出
  • 找到最后一个[convolutional]层:把filters的值改成(类别数 + 5)*5,这里类别数是1,所以就是(1+5)*5=30
  • 找到下面的[yolo]层:把classes改成1num改成5(和上面的filters对应)
4. 启动训练

确保你已经装好Darknet(YOLOv2的官方框架),然后在终端里运行训练命令:

./darknet detector train plate_data.data yolov2_plate.cfg darknet19_448.conv.23

这里darknet19_448.conv.23是YOLOv2的预训练权重,如果你的电脑里没有,Darknet会自动下载它,用来加速训练。

训练过程中,模型权重会定期保存到你设置的backup文件夹里,等训练得差不多了,就可以用./darknet detector test命令来测试你的模型啦!

内容的提问来源于stack exchange,提问作者Abdul Wahab

火山引擎 最新活动