Unverified 提交 fc360642 authored 作者: Farley Lai's avatar Farley Lai 提交者: GitHub

Update Objects365.yaml to include the official validation set (#5194)

* Update Objects365.yaml Download the official Objects365 validation set and convert the labels * Enforce 4-space indent, reformat and cleanup * shorten list comprehension Co-authored-by: 's avatarGlenn Jocher <glenn.jocher@ultralytics.com>
上级 1c9f710b
...@@ -62,43 +62,50 @@ names: ['Person', 'Sneakers', 'Chair', 'Other Shoes', 'Hat', 'Car', 'Lamp', 'Gla ...@@ -62,43 +62,50 @@ names: ['Person', 'Sneakers', 'Chair', 'Other Shoes', 'Hat', 'Car', 'Lamp', 'Gla
download: | download: |
from pycocotools.coco import COCO from pycocotools.coco import COCO
from tqdm import tqdm from tqdm import tqdm
from utils.general import download, Path from utils.general import download, Path
# Make Directories # Make Directories
dir = Path(yaml['path']) # dataset root dir dir = Path(yaml['path']) # dataset root dir
for p in 'images', 'labels': for p in 'images', 'labels':
(dir / p).mkdir(parents=True, exist_ok=True) (dir / p).mkdir(parents=True, exist_ok=True)
for q in 'train', 'val': for q in 'train', 'val':
(dir / p / q).mkdir(parents=True, exist_ok=True) (dir / p / q).mkdir(parents=True, exist_ok=True)
# Download # Train, Val Splits
url = "https://dorc.ks3-cn-beijing.ksyun.com/data-set/2020Objects365%E6%95%B0%E6%8D%AE%E9%9B%86/train/" for split, patches in [('train', 50 + 1), ('val', 43 + 1)]:
download([url + 'zhiyuan_objv2_train.tar.gz'], dir=dir, delete=False) # annotations json print(f"Processing {split} in {patches} patches ...")
download([url + f for f in [f'patch{i}.tar.gz' for i in range(51)]], dir=dir / 'images' / 'train', images, labels = dir / 'images' / split, dir / 'labels' / split
curl=True, delete=False, threads=8)
# Download
# Move url = f"https://dorc.ks3-cn-beijing.ksyun.com/data-set/2020Objects365%E6%95%B0%E6%8D%AE%E9%9B%86/{split}/"
train = dir / 'images' / 'train' if split == 'train':
for f in tqdm(train.rglob('*.jpg'), desc=f'Moving images'): download([f'{url}zhiyuan_objv2_{split}.tar.gz'], dir=dir, delete=False) # annotations json
f.rename(train / f.name) # move to /images/train download([f'{url}patch{i}.tar.gz' for i in range(patches)], dir=images, curl=True, delete=False, threads=8)
elif split == 'val':
# Labels download([f'{url}zhiyuan_objv2_{split}.json'], dir=dir, delete=False) # annotations json
coco = COCO(dir / 'zhiyuan_objv2_train.json') download([f'{url}images/v1/patch{i}.tar.gz' for i in range(15 + 1)], dir=images, curl=True, delete=False, threads=8)
names = [x["name"] for x in coco.loadCats(coco.getCatIds())] download([f'{url}images/v2/patch{i}.tar.gz' for i in range(16, patches)], dir=images, curl=True, delete=False, threads=8)
for cid, cat in enumerate(names):
catIds = coco.getCatIds(catNms=[cat]) # Move
imgIds = coco.getImgIds(catIds=catIds) for f in tqdm(images.rglob('*.jpg'), desc=f'Moving {split} images'):
for im in tqdm(coco.loadImgs(imgIds), desc=f'Class {cid + 1}/{len(names)} {cat}'): f.rename(images / f.name) # move to /images/{split}
width, height = im["width"], im["height"]
path = Path(im["file_name"]) # image filename # Labels
try: coco = COCO(dir / f'zhiyuan_objv2_{split}.json')
with open(dir / 'labels' / 'train' / path.with_suffix('.txt').name, 'a') as file: names = [x["name"] for x in coco.loadCats(coco.getCatIds())]
annIds = coco.getAnnIds(imgIds=im["id"], catIds=catIds, iscrowd=None) for cid, cat in enumerate(names):
for a in coco.loadAnns(annIds): catIds = coco.getCatIds(catNms=[cat])
x, y, w, h = a['bbox'] # bounding box in xywh (xy top-left corner) imgIds = coco.getImgIds(catIds=catIds)
x, y = x + w / 2, y + h / 2 # xy to center for im in tqdm(coco.loadImgs(imgIds), desc=f'Class {cid + 1}/{len(names)} {cat}'):
file.write(f"{cid} {x / width:.5f} {y / height:.5f} {w / width:.5f} {h / height:.5f}\n") width, height = im["width"], im["height"]
path = Path(im["file_name"]) # image filename
except Exception as e: try:
print(e) with open(labels / path.with_suffix('.txt').name, 'a') as file:
annIds = coco.getAnnIds(imgIds=im["id"], catIds=catIds, iscrowd=None)
for a in coco.loadAnns(annIds):
x, y, w, h = a['bbox'] # bounding box in xywh (xy top-left corner)
x, y = x + w / 2, y + h / 2 # xy to center
file.write(f"{cid} {x / width:.5f} {y / height:.5f} {w / width:.5f} {h / height:.5f}\n")
except Exception as e:
print(e)
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论