为什么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
的形式,且 key
和 value
都不为空。如果问题依然存在,那可能需要检查你的训练脚本或者 mmcv 的版本,确保它们与你的 ViTPose 版本相兼容。