通过fiftyone按分类下载open-images-v7数据集,并转成yolov5可直接训练的格式

 

介绍

Open Images是由谷歌发布的一个开源图片数据集,在2022年10月份发布了最新的V7版本。这个版本的数据集包含了900多万张图片,都有类别标记。其中190多万张图片有非常精细的标注。

包含的类别有:

Tortoise	乌龟
Container	容器
Magpie	喜鹊
Sea turtle	海龟
Football	足球
Ambulance	救护车
Ladder	梯
Toothbrush	牙刷
Syringe	注射器
Sink	水槽
Toy	玩具
Organ (Musical Instrument)	管风琴(乐器)
Cassette deck	磁带甲板
Apple	苹果
Human eye	人类的眼睛
Cosmetics	化妆品
Paddle	桨
Snowman	雪人
Beer	啤酒
Chopsticks	筷子
Human beard	人的胡子
Bird	鸟
Parking meter	停车费
Traffic light	红绿灯
Croissant	羊角面包
Cucumber	黄瓜
Radish	萝卜
Towel	毛巾
Doll	娃娃
Skull	头骨
Washing machine	洗衣机
Glove	手套
Tick	蜱虫
Belt	带
Sunglasses	太阳镜
Banjo	班卓琴
Cart	车
Ball	球
Backpack	背包
Bicycle	自行车
Home appliance	家电
Centipede	蜈蚣
Boat	船
Surfboard	冲浪板
Boot	引导
Headphones	耳机
Hot dog	热狗
Shorts	短裤
Fast food	快餐
Bus	公共汽车
Boy	男孩
Screwdriver	螺丝刀
Bicycle wheel	自行车车轮
Barge	驳船
Laptop	移动PC
Miniskirt	迷你裙
Drill (Tool)	钻(工具)
Dress	衣服
Bear	熊
Waffle	华夫格
Pancake	煎饼
Brown bear	棕熊
Woodpecker	啄木鸟
Blue jay	冠蓝鸦
Pretzel	椒盐卷饼
Bagel	百吉饼
Tower	塔
Teapot	茶壶
Person	人
Bow and arrow	弓箭
Swimwear	泳装
Beehive	蜂巢
Brassiere	胸罩
Bee	蜜蜂
Bat (Animal)	蝙蝠(动物)
Starfish	海星
Popcorn	爆米花
Burrito	玉米煎饼
Chainsaw	电锯
Balloon	气球
Wrench	扳手
Tent	帐篷
Vehicle registration plate	车辆号牌
Lantern	灯笼
Toaster	烤面包机
Flashlight	手电筒
Billboard	广告牌
Tiara	头饰
Limousine	豪华轿车
Necklace	项链
Carnivore	食肉动物
Scissors	剪刀
Stairs	楼梯
Computer keyboard	电脑键盘
Printer	打印机
Traffic sign	交通标志
Chair	椅子
Shirt	衬衫
Poster	海报
Cheese	奶酪
Sock	袜子
Fire hydrant	消防栓
Land vehicle	陆地车辆
Earrings	耳环
Tie	领带
Watercraft	船舶
Cabinetry	橱柜
Suitcase	手提箱
Muffin	松饼
Bidet	坐浴盆
Snack	零食
Snowmobile	雪地
Clock	时钟
Medical equipment	医疗设备
Cattle	牛
Cello	大提琴
Jet ski	喷气滑雪
Camel	骆驼
Coat	外套
Suit	西装
Desk	桌子上
Cat	猫
Bronze sculpture	青铜雕塑
Juice	汁
Gondola	贡多拉
Beetle	甲虫
Cannon	大炮
Computer mouse	电脑鼠标
Cookie	饼干
Office building	办公大楼
Fountain	喷泉
Coin	硬币
Calculator	计算器
Cocktail	鸡尾酒
Computer monitor	电脑显示器
Box	盒子
Stapler	订书机
Christmas tree	圣诞树
Cowboy hat	牛仔帽
Hiking equipment	登山设备
Studio couch	长沙发
Drum	鼓
Dessert	甜点
Wine rack	酒架
Drink	喝
Zucchini	西葫芦
Ladle	包
Human mouth	人类的嘴
Dairy Product	乳制品
Dice	骰子
Oven	烤箱
Dinosaur	恐龙
Ratchet (Device)	棘轮(设备)
Couch	沙发上
Cricket ball	板球
Winter melon	冬瓜
Spatula	抹刀
Whiteboard	白板
Pencil sharpener	卷笔刀
Door	门
Hat	帽子
Shower	淋浴
Eraser	橡皮擦
Fedora	Fedora
Guacamole	鳄梨色拉酱
Dagger	匕首
Scarf	围巾
Dolphin	海豚
Sombrero	宽边帽
Tin can	锡罐
Mug	杯子
Tap	利用
Harbor seal	麻斑海豹
Stretcher	担架
Can opener	开罐器
Goggles	护目镜
Human body	人体
Roller skates	溜冰鞋
Coffee cup	咖啡杯
Cutting board	切肉板
Blender	搅拌机
Plumbing fixture	卫生洁具
Stop sign	停车标志
Office supplies	办公用品
Volleyball (Ball)	排球(球)
Vase	花瓶
Slow cooker	慢炖锅
Wardrobe	衣柜
Coffee	咖啡
Whisk	搅拌
Paper towel	纸巾
Personal care	个人护理
Food	食物
Sun hat	太阳帽子
Tree house	树屋
Flying disc	飞碟
Skirt	裙子
Gas stove	煤气炉
Salt and pepper shakers	盐和胡椒瓶
Mechanical fan	机械风扇
Face powder	脸粉
Fax	传真
Fruit	水果
French fries	炸薯条
Nightstand	床头柜上
Barrel	桶
Kite	风筝
Tart	蛋挞
Treadmill	跑步机
Fox	狐狸
Flag	国旗
French horn	法国号
Window blind	遮光帘
Human foot	人类的脚
Golf cart	高尔夫球车
Jacket	夹克
Egg (Food)	鸡蛋(食物)
Street light	路灯
Guitar	吉他
Pillow	枕头
Human leg	人类的腿
Isopod	等足类动物
Grape	葡萄
Human ear	人耳
Power plugs and sockets	电源插头及插座
Panda	熊猫
Giraffe	长颈鹿
Woman	女人
Door handle	门把手
Rhinoceros	犀牛
Bathtub	浴缸
Goldfish	金鱼
Houseplant	室内植物
Goat	山羊
Baseball bat	棒球棒
Baseball glove	棒球手套
Mixing bowl	碗里
Marine invertebrates	海洋无脊椎动物
Kitchen utensil	厨房用具
Light switch	灯的开关
House	房子
Horse	马
Stationary bicycle	静止的自行车
Hammer	锤
Ceiling fan	吊扇
Sofa bed	沙发床
Adhesive tape	胶带
Harp	竖琴
Sandal	凉鞋
Bicycle helmet	自行车头盔
Saucer	飞碟
Harpsichord	羽管键琴
Human hair	人的头发
Heater	加热器
Harmonica	口琴
Hamster	仓鼠
Curtain	窗帘
Bed	床上
Kettle	水壶
Fireplace	壁炉
Scale	规模
Drinking straw	饮料吸管
Insect	昆虫
Hair dryer	吹风机
Kitchenware	厨房用具
Indoor rower	室内桨手
Invertebrate	无脊椎动物
Food processor	食品加工机
Bookcase	书柜
Refrigerator	冰箱
Wood-burning stove	烧木柴的炉子
Punching bag	出气筒
Common fig	常见的图
Cocktail shaker	鸡尾酒调制器
Jaguar (Animal)	捷豹(动物)
Golf ball	高尔夫球
Fashion accessory	时尚配饰
Alarm clock	闹钟
Filing cabinet	文件柜
Artichoke	洋蓟
Table	表格
Tableware	餐具
Kangaroo	袋鼠
Koala	考拉
Knife	刀
Bottle	瓶
Bottle opener	开瓶器
Lynx	猞猁
Lavender (Plant)	薰衣草(植物)
Lighthouse	灯塔
Dumbbell	哑铃
Human head	人类头上的
Bowl	碗
Humidifier	增湿器
Porch	玄关
Lizard	蜥蜴
Billiard table	台球台
Mammal	哺乳动物
Mouse	老鼠
Motorcycle	摩托车
Musical instrument	乐器
Swim cap	泳帽
Frying pan	煎锅
Snowplow	扫雪机
Bathroom cabinet	浴室柜
Missile	导弹
Bust	破产
Man	男人。
Waffle iron	对开式铁心
Milk	牛奶
Ring binder	扣眼活页夹
Plate	板
Mobile phone	移动电话
Baked goods	焙烤食品
Mushroom	蘑菇
Crutch	拐杖
Pitcher (Container)	投手(容器)
Mirror	镜子
Personal flotation device	个人漂浮装置
Table tennis racket	乒乓球拍
Pencil case	文具盒
Musical keyboard	音乐键盘
Scoreboard	记分板
Briefcase	公文包
Kitchen knife	菜刀
Nail (Construction)	钉(建设)
Tennis ball	网球
Plastic bag	塑料袋
Oboe	双簧管
Chest of drawers	五斗橱
Ostrich	鸵鸟
Piano	钢琴
Girl	女孩
Plant	植物
Potato	土豆
Hair spray	发胶
Sports equipment	运动器材
Pasta	意大利面
Penguin	企鹅
Pumpkin	南瓜
Pear	梨
Infant bed	婴儿床
Polar bear	北极熊
Mixer	混合机
Cupboard	橱柜
Jacuzzi	极可意水流按摩浴缸
Pizza	披萨
Digital clock	数字时钟
Pig	猪
Reptile	爬行动物
Rifle	步枪
Lipstick	口红
Skateboard	滑板
Raven	乌鸦
High heels	高跟鞋
Red panda	红熊猫
Rose	玫瑰
Rabbit	兔子
Sculpture	雕塑
Saxophone	萨克斯风
Shotgun	散弹枪
Seafood	海鲜
Submarine sandwich	潜艇三明治
Snowboard	滑雪板
Sword	剑
Picture frame	相框
Sushi	寿司
Loveseat	双人小沙发
Ski	滑雪
Squirrel	松鼠
Tripod	三脚架
Stethoscope	听诊器
Submarine	潜艇
Scorpion	蝎子
Segway	赛格威
Training bench	训练的长椅上
Snake	蛇
Coffee table	咖啡桌
Skyscraper	摩天大楼
Sheep	羊
Television	电视
Trombone	长号
Tea	茶
Tank	坦克
Taco	墨西哥煎玉米卷
Telephone	电话
Torch	火炬
Tiger	老虎
Strawberry	草莓
Trumpet	小号
Tree	树
Tomato	番茄
Train	火车
Tool	工具
Picnic basket	野餐篮
Cooking spray	烹饪喷雾
Trousers	裤子
Bowling equipment	保龄球设备
Football helmet	橄榄球头盔
Truck	卡车
Measuring cup	量杯
Coffeemaker	咖啡壶
Violin	小提琴
Vehicle	车辆
Handbag	手提包
Paper cutter	切纸机
Wine	酒
Weapon	武器
Wheel	轮
Worm	蠕虫
Wok	锅
Whale	鲸鱼
Zebra	斑马
Auto part	汽车零部件
Jug	壶
Pizza cutter	披萨刀
Cream	奶油
Monkey	猴子
Lion	狮子
Bread	面包
Platter	盘
Chicken	鸡
Eagle	鹰
Helicopter	直升机
Owl	猫头鹰
Duck	鸭
Turtle	乌龟
Hippopotamus	河马
Crocodile	鳄鱼
Toilet	厕所
Toilet paper	厕纸
Squid	鱿鱼
Clothing	服装
Footwear	鞋子
Lemon	柠檬
Spider	蜘蛛
Deer	鹿
Frog	青蛙
Banana	香蕉
Rocket	火箭
Wine glass	酒杯
Countertop	工作台面
Tablet computer	平板电脑
Waste container	废物容器
Swimming pool	游泳池
Dog	狗
Book	书
Elephant	大象
Shark	鲨鱼
Candle	蜡烛
Leopard	豹
Axe	斧
Hand dryer	手干燥机
Soap dispenser	给皂器
Porcupine	豪猪
Flower	花
Canary	金丝雀
Cheetah	猎豹
Palm tree	棕榈树
Hamburger	汉堡
Maple	枫木
Building	建筑
Fish	鱼
Lobster	龙虾
Garden Asparagus	花园芦笋
Furniture	家具
Hedgehog	刺猬
Airplane	飞机
Spoon	勺子
Otter	水獭
Bull	牛
Oyster	牡蛎
Horizontal bar	单杠
Convenience store	便利店
Bomb	炸弹
Bench	板凳上
Ice cream	冰淇淋
Caterpillar	毛毛虫
Butterfly	蝴蝶
Parachute	降落伞
Orange	橙色
Antelope	羚羊
Beaker	烧杯
Moths and butterflies	飞蛾和蝴蝶
Window	窗口
Closet	衣橱
Castle	城堡
Jellyfish	水母
Goose	鹅
Mule	骡子
Swan	天鹅
Peach	桃子
Coconut	椰子
Seat belt	安全带
Raccoon	浣熊
Chisel	凿
Fork	叉
Lamp	灯
Camera	相机
Squash (Plant)	南瓜(植物)
Racket	球拍
Human face	人类的脸
Human arm	人类的手臂
Vegetable	蔬菜
Diaper	尿布
Unicycle	独轮脚踏车
Falcon	猎鹰
Chime	敲出和谐的声音
Snail	蜗牛
Shellfish	贝类
Cabbage	卷心菜
Carrot	胡萝卜
Mango	芒果
Jeans	牛仔裤
Flowerpot	花盆
Pineapple	菠萝
Drawer	抽屉里
Stool	凳子
Envelope	信封
Cake	蛋糕
Dragonfly	蜻蜓
Common sunflower	常见的向日葵
Microwave oven	微波炉
Honeycomb	蜂窝
Marine mammal	海洋哺乳动物
Sea lion	海狮
Ladybug	瓢虫
Shelf	架子上
Watch	看
Candy	糖果
Salad	沙拉
Parrot	鹦鹉
Handgun	手枪
Sparrow	麻雀
Van	范
Grinder	磨床
Spice rack	香料架
Light bulb	灯泡
Corded phone	绳电话
Sports uniform	体育制服
Tennis racket	网球拍
Wall clock	挂钟
Serving tray	托盘
Kitchen & dining room table	厨房和餐桌
Dog bed	狗床
Cake stand	蛋糕站
Cat furniture	猫家具
Bathroom accessory	浴室配件
Facial tissue holder	面巾纸架
Pressure cooker	高压锅
Kitchen appliance	厨房电器
Tire	轮胎
Ruler	统治者
Luggage and bags	行李和包
Microphone	麦克风
Broccoli	西兰花
Umbrella	伞
Pastry	糕点
Grapefruit	葡萄柚
Band-aid	邦迪牌创可贴
Animal	动物
Bell pepper	甜椒
Turkey	火鸡
Lily	莉莉
Pomegranate	石榴
Doughnut	甜甜圈
Glasses	眼镜
Human nose	人类的鼻子
Pen	笔
Ant	蚂蚁
Car	车
Aircraft	飞机
Human hand	人类的手
Skunk	臭鼬
Teddy bear	泰迪熊
Watermelon	西瓜
Cantaloupe	哈密瓜
Dishwasher	洗碗机
Flute	长笛
Balance beam	平衡木
Sandwich	三明治
Shrimp	虾
Sewing machine	缝纫机
Binoculars	双筒望远镜
Rays and skates	鳐鱼和溜冰鞋
Ipod	Ipod
Accordion	手风琴
Willow	柳树
Crab	蟹
Crown	皇冠
Seahorse	海马
Perfume	香水
Alpaca	羊驼
Taxi	出租车
Canoe	独木舟
Remote control	远程控制
Wheelchair	轮椅
Rugby ball	橄榄球
Armadillo	犰狳
Maracas	沙球
Helmet	头盔
下载脚本 

