本人在读科研狗,因为研究的是目标跟踪测距等等,所以自己开始百度摸索,中间会遇到很多问题,走很多弯路,往往一个很简单就可以解决的东西都快要把百度用烂,我承认我太菜。本文是留给自己看的,相当于记录心路历程,以便下次再有问题的话自己来翻翻找找吧。
下载好匹配的deeosort和yolov5代码
1.首先在https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch下载YOLOv5+Deepsort,此处https://github.com/ultralytics/yolov5下载YOLOV5版本。
注意:版本要符合YOLOv5+Deepsort v2和Yolov5中v5版本相配适,YOLOv5+Deepsort v3和YoloV5中v6版本相配适
其中在github左上角的下三角处选择tags选择相应版本,如YOLOv5 5.0版本地址:https://github.com/ultralytics/yolov5/tree/v5.0
我下载的是YOLOv5 6.0+Deepsort v3(此处要注意,直接在github上边code的话,会默认最新版的代码,后来我才发现,如果想下载v5.0等版本,要从tag进去下载对应.zip才可以,判断是哪个版本可以看yolov5s.yaml等.yaml文件,backbone处如果是6.0会标注)
2.当然要设置一个pytorch的环境,之前我搭建过yolov5的环境,所以就直接使用了,需要什么包就通过提示安装即可,而且笔记本没有英伟达显卡,只有英特尔,不支持gpu,台式机因为gpu太老,被淘宝卖家告知还不如cpu跑得快,所以一直卑微的用cpu坚持着
3.将权重文件配置好:将YOLOv5的权重文件yolov5s.pt等放置在yolov5/weights文件夹下,DeepSort的权重文件ckpt.t7放置在deep_sort/deep/checkpoint文件夹下
4.将权重路径、测试视频路径设置好,如果不显示,在show_vid和save_vid处加上 defult='Ture'
5..刚下载下来的代码可能会有错误,显示不支持half什么的
解决方法:将主页上的py文件里面的.half全部改为.float,因为cpu不支持半精度
6.可能还会报一个错误:
Hint: This means that multiple copies of the OpenMP runtime have been linked into the program. That is dangerous, since it can degrade performance or cause incorrect results. The best thing to do is to ensure that only a single OpenMP runtime is linked into the process, e.g. by avoiding static linking of the OpenMP runtime in any library. As an unsafe, unsupported, undocumented workaround you can set the environment variable KMP_DUPLICATE_LIB_OK=TRUE to allow the program to continue to execute, but that may cause crashes or silently produce incorrect results. For more information, please see http://www.intel.com/software/products/support/.
解决方法:
在track.py文件中加入下列代码:
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
训练自己的数据集(此处写的是YOLO格式数据集,VOC格式在另一篇文章YOLOv5训练自数据集(VOC格式)_alittle_trouble的博客-CSDN博客)
(注意一下网页另存为的图片,我就是因为直接改了另存为的后缀名,结果图片还是识别为网页格式,又发到qq重新保存了一边,图片格式不对也会显示为识别不到标签,错误如:AssertionError: train: No labels in UAVdata\labels\train.cache. Can not train without labels.找了好久原因真是醉了)
1.和yolov5单独训练一样,先在data里面建立自己的UAVdata(和data并行的文件夹,没有在其中,名字自定义),其中建立images和labels两个文件夹,每一个里面再建立test和train两个文件夹
2.再data下建立一个UAVdata.yaml,设置train和val路径,这两个都设置成训练集图片路径即可,类别数量和名字加上,其余删除,多类别的话记得标签顺序和类别顺序对应!
3.train.py里面改数据集yaml位置,其中有错误wandb.errors.error.UsageError: Error communicating with wandb process
解决方法:
在终端输入wandb init (回车)
然后出来一个链接,让输入一个密码,复制链接到浏览器,输入账号(我自己是用的qq邮箱)和密码,会给一个密码口令,复制口令,右击粘贴,密码将不显示,回车之后让命名,随意即可
之后再运行train.py
4.第二个错误:(这个地方没有懂,前边都弄对的话应该不用关闭wandb的,因为后来我关闭了结果又有错误,wandblogger什么的,没看懂,这个第四点可以先不加)
Error communicating with wandb process
try: wandb.init(settings=wandb.Settings(start_method='fork'))
or: wandb.init(settings=wandb.Settings(start_method='thread'))
解决方法:
在utlis/loggers/wandb/wandb_utlis.py文件中
try:
import wandb
from wandb import init, finish
except ImportError:
wandb = None
后面加一句wandb = None
(2)网上也有人说关闭wandb的话把上边那段话注释掉,直接顶行写一句wandb=None
然后再loggers文件夹下边的一个_init_.py里面也注释掉加一句wandb=None
5.总结一下改动过的地方,以方便下一次训练自己的数据集
(1)yolo.yaml里面的改了包含类别的一句话,原话注释掉仍显示
(2)yolov5s.yaml里面的nc类别数量,改好了之后train.py里面的cfg位置改成了‘models/yolov5s.yaml'
(3)注意如果一开始训练出错了,在label文件夹下生成了.cache文件的话,重新训练需要删除它,还会自动生成
(4)训练voc格式数据集建文件夹方式不一样,还有自动生成什么的,然后dataest.py里面有一行images和labels要改成JPEGImages等
6.跑到不到100次又出错,说是找不到一个文件位置,我看后缀时.png是截图的意思,就把图片和标签重新弄了一次,还放到了比较空的硬盘运行,结果还是出错了,错误如下:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\tmpbq3wp8opwandb-media\\2z9rizt8.png'
这个问题一直没有解决,我后来换笔记本跑了
7.笔记本因为内存小的原因吧,反正通过百度,把的dataset.py改了num_workers=0,原来是=nw(可以通过搜索到这个位置)
8.先确定yolov5可以进行检测了,之后在track里面把yolo 的权重改成刚才训练好的best.pt,设置检测的视频的路径就好了
暂且就这些,其他通过后续学习补充