1. 将自己的数据集转换为coco类数据集

  1. 写一个config文件,可以模仿byteTrack自带的,在exps/example/mot中,主要是修改类别数、以及数据读取路径,其它参数比如normalize值等可以自己修改

  1. 训练就好了,标注格式正确,止步于此

  1. 如果有些问题,比如 device-side assert triggered,就很可能和label有关,下面是我的数据集coco格式中的categories不正确带来的一系列问题

  1. 问题的产生:annotations中的json文件中categories存放的是类别和id的对应情况,而不是每个GT的类别,导致sorted(self.coco.getCatIds())=[1,1,1,……,last_cls_id]

  1. 问题解决:显然,annotations中的json文件中categories存放是类别和id的对应情况

  1. 问题探索:第5部分是初步解决办法,之后,查看pycocotools源码,见cocoapi/coco.py at master · cocodataset/cocoapi (github.com),知道self.coco.getCatIds()的功能,就知道json文件中的categories格式了

  1. 曲折的探索(让代码适应我的标注格式)

  • 在yolox/data/datasets/mot.py中,load_anno_from_ids函数:

        for ix, obj in enumerate(objs): #在77行左右cls = self.class_ids.index(obj["category_id"])res[ix, 0:4] = obj["clean_bbox"]res[ix, 4] = clsres[ix, 5] = obj["track_id"]

以及在__init__()函数中,可以看到:

self.class_ids = sorted(self.coco.getCatIds())

看起来很正常对吧,但是在自己的数据集上,这样获取的cls(目标的类别)是错误的!!!

关于pycocotools的一些应用可以见:

pycocotools一些api的用法记录 - One Blog | 文鹃阁 (szukevin.site)

其中提到了coco.getCatIds()会返回所有类别,并且每个类别只出现一次。在本人使用的数据集上,self.coco.getCatIds会出现所有类别,但是每个类别出现的次数不止一次,因此只是简单的把数据中出现的GT的类别简单读取,并没有去重。

再看load_anno_from_ids中的self.class_ids.index(obj["category_id"])得到当前obj的cat_id的index。所以一开始我直接将self.class_ids.index(obj["category_id"])改成cls = obj["category_id"] - 1,可以正常训练了,不会报错: device-side assert triggered ,你以为正常了吗?No,还不是正常的!你会发现训练了一个epoch之后AP值很低,比如:)

  • 在yolox/data/evaluators/coco_evaluator.py以及yolox/data/evaluators/mot_evaluator.py的convert_to_coco_format函数中:

label = self.dataloader.dataset.class_ids[int(cls[ind])]

该函数用于获取检测结果之后,将检测结果转换为coco数据格式,我们前面只是改了读取GT的label。由于self.dataloader.dataset.class_ids所有GT的cls(从1开始)的排序,那么一般是[1,1,1,1,1,……],如果类别为1的GT很多,而int(cls[ind])为range(0,num_class)范围,则得到检测的label就都是1了,指标能不低吗┭┮﹏┭┮,都是1!!!

  • 最后的最后

综合考虑,检测结果和GT的label。放弃之前的修改,将yolox/data/datasets/mot.py中,load_anno_from_ids函数改成

        # self.class_ids = sorted(self.coco.getCatIds())self.class_ids = [1,2,3,4,5,6,7,8,9,10,11]#这是我数据集的类别

指标正常,返回检测类别也正常,呜呜

也可以改成如下,多一个去重操作,没试过,理论是可以的。

self.class_ids = sorted(set(self.coco.getCatIds()))

所以·,数据集标注和我一样问题的,可以改改代码使用,但是建议规范数据集吧,太难了呜呜

