基于Faster rcnn pytorch的遙感圖像檢測
代碼:https://github.com/jwyang/faster-rcnn.pytorch/tree/pytorch-1.0
數(shù)據(jù)集
使用RSOD遙感數(shù)據(jù)集,VOC的數(shù)據(jù)格式如下:
RSOD是一個開放的目標(biāo)檢測數(shù)據(jù)集,用于遙感圖像中的目標(biāo)檢測。數(shù)據(jù)集包含飛機,油箱,運動場和立交橋,以PASCAL VOC數(shù)據(jù)集的格式進(jìn)行標(biāo)注。
數(shù)據(jù)集包括4個文件夾,每個文件夾包含一種對象:
1.飛機數(shù)據(jù)集,446幅圖像中的4993架飛機
2.操場,189副圖像中的191個操場。
3.立交橋,176副圖像中的180座立交橋。
4.油箱,165副圖像中的1586個 油箱。
下載:https://github.com/RSIA-LIESMARS-WHU/RSOD-Dataset-
ubuntu使用Faster rcnn pytorch-1.0
ubuntu使用此代碼比較順利,因為編譯Lib文件很容易就過了。
cuda環(huán)境:
參考:https://blog.csdn.net/qq_39542170/article/details/119800534
安裝環(huán)境:
1.conda 創(chuàng)建python3.6的環(huán)境
2.運行
conda install pytorch==1.2.0 torchvision==0.4.0 cudatoolkit=10.1 -c pytorch
3.運行
pip install -r requirements.txt -i -i https://pypi.tuna.tsinghua.edu.cn/simple
如果報錯:找不到包,則運行;
python -m pip install --upgrade pip
4.編譯lib,編譯前確保有g(shù)cc和g++環(huán)境,不知道怎么安裝可以查
cd lib
python setup.py build develop
編譯之后會生成可執(zhí)行文件,然后就可以import那些frcnn模型包了。因為原作者也是在ubuntu,linux上編譯,所以問題比較少。
數(shù)據(jù)準(zhǔn)備:
需要在工程文件夾里新建data文件夾,并保持如下圖同樣的數(shù)據(jù)路徑(文件夾名要一樣,懶得改源碼了),包括數(shù)據(jù)集和預(yù)訓(xùn)練模型,預(yù)訓(xùn)練模型在git上面有下載:
訓(xùn)練:
CUDA_VISIBLE_DEVICES=0,1 python trainval_net.py --dataset pascal_voc --net res101 --cuda
其中需要修改的只是–net,可以是vgg16,也可以是res101。gpu看個人情況而定。
訓(xùn)練完成之后,會在models文件夾保存權(quán)重pth文件。
評估:
python test_net.py --dataset pascal_voc --net res101 --checksession 1 --checkepoch 20 --checkpoint 935--cuda
其中需要修改的只是–net,可以是vgg16,也可以是res101。gpu看個人情況而定。注意,這里的三個check參數(shù),是定義了訓(xùn)好的檢測模型名稱,我訓(xùn)好的名稱為faster_rcnn_1_20_935,代表了checksession = 1,checkepoch = 20, checkpoint = 935,這樣才可以讀到模型“faster_rcnn_1_20_935”。訓(xùn)練中,我設(shè)置的epoch為20,所以checkepoch選擇20,也就是選擇最后那輪訓(xùn)好的模型,理論上應(yīng)該是效果最好的。當(dāng)然著也得看loss。
測試之后就可以看到終端打印的每種類別(包括背景bg)的AP值,順便可以計算mAP值,
vgg16訓(xùn)練的mAP如下:
resnet101訓(xùn)練的mAP如下:
測試圖片:
python demo.py --net vgg16 --checksession 1 --checkepoch 20 --checkpoint 935 --cuda --load_dir models
此處我們需輸入使用的網(wǎng)絡(luò)(vgg16),以及訓(xùn)練好的模型路徑(models)。我們測試的圖片都在images文件夾里。在此處有坑。作者提供了4張image做測試,因為測試完的圖像會輸出到images文件夾里,所以做完一次測試,images文件夾會有8張圖片(輸出圖片命名規(guī)則是在原圖像文件名后面加上"_det"),而原作者沒有把他自己測試后的圖片刪去,所以大家在做demo測試時,別忘把以"_det"結(jié)尾的檢測輸出文件先刪去,否則測試完你的images文件夾可能會得到16張圖像。當(dāng)然,你可以放一些你自己在網(wǎng)上搜的圖片在images文件夾里進(jìn)行demo測試,看看效果。但檢測類別一定在訓(xùn)練的類別中要有。
報錯:
一些報錯經(jīng)驗和解決方法大家可以參考這篇博客:
https://www.cnblogs.com/wind-chaser/p/11359521.html
里面特別注意訓(xùn)練前要改類別個數(shù)和類別名。
win10使用Faster rcnn pytorch-1.0
cuda環(huán)境:
參考:https://blog.csdn.net/qq_39542170/article/details/119800534
第一次安裝過程(未成功,特此記錄,雖然沒有什么用,大家想成功安裝就看第二次安裝過程):
安裝環(huán)境:
1.conda 創(chuàng)建python3.6的環(huán)境
2.運行
pip install torch==1.5.0+cu101 torchvision==0.6.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
如果你們可以直接運行安裝:
conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch
就不要用我上面提到的安裝方法,因為可能會報fPIC的錯誤。
3.運行
pip install -r requirements.txt -i -i https://pypi.tuna.tsinghua.edu.cn/simple
如果報錯:找不到包,則運行;
python -m pip install --upgrade pip
4.安裝visual studio 2019,安裝下面教程安裝:
visual studio 2019安裝教程(詳細(xì)的很)
5.編譯lib
cd lib
python setup.py build develop
win10編譯沒有那么幸運,一堆錯誤,先將遇到的錯誤總結(jié)如下:
報錯經(jīng)驗:
1.D:\anaconda3\envs\frcnn\include/pyconfig.h:241:15: error: ‘std::_hypot’ has not been declared #define hypot _hypot
解決方法:把對應(yīng)的#define hypot _hypot改為#define _hypot hypot
2.nvcc fatal : Cannot find compiler ‘cl.exe’ in PATH
解決方法:win10+2019+cuda11.6 nvcc fatal : Cannot find compiler ‘cl.exe‘ in PATH
3.nvcc -fPIC: No such file or directory
解決方法:這個報錯跟torch有關(guān),如果你們可以直接運行安裝:
conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch
就不要用我上面提到的安裝方法。如果用了我上面的方法,那么需要改這個文件下的東西:
在文件夾里將所有
“‘-fPIC’”
替換為
‘-fPIC’
4.報錯:
C:/Users/Skaldak/FasterRCNN/lib/model/csrc/cuda/ROIAlign_cuda.cu(275): error:
no instance of function template "THCCeilDiv" matches the argument list
argument types are: (long long, long)
C:/Users/Skaldak/FasterRCNN/lib/model/csrc/cuda/ROIAlign_cuda.cu(275):
error: no instance of overloaded function "std::min" matches the argument list
argument types are: (<error-type>, long)
C:/Users/Skaldak/FasterRCNN/lib/model/csrc/cuda/ROIAlign_cuda.cu(321):
error: no instance of function template "THCCeilDiv" matches the argument list
argument types are: (int64_t, long)
C:/Users/Skaldak/FasterRCNN/lib/model/csrc/cuda/ROIAlign_cuda.cu(321):
error: no instance of overloaded function "std::min" matches the argument list
argument types are: (<error-type>, long)
解決方法:
參考:win10和win7系統(tǒng)配置faster rcnn(pytorch)
5.collect2.exe: error: ld returned 1 exit status
放棄。
那么,經(jīng)歷了以上報錯之后,我重振旗鼓,首先考慮是不是環(huán)境的問題,于是有了第二次安裝過程。
第二次安裝過程(成功):
安裝環(huán)境:
1.conda 創(chuàng)建python3.6的環(huán)境
2.運行
conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch
你們也可以運行:
pip install torch==1.2.0+cu92 torchvision==0.4.0+cu92 -f https://download.pytorch.org/whl/torch_stable.html
3.運行
pip install -r requirements.txt -i -i https://pypi.tuna.tsinghua.edu.cn/simple
如果報錯:找不到包,則運行;
python -m pip install --upgrade pip
4.安裝visual studio 2019,安裝下面教程安裝:
visual studio 2019安裝教程(詳細(xì)的很)
5.編譯lib
cd lib
python setup.py build develop
6.重新編譯編譯lib/pycocotools
因為原作者是使用ubuntu編譯的,所以wins10直接使用會報“can not import ‘_mask’”的錯誤,所以需要下載:https://github.com/cocodataset/cocoapi/tree/master
然后進(jìn)入PythonAPI,將12行的
extra_compile_args=['-Wno-cpp', '-Wno-unused-function', '-std=c99'],
改為
extra_compile_args=['-std=c99'],
然后運行
python setup.py build develop
把編譯完成的內(nèi)容替換原來的lib/pycocotools的內(nèi)容,替換完為:
報錯經(jīng)驗:
1.報錯:
C:/Users/Skaldak/FasterRCNN/lib/model/csrc/cuda/ROIAlign_cuda.cu(275): error:
no instance of function template "THCCeilDiv" matches the argument list
argument types are: (long long, long)
C:/Users/Skaldak/FasterRCNN/lib/model/csrc/cuda/ROIAlign_cuda.cu(275):
error: no instance of overloaded function "std::min" matches the argument list
argument types are: (<error-type>, long)
C:/Users/Skaldak/FasterRCNN/lib/model/csrc/cuda/ROIAlign_cuda.cu(321):
error: no instance of function template "THCCeilDiv" matches the argument list
argument types are: (int64_t, long)
C:/Users/Skaldak/FasterRCNN/lib/model/csrc/cuda/ROIAlign_cuda.cu(321):
error: no instance of overloaded function "std::min" matches the argument list
argument types are: (<error-type>, long)
解決方法:
參考:win10和win7系統(tǒng)配置faster rcnn(pytorch)
2.TORCH_API Value* insertGetAttr
這個錯誤困擾我很久,很多博主都沒遇到,于是我從編譯gcc.exe找到了靈感。結(jié)果發(fā)現(xiàn),我下載的mingw64里面的gcc.exe不能用來編譯此項目,但是好在安裝了visual studio 2019,于是我們可以換一種編譯器去編譯,即msvc 。
之前是運行:
python setup.py build develop
現(xiàn)在變?yōu)檫\行:
python setup.py build_ext --compiler=msvc develop
進(jìn)行編譯,終于成功了!
wins10下測試圖片:
先在images文件放要檢測的圖片,比如:
這里先來兩張,
然后運行:
python demo.py --net vgg16 --checksession 1 --checkepoch 20 --checkpoint 935 --cuda --load_dir models
檢測結(jié)果:
有_det就是檢測保存的圖片,看看效果:文章來源:http://www.zghlxwxcb.cn/news/detail-464636.html
實屬不易,需要代碼的可以私文章來源地址http://www.zghlxwxcb.cn/news/detail-464636.html
到了這里,關(guān)于深度學(xué)習(xí)目標(biāo)檢測項目實戰(zhàn)(六)-基于Faster rcnn pytorch的遙感圖像檢測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!