YOLOv7-tiny,通过pycocotools包得到预测大中小尺寸目标的指标值

文章目录

  • 参考链接
  • 步骤
    • 认识正确的instances_val2017.json文件格式
  • 代码(mogui_tococo.py,用于我自己的数据集)

参考链接

  • 需要先在环境中安装pycocotools
pip install pycocotools
  • 魔鬼面具的代码:objectdetection-tricks/tricks_4.py

    • 相关视频教学:tricks_4 用于yolov5和v7中的yolo格式转换coco格式的脚本.(如何在v5和v7中输出ap_small,ap_middle,ap_large coco指标)
  • 一些概念上的了解:通过pycocotools获取每个类别的COCO指标

步骤

步骤很简单,但难在第一步

  1. 得到待检测的数据集的instances_val2017.json文件,参考魔鬼面具代码和视频即可(我直接使用起来有错,应该是因为数据集分布的问题)
  2. test.py里面定位到anno_json =,然后指明1得到的instances_val2017.json文件的位置(我是像下面那样直接指明的绝对位置)
anno_json = r'G:\pycharmprojects\autodl-yolov7\yolov7-main-biyebase\TXTOCOCO\instances_val2017.json'
  1. test.py中定位到'--save-json', action='store_true',然后加上default=True,(加上就能检测大中小尺寸了,就算json文件格式不对也不会直接报错终止,但是不会出现结果)

认识正确的instances_val2017.json文件格式

圈起来的就是正确信息,如果annotations0 items的话,那就说明转出来的json文件内容有误(下图格式是在AutoDL云服务器上看的,看起来比较清楚,本地上看就比较杂乱。之前一直我运行一直有错,就是因为没有转正确,我的image_id的value值写成了test/Czech_000037,有了test/就报错了)

在这里插入图片描述

instances_val2017.jsonbest_predictions.json对比:

在这里插入图片描述

代码(mogui_tococo.py,用于我自己的数据集)

参考魔鬼面具的应该会没有错,以下是我针对我的数据集进行的一代你代码改动,留作备份

import os
import cv2
import json
from tqdm import tqdm
from sklearn.model_selection import train_test_split
import argparseparser = argparse.ArgumentParser()
parser.add_argument('--root_dir', default='/home/hjj/Desktop/dataset/dataset_seaship', type=str, help="root path of images and labels, include ./images and ./labels and classes.txt")
parser.add_argument('--save_path', type=str, default='instances_val2017.json', help="if not split the dataset, give a path to a json file")arg = parser.parse_args()def yolo2coco(arg):with open(r'G:\pycharmprojects\autodl-yolov7\yolov7-main-biyebase\TXTOCOCO\classes.txt', 'r') as f:classes = list(map(lambda x: x.strip(), f.readlines()))# --------------- lwd ---------------- #cities = ['Czech', 'India', 'Japan']indexes = []for city in cities:city_imagedir = f'F:/A_Publicdatasets/RDD2020-1202/train_valid/{city}/images/test'for file in os.listdir(city_imagedir):indexes.append(f'{city_imagedir}/{file}')# --------------- lwd ---------------- #dataset = {'categories': [], 'annotations': [], 'images': []}for i, cls in enumerate(classes, 0):dataset['categories'].append({'id': i, 'name': cls, 'supercategory': 'mark'})# 标注的idann_id_cnt = 0for k, index in enumerate(tqdm(indexes)):# 支持 png jpg 格式的图片。txtPath = index.replace('images', 'labels').replace('.jpg', '.txt')# 读取图像的宽和高im = cv2.imread(index)imageFile = index.split('/')[-1]    # img.jpgheight, width, _ = im.shape# 添加图像的信息if not os.path.exists(txtPath):# 如没标签,跳过,只保留图片信息。continuedataset['images'].append({'file_name': imageFile,'id': int(imageFile[:-4]) if imageFile[:-4].isnumeric() else imageFile[:-4],'width': width,'height': height})with open(txtPath, 'r') as fr:labelList = fr.readlines()for label in labelList:label = label.strip().split()x = float(label[1])y = float(label[2])w = float(label[3])h = float(label[4])# convert x,y,w,h to x1,y1,x2,y2H, W, _ = im.shapex1 = (x - w / 2) * Wy1 = (y - h / 2) * Hx2 = (x + w / 2) * Wy2 = (y + h / 2) * H# 标签序号从0开始计算, coco2017数据集标号混乱,不管它了。cls_id = int(label[0])width = max(0, x2 - x1)height = max(0, y2 - y1)dataset['annotations'].append({'area': width * height,'bbox': [x1, y1, width, height],'category_id': cls_id,'id': ann_id_cnt,'image_id': int(imageFile[:-4]) if imageFile[:-4].isnumeric() else imageFile[:-4],'iscrowd': 0,# mask, 矩形是从左上角点按顺时针的四个顶点'segmentation': [[x1, y1, x2, y1, x2, y2, x1, y2]]})ann_id_cnt += 1# 保存结果with open(arg.save_path, 'w') as f:json.dump(dataset, f)print('Save annotation to {}'.format(arg.save_path))if __name__ == "__main__":yolo2coco(arg)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/615823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第 379 场 LeetCode 周赛题解