利用 fiftyone 工具进行远程下载,classes罗列了项目上需要用到的21个类别

import os

import fiftyone as fo
import fiftyone.zoo as foz

classes = [
    'Person',  # 人  - 0
    'Car',  # 轿车 - 1
    'Taxi',  # 出租车 - 2
    'Ambulance',  # 救护车 - 3
    'Bus',  # 公共汽车 - 4
    'Bicycle',  # 自行车  - 5
    'Motorcycle',  # 摩托车  - 6
    'Dog',  # 狗  - 7
    'Cat',  # 猫  - 8
    'Mouse',  # 老鼠                                                                                       - 9
    'Backpack',  # 背包 - 10
    'Glasses',  # 眼镜 - 11
    'Hat',  # 帽子 - 12
    'Helmet',  # 头盔 - 13
    'Traffic light',  # 交通信号灯 - 14
    'Knife',  # 刀 - 15
    'Mobile phone',  # 移动电话  - 16
    'Umbrella',  # 伞 - 17
    'Hand-held objects',  # 手持物 - 18
    'smoke',  # 烟雾 - 19
    'fire'  # 火焰 - 20
]

# 构建类别索引映射
class_to_index = {cls: idx for idx, cls in enumerate(classes)}


def update_txt_file_class_indices(class_name):
    labels_dir = os.path.join("/yolov5/open-images-v7", class_name, 'labels/val')
    dataset_yaml = os.path.join("/yolov5/open-images-v7", class_name, 'dataset.yaml')
    os.remove(dataset_yaml)
    if os.path.exists(labels_dir):
        for filename in os.listdir(labels_dir):
            if filename.endswith('.txt'):
                filepath = os.path.join(labels_dir, filename)

                # 读取并处理.txt文件
                with open(filepath, 'r') as file:
                    lines = file.readlines()

                # 更新类别索引
                updated_lines = []
                for line in lines:
                    parts = line.strip().split()
                    if len(parts) >= 5:  # 假设每行至少有5个元素(class index在第0个位置)
                        class_idx_str = parts[0]  # 原类别索引(可能是名称也可能是数字)
                        try:
                            updated_class_idx = str(class_to_index[class_name])
                        except ValueError:
                            # 如果转换失败,则按类别名称补全
                            updated_class_idx = class_name
                        parts[0] = updated_class_idx
                        updated_lines.append(' '.join(parts) + '\n')

                # 写回更新后的行
                with open(filepath, 'w') as file:
                    file.writelines(updated_lines)
    print(f"{class_name}类别的所有.txt文件的索引已更新。")


