【问题标题】:Yolo training yolo with own datasetYolo 用自己的数据集训练 yolo
【发布时间】:2020-02-23 21:56:46
【问题描述】:

我想用 Yolo 建立一个数据库,这是我第一次使用深度学习

  1. 如何为 Yolo 构建数据库并对其进行训练?
  2. 如何获得分类的权重?
  3. 对于深度学习新手来说是不是太难了?

【问题讨论】:

  • 尝试使用gluonCV。在您的模型开始运行之前,您可能需要几天的时间。

标签: opencv image-processing deep-learning yolo


【解决方案1】:

是的,您可以轻松做到!欢迎来到深度学习社区。不客气。

首先从Link下载darknet文件夹

进入文件夹并在命令提示符下输入make

git clone https://github.com/pjreddie/darknet
cd darknet
make

定义这些文件 -

data/custom.names
data/images
data/train.txt
data/test.txt

现在是时候使用LabelImg 标记图像并将其保存为 YOLO 格式,这将为图像数据集生成相应的标签 .txt 文件。

我们对象的标签应该保存在 data/custom.names 中。

使用脚本,您可以将数据集拆分为训练和测试-

import glob, os

dataset_path = '/media/subham/Data1/deep_learning/usecase/yolov3/images'

# Percentage of images to be used for the test set
percentage_test = 20

# Create and/or truncate train.txt and test.txt
file_train = open('train.txt', 'w')  
file_test = open('test.txt', 'w')

# Populate train.txt and test.txt
counter = 1  
index_test = round(100 / percentage_test)  
for pathAndFilename in glob.iglob(os.path.join(dataset_path, "*.jpg")):  
    title, ext = os.path.splitext(os.path.basename(pathAndFilename))

    if counter == index_test+1:
        counter = 1
        file_test.write(dataset_path + "/" + title + '.jpg' + "\n")
    else:
        file_train.write(dataset_path + "/" + title + '.jpg' + "\n")
        counter = counter + 1

为了训练我们的目标检测器,我们可以使用已经在大量数据集上训练的现有预训练权重。从here我们可以下载预训练的权重到根目录。

在 custom_data 目录中创建一个 yolo-custom.data 文件,该文件应包含有关训练和测试数据集的信息

classes=2
train=custom_data/train.txt
valid=custom_data/test.txt
names=custom_data/custom.names
backup=backup/

现在我们必须在 yolov3.cfg 中进行更改以训练我们的模型。为两班。根据需要的性能,我们可以选择 YOLOv3 配置文件。对于这个例子,我们将使用 yolov3.cfg。我们可以将文件从cfg/yolov3.cfg复制到custom_data/cfg/yolov3-custom.cfg

我们的网络应该训练的最大迭代次数由参数 max_batches=4000 设置。还要更新steps=3200,3600,它是max_batches 的80%、90%。 我们需要更新在 [yolo] 层之前的 [yolo] 和 [convolutional] 层的类和过滤器参数。 在这个例子中,因为我们有一个单一的类(特斯拉),我们将更新 [yolo] 层中的类参数为 1 行号:610、696、783 同样,我们需要根据类计数过滤器 =(类 + 5)* 3 更新过滤器参数。对于两个类,我们应该在行号设置过滤器 = 21:603、689、776 所有配置更改均针对custom_data/cfg/yolov3-custom.cfg

现在,我们已经定义了训练 YOLOv3 模型所需的所有项目。训练-

./darknet detector train custom_data/detector.data custom_data/cfg/yolov3-custom.cfg darknet53.conv.74

【讨论】:

  • yolo只能识别预训练对象吗?我的意思是可以识别具有相同 Yolo 结构的对象,如曲线?
【解决方案2】:

您还可以在图像中标记对象的有界框以训练 Yolo right in your web browser,只需打开 url。此工具已部署到 GitHub Pages。

【讨论】:

    【解决方案3】:

    使用这个流行的分叉暗网存储库https://github.com/AlexeyAB/darknet。作者描述了许多步骤,可帮助您构建和使用自己的 Yolo 检测器模型。

    1. 如何构建自己的自定义数据集并进行训练?关注此step。他建议使用 Yolo Mark 标记工具来构建您的数据集,但您也可以尝试herehere 中描述的其他工具。
    2. 如何获得权重?每 1000 次迭代后,权重将存储在darknet/backup/ 目录中(您可以稍后调整此值)。上面的链接解释了有关如何制作和使用权重文件的所有内容。
    3. 如果您已经了解数学、统计和编程,我认为这不会那么难。学习基本的神经网络,如感知器、MLP,然后转向现代机器学习是一个好的开始。那么您可能希望将您的知识扩展到计算机视觉相关或 NLP 相关领域

    【讨论】:

    • 谢谢,在 Yolo 中,像 mlp 一样,我们是否必须手动指定神经网络层?还是自动设置图层?
    • @diegokabir 你不必这样做。 Yolo 有很多不同类型的架构,有 yolo、yolov2、yolov3、yolov3 tiny、yolov3 spp 等。所有的预训练模型和定义都由作者提供,因此您无需修改​​层除非你真的想做一些修改
    • 我的图像在任何数据集中都不存在,所以我必须先创建数据集,然后对其进行训练,所以我必须自己指定图层吗?
    • @diegokabir 否,但您必须更改 cfg 文件中的 filtersclasses 参数,如 github.com/AlexeyAB/… 中所述。您可能想为自己的数据集计算自己的锚框值,只需按照链接上的指南进行操作
    【解决方案4】:

    取决于您使用的操作系统类型。您可以拨打https://github.com/AlexeyAB/darknet [特别是对于Windows] 或坚持https://github.com/pjreddie/darknet。 这样做的步骤:

    • 1) 按照帖子中的详细说明设置暗网。
    • 2) 我使用 LabelIMG 来标记我的图像。确保格式 你保存的图像是在 YOLO 中。如果您使用 PascalVOC 格式或其他格式保存,您可以编写脚本将其更改为暗网期望的格式。[YOLO]。此外,请确保不要更改标签文件。如果要添加新标签,请在文件末尾添加新标签,而不是介于两者之间。 YOLO 格式完全不同,因此如果您在类之间进行更改,您之前标记的图像可能会变得混乱。
    • 3) 当您在暗网中的特定文件夹中训练模型时,将生成权重。[如果您需要更多详细信息,我很乐意帮助您回答这个问题]。您可以在 YOLO 中下载 .74 文件并开始训练。训练的输入需要内置的 darknet.exe、cfg 文件、.74 文件以及您的训练数据位置/访问权限。

    设置是严格的,过程本身不是。

    【讨论】:

      【解决方案5】:

      要构建自己的数据集,您应该使用 LabelImg。这是一个免费且非常简单的软件,可为您生成构建数据集所需的所有文件。事实上,因为您正在使用 yolo,所以您需要为每个图像创建一个 txt 文件,其中将包含重要信息,例如 bbox 坐标、标签名称。所有这些 txt 文件都是由 LabelImg 自动生成的,因此您只需使用 LabelImg 打开包含所有图像的目录,然后开始标记。然后,您将拥有所有 txt 文件,您还需要创建一些其他文件才能开始训练(请参阅https://blog.francium.tech/custom-object-training-and-detection-with-yolov3-darknet-and-opencv-41542f2ff44e)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        • 1970-01-01
        • 1970-01-01
        • 2022-09-27
        • 2018-12-01
        • 1970-01-01
        • 2020-09-29
        相关资源
        最近更新 更多