ViTPose训练问题,大一学生疑问

为什么ViTPose在使用vitpose+_base.pth对APT36K数据集进行训练会出现/usr/local/lib/python3.8/dist-packages/mmcv/utils/config.py下的key, val = kv.split('=', maxsplit=1)报错没有成功分割

File "tools/train.py", line 195, in <module>
    main()
  File "tools/train.py", line 81, in main
    args = parse_args()
  File "tools/train.py", line 73, in parse_args
    args = parser.parse_args()
  File "/usr/lib/python3.8/argparse.py", line 1780, in parse_args
    args, argv = self.parse_known_args(args, namespace)
  File "/usr/lib/python3.8/argparse.py", line 1812, in parse_known_args
    namespace, args = self._parse_known_args(args, namespace)
  File "/usr/lib/python3.8/argparse.py", line 2018, in _parse_known_args
    start_index = consume_optional(start_index)
  File "/usr/lib/python3.8/argparse.py", line 1958, in consume_optional
    take_action(action, args, option_string)
  File "/usr/lib/python3.8/argparse.py", line 1886, in take_action
    action(self, namespace, argument_values, option_string)
  File "/usr/local/lib/python3.8/dist-packages/mmcv/utils/config.py", line 669, in __call__
    key, val = kv.split('=', maxsplit=1)

看起来,你的代码尝试在命令行参数中解析一个等号'=',但是找不到等号或者等号前后没有内容。在Python中,str.split() 方法是将字符串按照指定的分隔符切分成多个部分。maxsplit=1参数表示最大分割一次,也就是分割出两个子串。

如果你在使用 ViTPose 进行训练时指定了一些配置选项,这些选项应该采用 key=value 的格式。例如,你可能在命令行中使用了类似 --options model.backbone.depth=50 这样的命令,其中 model.backbone.depth 是键(key),50 是值(value)。在这个例子中,= 符号用于分隔键和值。

kv.split('=', maxsplit=1) 这一行代码尝试将你的选项字符串(key=value)分割成两部分。如果找不到 = 符号,或者 = 符号前后没有内容,那么这一行代码将会失败,抛出一个 ValueError 异常。

因此,你可能需要检查你的命令行参数是否有误。如果你在命令行中指定了配置选项,确保这些选项都是 key=value 的形式,且 keyvalue 都不为空。如果问题依然存在,那可能需要检查你的训练脚本或者 mmcv 的版本,确保它们与你的 ViTPose 版本相兼容。