SSD训练自己的数据 OpenCV Error

SSD错误:

OpenCV Error: Assertion failed ((scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F)) in cvtColor, file /home/ubuntu/opencv-3.3.0/modules/imgproc/src/color.cpp, line 10705
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/ubuntu/opencv-3.3.0/modules/imgproc/src/color.cpp:10705: error: (-215) (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) in function cvtColor

*** Aborted at 1530001582 (unix time) try "date -d @1530001582" if you are using GNU date ***
PC: @     0x7f7cf52d3428 gsignal
*** SIGABRT (@0x3e80000390c) received by PID 14604 (TID 0x7f7cbd239700) from PID 14604; stack trace: ***
    @     0x7f7cf52d34b0 (unknown)
    @     0x7f7cf52d3428 gsignal
    @     0x7f7cf52d502a abort
    @     0x7f7cf5f38b39 __gnu_cxx::__verbose_terminate_handler()
    @     0x7f7cf5f371fb __cxxabiv1::__terminate()
    @     0x7f7cf5f37234 std::terminate()
    @     0x7f7cf5f37416 __cxa_throw
    @     0x7f7cebf5eca2 cv::error()
    @     0x7f7cebf5ee33 cv::error()
    @     0x7f7ce7ff1605 cv::cvtColor()
    @     0x7f7cf6ff33c8 caffe::AdjustSaturation()
    @     0x7f7cf6ff84fb caffe::RandomSaturation()
    @     0x7f7cf6ff8c5f caffe::ApplyDistort()
    @     0x7f7cf7062812 caffe::DataTransformer<>::DistortImage()
    @     0x7f7cf70db3b6 caffe::AnnotatedDataLayer<>::load_batch()
    @     0x7f7cf710325f caffe::BasePrefetchingDataLayer<>::InternalThreadEntry()
    @     0x7f7cf72335a5 caffe::InternalThread::entry()
    @     0x7f7ce72955d5 (unknown)
    @     0x7f7cdd5e16ba start_thread
    @     0x7f7cf53a541d clone
    @                0x0 (unknown)
Aborted (core dumped)

根据我的百度说这个错误信息跟数据集的通道数有关,所有用一下的代码来检测数据集中是否有1通道或者4通道的图像

import os
import os.path
import xml.dom.minidom

#获得文件夹中所有文件
FindPath = '/home/ubuntu/data/VOCdevkit/mydataset/Annotations'
FileNames = os.listdir(FindPath)
s = []
# xml_path = '/home/ubuntu/Desktop/new/'
for file_name in FileNames:
    # if not os.path.isdir(file_name):  # 判断是否是文件夹,不是文件夹才打开
    #     print file_name
    #
    #读取xml文件
    dom = xml.dom.minidom.parse(os.path.join(FindPath,file_name))

    root = dom.documentElement

    # 获取标签对name之间的值
    name = root.getElementsByTagName('depth')
    for i in range(len(name)):
        if name[i].firstChild.data == '1':
            print file_name
        if name[i].firstChild.data == '4':
            print file_name

果然发现有一些depth为1的图像(也就是灰度图像)在里面。删除这些图像的xml文件。然后重新生成ImageSets/Main中的文件。之后重新执行create_list.sh,create_data.sh生成lmdb,再开始训练 。
另外,在训练时glog输出如下的错误 ,也是同样的原因 :