for class_name in classes:
    try:
        fo.delete_dataset('open-images-v7-train-2000')
    except:
        pass
    print(f"正在处理{class_name}类别...")

    dataset = foz.load_zoo_dataset(
        "open-images-v7",
        split="train",  # train validation test
        label_types=["detections"],  # "detections", "segmentations", "points"
        classes=[class_name],
        max_samples=2000,  # 筛选前2000个样本
        shuffle=True,
        only_matching=True,  # 指定仅下载符合条件的图片
        num_workers=4,  # 指定进程数为4
        seed=42,  # 指定随机种子
        dataset_dir=f"/open-images-v7/{class_name}/"
    )

    # 创建一个新数据集来保存筛选后的样本
    filtered_dataset = fo.Dataset()
    # 遍历原数据集
    for sample in dataset:
        # 匹配的检测框
        filtered_detections = [d for d in sample.ground_truth.detections if d.label == class_name]

        # 如果样本中还有匹配的检测框,创建样本副本并添加到新数据集中
        if filtered_detections:
            new_sample = sample.copy()
            new_sample.ground_truth.detections = filtered_detections
            filtered_dataset.add_sample(new_sample)

    if filtered_dataset.count() == 0:
        print(f"No samples found for class: {class_name}")
        continue
    print(f"{class_name}类别的样本数量为:{filtered_dataset.count()}")
    # 导出这个筛选后的数据集
    result = filtered_dataset.export(
        export_dir=f"/yolov5/open-images-v7/{class_name}/",
        dataset_type=fo.types.YOLOv5Dataset,
        label_field="ground_truth",
    )
    update_txt_file_class_indices(class_name)

