Skip to content

Latest commit

 

History

History
98 lines (70 loc) · 3.09 KB

九宫格图片验证码训练集.md

File metadata and controls

98 lines (70 loc) · 3.09 KB

九宫格图片验证码训练集

这篇主要想记录一下yolo训练数据集的准备过程,毕竟数据才是价值所在。

yolo训练集文件读取逻辑

下面说的内容都是基于darknet,已测试。

关于数据集准备过程我们之前说过,重复的内容就不说了(定位模型训练手册),这里主要解决一下文件标注命名的问题,以及如何避免训练时遇到Too many or too few labels问题,这个问题的根源就是文件标签没有按yolo的规则整理好。

这里简单梳理一下逻辑,方便理解我们要怎么给训练集里的数据命名。

首先回忆一下我们训练分类器需要准备哪几个文件:

  1. xx.data:定义模型使用到的所有文件路径

    classes = 144
    train = data/nine_train.txt
    labels = data/nine.labels
    backup = backup/
    top=1
  2. xx.labels:所有分类的标签名称

    斧头
    螃蟹
    沙发
    帽子
    老虎
    气球
    ...
  3. xx.txt:所有训练集文件的绝对路径

    /Users/train_file/nine/笔记本电脑_2dae8897ecb032a7daac908c31c596562.jpg
    /Users/train_file/nine/笔记本电脑_2dc1ad266d264d40bab65095a5ef86157.jpg
    /Users/train_file/nine/笔记本电脑_2dd25a294a4c7157f02aa92724d78ef31.jpg
    /Users/train_file/nine/笔记本电脑_2df0b329e546630547a4f1aa816d03ee4.jpg
    ...

假设我们现在有一批训练数据是这样的:

/Users/train_file/nine/笔记本电脑_2dae8897ecb032a7daac908c31c596562.jpg
/Users/train_file/nine/笔记本电脑_2dc1ad266d264d40bab65095a5ef86157.jpg
/Users/train_file/nine/笔记本电脑_2dd25a294a4c7157f02aa92724d78ef31.jpg
/Users/train_file/nine/笔记本电脑_2df0b329e546630547a4f1aa816d03ee4.jpg
...

在训练图片分类器时,图片的文件名要包含标注的标签信息,比如:

/Users/train_file/nine/笔记本电脑_2dae8897ecb032a7daac908c31c596562.jpg,这个图片文件

文件名分为三个部分

  • 2dae8897ecb032a7daac908c31c596562:随机标签,用来防止文件名重复,用随机字符串都可以
  • 笔记本电脑:标注的图片内容
  • Jpg:文件格式

这里要注意:yolo读取的是文件绝对路径,在整个路径中不能包含多个标签

什么意思呢?举个例子:

  • /Users/train_file/nine/笔记本电脑_2dae8897ecb032a7daac908c31c596562.jpg这个文件路径中,笔记本电脑是我们要分类的标签,因此不能用这种路径/Users/train_file/nine/笔记本电脑/笔记本电脑_2dae8897ecb032a7daac908c31c596562.jpg,这样的话yolo会在路径中读取到两个笔记本电脑标签,会提示Too many or too few labels 2

分类的标签不能存在包含与被包含的关系

举个例子:

  • 我们当前的分类任务要分类这些标签:

    斧头
    螃蟹
    沙发
    鳄鱼
    ...

    但是如果我们现在要加一个分类,叫做,此时就变成了:

    斧头
    螃蟹
    沙发
    鳄鱼
    鱼
    ...

    这时候鳄鱼就组成了被包含的关系,也会报错。