annotated_data_layer.cpp:205
CHECK(std::equal(top_shape.begin() + 1, top_shape.begin() + 4,
              shape.begin() + 1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用OpenCV训练YOLOv8模型,需要按照以下步骤进行操作: 1. 数据集准备: 首先,需要准备自己的数据集。数据集应包含图像和相应的标签文件,标签文件中包含每个图像中目标物体的类别和坐标信息。确保数据集中的目标物体类别与预定义的YOLOv8模型类别一致。 2. 标注图像: 使用标注工具,如LabelImg,对数据集中的图像进行标注。标注包括在图像中框出目标物体,并为每个框提供类别标签和坐标信息。标注完成后,会产生相应的标签文件。 3. 数据集划分: 将数据集划分为训练集和验证集。通常,将大部分数据用于训练,少部分用于验证。划分的比例可以根据需求进行调整。 4. 数据预处理: 对图像进行预处理,以满足YOLOv8模型的输入要求。例如,可以调整图像大小、归一化图像像素值等。 5. 配置文件: 创建YOLOv8的配置文件,其中包含模型的超参数设置、数据集路径、类别数目等信息。可参考Darknet框架提供的示例配置文件进行修改。 6. 网络模型训练: 使用OpenCV加载YOLOv8模型,并对其进行训练。在训练过程中,通过调整超参数、学习率等来优化模型的性能。训练过程中,模型会根据训练集的图像和标签进行梯度下降更新权重。 7. 模型评估和调优: 使用验证集对训练好的模型进行评估,通过计算精度、召回率等指标来评估模型的性能。若模型效果不佳,可尝试调整训练策略、数据增强等方法来改进模型。 8. 模型应用: 训练完成后,可以使用OpenCV中的YOLOv8模型进行目标检测。加载模型并输入待检测的图像,模型会输出检测到的目标物体的类别和坐标信息。 总结: 使用OpenCV训练YOLOv8模型的过程包括数据集准备、标注图像、数据预处理、配置文件创建、网络模型训练、模型评估和调优等步骤。这些步骤能够帮助我们基于自己的数据训练出一个适用于目标检测的YOLOv8模型。 ### 回答2: YOLOv8是一种先进的目标检测算法,它可以通过训练自己的数据集来实现目标检测任务。在使用YOLOv8之前,我们需要准备自己的数据集并进行标注。 准备训练数据集时,需要收集包含目标的图像,并对每个目标进行标注。标注的方法一般有两种:边界框标注和像素级标注。对于YOLOv8算法,我们一般使用边界框标注,即在图像中标注出目标的边界框。 在数据集准备完毕后,我们需要使用OpenCV库进行数据处理。首先,我们需要读取每张图像,并对其进行预处理,例如调整大小、归一化等。接下来,我们需要将标注的目标边界框转换为YOLOv8要求的格式。YOLOv8的目标标注格式是每个目标的类别编号和边界框的四个坐标值。 在进行训练之前,我们还需要准备一个包含所有类别名称的文件,该文件将用于指导YOLOv8识别和分类目标。 训练YOLOv8的过程中,我们需要定义网络结构,并设置一些超参数,如学习率、批次大小和训练轮数等。然后,我们可以使用准备好的数据集对网络进行训练训练过程中,YOLOv8会不断调整模型参数,以提高目标检测的准确率。 在训练完成后,我们可以使用自己的数据集来测试训练好的YOLOv8模型。通过输入测试图像,YOLOv8将输出检测到的目标类别和位置信息。 总之,YOLOv8是一种强大的目标检测算法,通过使用OpenCV库和自己的数据集,我们可以训练出适用于特定任务的自定义目标检测模型。 ### 回答3: YOLOv8是一种目标检测算法,可以用于训练自己的数据集。OpenCV是一个开源的计算机视觉库,它提供了一系列图像处理和计算机视觉算法的函数和工具。 要用YOLOv8训练自己的数据集,首先需要准备好以下几个步骤: 1. 数据集准备:收集图像数据并对其进行标注,将目标物体的边界框和类别信息标记出来。可以使用OpenCV的绘图功能来手动标注数据集,也可以使用一些标注工具来自动标注。 2. 数据集划分:将数据集划分为训练集、验证集和测试集。通常会将大部分样本用于训练,一小部分用于验证和测试。 3. 配置文件:YOLOv8通过配置文件定义了一些重要的参数,如网络结构、训练参数、数据集路径等。可以使用OpenCV读取和修改这些配置文件。 4. 模型训练:使用准备好的数据集和配置文件,将YOLOv8模型进行训练。可以使用OpenCV的图像读取和预处理功能来加载数据集,然后使用训练算法进行迭代优化,直到模型收敛或达到预定的训练轮次。 5. 模型评估:训练完成后,可以使用测试集对训练好的模型进行评估,计算准确率、召回率等指标,来判断模型的性能。 最后,要注意的是,这只是一个概要的流程。实际上,使用YOLOv8训练自己的数据集需要解决很多实际问题,如数据预处理、模型调参、训练策略等。使用OpenCV可以提供一些便利的功能和接口,但需要更深入的学习和实践才能掌握这些技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值