DINO-DETR在CADC数据集进行实验与分析
Posted 彭祥.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DINO-DETR在CADC数据集进行实验与分析相关的知识,希望对你有一定的参考价值。
先前使用DINO-DETR模型在COCO缩减版上进行实验,效果并不是很理想,主要猜测是由于在该数据集中车辆信息的特征信息存在模糊,背景复杂,缺失等情况,而bus目标属于大目标,特征信息表示完整,且出现时背景较为单一,故而效果比较明显。
紧接着,博主想到可以在该模型上使用CADC数据集进行实验,看看其表现如何。
CADC数据集是博主从网上寻找的冰雪环境下的自动驾驶数据集,共计5250张图片,博主首先划分出1050张作为测试集,随后将剩余的4200张按照4:1划分训练集与验证集,即3360张作为训练集,840张作为验证集,之所以将1050张划分为测试集,是因为整体数据集主要划分为5个驾驶场景,为保证测试集与训练集完全独立,即训练集中没有获取到测试集的信息,故将最后一个驾驶场景作为测试集。
博主采用了与训练COCO数据集时相同的参数,即batch-size=2,lr = 0.0001,epochs=12。
最终训练完成后在验证集上进行评估:
训练12个epoch的结果:
训练24个epoch的结果:
这个结果相对而言还是不错的,尽管相对于目前主流的目标检测模型,如YOLO等依旧稍逊一筹,但其却达到了与官方在完整COCO数据集的效果。
接下来,博主会将模型在测试上来检测其性能。
使用最好模型进行测试结果如下:
可以看到差距还是及其明显的。
[‘car’, ‘truck’, ‘bus’, ‘person’]
YOLOV7使用CADCD数据集实验记录
2023年2月3日
在完成了CADC数据集的处理工作后,我们就可以便将其放入我们的项目中进行实验了。
首先看一下转换后的数据集:
值得注意的是博主开始时训练时使用了yolov7的初始化权重,由于cadc数据集中有几个分类在数据集中出现很少,以及博主在处理数据集时对一些目标种类进行了合并,因此学习效果并不好,因此博主想重新开始训练,即没有初始权重的情况下训练,这种状态下训练难度加大,同时模型需要修改的参数数量剧增,占用显存增大,以nvidia T4为例,在该GPU环境下使用batch-size=4时显存便占用了13G之多,而将其调整为6时便会直接爆显存,而且由于没有初始权重,训练的时间也会加长,博主开始设置迭代300次,而目前来看运行100次大概需要一天时间,至于效果只能等训练完成后再说了。
随后在运行了快100轮后程序突然终止了,且并没有提示错误只是显示
Process finished with exit code -1
看到有人提出这是在服务器上运行时网络中断导致的,并有人提出了解决方法:试一下。
run -> Edit Configurations -> Configuration -> Execution -> Emulate terminal in output console
但我并没有找到这个选项:
既然中断了便随后服务器中找到运行得到的权重文件
此时我们可以使用这个训练得到的权重模型来进行测试看下效果。
效果很差,mAP只有10%左右。呜呜呜,好在程序中考虑到存在中断问题,设计了开始迭代参数,将其设置为90,并将权重模型替换为best_epoch_weight
可以看到从90开始训练了
然后训练了一会后发现其又中断了:
Start Train
Epoch 101/300: 46%|▍| 484/1063 [05:02<05:55, 1.63it/s, loss=0.136, lr=0.000461
Process finished with exit code -1
这次吸取先前的教训,查看了一下服务器,发现只是在本地停止了在服务器上GPU依旧运行着:
好吧,那就让他慢慢跑吧,等运行完再说吧。
由此可见该错误是由于服务器与pycharm失联导致的,不用管他,等运行完就好了。如何知道其是否运行完,nvidia-smi就可以了,只要GPU还用着,自然就是还没跑完喽,只不过我们不知道已经运行到哪步而已,但我们的训练得到的权重文件会告诉我们这一切的。
2023年2月4日
今早一看,发现服务器也停止了,看来当时服务器依旧运行只是一个假象罢了,并且考虑到从头训练太过麻烦,而且效果还十分差劲。
因此开始从头考虑使用预训练模型来进行训练,先前使用的预训练模式是在ImageNet上获取的,与我的数据集差距较大,因此可以使用其他的一下预训练权重模型,这就涉及到一个概念成为迁移学习。
关于接下来的进展,大家可以搜索博主博文:迁移学习
以上是关于DINO-DETR在CADC数据集进行实验与分析的主要内容,如果未能解决你的问题,请参考以下文章