问题
最近遇到一个问题:在自己修改了voc.py
后照例使用了python setup.py install
,想要把修改更新到 mmdet 中。但是模型训练报错的时候通过查看命令行打印的一些内容,发现依旧执行的是未修改时的代码。
他人方法
首先查看这个博客以及 mmdetection 官方文档:
第一个略显麻烦而且不是长久之计,并没有采纳。
第二个官方文档值得一试,也是最终解决的思路。
解决方法
很重要的一点是,如果你安装过 mmdet 两个版本(比如当时安装时候总出问题,于是多次执行安装 mmdet ),并且当前编辑器采用的是 mmdet 在本地不是初次安装的版本,那么很有可能你对代码的修改执行的更新,其实是更新到了初次安装的本地 mmdet 中。
Q:我如何知道我到底安装了几个 mmdet 版本?or 查看 mmdet 安装到本地的位置?
A:找到你安装 anaconda 的文件夹,依次进入 envs/[你现在正在使用的环境名称]/lib/site-packages/,找到 mmdet 为首的文件夹,比如我这边既有 mmdet 2.13,又有 mmdet 3.0 版本。
这时候简单粗暴地将不需要的 mmdet 版本扔进垃圾桶就可以了。清空回收站,重启你的编辑器,再次进行python setup.py install
更新修改的代码,现在就可以更新进去了。
由此可见,如果本地存在两个 mmdet 时,是会优先更新进旧版本的。但是奇妙的是,唯独我在修改voc.py
时才出现这个问题,其他的代码更新是可以正常更新到新 mmdet 中。
要不然 mmdetection 3.x 大更新中的新增 mmengine 根本不存在于 mmdet 2.x版本,如果其他代码更新不在新安装的 mmdet 中,那早就报错了。可能只有部分文件是更新到本地安装的第一个版本中,可能算 mmdetection 的 bug 之一吧(?