GithubHelp home page GithubHelp logo

dl_scripts's Introduction

Some Scripts For DEEP LEARNING

1. detection

yolo2coco.py

将yolo格式数据集修改成coco格式。$ROOT_PATH是根目录,需要按下面的形式组织数据:

└── $ROOT_PATH

  ├── classes.txt

  ├── images

  └──labels
  • classes.txt 是类的声明,一行一类。

  • images 目录包含所有图片 (目前支持pngjpg格式数据)

  • labels 目录包含所有标签(与图片同名txt格式数据)

配置好文件夹后,执行:python yolo2coco.py --root_dir $ROOT_PATH ,然后就能看见生成的 annotations 文件夹。

参数说明

  • --root_path 输入根目录$ROOT_PATH的位置。
  • --save_path 如果不进行数据集划分,可利用此参数指定输出文件的名字,默认保存为train.json
  • --random_split 随机划分参数,若指定--random_split参数,则输出在annotations文件夹下包含 train.json val.json test.json (默认随机划分成8:1:1)
  • --split_by_file 自定义数据集划分,若指定--split_by_file参数,则输出在annotations文件夹 train.json val.json test.json。需要在$ROOT_PATH文件下有 ./train.txt ./val.txt ./test.txt ,可以这3个文件来定义训练集、验证集、测试集。注意, 这里里面填写的应是图片文件名字,而不是图片的绝对地址。(在line 43也自行可以修改一下读取方式,为了方便起见,不推荐把图片放在不同位置)

coco2yolo.py

读入coco数据集json格式的标注,输出可供yolo训练的标签。

需要注意的是,COCO2017官方的数据集中categories id 是不连续的,这在yolo读取的时候会出问题,所以需要重新映射一下,这个代码会按id从小到大映射到0~79之间。(如果是自己的数据集,也会重新映射)

执行:python coco2yolo.py --json_path $JSON_FILE_PATH --save_path $LABEL_SAVE_PATH

  • $JSON_FILE_PATH是json文件的地址。
  • $JSON_FILE_PATH是输出目录(默认为工作目录下的./labels目录。

zeroshot_retrieval_evaluation.ipynb

  • 检索topN的计算,支持一对多检索。(一张图对应有多个captions)

vis_yolo_gt_dt.py

同时把GT和预测结果可视化在同一张图中。$DT_DIR是预测结果标签地址,必须是和GT同名的标签。$ROOT_PATH文件目录:

└── $ROOT_PATH

  ├── classes.txt

  ├── images

  └── labels

执行:python vis_yolo_gt_dt.py --root $ROOT_PATH --dt $DT_DIR后生成在outputs文件夹中。

  • classes.txtimages必须有。
  • labels可以没有,那样就只展示$DT_DIR预测结果。
  • $DT_DIR 若没有输入,则只展示标签结果。

coco_eval.py

评估生成的结果,针对yolov5生成的检测结果(test中的--save-json参数,会生成best_predictions.json),但是这个不适应cocoapi,需要用脚本来修改适应。执行:

python coco_eval.py --gt $GT_PATH --dt $DT_PATH --yolov5

  • --gt json格式,用于指定测试集的结果,如果没有,可以利用前面的yolo2coco.py进行转换。
  • --dt 同样检测网络生成的预测,使用cocoapi中loadRes来加载,所以需要有相应格式的检测结果。
  • --yolov5 将官方代码中生成的结果转换成适配cocoapi的结果。

2. text-image

zeroshot_retrieval_evalution.ipynb

检索模型的评估指标。(topK召回率),支持多对多的情况。(比如一个文本匹配多张图片)

fid_clip_score

用于画text2image的 FID-CLIP Score曲线图。

dl_scripts's People

Contributors

weifeng-chen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

dl_scripts's Issues

圖片標記數量

您好我想請問:
1.yolo2coco這份轉換code支援一張圖片還有多個物件 txt檔有對應各物件的眶嗎
還是說他只能一張圖片 一個標記框呢

你的代码太没效率了,我改了下,现在8秒钟就跑完,原先要3个小时

"""
author: Wu
2021/1/24
source: https://github.com/Weifeng-Chen/DL_tools/blob/main/coco2yolo.py
COCO 格式的数据集转化为 YOLO 格式的数据集,源代码采取遍历方式,太慢,
这里改进了一下时间复杂度,从O(nm)改为O(n+m),但是牺牲了一些内存占用
--json_path 输入的json文件路径
--save_path 保存的文件夹名字,默认为当前目录下的labels。
"""

import os 
import json
from tqdm import tqdm
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--json_path', default='./instances_val2017.json',type=str, help="input: coco format(json)")
parser.add_argument('--save_path', default='./labels', type=str, help="specify where to save the output dir of labels")
arg = parser.parse_args()

def convert(size, box):
    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = box[0] + box[2] / 2.0
    y = box[1] + box[3] / 2.0
    w = box[2]
    h = box[3]

    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)

if __name__ == '__main__':
    json_file =   arg.json_path # COCO Object Instance 类型的标注
    ana_txt_save_path = arg.save_path  # 保存的路径

    data = json.load(open(json_file, 'r'))
    if not os.path.exists(ana_txt_save_path):
        os.makedirs(ana_txt_save_path)
    
    id_map = {} # coco数据集的id不连续!重新映射一下再输出!
    for i, category in enumerate(data['categories']): 
        id_map[category['id']] = i

    # 通过事先建表来降低时间复杂度
    max_id = 0
    for img in data['images']:
        max_id = max(max_id, img['id'])
    # 注意这里不能写作 [[]]*(max_id+1),否则列表内的空列表共享地址
    img_ann_dict = [[] for i in range(max_id+1)] 
    for i, ann in enumerate(data['annotations']):
        img_ann_dict[ann['image_id']].append(i)

    for img in tqdm(data['images']):
        filename = img["file_name"]
        img_width = img["width"]
        img_height = img["height"]
        img_id = img["id"]
        head, tail = os.path.splitext(filename)
        ana_txt_name = head + ".txt"  # 对应的txt名字,与jpg一致
        f_txt = open(os.path.join(ana_txt_save_path, ana_txt_name), 'w')
        '''for ann in data['annotations']:
            if ann['image_id'] == img_id:
                box = convert((img_width, img_height), ann["bbox"])
                f_txt.write("%s %s %s %s %s\n" % (id_map[ann["category_id"]], box[0], box[1], box[2], box[3]))'''
        # 这里可以直接查表而无需重复遍历
        for ann_id in img_ann_dict[img_id]:
            ann = data['annotations'][ann_id]
            box = convert((img_width, img_height), ann["bbox"])
            f_txt.write("%s %s %s %s %s\n" % (id_map[ann["category_id"]], box[0], box[1], box[2], box[3]))
        f_txt.close()

語意分割的YOLO如何轉COCO

作者你好
由於yolov5跟yolov7都有出了語意分割(segmentation),因此save_txt的內容,就不像傳統的只有bbox xywh值
而是有多個點組成的polygon

不曉得作者您能否做一個polygon的yolo(txt)轉COCO (json)方式
謝謝

annotations id 错误。

你好,感谢提供代码。我在使用的时候发现annotatios中的id 对应的变量i没有相对应的计算,这样在使用pycocotools读取时会出错。
‘’‘
dataset['annotations'].append({
'area': width * height,
'bbox': [x1, y1, width, height],
'category_id': int(cls_id),
'id': i,
'image_id': k,
'iscrowd': 0,
# mask, 矩形是从左上角点按顺时针的四个顶点
'segmentation': [[x1, y1, x2, y1, x2, y2, x1, y2]]
})
‘’‘

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.