{
  "id": 254354,
  "title": "怎么把train data切分开，变成带标注的train data和val data啊（做成离线文件）",
  "url": "/competitions/cowboyoutfits/discussion/254354",
  "author_name": "",
  "post_date": "2021-07-21T12:13:51.761483300Z",
  "votes": 1,
  "comment_count": 5,
  "views": 0,
  "content": "<p>想用mmdetection做这个任务，但是这个库要求train和val都得是文件的形式，但我上网搜了一圈也没找到怎么切分train data</p>",
  "messages": [
    {
      "id": "1395635",
      "postDate": "07/21/2021 12:13:51",
      "content": "<p>想用mmdetection做这个任务，但是这个库要求train和val都得是文件的形式，但我上网搜了一圈也没找到怎么切分train data</p>",
      "rawMarkdown": "想用mmdetection做这个任务，但是这个库要求train和val都得是文件的形式，但我上网搜了一圈也没找到怎么切分train data",
      "votes": null
    },
    {
      "id": "1395980",
      "postDate": "07/21/2021 17:06:57",
      "content": "<p>\b参考这段代码，可以用来split coco的annotation，可以分数量，也可以分类别</p>\n<pre><code>import random\nimport copy\ndef create_subset(c, cats, test_n=200):\n    new_coco = {}\n    new_coco['info'] = {\"description\": \"CowboySuit\",\n                        \"url\": \"http://github.com/dmlc/gluon-cv\",\n                        \"version\": \"1.0\",\"year\": 2021,\n                        \"contributor\": \"GluonCV/AutoGluon\",\n                        \"date_created\": \"2021/07/01\"}\n    new_coco[\"licenses\"]: [\n        {\"url\": \"http://creativecommons.org/licenses/by/2.0/\",\"id\": 4,\"name\": \"Attribution License\"}]\n    cat_ids = c.getCatIds(cats)\n    train_img_ids = set()\n    valid_img_ids = set()\n    test_img_ids = set()\n    for cat in cat_ids[::-1]:\n        img_ids = copy.copy(c.getImgIds(catIds=[cat]))\n        random.shuffle(img_ids)\n        tn = min(test_n, int(len(img_ids) * 0.5))\n        new_test = set(img_ids[:tn])\n        exist_test_ids = new_test.intersection(train_img_ids)\n        test_ids = new_test.difference(exist_test_ids)\n        train_ids = set(img_ids).difference(test_ids)\n        print(tn, len(img_ids), len(new_test), len(test_ids), len(train_ids))\n        if len(train_ids) &gt; 2000:\n            r = 2\n            cut = len(train_ids) // r\n            valid_ids = list(train_ids)[cut:(cut + 300)]\n            train_ids = list(train_ids)[:cut]\n        else:\n            r = 2\n            cut = (len(train_ids) // r)\n            max_cut = min(len(train_ids), cut + 200)\n            valid_ids = list(train_ids)[cut:max_cut]\n            train_ids = list(train_ids)[:cut]\n        train_img_ids.update(train_ids)\n        valid_img_ids.update(valid_ids)\n        test_img_ids.update(test_ids)\n\n    # prune duplicates\n    dup = train_img_ids.intersection(test_img_ids)\n    train_img_ids = train_img_ids - dup\n    dup1 = train_img_ids.intersection(valid_img_ids)\n    train_img_ids = train_img_ids - dup1\n    dup2 = valid_img_ids.intersection(test_img_ids)\n    valid_img_ids = valid_img_ids - dup2\n    train_anno_ids = set()\n    valid_anno_ids = set()\n    test_anno_ids = set()\n    for cat in cat_ids:\n        train_anno_ids.update(c.getAnnIds(imgIds=list(train_img_ids), catIds=[cat]))\n        valid_anno_ids.update(c.getAnnIds(imgIds=list(valid_img_ids), catIds=[cat]))\n        test_anno_ids.update(c.getAnnIds(imgIds=list(test_img_ids), catIds=[cat]))\n\n    assert len(train_img_ids.intersection(test_img_ids)) == 0, 'img id conflicts, {} '.format(train_img_ids.intersection(test_img_ids))\n    assert len(train_img_ids.intersection(valid_img_ids)) == 0, 'img id conflicts, {} '.format(valid_img_ids.intersection(train_img_ids))\n    assert len(valid_img_ids.intersection(test_img_ids)) == 0, 'img id conflicts, {} '.format(valid_img_ids.intersection(test_img_ids))\n    assert len(train_anno_ids.intersection(test_anno_ids)) == 0, 'anno id conflicts'\n    print('train img ids #:', len(train_img_ids), 'train anno #:', len(train_anno_ids))\n    print('valid img ids #:', len(valid_img_ids), 'valid anno #:', len(valid_anno_ids))\n    print('test img ids #:', len(test_img_ids), 'test anno #:', len(test_anno_ids))\n    new_coco_test = copy.deepcopy(new_coco)\n    new_coco_valid = copy.deepcopy(new_coco)\n\n    new_coco[\"images\"] = c.loadImgs(list(train_img_ids))\n    new_coco[\"annotations\"] = c.loadAnns(list(train_anno_ids))\n    for ann in new_coco[\"annotations\"]:\n        ann.pop('segmentation', None)\n    new_coco[\"categories\"] = c.loadCats(cat_ids)\n\n    new_coco_valid[\"images\"] = c.loadImgs(list(valid_img_ids))\n    new_coco_valid[\"annotations\"] = c.loadAnns(list(valid_anno_ids))\n    for ann in new_coco_valid[\"annotations\"]:\n        ann.pop('segmentation', None)\n    new_coco_valid[\"categories\"] = c.loadCats(cat_ids)\n\n    new_coco_test[\"images\"] = c.loadImgs(list(test_img_ids))\n    new_coco_test[\"annotations\"] = c.loadAnns(list(test_anno_ids))\n    for ann in new_coco_test[\"annotations\"]:\n        ann.pop('segmentation', None)\n    new_coco_test[\"categories\"] = c.loadCats(cat_ids)\n    print('new train split, images:', len(new_coco[\"images\"]), 'annos:', len(new_coco[\"annotations\"]))\n    print('new valid split, images:', len(new_coco_valid[\"images\"]), 'annos:', len(new_coco_valid[\"annotations\"]))\n    print('new test split, images:', len(new_coco_test[\"images\"]), 'annos:', len(new_coco_test[\"annotations\"]))\n    return new_coco, new_coco_valid, new_coco_test\n\n\nnc, nc_valid, nc_test = create_subset(c, ['jacket', 'sunglasses',  'boot',  'cowboy_hat','belt', ])\n</code></pre>",
      "rawMarkdown": "\b参考这段代码，可以用来split coco的annotation，可以分数量，也可以分类别\n\n```python\nimport random\nimport copy\ndef create_subset(c, cats, test_n=200):\n    new_coco = {}\n    new_coco['info'] = {\"description\": \"CowboySuit\",\n                        \"url\": \"http://github.com/dmlc/gluon-cv\",\n                        \"version\": \"1.0\",\"year\": 2021,\n                        \"contributor\": \"GluonCV/AutoGluon\",\n                        \"date_created\": \"2021/07/01\"}\n    new_coco[\"licenses\"]: [\n        {\"url\": \"http://creativecommons.org/licenses/by/2.0/\",\"id\": 4,\"name\": \"Attribution License\"}]\n    cat_ids = c.getCatIds(cats)\n    train_img_ids = set()\n    valid_img_ids = set()\n    test_img_ids = set()\n    for cat in cat_ids[::-1]:\n        img_ids = copy.copy(c.getImgIds(catIds=[cat]))\n        random.shuffle(img_ids)\n        tn = min(test_n, int(len(img_ids) * 0.5))\n        new_test = set(img_ids[:tn])\n        exist_test_ids = new_test.intersection(train_img_ids)\n        test_ids = new_test.difference(exist_test_ids)\n        train_ids = set(img_ids).difference(test_ids)\n        print(tn, len(img_ids), len(new_test), len(test_ids), len(train_ids))\n        if len(train_ids) > 2000:\n            r = 2\n            cut = len(train_ids) // r\n            valid_ids = list(train_ids)[cut:(cut + 300)]\n            train_ids = list(train_ids)[:cut]\n        else:\n            r = 2\n            cut = (len(train_ids) // r)\n            max_cut = min(len(train_ids), cut + 200)\n            valid_ids = list(train_ids)[cut:max_cut]\n            train_ids = list(train_ids)[:cut]\n        train_img_ids.update(train_ids)\n        valid_img_ids.update(valid_ids)\n        test_img_ids.update(test_ids)\n        \n    # prune duplicates\n    dup = train_img_ids.intersection(test_img_ids)\n    train_img_ids = train_img_ids - dup\n    dup1 = train_img_ids.intersection(valid_img_ids)\n    train_img_ids = train_img_ids - dup1\n    dup2 = valid_img_ids.intersection(test_img_ids)\n    valid_img_ids = valid_img_ids - dup2\n    train_anno_ids = set()\n    valid_anno_ids = set()\n    test_anno_ids = set()\n    for cat in cat_ids:\n        train_anno_ids.update(c.getAnnIds(imgIds=list(train_img_ids), catIds=[cat]))\n        valid_anno_ids.update(c.getAnnIds(imgIds=list(valid_img_ids), catIds=[cat]))\n        test_anno_ids.update(c.getAnnIds(imgIds=list(test_img_ids), catIds=[cat]))\n        \n    assert len(train_img_ids.intersection(test_img_ids)) == 0, 'img id conflicts, {} '.format(train_img_ids.intersection(test_img_ids))\n    assert len(train_img_ids.intersection(valid_img_ids)) == 0, 'img id conflicts, {} '.format(valid_img_ids.intersection(train_img_ids))\n    assert len(valid_img_ids.intersection(test_img_ids)) == 0, 'img id conflicts, {} '.format(valid_img_ids.intersection(test_img_ids))\n    assert len(train_anno_ids.intersection(test_anno_ids)) == 0, 'anno id conflicts'\n    print('train img ids #:', len(train_img_ids), 'train anno #:', len(train_anno_ids))\n    print('valid img ids #:', len(valid_img_ids), 'valid anno #:', len(valid_anno_ids))\n    print('test img ids #:', len(test_img_ids), 'test anno #:', len(test_anno_ids))\n    new_coco_test = copy.deepcopy(new_coco)\n    new_coco_valid = copy.deepcopy(new_coco)\n    \n    new_coco[\"images\"] = c.loadImgs(list(train_img_ids))\n    new_coco[\"annotations\"] = c.loadAnns(list(train_anno_ids))\n    for ann in new_coco[\"annotations\"]:\n        ann.pop('segmentation', None)\n    new_coco[\"categories\"] = c.loadCats(cat_ids)\n    \n    new_coco_valid[\"images\"] = c.loadImgs(list(valid_img_ids))\n    new_coco_valid[\"annotations\"] = c.loadAnns(list(valid_anno_ids))\n    for ann in new_coco_valid[\"annotations\"]:\n        ann.pop('segmentation', None)\n    new_coco_valid[\"categories\"] = c.loadCats(cat_ids)\n    \n    new_coco_test[\"images\"] = c.loadImgs(list(test_img_ids))\n    new_coco_test[\"annotations\"] = c.loadAnns(list(test_anno_ids))\n    for ann in new_coco_test[\"annotations\"]:\n        ann.pop('segmentation', None)\n    new_coco_test[\"categories\"] = c.loadCats(cat_ids)\n    print('new train split, images:', len(new_coco[\"images\"]), 'annos:', len(new_coco[\"annotations\"]))\n    print('new valid split, images:', len(new_coco_valid[\"images\"]), 'annos:', len(new_coco_valid[\"annotations\"]))\n    print('new test split, images:', len(new_coco_test[\"images\"]), 'annos:', len(new_coco_test[\"annotations\"]))\n    return new_coco, new_coco_valid, new_coco_test\n\n\nnc, nc_valid, nc_test = create_subset(c, ['jacket', 'sunglasses',  'boot',  'cowboy_hat','belt', ])\n```",
      "votes": null
    },
    {
      "id": "1396308",
      "postDate": "07/22/2021 02:15:26",
      "content": "<p>太感谢了！！！！！！！！</p>",
      "rawMarkdown": "太感谢了！！！！！！！！",
      "votes": null
    },
    {
      "id": "1402476",
      "postDate": "07/28/2021 08:21:16",
      "content": "<p>哇，NPC下场了😄，我也试试，正需要切分验证集</p>",
      "rawMarkdown": "哇，NPC下场了😄，我也试试，正需要切分验证集",
      "votes": null
    },
    {
      "id": "2033420",
      "postDate": "11/17/2022 08:55:25",
      "content": "<p>That's great.👍</p>",
      "rawMarkdown": "That's great.👍",
      "votes": null
    },
    {
      "id": "3067238",
      "postDate": "12/09/2024 04:51:29",
      "content": "<p>请问为什么不要cat+300或cat+200后的数据，然后 img_ids = copy.copy(c.getImgIds(catIds=[cat]))这里有必要用copy吗，getimgids返回的列表是独立的吧</p>",
      "rawMarkdown": "请问为什么不要cat+300或cat+200后的数据，然后 img_ids = copy.copy(c.getImgIds(catIds=[cat]))这里有必要用copy吗，getimgids返回的列表是独立的吧",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1395980,
      "author_name": "zhreshold",
      "author_url": "",
      "post_date": "07/21/2021 17:06:57",
      "content": "<p>\b参考这段代码，可以用来split coco的annotation，可以分数量，也可以分类别</p>\n<pre><code>import random\nimport copy\ndef create_subset(c, cats, test_n=200):\n    new_coco = {}\n    new_coco['info'] = {\"description\": \"CowboySuit\",\n                        \"url\": \"http://github.com/dmlc/gluon-cv\",\n                        \"version\": \"1.0\",\"year\": 2021,\n                        \"contributor\": \"GluonCV/AutoGluon\",\n                        \"date_created\": \"2021/07/01\"}\n    new_coco[\"licenses\"]: [\n        {\"url\": \"http://creativecommons.org/licenses/by/2.0/\",\"id\": 4,\"name\": \"Attribution License\"}]\n    cat_ids = c.getCatIds(cats)\n    train_img_ids = set()\n    valid_img_ids = set()\n    test_img_ids = set()\n    for cat in cat_ids[::-1]:\n        img_ids = copy.copy(c.getImgIds(catIds=[cat]))\n        random.shuffle(img_ids)\n        tn = min(test_n, int(len(img_ids) * 0.5))\n        new_test = set(img_ids[:tn])\n        exist_test_ids = new_test.intersection(train_img_ids)\n        test_ids = new_test.difference(exist_test_ids)\n        train_ids = set(img_ids).difference(test_ids)\n        print(tn, len(img_ids), len(new_test), len(test_ids), len(train_ids))\n        if len(train_ids) &gt; 2000:\n            r = 2\n            cut = len(train_ids) // r\n            valid_ids = list(train_ids)[cut:(cut + 300)]\n            train_ids = list(train_ids)[:cut]\n        else:\n            r = 2\n            cut = (len(train_ids) // r)\n            max_cut = min(len(train_ids), cut + 200)\n            valid_ids = list(train_ids)[cut:max_cut]\n            train_ids = list(train_ids)[:cut]\n        train_img_ids.update(train_ids)\n        valid_img_ids.update(valid_ids)\n        test_img_ids.update(test_ids)\n\n    # prune duplicates\n    dup = train_img_ids.intersection(test_img_ids)\n    train_img_ids = train_img_ids - dup\n    dup1 = train_img_ids.intersection(valid_img_ids)\n    train_img_ids = train_img_ids - dup1\n    dup2 = valid_img_ids.intersection(test_img_ids)\n    valid_img_ids = valid_img_ids - dup2\n    train_anno_ids = set()\n    valid_anno_ids = set()\n    test_anno_ids = set()\n    for cat in cat_ids:\n        train_anno_ids.update(c.getAnnIds(imgIds=list(train_img_ids), catIds=[cat]))\n        valid_anno_ids.update(c.getAnnIds(imgIds=list(valid_img_ids), catIds=[cat]))\n        test_anno_ids.update(c.getAnnIds(imgIds=list(test_img_ids), catIds=[cat]))\n\n    assert len(train_img_ids.intersection(test_img_ids)) == 0, 'img id conflicts, {} '.format(train_img_ids.intersection(test_img_ids))\n    assert len(train_img_ids.intersection(valid_img_ids)) == 0, 'img id conflicts, {} '.format(valid_img_ids.intersection(train_img_ids))\n    assert len(valid_img_ids.intersection(test_img_ids)) == 0, 'img id conflicts, {} '.format(valid_img_ids.intersection(test_img_ids))\n    assert len(train_anno_ids.intersection(test_anno_ids)) == 0, 'anno id conflicts'\n    print('train img ids #:', len(train_img_ids), 'train anno #:', len(train_anno_ids))\n    print('valid img ids #:', len(valid_img_ids), 'valid anno #:', len(valid_anno_ids))\n    print('test img ids #:', len(test_img_ids), 'test anno #:', len(test_anno_ids))\n    new_coco_test = copy.deepcopy(new_coco)\n    new_coco_valid = copy.deepcopy(new_coco)\n\n    new_coco[\"images\"] = c.loadImgs(list(train_img_ids))\n    new_coco[\"annotations\"] = c.loadAnns(list(train_anno_ids))\n    for ann in new_coco[\"annotations\"]:\n        ann.pop('segmentation', None)\n    new_coco[\"categories\"] = c.loadCats(cat_ids)\n\n    new_coco_valid[\"images\"] = c.loadImgs(list(valid_img_ids))\n    new_coco_valid[\"annotations\"] = c.loadAnns(list(valid_anno_ids))\n    for ann in new_coco_valid[\"annotations\"]:\n        ann.pop('segmentation', None)\n    new_coco_valid[\"categories\"] = c.loadCats(cat_ids)\n\n    new_coco_test[\"images\"] = c.loadImgs(list(test_img_ids))\n    new_coco_test[\"annotations\"] = c.loadAnns(list(test_anno_ids))\n    for ann in new_coco_test[\"annotations\"]:\n        ann.pop('segmentation', None)\n    new_coco_test[\"categories\"] = c.loadCats(cat_ids)\n    print('new train split, images:', len(new_coco[\"images\"]), 'annos:', len(new_coco[\"annotations\"]))\n    print('new valid split, images:', len(new_coco_valid[\"images\"]), 'annos:', len(new_coco_valid[\"annotations\"]))\n    print('new test split, images:', len(new_coco_test[\"images\"]), 'annos:', len(new_coco_test[\"annotations\"]))\n    return new_coco, new_coco_valid, new_coco_test\n\n\nnc, nc_valid, nc_test = create_subset(c, ['jacket', 'sunglasses',  'boot',  'cowboy_hat','belt', ])\n</code></pre>",
      "votes": null,
      "replies": [
        {
          "id": 1396308,
          "author_name": "nekokiku",
          "author_url": "",
          "post_date": "07/22/2021 02:15:26",
          "content": "<p>太感谢了！！！！！！！！</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1402476,
          "author_name": "bamboopu1996",
          "author_url": "",
          "post_date": "07/28/2021 08:21:16",
          "content": "<p>哇，NPC下场了😄，我也试试，正需要切分验证集</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 3067238,
          "author_name": "yuansshui",
          "author_url": "",
          "post_date": "12/09/2024 04:51:29",
          "content": "<p>请问为什么不要cat+300或cat+200后的数据，然后 img_ids = copy.copy(c.getImgIds(catIds=[cat]))这里有必要用copy吗，getimgids返回的列表是独立的吧</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 2033420,
      "author_name": "drmin01",
      "author_url": "",
      "post_date": "11/17/2022 08:55:25",
      "content": "<p>That's great.👍</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "1395635": "想用mmdetection做这个任务，但是这个库要求train和val都得是文件的形式，但我上网搜了一圈也没找到怎么切分train data",
    "1395980": "\b参考这段代码，可以用来split coco的annotation，可以分数量，也可以分类别\n\n```python\nimport random\nimport copy\ndef create_subset(c, cats, test_n=200):\n    new_coco = {}\n    new_coco['info'] = {\"description\": \"CowboySuit\",\n                        \"url\": \"http://github.com/dmlc/gluon-cv\",\n                        \"version\": \"1.0\",\"year\": 2021,\n                        \"contributor\": \"GluonCV/AutoGluon\",\n                        \"date_created\": \"2021/07/01\"}\n    new_coco[\"licenses\"]: [\n        {\"url\": \"http://creativecommons.org/licenses/by/2.0/\",\"id\": 4,\"name\": \"Attribution License\"}]\n    cat_ids = c.getCatIds(cats)\n    train_img_ids = set()\n    valid_img_ids = set()\n    test_img_ids = set()\n    for cat in cat_ids[::-1]:\n        img_ids = copy.copy(c.getImgIds(catIds=[cat]))\n        random.shuffle(img_ids)\n        tn = min(test_n, int(len(img_ids) * 0.5))\n        new_test = set(img_ids[:tn])\n        exist_test_ids = new_test.intersection(train_img_ids)\n        test_ids = new_test.difference(exist_test_ids)\n        train_ids = set(img_ids).difference(test_ids)\n        print(tn, len(img_ids), len(new_test), len(test_ids), len(train_ids))\n        if len(train_ids) > 2000:\n            r = 2\n            cut = len(train_ids) // r\n            valid_ids = list(train_ids)[cut:(cut + 300)]\n            train_ids = list(train_ids)[:cut]\n        else:\n            r = 2\n            cut = (len(train_ids) // r)\n            max_cut = min(len(train_ids), cut + 200)\n            valid_ids = list(train_ids)[cut:max_cut]\n            train_ids = list(train_ids)[:cut]\n        train_img_ids.update(train_ids)\n        valid_img_ids.update(valid_ids)\n        test_img_ids.update(test_ids)\n        \n    # prune duplicates\n    dup = train_img_ids.intersection(test_img_ids)\n    train_img_ids = train_img_ids - dup\n    dup1 = train_img_ids.intersection(valid_img_ids)\n    train_img_ids = train_img_ids - dup1\n    dup2 = valid_img_ids.intersection(test_img_ids)\n    valid_img_ids = valid_img_ids - dup2\n    train_anno_ids = set()\n    valid_anno_ids = set()\n    test_anno_ids = set()\n    for cat in cat_ids:\n        train_anno_ids.update(c.getAnnIds(imgIds=list(train_img_ids), catIds=[cat]))\n        valid_anno_ids.update(c.getAnnIds(imgIds=list(valid_img_ids), catIds=[cat]))\n        test_anno_ids.update(c.getAnnIds(imgIds=list(test_img_ids), catIds=[cat]))\n        \n    assert len(train_img_ids.intersection(test_img_ids)) == 0, 'img id conflicts, {} '.format(train_img_ids.intersection(test_img_ids))\n    assert len(train_img_ids.intersection(valid_img_ids)) == 0, 'img id conflicts, {} '.format(valid_img_ids.intersection(train_img_ids))\n    assert len(valid_img_ids.intersection(test_img_ids)) == 0, 'img id conflicts, {} '.format(valid_img_ids.intersection(test_img_ids))\n    assert len(train_anno_ids.intersection(test_anno_ids)) == 0, 'anno id conflicts'\n    print('train img ids #:', len(train_img_ids), 'train anno #:', len(train_anno_ids))\n    print('valid img ids #:', len(valid_img_ids), 'valid anno #:', len(valid_anno_ids))\n    print('test img ids #:', len(test_img_ids), 'test anno #:', len(test_anno_ids))\n    new_coco_test = copy.deepcopy(new_coco)\n    new_coco_valid = copy.deepcopy(new_coco)\n    \n    new_coco[\"images\"] = c.loadImgs(list(train_img_ids))\n    new_coco[\"annotations\"] = c.loadAnns(list(train_anno_ids))\n    for ann in new_coco[\"annotations\"]:\n        ann.pop('segmentation', None)\n    new_coco[\"categories\"] = c.loadCats(cat_ids)\n    \n    new_coco_valid[\"images\"] = c.loadImgs(list(valid_img_ids))\n    new_coco_valid[\"annotations\"] = c.loadAnns(list(valid_anno_ids))\n    for ann in new_coco_valid[\"annotations\"]:\n        ann.pop('segmentation', None)\n    new_coco_valid[\"categories\"] = c.loadCats(cat_ids)\n    \n    new_coco_test[\"images\"] = c.loadImgs(list(test_img_ids))\n    new_coco_test[\"annotations\"] = c.loadAnns(list(test_anno_ids))\n    for ann in new_coco_test[\"annotations\"]:\n        ann.pop('segmentation', None)\n    new_coco_test[\"categories\"] = c.loadCats(cat_ids)\n    print('new train split, images:', len(new_coco[\"images\"]), 'annos:', len(new_coco[\"annotations\"]))\n    print('new valid split, images:', len(new_coco_valid[\"images\"]), 'annos:', len(new_coco_valid[\"annotations\"]))\n    print('new test split, images:', len(new_coco_test[\"images\"]), 'annos:', len(new_coco_test[\"annotations\"]))\n    return new_coco, new_coco_valid, new_coco_test\n\n\nnc, nc_valid, nc_test = create_subset(c, ['jacket', 'sunglasses',  'boot',  'cowboy_hat','belt', ])\n```",
    "1396308": "太感谢了！！！！！！！！",
    "1402476": "哇，NPC下场了😄，我也试试，正需要切分验证集",
    "2033420": "That's great.👍",
    "3067238": "请问为什么不要cat+300或cat+200后的数据，然后 img_ids = copy.copy(c.getImgIds(catIds=[cat]))这里有必要用copy吗，getimgids返回的列表是独立的吧"
  },
  "source": "meta"
}