使用fiftyone去浏览coco数据集
conda create -n fiftyone python=3.10 -y
conda activate fiftyone
安装 FiftyOne(稳定版本 1.10.0)
pip install fiftyone
pip install pycocotools
测试代码:
import fiftyone as fo
import fiftyone.zoo as fozdataset = foz.load_zoo_dataset("quickstart")
session = fo.launch_app(dataset)
session.wait()
注意一定要在后面加个session.wait()不然有问题,搞了一个晚上,另外第一次运行会下载数据,要用代理。之后用浏览器访问 http://127.0.0.1:5151 就可以了

另外我们访问一下已经下载好的coco数据集
目录结构如下
coco_root/
├─ images/
│ ├─ train2017/
│ ├─ val2017/
│ └─ test2017/
├─ annotations/
│ ├─ instances_train2017.json
│ ├─ instances_val2017.json
│ └─ instances_test2017.json
代码如下,仅是val2017文件夹的,其它的对应改一下路径即可
# # view_coco.py
import fiftyone as fo
import fiftyone.types as fotdataset = fo.Dataset.from_dir(dataset_dir="F:/coco_pictures/coco_root",data_path="images/val2017",labels_path="annotations/instances_val2017.json",dataset_type=fot.COCODetectionDataset,
)session = fo.launch_app(dataset, port=5000, address="127.0.0.1")
session.wait()
效果如下

好我们想进阶一下,过滤面积大于10%的图像,把小物体排除代码如下:
# # # view_coco.pyimport fiftyone as fo
import fiftyone.core.expressions as foe
import fiftyone.types as fot# 加载 COCO 数据集
dataset = fo.Dataset.from_dir(dataset_dir="F:/coco_pictures/coco_root",data_path="images/val2017",labels_path="annotations/instances_val2017.json",dataset_type=fot.COCODetectionDataset,
)
# session = fo.launch_app(dataset)
print(dataset)
# 加载 COCO val2017#
# ======= 过滤条件 =======
#
MIN_RATIO = 0.1 # bbox 占整图面积 >=20%bbox = foe.ViewField("bounding_box")
# 占比
area_ratio = bbox[2] * bbox[3]
# 过滤表达式
expr = ((area_ratio >= MIN_RATIO)
)#
# ===== 使用字段名 detections 过滤 =====
#view = dataset.filter_labels("detections", # ← 正确字段名expr,
)#
# 可选:如果你也需要过滤分割标签(segmentations)
#
view = view.filter_labels("segmentations", expr)
#session = fo.launch_app(view, port=5000, address="127.0.0.1")
session.wait()

