目錄
Github:qixuxiang/orb-slam2_with_semantic_label
結合orb-slam2和yoloV3的作品.要求以及本人是:
- Ubuntu 14.04/Ubuntu 16.04
- ORBSLAM2
- CUDA >=6.5 CUDA9.0 CUDNN7.1
- C++11(must)
- gcc5(must)
- cmake
一 編譯thirdparty的DBoW和g2o
之前安裝過orb-slam2 所以編譯項輕鬆通過,直接build裏cmake.. make
二 編譯thirdparty/darknet
最開始直接用作者編譯好的 報錯:
libcurand.so.8.0: cannot open shared object file: No such file or directory
libYOLOv3SE.so not found. or can't load dependency dlls
我安裝的是cuda9.0 算了還是重新編譯吧.
在thirdparty/darknet文件夾
sudo chmod +x build_linux.sh #給權限
./build_linux.sh #.sh裏面的內容就是編譯 很方便!作者很nice!
三 運行orb-slam2
剛開始直接顯示段錯誤,連繫統最開始運行的那段"商標"都prinf不出來,後來我重新編譯了一個pcl的依賴項,似乎是把vtk從高版本換成低版本了(vtk6.0-->vtk5.0)
還嘗試了輸出系統的stack size 我把我本來的stack size從8192改成了102800之類的大數,也不行.
ulimit -a
ulimit -s 102800
還有一些關於pcl調試的內容,寫在這裏了 ubuntu16.04重新安裝PCL[純記錄,無內容] 看了一下真的沒有內容 純粹記下來給自己看
嘗試了strace調試,差點沒把我煩死,主要是程序太大,調用的東西太多,會把這個終端都給刷完,根本看不到有效的信息.gdb編譯沒嘗試.
strace ./rgbd-tum
ps -ef |grep rgbd_tum
查看當前exe的ID號 然後我幹嘛的我就忘了
這之後我把darknet編譯了之後,程序在運行了一會兒後突然出現段錯誤,而且我在code中設置了無數prinf語句,每次編譯都會在不同的語句中崩潰退出(同一次編譯後的運行會在相同的語句退出,但是每次編譯又會有所區別).除此之外,code中又是基本能確定正確的語句.這說明:不是代碼本身,而是哪裏調用的鏈接有問題
sudo dmesg|grep segfault
出來的結果yolov3SE.so有問題,我就去編譯了原版本的darknet,在編譯過程中發現原來我orb-slam2-semantic-label程序當中的bin/coco.names和yolov3.cfg下載錯了,我直接下載了github的那個網頁鏈接而不是文件本身,所以系統纔出了問題.改了之後程序就可以跑了
這之後再修改一下yolov3.cfg 適應一下我不太好的gpu 就好了
rgbd_tum: /home/zbq/append/projects/orb-slam2_with_semantic_label-master/Thirdparty/
darknet/src/cuda.c:36: check_error: Assertion `0' failed.
PS:編譯darknet
YOLO: Real-Time Object Detection yolo本身真是太好編譯了 darknet這個框架真是最方便的框架 輕鬆安裝並且調試了
只不過運行./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg遇到了CUDA Error: out of memory報錯,以下是幾個暫時有效的方法:
- 把yolov3.cfg裏的subvision增大,最開始是batch=64 subvision=2 改成batch=64 subvision=64 這個subvision代表了一次性操作多少個batch,改成一次只扔一個操作似乎對機器要友好一點 這個的效果是,我本來是在第十幾次conv時error 現在變成五十幾層conv時error
- nvidia-smi查看當前進程, /usr/lib/xorg/Xorg 和 compiz 都是必須的,一般還有別的線程 前面有PID 號 把那個線程殺死
| Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 1101 G /usr/lib/xorg/Xorg 325MiB | | 0 1899 G compiz 66MiB | | 0 2464 G ...-token=CE9B2F31BA7B8B457108FB3574EA78EB 72MiB | kill -9 2464
實際上,沒啥用.該不行的還是不行 可能是我這個線程本來就沒佔什麼顯存的原因吧
-
將yolov3.cfg裏的width=608 height=608改成width=416 height=416.有人說沒影響 但是,唉,我也不知道.總之這個改完後darknet也運行成功了,orb-slam2-semantic-label也運行成功了(但是點雲圖似乎有點不太對勁,所以先這樣)