yolo使用中的一些问题

问题1:git

ImportError: Failed to initialize: Bad git executable.
错误截图
错误截图
根据File “F:\pycharm_python\workspace\pythonProject\yolo\yolov5-train-traffic-cone\utils\general.py”, line 360, in check_git_info这条信息,在相关文件的import git上面一行加上os.environ[“GIT_PYTHON_REFRESH”] = “quiet”`,修改后如下:

os.environ["GIT_PYTHON_REFRESH"] = "quiet"
import git

问题2:train: No labels found in ***/train.cache

找不到label对应的文件夹,观察错误信息,发现是从images文件转换到labels文件夹错误,文件夹命名错误
文件目录
错误截图

可以先去看一下 项目下utils/dataloaders.py 这个文件,第428行的代码,这个函数是将图片的路径转化为label的路径,其中sa, sb = f’{os.sep}images{os.sep}‘, f’{os.sep}labels{os.sep}',这一句中的images是你存放图片的文件名,需要与其相同。把图片存放文件夹的名字改为images后,成功运行。

def img2label_paths(img_paths):
    # Define label paths as a function of image paths
    sa, sb = f'{os.sep}images{os.sep}', f'{os.sep}labels{os.sep}'  # /images/, /labels/ substrings
    return [sb.join(x.rsplit(sa, 1)).rsplit('.', 1)[0] + '.txt' for x in img_paths]

简单使用:

  1. 准备好数据集,如果是yolo格式(图片和txt文件),分为train、val、test数据集;如果是voc格式,编写程序将其转化为yolo格式后,分为train、val、test数据集;如果只有图片数据集(即未打标签),使用labelimg进行标注,之后进行上述操作。

  2. 在github上下载yolo项目到本地,将数据集文件夹拷贝到项目中,下载yolo对应的预训练权重到项目中。

  3. 修改在data文件夹下的配置文件,新建一个***.yaml,文件名随意,我习惯命名为数据集名称。data中的yaml文件

  4. 修改在model文件夹下的配置文件,选择你下载的预训练权重对应的配置文件,修改nc: 2 # number of classes,其中nc为数据集中类的数量model文件夹内的配置文件

  5. 训练模型,修改train.py中的参数,简单使用的话主要修改前三个参数,分别是预训练权重的路径、model文件夹下yaml配置文件的路径、data文件夹下新建的yaml配置文件的路径。如果训练时内存不够,可以适当减少epoch和batch_size参数

  6. 训练结束后,获得的数据会显示在runs/train/exp文件夹下,在其下的weights文件夹中会包含best.pt和last.pt,分别时训练中表现最好的权重和最后一次训练的权重。

  7. 使用训练好的权重去做推断,修改detect.py中的参数,主要修改前两个参数,第一个是刚才训练好的权重的路径,第二个是需要做推断的数据集的路径(如果填写文件名,就会推断对应文件;如果是文件夹,将会推断文件夹中所有图片;如果是0,表示打开摄像头实时检测)。推断完成之后的结果会保存在runs/detect/exp文件夹中。参数

voc转yolo:

voc格式转yolo格式python脚本,点击前往下载

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要在OpenCV使用YOLO,可以按照以下步骤操作: 1. 下载并编译YOLO:从YOLO官网下载源代码,按照官方文档说明编译和安装YOLO。请确保您已经安装了OpenCV和CUDA。 2. 加载YOLO模型:使用Darknet框架加载训练好的YOLO模型。您可以通过调用`dnn::readNetFromDarknet()`函数读取YOLO的网络结构和权重文件。例如: ```cpp cv::dnn::Net yolo_net = cv::dnn::readNetFromDarknet("yolov3.cfg", "yolov3.weights"); ``` 3. 加载输入图像:使用OpenCV读取输入图像。例如: ```cpp cv::Mat input_image = cv::imread("input.jpg"); ``` 4. 进行目标检测:使用YOLO模型进行目标检测。将输入图像传递给YOLO模型,并使用`forward()`函数获取检测结果。例如: ```cpp cv::Mat blob = cv::dnn::blobFromImage(input_image, 1 / 255.0, cv::Size(416, 416), cv::Scalar(), true, false); yolo_net.setInput(blob); std::vector<cv::Mat> output; yolo_net.forward(output); ``` 5. 解析检测结果:根据YOLO的输出结果解析检测结果。YOLO将检测结果存储在输出层,每个输出层对应一个尺度的检测结果。可以使用以下代码获取检测结果: ```cpp std::vector<cv::Rect> boxes; std::vector<float> confidences; std::vector<int> class_ids; for (const auto& detection : output[0]) { const auto& scores = detection.ptr<float>(5); const auto class_id = std::max_element(scores, scores + 80) - scores; const auto confidence = scores[class_id]; if (confidence > 0.5f) { const auto box = detection[0] * cv::Scalar(input_image.cols, input_image.rows, input_image.cols, input_image.rows); boxes.emplace_back(box[0], box[1], box[2] - box[0], box[3] - box[1]); confidences.emplace_back(confidence); class_ids.emplace_back(class_id); } } ``` 6. 绘制检测结果:使用OpenCV绘制检测结果。例如: ```cpp for (size_t i = 0; i < boxes.size(); ++i) { cv::rectangle(input_image, boxes[i], cv::Scalar(0, 0, 255), 2); cv::putText(input_image, std::to_string(confidences[i]), boxes[i].tl(), cv::FONT_HERSHEY_COMPLEX, 1, cv::Scalar(0, 0, 255), 2); } cv::imshow("output", input_image); cv::waitKey(0); ``` 这样,您就可以使用YOLO在OpenCV进行目标检测了。需要注意的是,YOLO的速度较慢,因此在实际应用需要考虑优化算法和硬件加速等方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加油呀兄弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值