当前位置: 首页 > news >正文

替换SlowFast中Detectron2为Yolov8

一 需求

FaceBookReserch中SlowFast源码中检测框是用Detectron2进行目标检测,本文想实现用yolov8替换detectron2

二 实施方案

首先,yolov8 支持有自定义库ultralytics(仅支持yolov8),安装对应库

pip install ultralytics

源码中slowfast/visualization.py 43行中

if cfg.DETECTION.ENABLE:self.object_detector = Detectron2Predictor(cfg, gpu_id=self.gpu_id)

根据ultralytics文档进行定义
创建对应YOLOPredictor类(加入了检测框及其标签,具体见前一篇文章)

class YOLOPredictor:def __init__(self, cfg, gpu_id=None):# 加载预训练的 YOLOv8n 模型self.model = YOLO('/root/autodl-tmp/data/runs/detect/train/weights/best.pt')self.detect_names, _, _ = get_class_names(cfg.DEMO.Detect_File_Path, None, None)def __call__(self, task):"""Return bounding boxes predictions as a tensor.Args:task (TaskInfo object): task object that containthe necessary information for action prediction. (e.g. frames)Returns:task (TaskInfo object): the same task info object but filled withprediction values (a tensor) and the corresponding boxes foraction detection task."""# """得到预测置信度"""# scores = outputs["instances"].scores[mask].tolist()# """获取类别标签"""# pred_labels = outputs["instances"].pred_classes[mask]# pred_labels = pred_labels.tolist()# """进行标签匹配"""# for i in range(len(pred_labels)):#     pred_labels[i] = self.detect_names[pred_labels[i]]# preds = [#     "[{:.4f}] {}".format(s, labels) for s, labels in zip(scores, pred_labels)# ]# """加入预测标签"""# task.add_detect_preds(preds)# task.add_bboxes(pred_boxes)middle_frame = task.frames[len(task.frames) // 2]outputs = self.model(middle_frame)boxes = outputs[0].boxesmask = boxes.conf >= 0.5pred_boxes = boxes.xyxy[mask]scores = boxes.conf[mask].tolist()pred_labels = boxes.cls[mask].to(torch.int)pred_labels = pred_labels.tolist()for i in range(len(pred_labels)):pred_labels[i] = self.detect_names[pred_labels[i]]preds = ["[{:.4f}] {}".format(s, labels) for s, labels in zip(scores, pred_labels)]"""加入预测标签"""task.add_detect_preds(preds)task.add_bboxes(pred_boxes)return task

相关文章:

  • 信息系统项目管理师 第四版 第23章 组织通用管理
  • 大数据HCIE成神之路之数学(3)——概率论
  • phpStorm Xdebug调试 加FireFox浏览器
  • 在线生成含logo的彩色二维码工具
  • 如何解决msvcr100.dll丢失问题?5个实用的解决方法分享
  • SpringCloud-Gateway修改Response响应体,并解决大数据量返回不全等问题
  • C++中使用 min()函数/max()函数进行多数比较
  • EDA实验-----4*4矩阵键盘与数码管显示测试
  • LeetCode27.移除元素(暴力法、快慢指针法)
  • ROS 学习应用篇(八)ROS中的坐标变换管理之tf广播与监听的编程实现
  • Scalable Exact Inference in Multi-Output Gaussian Processes
  • 设计模式 -- 适配器模式(Adapter Pattern)
  • C/C++轻量级并发TCP服务器框架Zinx-框架开发002: 定义通道抽象类
  • Flume的安装部署及常见问题解决
  • 2023最新最全【Nacos】零基础安装教程
  • [译]Python中的类属性与实例属性的区别
  • android 一些 utils
  • Android优雅地处理按钮重复点击
  • git 常用命令
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Just for fun——迅速写完快速排序
  • MySQL-事务管理(基础)
  • Redis在Web项目中的应用与实践
  • vue自定义指令实现v-tap插件
  • Yii源码解读-服务定位器(Service Locator)
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 初识MongoDB分片
  • 从零开始学习部署
  • 分享几个不错的工具
  • 给初学者:JavaScript 中数组操作注意点
  • 工程优化暨babel升级小记
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​学习一下,什么是预包装食品?​
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (剑指Offer)面试题34:丑数
  • (转载)从 Java 代码到 Java 堆
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .Net 4.0并行库实用性演练
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .net 使用ajax控件后如何调用前端脚本
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • /proc/vmstat 详解
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ 数据结构 - C++] AVL树原理及实现
  • [20170705]diff比较执行结果的内容.txt
  • [EFI]英特尔 冥王峡谷 NUC8i7HVK 电脑 Hackintosh 黑苹果efi引导文件
  • [Excel VBA]单元格区域引用方式的小结
  • [I2C]I2C通信协议详解(一) --- 什么是I2C
  • [IDF]啥?