首页 > 其他分享 >DINO-DETR 实验与分析

DINO-DETR 实验与分析

时间:2023-03-25 12:04:06浏览次数:41  
标签:name img DINO json 实验 博主 images path DETR


前言

自DETR提出之后,不计其数的DETR改进模型不断被提出,尽管如此,基于Transformer模型的速度与精度却一直被人诟病。今天学习的这个DETR的改进模型,号称SOTA模型,这便是大名鼎鼎的DINO-DETR模型。
该模型声称在COCO数据上测试的mAP值达到了0.63,可谓是不同凡响。

实验过程

博主也做了相关的实验,论文中提到DINO-DETR模型收敛极快,这个的确显而易见,考虑到COCO数据集太大,所以博主提取了bus,car,truck三个类别数据进行实验,其在训练过程中,在第一个epoch时效果还并不好,而第二个epoch时竟然mAP达到了0.26,这属实让我大为震惊,正当我以为其能够继续高歌猛进,达到其论文中的效果时,其最终的结果却让我有些失望,其最终的mAP值仅为0.28,而论文中指出其在12个epoch时便能达到0.49,在24个epoch时能到达0.52,这与我现在的结果差距属实巨大:

训练结果

博主的实验结果:

epochs=24,batch-size=2

DINO-DETR 实验与分析_数据集

DINO-DETR 实验与分析_数据集_02

考虑到自己的数据集在经过提取后其数量已经急剧下降,效果差些也就情有可原,但目前两者毕竟差距太过巨大。因此便打算使用完整数据集进行实验。但让我想不通的是,博主的数据集并非是直接减少,而是按照不同类别进行提取,对于某个类别而言,其不该有如此大的差距。

验证结果

因此便想到使用论文中给出的已经训练好的模型文件进行验证:
在验证的过程中,博主也发现,先前的loss值最多只能下降到6.2便不再下降,而在使用论文中提供的权重文件时,其可以下降到3.1左右,这倒是令我感到意外。
最终通过验证集最后的结果为:可以看到的确如论文中所言,其达到了0.49。

DINO-DETR 实验与分析_数据集_03

原因分析

数据集标注问题

目前来看,关于实验结果差距大的问题可能原因为:
1.博主的类别提取方法有问题,提取的数据集有问题(太可怕了)

关于该问题,博主考虑到可以将COCO数据集中的标注信息打印到图片上进行验证:提取代码如下:

import json
import shutil
import cv2

def select(json_path, outpath, image_path):
    json_file = open(json_path)
    infos = json.load(json_file)
    images = infos["images"]
    annos = infos["annotations"]
    assert len(images) == len(images)
    for i in range(len(images)):
        im_id = images[i]["id"]
        im_path = image_path + "/" + images[i]["file_name"]
        img = cv2.imread(im_path)
        for j in range(len(annos)):
            if annos[j]["image_id"] == im_id:
                x, y, w, h = annos[j]["bbox"]
                x, y, w, h = int(x), int(y), int(w), int(h)
                x2, y2 = x + w, y + h
                # object_name = annos[j][""]
                img = cv2.rectangle(img, (x, y), (x2, y2), (255, 0, 0), thickness=2)
                img_name = outpath + "/" + images[i]["file_name"]
                cv2.imwrite(img_name, img)
                # continue
        print(i)

if __name__ == "__main__":
    json_path = "/data/datasets/coco_type/annotations/instances_val2017.json"#放标注json的地址
    out_path = "/data/datasets/coco_type/results"#结果放的地址
    image_path = "/data/datasets/coco_type/images/val2017/"#原图的地址
    select(json_path, out_path, image_path)

输出结果:

DINO-DETR 实验与分析_数据集_04


DINO-DETR 实验与分析_人工智能_05


DINO-DETR 实验与分析_深度学习_06


从上面的标注结果来看,其标注的信息还是较为准确的。

数据集数量问题

2.按照目前对Transformer的研究来看,其效果一般在数据量及其庞大的情况下越好,因此博主虽然是按照类别进行提取了,但不可否认的是数据集数量大大缩水,所以导致了实验效果差。

验证时GPU使用情况

DINO-DETR 实验与分析_json_07

关于当前实验结果分析与改进,博主还在进行中,如果大家有自己的观点,望不吝赐教。感谢!


标签:name,img,DINO,json,实验,博主,images,path,DETR
From: https://blog.51cto.com/u_15876949/6149137

相关文章

  • 实验2 字符串和列表
    实验二字符串和列表实验任务1task1.py实验源码x='nbaFIFA'print(x.upper())print(x.lower())print(x.swapcase())print()x='abc'print(x.center(10,'*'))......
  • 实验2 字符串和列表
    实验任务1task1.py实验源码:x='nbaFIFA'print(x.upper())print(x.lower())print(x.swapcase())print()x='abc'print(x.center(10,'*'))print(x.ljust(1......
  • 实验一 密码引擎-2-电子钥匙功能测试
    0参考附件中的视频1解压"资源"中“龙脉密码钥匙驱动实例工具等”压缩包2在Ubuntu中运行“龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf\samples\linux_mac”中例程......
  • nfs实验步骤
    1.yuminstall-ynfs-utils查看是否安装nfs2.vim/etc/sysconfig/network-scripts/ifcfg-eno16777736编辑ip地址网关信息3.systemctlrestartnetwork重启网卡4.......
  • 实验报告
           ......
  • 网络对抗实验二 后门原理与实践--20201313
    目录《网络对抗技术》——Exp2后门原理与实践一、实验准备1、实验要求2、后门3、常用的后门工具(ncat,...)二、实验内容1.使用netcat获取主机操作Shell,cron启动2.使用soc......
  • 实验2 字符串和列表
    task1:x='nbaFIFA'print(x.upper())print(x.lower())print(x.swapcase())print()x='abc'print(x.center(10,'*'))print(x.ljust(10,'*'))print(x.rjust(10,......
  • 实验2 字符串和列表
    1.实验任务1task1.py1#字符串的基础操作23x='nbaFIFA'4print(x.upper())#字符串转大写5print(x.lower())#字符串转小写6print(x.swapcase(......
  • 实验2.字符串和列表
    #字符串的基础操作#课堂上没有演示的一些方法x='nbaFIFA'print(x.upper())#字符串转大写print(x.lower())#字符串转小写print(x.swapcase())#字符串大小......
  • 20201326_exp2_后门原理与实践_实验报告
    20201326EXP2-后门原理与实践一、实验基础实验目的本次实验需要我们掌握后门的基础知识,学习使用nc实现Windows,Linux之间的后门连接,学习使用Metaspolit的msfvenom指令......