使用Opencv4和YOLOv4(XTDrone)训练模型遇到问题的记录(二)
使用Opencv4和YOLOv4(XTDrone)训练模型遇到问题的记录(二)
Written By PiscesAlpaca(双鱼座羊驼)
- 使用Opencv4和YOLOv4(XTDrone)训练模型遇到问题的记录(二)
- 一、Opencv4安装问题记录
- 二、darknet的问题记录
- 1.Couldn't find activation function mish, going with ReLU
- 2.mosaic=1-compile Darknet with Opencv for using mosaic=1
- 3.CUDA Error: out of memory darknet: ./src/cuda.c:36: check_error: Assertio `0' failed.
- 4.XTDrone提供的darknet库存在一些预先make过的文件,需要在本机重新make一遍,否则有些文件在本机无法找到。darknet也无需cmake,直接make就行。
- 5.make编译问题
- 三、使用YOLOv4进行训练时遇到的问题记录
- 四、参考资料
一、Opencv4安装问题记录
1.在cmake时,需要手动标记生成pgk-config文件
命令如下:
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=/usr/local/opencv4 ..
其中,OPENCV_GENERATE_PKGCONFIG=YES即为需要生成opencv4.pc文件,这一文件在之后进行YOLO模型训练时很重要,否则可能会出现找不到Opecv2及其头文件的情况,例如:
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found
./src/image_opencv.cpp:16:10: fatal error: opencv2/core/version.hpp: No such file or directory
16 | #include <opencv2/core/version.hpp>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:174: obj/image_opencv.o] Error 1
2.安装完成后需要配置pgk-config环境
使用如下命令查找opencv4.pc文件的位置
sudo find / -iname opencv4.pc
输出结果一般会有多个,例如:
/home/pisces/opencv/build/unix-install/opencv4.pc
find: ‘/run/user/1000/doc’: 权限不够
find: ‘/run/user/1000/gvfs’: 权限不够
/usr/local/opencv4/lib/pkgconfig/opencv4.pc
选择usr/local
开头的即为所需文件路径
将/usr/local/opencv4/lib/pkgconfig/
路径加入PKG_CONFIG_PATH
,使用命令(该文件可能为空文件):
sudo gedit /etc/profile.d/pkgconfig.sh
在打开的文件中键入如下语句:
export PKG_CONFIG_PATH=/usr/local/opencv4/lib/pkgconfig:$PKG_CONFIG_PATH
保存退出后,使用如下命令激活:
source /etc/profile
接着,验证是否配置成功,键入命令:
pkg-config --libs opencv4
输出形式为如下所示即为成功(根据个人环境而定,可以不同):
-L/usr/local/opencv4/lib -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_barcode -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cudabgsegm -lopencv_cudafeatures2d -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_cudacodec -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_videostab -lopencv_cudaoptflow -lopencv_optflow -lopencv_cudalegacy -lopencv_videoio -lopencv_cudawarping -lopencv_viz -lopencv_wechat_qrcode -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_imgproc -lopencv_cudaarithm -lopencv_core -lopencv_cudev
继续配置动态苦环境,使得程序运行时可以加载.so
动态库文件,使用命令:
sudo gedit /etc/ld.so.conf.d/opencv4.conf
在打开的文件中键入如下语句:
/usr/local/opencv4/lib
保存退出后,执行以下命令使刚才配置的路径生效:
sudo ldconfig
二、darknet的问题记录
1.Couldn't find activation function mish, going with ReLU
XTDrone提供的darknet仓库和https://github.com/pjreddie/darknet仓库在进行模型训练时都会遇到如下问题Couldn't find activation function mish, going with ReLU:
layer filters size input output
0 Couldn't find activation function mish, going with ReLU
conv 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32 0.299 BFLOPs
1 Couldn't find activation function mish, going with ReLU
conv 64 3 x 3 / 2 416 x 416 x 32 -> 208 x 208 x 64 1.595 BFLOPs
2 Couldn't find activation function mish, going with ReLU
conv 64 1 x 1 / 1 208 x 208 x 64 -> 208 x 208 x 64 0.354 BFLOPs
需要替换为https://github.com/AlexeyAB/darknet仓库的darknet即可解决
2.mosaic=1-compile Darknet with Opencv for using mosaic=1
替换~/catkin_ws/src/darknet_ros/darknet/cfg/xtdrone/obj_yolov4.cfg文件中:
#cutmix=1
mosaic=1
为
#cutmix=1
mosaic=0
3.CUDA Error: out of memory darknet: ./src/cuda.c:36: check_error: Assertio `0' failed.
替换~/catkin_ws/src/darknet_ros/darknet/cfg/xtdrone/obj_yolov4.cfg文件中:
subdivisions=1
为
subdivisions=64
subdivision会让每一个batch不是一下子都丢到网络里。而是分成subdivision对应数字的份数,一份一份的跑完后,在一起打包算作完成一次iteration。这样会降低对显存的占用情况。如果设置这个参数为1的话就是一次性把所有batch的图片都丢到网络里,如果为2的话就是一次丢一半。
4.XTDrone提供的darknet库存在一些预先make过的文件,需要在本机重新make一遍,否则有些文件在本机无法找到。darknet也无需cmake,直接make就行。
5.make编译问题
darknet的MakeFile文件需要结合自己的GPU修改ARCH
,如:
ARCH= -gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=[sm_50,compute_50] \
-gencode arch=compute_52,code=[sm_52,compute_52] \
-gencode arch=compute_61,code=[sm_61,compute_61] \
-gencode arch=compute_75,code=[sm_75,compute_75]
需要结合GPU的运行能力,添加75 80 85等参数,参数30已经过时需要删除,35也即将过时。
三、使用YOLOv4进行训练时遇到的问题记录
1.无法找到opencv2头文件
正如上一节所示,在执行./darknet detector train cfg/xtdrone/obj.data cfg/xtdrone/obj_yolov4.cfg backup/yolov4.conv.137 -map
命令时(具体见XTDrone教程:https://www.yuque.com/xtdrone/manual_cn/target_detection_tracking),会出现无法找到opencv2头文件的情况,使用如下方法即可解决:
手动创建软链接命令如下:
sudo ln -s /usr/local/opencv4/lib/pkgconfig/opencv4.pc /usr/local/lib/pkgconfig/opencv4.pc
解释:由于darknet在寻找.pc
文件时,是在/usr/local/lib/pkgconfig
里寻找的,因此在该目录创建指向opencv4.pc文件的位置即可
此时yolo的训练过程就可以正常运行了
2.关于YOLO不使用GPU的问题
如果经过上述修改还是使用CPU ,则可能是darknet的MakefIle
文件中如下字段没有修改,均改为1重新编译即可:
GPU=1
CUDNN=1
OPENCV=1
四、参考资料
[1] Ubuntu 18.04安装OpenCV4.0和环境配置(重要): https://blog.csdn.net/new_delete_/article/details/84797041
[2] windows下训练yolo时出现CUDA Error: out of memory问题的解决: https://blog.csdn.net/qq_33485434/article/details/80432054
[3] Couldn't find activation function mish, going with ReLU: https://github.com/pjreddie/darknet/issues/2440
[4] ubuntu搭建darknet框架并使用alexeyAB版本的yolo跑demo: https://blog.csdn.net/weixin_42630613/article/details/107834361
部分参考资料或有遗漏,再次也对提供的帮助表示感谢,如有必要可联系我增加。
转载请注明出处!
本篇发布在以下博客或网站:
双鱼座羊驼 的个人主页 - 动态 - 掘金 (juejin.cn)
使用Opencv4和YOLOv4(XTDrone)训练模型遇到问题的记录(二)的更多相关文章
- tensorflow利用预训练模型进行目标检测(二):预训练模型的使用
一.运行样例 官网链接:https://github.com/tensorflow/models/blob/master/research/object_detection/object_detect ...
- 音频标签化1:audioset与训练模型 | 音频特征样本
随着机器学习的发展,很多"历史遗留"问题有了新的解决方案.这些遗留问题中,有一个是音频标签化,即如何智能地给一段音频打上标签的问题,标签包括"吉他"." ...
- vs2017+opencv4.0.1安装配置详解(win10)
一.说明 笔者之前已经安装过了vs2017,对应的opencv是3.4.0版本的.但现在想体验下opencv4的改变之处,所以下载了最新的opencv4.0.1. vs2017的安装请自行搜索安装,本 ...
- Python深度学习案例1--电影评论分类(二分类问题)
我觉得把课本上的案例先自己抄一遍,然后将书看一遍.最后再写一篇博客记录自己所学过程的感悟.虽然与课本有很多相似之处.但自己写一遍感悟会更深 电影评论分类(二分类问题) 本节使用的是IMDB数据集,使用 ...
- python机器学习---线性回归案例和KNN机器学习案例
散点图和KNN预测 一丶案例引入 # 城市气候与海洋的关系研究 # 导包 import numpy as np import pandas as pd from pandas import Serie ...
- YOLOv4: Darknet 如何于 Docker 编译,及训练 COCO 子集
YOLO 算法是非常著名的目标检测算法.从其全称 You Only Look Once: Unified, Real-Time Object Detection ,可以看出它的特性: Look Onc ...
- YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口
本文将介绍 YOLOv4 官方 Darknet 实现,如何于 Ubuntu 18.04 编译,及使用 Python 接口. 主要内容有: 准备基础环境: Nvidia Driver, CUDA, cu ...
- YOLOv4:目标检测(windows和Linux下Darknet 版本)实施
YOLOv4:目标检测(windows和Linux下Darknet 版本)实施 YOLOv4 - Neural Networks for Object Detection (Windows and L ...
- YOLOv4实用训练实践
YOLOv4实用训练实践 准备工作 推荐使用Ubuntu 18.04 CMake >= 3.8: https://cmake.org/download/ CUDA >= 10.0: htt ...
- YOLOV4各个创新功能模块技术分析(三)
YOLOV4各个创新功能模块技术分析(三) 八.数据增强相关-Stylized-ImageNet 论文名称:ImageNet-trained cnns are biased towards text ...
随机推荐
- 第九十篇:Vue 具名插槽
好家伙 1.什么是具名插槽? 来简单理解一下, 具有自己名字的插槽,就是具名插槽 我们来尝试使用一下具名插槽: 在Article.vue组件中: <template> <div cl ...
- KingbaseES启动数据库失败后如何分析
关键字: KingbaseES.sys_ctl.启动日志 一.KingbaseES数据库服务启动 1.1 数据库启动机制 1) 数据库通过sys_ctl工具手工启动数据库服务kingbase. 2) ...
- 如何使用helm优雅安装prometheus-operator,并监控k8s集群微服务
前言:随着云原生概念盛行,对于容器.服务.节点以及集群的监控变得越来越重要.Prometheus 作为 Kubernetes 监控的事实标准,有着强大的功能和良好的生态.但是它不支持分布式,不支持数据 ...
- 一文读懂,硬核 Apache DolphinScheduler3.0 源码解析
点亮 ️ Star · 照亮开源之路 https://github.com/apache/dolphinscheduler 本文目录 1 DolphinScheduler的设计与策略 1.1 分布 ...
- Kafka为什么性能这么快?4大核心原因详解
Kafka的性能快这是大厂Java面试经常问的一个话题,下面我就重点讲解Kafka为什么性能这么快的4大核心原因@mikechen 1.页缓存技术 Kafka 是基于操作系统 的页缓存(page ca ...
- 认识RocketMQ4.x架构设计
消息模型 单体的消息模型 RocketMQ消息模型跟其他的消息队列一样 都是 producer - > topic->consumer producer 生产消息 也就是发送者 topic ...
- k8s中的ingress使用上层负载均衡进行设置访问
注意:这种情况下需要有个前提条件,也就是ingress-nginx-controller安装后的service是NodePort或者hostNetwork模式,而不能是ClusterIP,因为负载均衡 ...
- 记一个nginx server_name配置多个时的坑
文章转载自:https://blog.csdn.net/u011296355/article/details/106740860/ 背景 为了区分线上环境和测试环境,我弄了个自己测试专用的域名test ...
- ERP 系统最重要的是什么?
ERP系统最重要的就是内部业务逻辑,这也是ERP复杂.专业性的体现!ERP系统可以算是当今最复杂的应用系统,也是最昂贵的,头部厂商一套系统动辄上千万,实施费用也常常达到千万级,实施周期动辄半年一年的, ...
- C#-10 事件
一 发布者和订阅者 很多时候都有这种需求,当一个特定的程序事件发生时,程序的其他部分可以得到该事件已经发生的通知. 发布者/订阅者模式可以满足这种需求. 发布者:发布某个事件的类或结构,其他类可以在该 ...