-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
100 changed files
with
10,556 additions
and
0 deletions.
There are no files selected for viewing
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# YOLOv5 π by Ultralytics, GPL-3.0 license | ||
# Argoverse-HD dataset (ring-front-center camera) http://www.cs.cmu.edu/~mengtial/proj/streaming/ by Argo AI | ||
# Example usage: python train.py --data Argoverse.yaml | ||
# parent | ||
# βββ yolov5 | ||
# βββ datasets | ||
# βββ Argoverse β downloads here | ||
|
||
|
||
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] | ||
path: ../datasets/Argoverse # dataset root dir | ||
train: Argoverse-1.1/images/train/ # train images (relative to 'path') 39384 images | ||
val: Argoverse-1.1/images/val/ # val images (relative to 'path') 15062 images | ||
test: Argoverse-1.1/images/test/ # test images (optional) https://eval.ai/web/challenges/challenge-page/800/overview | ||
|
||
# Classes | ||
nc: 8 # number of classes | ||
names: ['person', 'bicycle', 'car', 'motorcycle', 'bus', 'truck', 'traffic_light', 'stop_sign'] # class names | ||
|
||
|
||
# Download script/URL (optional) --------------------------------------------------------------------------------------- | ||
download: | | ||
import json | ||
from tqdm import tqdm | ||
from utils.general import download, Path | ||
def argoverse2yolo(set): | ||
labels = {} | ||
a = json.load(open(set, "rb")) | ||
for annot in tqdm(a['annotations'], desc=f"Converting {set} to YOLOv5 format..."): | ||
img_id = annot['image_id'] | ||
img_name = a['images'][img_id]['name'] | ||
img_label_name = img_name[:-3] + "txt" | ||
cls = annot['category_id'] # instance class id | ||
x_center, y_center, width, height = annot['bbox'] | ||
x_center = (x_center + width / 2) / 1920.0 # offset and scale | ||
y_center = (y_center + height / 2) / 1200.0 # offset and scale | ||
width /= 1920.0 # scale | ||
height /= 1200.0 # scale | ||
img_dir = set.parents[2] / 'Argoverse-1.1' / 'labels' / a['seq_dirs'][a['images'][annot['image_id']]['sid']] | ||
if not img_dir.exists(): | ||
img_dir.mkdir(parents=True, exist_ok=True) | ||
k = str(img_dir / img_label_name) | ||
if k not in labels: | ||
labels[k] = [] | ||
labels[k].append(f"{cls} {x_center} {y_center} {width} {height}\n") | ||
for k in labels: | ||
with open(k, "w") as f: | ||
f.writelines(labels[k]) | ||
# Download | ||
dir = Path('../datasets/Argoverse') # dataset root dir | ||
urls = ['https://argoverse-hd.s3.us-east-2.amazonaws.com/Argoverse-HD-Full.zip'] | ||
download(urls, dir=dir, delete=False) | ||
# Convert | ||
annotations_dir = 'Argoverse-HD/annotations/' | ||
(dir / 'Argoverse-1.1' / 'tracking').rename(dir / 'Argoverse-1.1' / 'images') # rename 'tracking' to 'images' | ||
for d in "train.json", "val.json": | ||
argoverse2yolo(dir / annotations_dir / d) # convert VisDrone annotations to YOLO labels |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
# YOLOv5 π by Ultralytics, GPL-3.0 license | ||
# Global Wheat 2020 dataset http://www.global-wheat.com/ by University of Saskatchewan | ||
# Example usage: python train.py --data GlobalWheat2020.yaml | ||
# parent | ||
# βββ yolov5 | ||
# βββ datasets | ||
# βββ GlobalWheat2020 β downloads here | ||
|
||
|
||
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] | ||
path: ../datasets/GlobalWheat2020 # dataset root dir | ||
train: # train images (relative to 'path') 3422 images | ||
- images/arvalis_1 | ||
- images/arvalis_2 | ||
- images/arvalis_3 | ||
- images/ethz_1 | ||
- images/rres_1 | ||
- images/inrae_1 | ||
- images/usask_1 | ||
val: # val images (relative to 'path') 748 images (WARNING: train set contains ethz_1) | ||
- images/ethz_1 | ||
test: # test images (optional) 1276 images | ||
- images/utokyo_1 | ||
- images/utokyo_2 | ||
- images/nau_1 | ||
- images/uq_1 | ||
|
||
# Classes | ||
nc: 1 # number of classes | ||
names: ['wheat_head'] # class names | ||
|
||
|
||
# Download script/URL (optional) --------------------------------------------------------------------------------------- | ||
download: | | ||
from utils.general import download, Path | ||
# Download | ||
dir = Path(yaml['path']) # dataset root dir | ||
urls = ['https://zenodo.org/record/4298502/files/global-wheat-codalab-official.zip', | ||
'https://github.com/ultralytics/yolov5/releases/download/v1.0/GlobalWheat2020_labels.zip'] | ||
download(urls, dir=dir) | ||
# Make Directories | ||
for p in 'annotations', 'images', 'labels': | ||
(dir / p).mkdir(parents=True, exist_ok=True) | ||
# Move | ||
for p in 'arvalis_1', 'arvalis_2', 'arvalis_3', 'ethz_1', 'rres_1', 'inrae_1', 'usask_1', \ | ||
'utokyo_1', 'utokyo_2', 'nau_1', 'uq_1': | ||
(dir / p).rename(dir / 'images' / p) # move to /images | ||
f = (dir / p).with_suffix('.json') # json file | ||
if f.exists(): | ||
f.rename((dir / 'annotations' / p).with_suffix('.json')) # move to /annotations |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
# YOLOv5 π by Ultralytics, GPL-3.0 license | ||
# Objects365 dataset https://www.objects365.org/ by Megvii | ||
# Example usage: python train.py --data Objects365.yaml | ||
# parent | ||
# βββ yolov5 | ||
# βββ datasets | ||
# βββ Objects365 β downloads here | ||
|
||
|
||
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] | ||
path: ../datasets/Objects365 # dataset root dir | ||
train: images/train # train images (relative to 'path') 1742289 images | ||
val: images/val # val images (relative to 'path') 80000 images | ||
test: # test images (optional) | ||
|
||
# Classes | ||
nc: 365 # number of classes | ||
names: ['Person', 'Sneakers', 'Chair', 'Other Shoes', 'Hat', 'Car', 'Lamp', 'Glasses', 'Bottle', 'Desk', 'Cup', | ||
'Street Lights', 'Cabinet/shelf', 'Handbag/Satchel', 'Bracelet', 'Plate', 'Picture/Frame', 'Helmet', 'Book', | ||
'Gloves', 'Storage box', 'Boat', 'Leather Shoes', 'Flower', 'Bench', 'Potted Plant', 'Bowl/Basin', 'Flag', | ||
'Pillow', 'Boots', 'Vase', 'Microphone', 'Necklace', 'Ring', 'SUV', 'Wine Glass', 'Belt', 'Monitor/TV', | ||
'Backpack', 'Umbrella', 'Traffic Light', 'Speaker', 'Watch', 'Tie', 'Trash bin Can', 'Slippers', 'Bicycle', | ||
'Stool', 'Barrel/bucket', 'Van', 'Couch', 'Sandals', 'Basket', 'Drum', 'Pen/Pencil', 'Bus', 'Wild Bird', | ||
'High Heels', 'Motorcycle', 'Guitar', 'Carpet', 'Cell Phone', 'Bread', 'Camera', 'Canned', 'Truck', | ||
'Traffic cone', 'Cymbal', 'Lifesaver', 'Towel', 'Stuffed Toy', 'Candle', 'Sailboat', 'Laptop', 'Awning', | ||
'Bed', 'Faucet', 'Tent', 'Horse', 'Mirror', 'Power outlet', 'Sink', 'Apple', 'Air Conditioner', 'Knife', | ||
'Hockey Stick', 'Paddle', 'Pickup Truck', 'Fork', 'Traffic Sign', 'Balloon', 'Tripod', 'Dog', 'Spoon', 'Clock', | ||
'Pot', 'Cow', 'Cake', 'Dinning Table', 'Sheep', 'Hanger', 'Blackboard/Whiteboard', 'Napkin', 'Other Fish', | ||
'Orange/Tangerine', 'Toiletry', 'Keyboard', 'Tomato', 'Lantern', 'Machinery Vehicle', 'Fan', | ||
'Green Vegetables', 'Banana', 'Baseball Glove', 'Airplane', 'Mouse', 'Train', 'Pumpkin', 'Soccer', 'Skiboard', | ||
'Luggage', 'Nightstand', 'Tea pot', 'Telephone', 'Trolley', 'Head Phone', 'Sports Car', 'Stop Sign', | ||
'Dessert', 'Scooter', 'Stroller', 'Crane', 'Remote', 'Refrigerator', 'Oven', 'Lemon', 'Duck', 'Baseball Bat', | ||
'Surveillance Camera', 'Cat', 'Jug', 'Broccoli', 'Piano', 'Pizza', 'Elephant', 'Skateboard', 'Surfboard', | ||
'Gun', 'Skating and Skiing shoes', 'Gas stove', 'Donut', 'Bow Tie', 'Carrot', 'Toilet', 'Kite', 'Strawberry', | ||
'Other Balls', 'Shovel', 'Pepper', 'Computer Box', 'Toilet Paper', 'Cleaning Products', 'Chopsticks', | ||
'Microwave', 'Pigeon', 'Baseball', 'Cutting/chopping Board', 'Coffee Table', 'Side Table', 'Scissors', | ||
'Marker', 'Pie', 'Ladder', 'Snowboard', 'Cookies', 'Radiator', 'Fire Hydrant', 'Basketball', 'Zebra', 'Grape', | ||
'Giraffe', 'Potato', 'Sausage', 'Tricycle', 'Violin', 'Egg', 'Fire Extinguisher', 'Candy', 'Fire Truck', | ||
'Billiards', 'Converter', 'Bathtub', 'Wheelchair', 'Golf Club', 'Briefcase', 'Cucumber', 'Cigar/Cigarette', | ||
'Paint Brush', 'Pear', 'Heavy Truck', 'Hamburger', 'Extractor', 'Extension Cord', 'Tong', 'Tennis Racket', | ||
'Folder', 'American Football', 'earphone', 'Mask', 'Kettle', 'Tennis', 'Ship', 'Swing', 'Coffee Machine', | ||
'Slide', 'Carriage', 'Onion', 'Green beans', 'Projector', 'Frisbee', 'Washing Machine/Drying Machine', | ||
'Chicken', 'Printer', 'Watermelon', 'Saxophone', 'Tissue', 'Toothbrush', 'Ice cream', 'Hot-air balloon', | ||
'Cello', 'French Fries', 'Scale', 'Trophy', 'Cabbage', 'Hot dog', 'Blender', 'Peach', 'Rice', 'Wallet/Purse', | ||
'Volleyball', 'Deer', 'Goose', 'Tape', 'Tablet', 'Cosmetics', 'Trumpet', 'Pineapple', 'Golf Ball', | ||
'Ambulance', 'Parking meter', 'Mango', 'Key', 'Hurdle', 'Fishing Rod', 'Medal', 'Flute', 'Brush', 'Penguin', | ||
'Megaphone', 'Corn', 'Lettuce', 'Garlic', 'Swan', 'Helicopter', 'Green Onion', 'Sandwich', 'Nuts', | ||
'Speed Limit Sign', 'Induction Cooker', 'Broom', 'Trombone', 'Plum', 'Rickshaw', 'Goldfish', 'Kiwi fruit', | ||
'Router/modem', 'Poker Card', 'Toaster', 'Shrimp', 'Sushi', 'Cheese', 'Notepaper', 'Cherry', 'Pliers', 'CD', | ||
'Pasta', 'Hammer', 'Cue', 'Avocado', 'Hamimelon', 'Flask', 'Mushroom', 'Screwdriver', 'Soap', 'Recorder', | ||
'Bear', 'Eggplant', 'Board Eraser', 'Coconut', 'Tape Measure/Ruler', 'Pig', 'Showerhead', 'Globe', 'Chips', | ||
'Steak', 'Crosswalk Sign', 'Stapler', 'Camel', 'Formula 1', 'Pomegranate', 'Dishwasher', 'Crab', | ||
'Hoverboard', 'Meat ball', 'Rice Cooker', 'Tuba', 'Calculator', 'Papaya', 'Antelope', 'Parrot', 'Seal', | ||
'Butterfly', 'Dumbbell', 'Donkey', 'Lion', 'Urinal', 'Dolphin', 'Electric Drill', 'Hair Dryer', 'Egg tart', | ||
'Jellyfish', 'Treadmill', 'Lighter', 'Grapefruit', 'Game board', 'Mop', 'Radish', 'Baozi', 'Target', 'French', | ||
'Spring Rolls', 'Monkey', 'Rabbit', 'Pencil Case', 'Yak', 'Red Cabbage', 'Binoculars', 'Asparagus', 'Barbell', | ||
'Scallop', 'Noddles', 'Comb', 'Dumpling', 'Oyster', 'Table Tennis paddle', 'Cosmetics Brush/Eyeliner Pencil', | ||
'Chainsaw', 'Eraser', 'Lobster', 'Durian', 'Okra', 'Lipstick', 'Cosmetics Mirror', 'Curling', 'Table Tennis'] | ||
|
||
|
||
# Download script/URL (optional) --------------------------------------------------------------------------------------- | ||
download: | | ||
from pycocotools.coco import COCO | ||
from tqdm import tqdm | ||
from utils.general import Path, download, np, xyxy2xywhn | ||
# Make Directories | ||
dir = Path(yaml['path']) # dataset root dir | ||
for p in 'images', 'labels': | ||
(dir / p).mkdir(parents=True, exist_ok=True) | ||
for q in 'train', 'val': | ||
(dir / p / q).mkdir(parents=True, exist_ok=True) | ||
# Train, Val Splits | ||
for split, patches in [('train', 50 + 1), ('val', 43 + 1)]: | ||
print(f"Processing {split} in {patches} patches ...") | ||
images, labels = dir / 'images' / split, dir / 'labels' / split | ||
# Download | ||
url = f"https://dorc.ks3-cn-beijing.ksyun.com/data-set/2020Objects365%E6%95%B0%E6%8D%AE%E9%9B%86/{split}/" | ||
if split == 'train': | ||
download([f'{url}zhiyuan_objv2_{split}.tar.gz'], dir=dir, delete=False) # annotations json | ||
download([f'{url}patch{i}.tar.gz' for i in range(patches)], dir=images, curl=True, delete=False, threads=8) | ||
elif split == 'val': | ||
download([f'{url}zhiyuan_objv2_{split}.json'], dir=dir, delete=False) # annotations json | ||
download([f'{url}images/v1/patch{i}.tar.gz' for i in range(15 + 1)], dir=images, curl=True, delete=False, threads=8) | ||
download([f'{url}images/v2/patch{i}.tar.gz' for i in range(16, patches)], dir=images, curl=True, delete=False, threads=8) | ||
# Move | ||
for f in tqdm(images.rglob('*.jpg'), desc=f'Moving {split} images'): | ||
f.rename(images / f.name) # move to /images/{split} | ||
# Labels | ||
coco = COCO(dir / f'zhiyuan_objv2_{split}.json') | ||
names = [x["name"] for x in coco.loadCats(coco.getCatIds())] | ||
for cid, cat in enumerate(names): | ||
catIds = coco.getCatIds(catNms=[cat]) | ||
imgIds = coco.getImgIds(catIds=catIds) | ||
for im in tqdm(coco.loadImgs(imgIds), desc=f'Class {cid + 1}/{len(names)} {cat}'): | ||
width, height = im["width"], im["height"] | ||
path = Path(im["file_name"]) # image filename | ||
try: | ||
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) | ||
xyxy = np.array([x, y, x + w, y + h])[None] # pixels(1,4) | ||
x, y, w, h = xyxy2xywhn(xyxy, w=width, h=height, clip=True)[0] # normalized and clipped | ||
file.write(f"{cid} {x:.5f} {y:.5f} {w:.5f} {h:.5f}\n") | ||
except Exception as e: | ||
print(e) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# YOLOv5 π by Ultralytics, GPL-3.0 license | ||
# SKU-110K retail items dataset https://github.com/eg4000/SKU110K_CVPR19 by Trax Retail | ||
# Example usage: python train.py --data SKU-110K.yaml | ||
# parent | ||
# βββ yolov5 | ||
# βββ datasets | ||
# βββ SKU-110K β downloads here | ||
|
||
|
||
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] | ||
path: ../datasets/SKU-110K # dataset root dir | ||
train: train.txt # train images (relative to 'path') 8219 images | ||
val: val.txt # val images (relative to 'path') 588 images | ||
test: test.txt # test images (optional) 2936 images | ||
|
||
# Classes | ||
nc: 1 # number of classes | ||
names: ['object'] # class names | ||
|
||
|
||
# Download script/URL (optional) --------------------------------------------------------------------------------------- | ||
download: | | ||
import shutil | ||
from tqdm import tqdm | ||
from utils.general import np, pd, Path, download, xyxy2xywh | ||
# Download | ||
dir = Path(yaml['path']) # dataset root dir | ||
parent = Path(dir.parent) # download dir | ||
urls = ['http://trax-geometry.s3.amazonaws.com/cvpr_challenge/SKU110K_fixed.tar.gz'] | ||
download(urls, dir=parent, delete=False) | ||
# Rename directories | ||
if dir.exists(): | ||
shutil.rmtree(dir) | ||
(parent / 'SKU110K_fixed').rename(dir) # rename dir | ||
(dir / 'labels').mkdir(parents=True, exist_ok=True) # create labels dir | ||
# Convert labels | ||
names = 'image', 'x1', 'y1', 'x2', 'y2', 'class', 'image_width', 'image_height' # column names | ||
for d in 'annotations_train.csv', 'annotations_val.csv', 'annotations_test.csv': | ||
x = pd.read_csv(dir / 'annotations' / d, names=names).values # annotations | ||
images, unique_images = x[:, 0], np.unique(x[:, 0]) | ||
with open((dir / d).with_suffix('.txt').__str__().replace('annotations_', ''), 'w') as f: | ||
f.writelines(f'./images/{s}\n' for s in unique_images) | ||
for im in tqdm(unique_images, desc=f'Converting {dir / d}'): | ||
cls = 0 # single-class dataset | ||
with open((dir / 'labels' / im).with_suffix('.txt'), 'a') as f: | ||
for r in x[images == im]: | ||
w, h = r[6], r[7] # image width, height | ||
xywh = xyxy2xywh(np.array([[r[1] / w, r[2] / h, r[3] / w, r[4] / h]]))[0] # instance | ||
f.write(f"{cls} {xywh[0]:.5f} {xywh[1]:.5f} {xywh[2]:.5f} {xywh[3]:.5f}\n") # write label |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
# YOLOv5 π by Ultralytics, GPL-3.0 license | ||
# PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC by University of Oxford | ||
# Example usage: python train.py --data VOC.yaml | ||
# parent | ||
# βββ yolov5 | ||
# βββ datasets | ||
# βββ VOC β downloads here | ||
|
||
|
||
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] | ||
path: ../datasets/VOC | ||
train: # train images (relative to 'path') 16551 images | ||
- images/train2012 | ||
- images/train2007 | ||
- images/val2012 | ||
- images/val2007 | ||
val: # val images (relative to 'path') 4952 images | ||
- images/test2007 | ||
test: # test images (optional) | ||
- images/test2007 | ||
|
||
# Classes | ||
nc: 20 # number of classes | ||
names: ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', | ||
'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor'] # class names | ||
|
||
|
||
# Download script/URL (optional) --------------------------------------------------------------------------------------- | ||
download: | | ||
import xml.etree.ElementTree as ET | ||
from tqdm import tqdm | ||
from utils.general import download, Path | ||
def convert_label(path, lb_path, year, image_id): | ||
def convert_box(size, box): | ||
dw, dh = 1. / size[0], 1. / size[1] | ||
x, y, w, h = (box[0] + box[1]) / 2.0 - 1, (box[2] + box[3]) / 2.0 - 1, box[1] - box[0], box[3] - box[2] | ||
return x * dw, y * dh, w * dw, h * dh | ||
in_file = open(path / f'VOC{year}/Annotations/{image_id}.xml') | ||
out_file = open(lb_path, 'w') | ||
tree = ET.parse(in_file) | ||
root = tree.getroot() | ||
size = root.find('size') | ||
w = int(size.find('width').text) | ||
h = int(size.find('height').text) | ||
for obj in root.iter('object'): | ||
cls = obj.find('name').text | ||
if cls in yaml['names'] and not int(obj.find('difficult').text) == 1: | ||
xmlbox = obj.find('bndbox') | ||
bb = convert_box((w, h), [float(xmlbox.find(x).text) for x in ('xmin', 'xmax', 'ymin', 'ymax')]) | ||
cls_id = yaml['names'].index(cls) # class id | ||
out_file.write(" ".join([str(a) for a in (cls_id, *bb)]) + '\n') | ||
# Download | ||
dir = Path(yaml['path']) # dataset root dir | ||
url = 'https://github.com/ultralytics/yolov5/releases/download/v1.0/' | ||
urls = [url + 'VOCtrainval_06-Nov-2007.zip', # 446MB, 5012 images | ||
url + 'VOCtest_06-Nov-2007.zip', # 438MB, 4953 images | ||
url + 'VOCtrainval_11-May-2012.zip'] # 1.95GB, 17126 images | ||
download(urls, dir=dir / 'images', delete=False) | ||
# Convert | ||
path = dir / f'images/VOCdevkit' | ||
for year, image_set in ('2012', 'train'), ('2012', 'val'), ('2007', 'train'), ('2007', 'val'), ('2007', 'test'): | ||
imgs_path = dir / 'images' / f'{image_set}{year}' | ||
lbs_path = dir / 'labels' / f'{image_set}{year}' | ||
imgs_path.mkdir(exist_ok=True, parents=True) | ||
lbs_path.mkdir(exist_ok=True, parents=True) | ||
image_ids = open(path / f'VOC{year}/ImageSets/Main/{image_set}.txt').read().strip().split() | ||
for id in tqdm(image_ids, desc=f'{image_set}{year}'): | ||
f = path / f'VOC{year}/JPEGImages/{id}.jpg' # old img path | ||
lb_path = (lbs_path / f.name).with_suffix('.txt') # new label path | ||
f.rename(imgs_path / f.name) # move image | ||
convert_label(path, lb_path, year, id) # convert labels to YOLO format |
Oops, something went wrong.