最近使用
detectron2_backbone 時候遇到一個奇妙的問題
https://github.com/sxhxliang/detectron2_backbone
我記得我去年使用 detectron2 + detectron2_backbone 使用的很順利
並且在我的PC端安裝也沒問題
但是到了今年要用時候
我發現原本拿來訓練 detectron2 的環境消失了?!
不僅沒有安裝 detectron2_backbone
也沒有 detectron2
只能重新再安裝
結果再度安裝 detectron2 會跑出以下錯誤
C:\Users\TEST\Desktop\env\det2_P10\lib\site-packages\torch\include\pybind11\detail/common.h(1080): error C2737: 'pybind11::overload_cast': 'constexpr' 物件必須初始化
是在安裝編譯時候的錯誤
但是我對於這錯誤一點印象也沒有
那我去年是怎麼安裝的呢???
天啊~~~ 還是我從頭到尾沒成功過?
但是我有截圖阿~
我還產生了報告阿~
這難道就是傳說中的 曼德拉 效應?
然後這錯誤就是需要修改 common.h 這檔案
// overload_cast requires variable templates: C++14 # if defined(PYBIND11_CPP14) # define PYBIND11_OVERLOAD_CAST 1 /// Syntax sugar for resolving overloaded function pointers: /// - regular: static_cast<Return (Class::*)(Arg0, Arg1, Arg2)>(&Class::func) /// - sweet: overload_cast<Arg0, Arg1, Arg2>(&Class::func) template <typename... Args> # if (defined(_MSC_VER) && _MSC_VER < 1920) /* MSVC 2017 */ \ || (defined(__clang__) && __clang_major__ == 5) static constexpr detail::overload_cast_impl<Args...> overload_cast = {}; # else static constexpr detail::overload_cast_impl<Args...> overload_cast; # endif # endif
雖然說修改 pytorch 檔案好像是一件奇怪的事情
但是奇怪的錯誤就是需要用奇怪的方法
把
static constexpr detail::overload_cast_impl<Args...> overload_cast;
改成
static constexpr detail::overload_cast_impl<Args...> overload_cast = {};
就可以了
而且 _MSC_VER 其實是沒有值的
所以他只會用下面的方式宣告參數
但是這樣宣告又是錯誤的
不改 pytorch 檔案我好像也沒有更好方法修正這錯誤了
接下來依照官方方法安裝 detectron2_backbone
https://github.com/sxhxliang/detectron2_backbone/tree/master
git clone https://github.com/sxhxliang/detectron2_backbone.git cd detectron2_backbone python setup.py build develop
會發現引用 detectron2_backbone 會跳出這錯誤
No module named 'detectron2_backbone.layers'
結果去看資料夾
C:\Users\TEST\Desktop\env\det2_P10\Lib\site-packages\detectron2_backbone
會發現資料夾裡面只有一個 __init__.py
當然會發生錯誤
但是為什麼安裝沒有複製上去呢?
不管了
直接把 detectron2_backbone 資料夾中的檔案都複製過去就可以正常運作了
以上~
給大家參考囉~
留言板
歡迎留下建議與分享!希望一起交流!感恩!