byteTrack数据集categories不规范带来的问题相关推荐

  1. IDEA去除拼音不规范带来的波浪线

    在我们编辑IDEA的时候,可能会出现有一些词我们喜欢用自己的方式表达,但是系统不认可,所以出现了这种下划线 解决方式1:修改这个警告,选择save的方式,将这个词保存到我们的字典中 解决方式2:手动将 ...

  2. 清华构建新一代数据集NICO,定义图像分类新标准

    2020-08-15 01:59:36 每件事物的出现都有它各自的使命,我们今天提数据集就不得不提到ImageNet,ImageNet数据集及其它推动的大规模视觉比赛对人工智能特别是计算机视觉领域的巨 ...

  3. 深度学习笔记:在小数据集上从头训练卷积神经网络

    目录 0. 前言 1. 数据下载和预处理¶ 2. 搭建一个小的卷积网络 3. 数据预处理 4. 模型训练¶ 5. 在测试集进行模型性能评估 6. 小结¶ 0. 前言 本文(以及接下来的几篇)介绍如何搭 ...

  4. 快手日入数据量超 5120TB,数据管治如何做?

    ​近日,快手大数据团队联合"快手中学",举办"快手数据管治技术交流会",各行业数据相关开发者报名参与.在海量的 UGC 数据.业务数据.用户数据背后,支撑快手数 ...

  5. YOLO9000, Better, Faster, Stronger论文翻译——中英文对照

    文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书 声明:作者翻译论文仅为学习,如有侵权请联系作者删除博文,谢谢! 翻译论文汇总:https://github.com ...

  6. 阿里前端智能化技术探索和未来思考

    ​作者:霸天.欣余.灝阳.苏川.继风.闻梦.缺月.妙净.甄子 未来十年,智能化将不断渗入各领域,改变我们的生活和工作.本文将会分享阿里前端智能化技术的技术实践,探索未来UI智能化的发展方向. 最近看到 ...

  7. 详解从零搭建企业级 vue3 + vite2+ ts4 框架全过程

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 本文不仅仅是搭建个脚手架这么简单,还会带你了解每一步.甚至每一个配置项的作用,和每个配置的知 ...

  8. 目标检测经典论文——YOLOV2论文翻译:YOLO9000: Better, Faster, Stronger(YOLO9000:更好、更快、更强)

    YOLO9000: Better, Faster, Stronger YOLO9000:更好.更快.更强 Joseph Redmon*†, Ali Farhadi*† University of Wa ...

  9. 基于线段的激光雷达和单目联合曲面重建​

    点云PCL免费知识星球,点云论文速读. 标题:Pixel-level Extrinsic Self Calibration of High Resolution LiDAR and Camera in ...

最新文章

  1. Google Test(GTest)使用方法和源码解析——结果统计机制分析
  2. 5G 在车联网中的需求
  3. idea 打开html有错误,Intellij IDEA + Tomcat 出现 HTTP status 404错误的解决办法
  4. Hbase中的Column Family(转载)
  5. spring依赖注入_Spring依赖注入技术的发展
  6. 【转载】网易将军令工作原理
  7. 单调队列以及单调队列优化DP
  8. python中条件、循环等
  9. android 定时器 耗电,Android定时器
  10. [转载] set集合python_python基础-set集合
  11. 总结C#语言命名规范 (转)
  12. Stereo Matching文献笔记之(九):经典算法Semi-Global Matching(SGM)之神奇的HMI代价计算~
  13. 借助谷歌浏览器下载保存微信公众号中的视频
  14. 跟我一起走进内联汇编的世界
  15. java打印日历至Excel_如何利用Excel打印漂亮的工作日历
  16. 计算机知识竞赛 翻译,英文简历之常见学科竞赛中英文翻译
  17. 在EXCEL中插入超级链接
  18. 基于人工势场法的二维平面内无人机的路径规划的matlab仿真,并通过对势场法改进避免了无人机陷入极值的问题
  19. 19-10-15(msgbox、inputbox、注释)
  20. 武侠中的基本要素(武侠之奥义)

热门文章

  1. 图片饱和度、色调、明度的计算
  2. 族蚂智能小程序名片,营销快人一步。
  3. C++实现matlab中的interp1和interp2插值
  4. 流量监控-ntopng
  5. I3C协议Single Data Rate(SDR)模式研读(一):总线配置Bus Configuration
  6. html2pdf vue,VUE项目中利用html2canvas和JsPdf实现页面转PDF并保证图片不会被切断
  7. Linux mmap 详解
  8. SpringSecurity退出登录logout报错404
  9. ibm x服务器硬盘检测,IBM System x 服务器自带RAID1的故障恢复
  10. Dubbo源码分析(一):概览