A 对角线最长的矩形的面积 模拟 class Solution { public:int areaOfMaxDiagonal(vector<vector<int>> &dimensions) {int res 0, len2 0;for (auto &x: dimensions)if (x[0] * x[0] x[1] * x[1] > len2 || x[0] * x[0] x[1] * x[1] len2 &&am…

SAP 如何快速查询成本的异常

每当月末CO月结的时候&#xff0c;生产企业或多或少会遇到标准成本与实际成本差异偏大的情况&#xff0c;我们如何快速查看产成品的成本异常&#xff0c;一般来说二者偏差5%是正常的&#xff0c;如果偏差20%&#xff0c;就要重点关注。我们通过0062报表来查看 进入“屏幕选择”…

进销存+小程序商城:实现批发零售企业的互联网转型与管理升级

在当今互联网高速发展的时代&#xff0c;越来越多的批发零售企业开始开始考虑转型。在这个行业中&#xff0c;企业要想取得更好的发展&#xff0c;就要积极地拥抱互联网。专属的订货商城小程序是企业转型的第一步。通过将进销存与订货商城一体化&#xff0c;企业可以更好地满足…

argparse库

引言 argparse-------python用于解析命令行参数的标准模块 快速上手 import argparse parser argparse.ArgumentParser() 创建一个命令行解析器对象 parser.add_argument() 向解析器…

APP流量变现——4项关键指标决定了APP混合变现的收入

APP流量变现的方式有很多种&#xff0c;主要的可以分为IAA&#xff08;广告&#xff09;收入、IAP&#xff08;用户应用内付费&#xff09;收入、订阅收入、单次买断收入。这里主要围绕当前流行的混合变现模式&#xff0c;即广告收入&#xff08;IAA&#xff09;应用内付费&…

外汇天眼:塞浦路斯证券交易委员会(CySEC)确认了四家投资公司退出投资者赔偿基金(ICF)会员资格

塞浦路斯证券交易委员会&#xff08;CySEC&#xff09;今天确认了四家投资公司已被取消其在投资者赔偿基金&#xff08;ICF&#xff09;的会员资格。 以下公司不再是ICF的会员&#xff1a; 1.Stone Edge Capital Ltd&#xff08;LEI 213800PZFB9VV8FNWB30&#xff09;&#xf…

yum来安装php727

yum 安装php727,一键安装&#xff0c;都是安装在系统的默认位置&#xff0c;方便快捷 先确定linux平台中centos的版本信息&#xff0c;一下内容针对el7 查看linux版本 &#xff1a; cat /etc/redhat-release 查看内核版本命令&#xff1a; cat /proc/version (0)如果有安装好…

3万字数据结构与算法学习笔记+知识点总结

文章目录 数据结构与算法排序排序算法常见排序算法复杂度冒泡排序&#xff08;Bubble Sort&#xff09;选择排序&#xff08;Selection Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;希尔排序&#xff08;Shell Sort&#xff09;堆排序&#xff08;Heap Sor…

浅谈电能管理系统在智能轨道交通中的设计与应用——安科瑞 顾烊宇

摘要&#xff1a;城市轨道交通可以填补市民出行方式的空缺&#xff0c;它的运行需要有持续的电能提供支持。为了给轨道交通营造稳定的运行环境&#xff0c;迫切需要建立相应的电能管理系统&#xff0c;以此实现高质量的电能供给。在本文中&#xff0c;将对应的电能管理系统作为…

MysqL——深入MySQL原理(一)

文章目录 MySQL架构图MySQL执行流程简要执行流程&#xff1a;详细执行流程 存储引擎SQL执行顺序存储结构实战演示 MySQL架构图 图例如下&#xff1a; server层&#xff1a; Connection Pool :连接池&#xff0c;负责管理持有所有的连接&#xff0c;采用BIO的技术&#xff0c;…

nvm安装pnpm,pnpm不是内部或者外部指令问题解决

node版本18支持安装pnpm 如需要安装pnpm&#xff0c;要先安装nvm切换node版本&#xff0c;因为pnpm要node版本18 https://github.com/nvm-sh/nvm nvm install 18 nvm use 18如遇版本切换失败问题&#xff1a; source ~/bashrc然后安装pnpm curl -fsSL https://get.pnpm.io/…

程序员必知!2024最新版设计模式大合集

程序员必知&#xff01;开放封闭原则的实战应用与案例分析 核心思想&#xff1a;在设计中&#xff0c;应尽量通过添加新的类或模块来增加新的功能&#xff0c;而不是修改现有的代码。 程序员必知&#xff01;依赖倒置原则的实战应用与案例分析 核心思想&#xff1a;高层模块不…

DCP文件传输的重要性与应用

在数字时代&#xff0c;文件传输已成为商业运作中不可或缺的一环。随着企业越来越多地采用云基础设施和服务&#xff0c;有效地在云和团队之间传输大文件和数据集变得至关重要。在这一背景下&#xff0c;数据复制协议&#xff08;DCP&#xff09;文件传输应运而生&#xff0c;引…

【Java】【OpenCV】【awt】两种方式实现很「高大上」图片双重曝光

自双重曝光产生以来&#xff0c;它就一直是摄影爱好者热衷于尝试的摄影手法。通过双重曝光&#xff0c;可以为普通的照片带来神秘的意境和让人难以言喻的感觉&#xff0c;使得每一个场景的纹理和颜色都有了一种如梦如幻的效果&#xff0c;让人沉醉于其中。 在以前&#xff0c;摄…

血泪教训!Java项目的路径中一定不要包含中文~

今天通过应用类加载器获取某个目录下的文件时&#xff0c;控制台一直没有输出&#xff0c;但是没有任何的报错&#xff0c;代码如下所示 ClassLoader classLoaderwjrApplicationContext.class.getClassLoader();//appURL url classLoader.getResource("com/wjr/service&qu…

达梦数据实时同步软件DMHS介绍和原理

1、产品介绍 达梦数据实时同步软件&#xff08;以下简称 DMHS&#xff09;是支持异构环境的高性能、高可靠、高可扩展数据库实时同步复制系统。该产品采用基于日志的结构化数据复制技术&#xff0c;不依赖主机上源数据库的触发器或者规则&#xff0c;对主机源数据库系统几乎无影…

Redis相关报错信息:Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接。

报错信息&#xff1a; Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝&#xff0c;无法连接。 报错原因&#xff1a; 访问不到Redis服务 解决方案&#xff1a; 将Redis服务打开&#xff01; 使用cmd命令行打开本机服务管理&#xff1a; services…

数组深入详解

1、背景 上传图片&#xff0c;需要对图片格式进行校验&#xff0c;这是就可以使用数组 2.1、什么是数组&#xff1f; Java 语言中提供的数组是用来存储固定大小的同类型元素。 如&#xff1a;可以声明一个数组变量&#xff0c;如 numbers[100] 来代替直接声明 100 个独立变量…

【前端转安卓】-Java基础知识笔记

常量定义&#xff1a;final public class HelloWorld {// 静态常量public static final double PI 3.14;// 声明成员常量final int y 10;public static void main(String[] args) {// 声明局部常量final double x 3.3;} }变量声明、赋值 String username,address,phone,te…

关于《电能质量管理办法(暂行)》实施的意义及解决方案——安科瑞赵嘉敏

中华人民共和国国家发展和改革委员会令 第8号 《电能质量管理办法(暂行)》已经2023年12月26日第7次委务会议审议通过,现予公布,自2024 年4月1日起施行。 主任 郑栅洁 2023年12月27日 1 办法解读 新型电力系统中新能源所占比例越来越高&#xff0c;光伏、风力等分布式电源、…