下载10万张样本 ( 如果测试可以将max_samples值调小)

下载后生成的文件目录结构如下:

数据转换后按类别划分为多个文件 如下:

有些类别 open-images-v7 数据集里面没有

比如 火焰 (fire) 和 烟雾(smoke),这里已经整理了,请自行下载 

火焰烟雾.zip1

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
将KAIST行人数据集vbb格式转换为Yolov5可以识别的格式,需要经过以下步骤: 1. 下载KAIST行人数据集 首先需要从KAIST行人数据集官网下载数据集,并解压到本地。 2. 安装vbb2txt vbb2txt是一款用于将vbb格式转换为txt格式的工具,可以从Github上下载。 3. 将vbb文件转换为txt文件 使用vbb2txt将vbb格式的标注文件转换为txt格式的标注文件。 ```bash python vbb2txt.py path/to/annotations/vbb path/to/annotations/txt ``` 4. 将txt文件转换为Yolov5格式 使用以下代码将标注文件转换为Yolov5格式。 ```python import os import glob import numpy as np # 类别名称 class_names = ['person'] # 遍历所有的标注文件 for txt_file in glob.glob('annotations/set*/*.txt'): # 打开标注文件 with open(txt_file, 'r') as f: lines = f.readlines() # 遍历每一行 for line in lines: line = line.strip().split(' ') # 获取类别 class_idx = class_names.index(line[0]) # 获取中心点坐标和宽高 x, y, w, h = float(line[1]), float(line[2]), float(line[3]), float(line[4]) # 转换为Yolov5格式 x_center = x + w / 2 y_center = y + h / 2 w = w h = h # 保存到新的标注文件 save_path = os.path.join('yolo_annotations', os.path.basename(txt_file)) with open(save_path, 'a') as f: f.write(f'{class_idx} {x_center} {y_center} {w} {h}\n') ``` 5. 将数据集转换为Yolov5需要的格式数据集转换为Yolov5需要的格式,需要创建以下文件夹和文件: ``` data/ custom.yaml images/ train/ val/ labels/ train/ val/ ``` 其中,custom.yaml文件为Yolov5的配置文件,可以参考官方示例文件进行编写。 6. 将图片和标注文件分别放入train和val文件夹中 7. 训练模型 使用Yolov5进行训练即可。 以上就是将KAIST行人数据集vbb格式转换为Yolov5可以识别的格式的详细教程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值