• # AssertionError: The `num_classes` (3) in Shared2FCBBoxHead of MMDataParallel does not matches the length of `CLASSES` 80) in CocoDataset


    mmdetection训练自己的数据集时报错 ⚠️ :

    # AssertionError: The `num_classes` (3) in Shared2FCBBoxHead of MMDataParallel does not matches the length of `CLASSES` 80) in CocoDataset

    意思就是你指定的类别(3种)与CocoDataset的类别(80种)不匹配。

    你可能已经修改了以下文件,但是还是报错:

    mmdetection-mastermmdetcoreevaluationclass_names.py

    def coco_classes():
        return [
            # 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train',
            # 'truck', 'boat', 'traffic_light', 'fire_hydrant', 'stop_sign',
            # 'parking_meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep',
            # 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella',
            # 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard',
            # 'sports_ball', 'kite', 'baseball_bat', 'baseball_glove', 'skateboard',
            # 'surfboard', 'tennis_racket', 'bottle', 'wine_glass', 'cup', 'fork',
            # 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange',
            # 'broccoli', 'carrot', 'hot_dog', 'pizza', 'donut', 'cake', 'chair',
            # 'couch', 'potted_plant', 'bed', 'dining_table', 'toilet', 'tv',
            # 'laptop', 'mouse', 'remote', 'keyboard', 'cell_phone', 'microwave',
            # 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase',
           # 'scissors', 'teddy_bear', 'hair_drier', 'toothbrush'
          'lm','ls'
       ]
    

    mmdetection-mastermmdetdatasetscoco.py

    class CocoDataset(CustomDataset):
        # CLASSES = (
        #     'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus',
        #            'train', 'truck', 'boat', 'traffic light', 'fire hydrant',
        #            'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog',
        #            'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe',
        #            'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
        #            'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat',
        #            'baseball glove', 'skateboard', 'surfboard', 'tennis racket',
        #            'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl',
        #            'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot',
        #            'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
        #            'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop',
        #            'mouse', 'remote', 'keyboard', 'cell phone', 'microwave',
        #            'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock',
        #            'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush'
        #     )
        CLASSES = ('lm', 'ls')
    

    废话不多说,直接上方法。有以下几种方法:

    1️⃣ 是修改最少的,假设你有2个类,你就把上边两处地方,前2个类替换成你的类别。方法比较简单,但是可能存在隐患。

    2️⃣ 第二种方法就是修改完 class_names.py 和 voc.py 之后一定要重新编译代码(运行python setup.py install),再进行训练。

    我试了,还是报同样的错误,可能是我方法不对。

    参考:

    新版 MMDetection V2.3.0训练测试笔记 - it610.com

    mmdetectionV2.x版本 训练自己的VOC数据集_桃子酱momo的博客-CSDN博客

    3️⃣ 第三种方法,也是我使用的方法,其实跟重新编译一样,重新编译的原因就是因为环境里的源文件没有修改,所以你才会报错。mmdetection-master目录下只是一些python文件,真正运行程序时,运行的还是环境里的源文件,因为我们直接去环境里修改源文件。

    假设我的conda环境名为conda_env_name,因此去下面的目录下,分别修改两个文件:

    anaconda3envsconda_env_namelibpython3.7site-packagesmmdetcoreevaluationclass_names.py

    anaconda3envsconda_env_namelibpython3.7site-packagesmmdetdatasetscoco.py

    在conda环境里把这两个文件里的类别修改了,就可以了。

    ⭐ 最终也功夫不负有心人,解决掉了这个bug,写此博客,以帮助大家少走弯路。

  • 相关阅读:
    迅为4412开发板实验Menuconfig_Kconfig(上)
    迅为IMX6ULL开发板Linux 4G通信实验
    迅为IMX6ULL开发板Linux RS232/485驱动实验(下)
    迅为4412开发板实验_Makefile编译(下)
    迅为IMX6Q开发板QtE5.7编译(上)
    迅为干货 | iTOP-4418/6818移植mt6620热点
    UDT源码剖析(十一)之SendQueue And RecvQueue
    UDT源码剖析(九)之CCC
    UDT源码剖析(十)之Channel
    UDT源码剖析(八)之Cache
  • 原文地址:https://www.cnblogs.com/52dxer/p/15401225.html
Copyright © 2020-2023  润新知