作者針對LineMod算法不能解決多目標重疊物體複雜場景下的識別的問題,以及Patch-LineMod算法識別機制不夠合理,特徵分類形成模板的過程依據不夠充分的問題,升級爲CT-LineMod算法,一定程度上解決了複雜場景重疊物體的識別的問題並提升了識別率和準確度。模型的源代碼以及文章如下,目前文章已被CC錄用,應該不久就可以查到(COGN-D-19-00232R1)。
文獻引用:Tielin Zhang, Yang Yang, Yi Zeng, Yuxuan Zhao. Cognitive Template-clustering Improved LineMod for Efficient Multi-object Pose Estimation. Cognitive Computation, 2020.
- LineMod算法:這個是LineMod的算法總結,也可以輔助來看Patch_lineMod的源代碼,之前幸虧找到了這個代碼說明讓我重新理解了LineMod算法。應該反覆看明白模板匹配的基本原理。
https://blog.csdn.net/zmdsjtu/article/details/79933822
https://blog.csdn.net/haithink/article/details/88396670 - Patch-LineMod算法:
https://github.com/thomasaimondy/patchlinemod
這個是我們fork的源代碼,裏面其實已經寫了很多步驟了,之後的更細的細節有待補充。注意一定要裝openGL Open3D 以及OpenCV要求3.4.1以上以及顯卡有底線限制,不然會踩很多坑。之後細節會寫每一個所需軟件怎麼安,這塊坑真的多。
https://zhuanlan.zhihu.com/6d-pose 這個是那個博士的成果,我所做的一切也是在這個基礎上完成。之前和這位前輩交流過真的受益匪淺,以後還是要多多和他交流進步。 - CT-LineMod算法
https://github.com/brain-cog/Brain inspired Batch
文章鏈接:https://pan.baidu.com/s/1o-5KBBXB98sJ7bzvgpP7SQ
題目:Cognitive Template-clustering Improved LineMod for Efficient Multi-object Pose Estimation (僅供學術交流研究)
當然還有以此爲基礎的研究生論文: --------(之後發了再放鏈接)
原理可以看論文或者網上搜,也可以等畢業論文寫完有中文版的介紹,下面只記錄做的步驟一些一些坑。
----------------------------------------實驗結果圖-------------------------------------------------------
實驗結果:
1.流程圖
2.原理
3.實驗結果
------------------------------------------基礎模塊---------------------------------------------------
復現Patch-LineMod:
首先是要復現出來Patch-LineMod,保證後面更新後的CT-LineMod算法也可以正常實現。
參考https://github.com/meiqua/patch_linemod
#proxychains git clone https://github.com/meiqua/patch_linemod.git
#wget -r -np -nH --cut-dirs=1 -R index.html http://ptak.felk.cvut.cz/6DB/public/
t_less_toolkit move to src
接着裝一些依賴包
注意自己的python版本調整操作代碼!
#python3
#pip3 install moudules
#sudo synaptic
#pip3 install --upgrade pip setuptools
#sudo pip3 install Cython
#sudo pip3 install -r requirements.txt
#sudo pip3 install pybind11
(#sudo pip3 install pybind)
#sudo pip3 install open3d-python
(#sudo pip3 install py3d)
(sudo apt-get install libglfw3)
requirements.txt其實已經把所有依賴包裝上了,原文作者也提到過,這裏可以分別安裝各模塊保證都裝上
sudo pip3 install:
scipy
matplotlib
opencv-python
pypng
ruamel.yaml
Cython
glumpy
pyopengl
把編譯好的source文件夾(包含lib include)拷貝到 usr/local/ lib 和 include
安裝OpenCV3.4.1 (參考https://blog.csdn.net/echoamor/article/details/83022352)
#git clone -b 3.4 https://github.com/opencv/opencv.git
(源目錄https://github.com/opencv/opencv_contrib.git)
老版本或者裝錯了可以參考:uninstall opencv:https://zhuanlan.zhihu.com/p/38738976 進行卸載
進入build文件夾
#sudo make install
#sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'
#sudo ldconfig
3.4.6也可以:
install opencv3.4.6:
(https://blog.csdn.net/echoamor/article/details/83022352) -->python3 instead python when install the lib like python3-dev instead python-dev
then in build:
#sudo make install
#sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'
#sudo ldconfig
安裝Open3D 這裏一定要注意自己的顯卡,不然根本裝不上去,我最後用的IntelNUC的酷睿i7-8809G 獨立顯卡(NUC8i7HVK6)這款主機
參考文章:http://www.open3d.org/docs/compilation.html
https://liuqiangblog.github.io/2018/07/23/Open3D開發環境搭建/
http://www.open3d.org/docs/getting_started.html
#workon facecourse-py2 //enter virtual environment
#deactivate //quit virtual environment
install open3d
(http://www.open3d.org/docs/compilation.html#ubuntu)
#cd open3d
#util/scripts/install-deps-ubuntu.sh
#node -v
#npm -v
#mv build build.bk
#mkdir build
#cd build
#cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
#sudo make -j4
#sudo make python-package
#sudo make pip-package
#sudo make install-pip-package (to make sure there are files in /usr/local/include,if not step to sudo pip3 install open3d......)
#cd Open3d/build/lib/python_package/pip_package
#sudo pip3 install open3d-0.5.0.0-cp35m-linux_x86_64.whl (for python2 then can get lib in python3.5_dist-packages)
#sudo make install
測試是否安裝成功:
#python3
#import open3d
安裝pybind11
install pybind:
#cd pybind11/
(sudo apt install python-dev python3-dev )
(sudo apt install cmake)
#sudo pip3 install pytest
#mv build build.bk
#sudo mkdir build
#cd build
#sudo cmake ..
//cmake --build . --config Release --target check
#sudo make install
在build之後應該會得到一個 linemodLevelup_pybind文件
把linemodLevelup.cpp文件複製到src文件夾裏面
#sudo python setup.py install
具體步驟如下:
#cd patch_linemod (if change levelup.cpp,should run these steps bleow)
#mkdir build (if change ,delete build and remkdir 重新編譯即可)
#cd build/ (or sudo rm -rf * to delete the build)
#cmake ..
#make
#cd patch_linemod/linemodlevelup
#sudo python3 setup.py install (then get linemodlevelup_pybind)
#sudo python3 patch_linemod_test.py
(set bash:
gedit run.sh in linemodlevelup)
#sudo rm -rf /home/casia/patch_linemod/linemodLevelup/build/*
#cd /home/casia/patch_linemod/linemodLevelup/build/
#sudo cmake ..
#sudo make
#cd /home/casia/patch_linemod/linemodLevelup/
#sudo python3 setup.py install
#cd /home/casia/patch_linemod/
#sudo python3 patch_linemod_test.py
使用:
這裏我寫了一個bash用來執行上述的編譯等步驟,可以自行查看
#sudo ./run.sh
算法測試在源代碼其實已經有了,但是有一些步驟Patch-LineMod作者並沒有給出具體怎麼和已有的代碼結合,所有我修改了其中的內容使算法評估代碼可以直接用運行結果。
evaluate:
#cd tools/
#sudo python3 eval_calc_errors.py
//Calculating error: vsd, patch-linemod, hinterstoisser,2(scenes total 15 or 3), 72, 9
#sudo python3 eval_loc.py
//calculating matches scores recalls
#cd doumanoglou/
#sudo unzip test_gt_stats.zip
results are saved to eval/
#sudo g++ test.cpp -o test
#./test
裝t-SNE(這個無關緊要,因爲CT-LineMod的數據降維過程就是依照於此。)
install t-SNE:
git clone https://github.com/lvdmaaten/bhtsne.git
cd bhtsne
g++ sptree.cpp tsne.cpp tsne_main.cpp -o bh_tsne -O2
OR just copy the files(changed) to linemodlevelup and the make
安裝MATLAB
install Matlab2016:
copy src to home
參考文章https://blog.csdn.net/hitzijiyingcai/article/details/81989031
#sudo mount -t auto -o loop matlab/R2016b_glnxa64_dvd1.iso matlab/
when eject,need to remove the disk(before),then sudo mount...
#sudo gedit /usr/share/applications/Matlab2016b.desktop
(https://blog.csdn.net/qq_36982160/article/details/78397514)
使用: cd /usr/local/MATLAB/R2016b/bin sudo ./matlab
無關緊要
-------------------------------------------------------------------------------------------------------
待實現:
如上所說,在做的過程中依然存在很多問題。比如說
1.速度極慢,在用t-SNE降維數據後時間極大的增加
2.應該考慮增加權重,畢竟人看物體,如果是明顯的特徵(比如一個尖兒)人就可以認定是該物體了。所以這一塊是最重要應該考慮改進的地方。
3.混合物體場景識別結果很差。
4.考慮增加聚身點雲融合,這樣就可以和之前的機器人聯用做成一個大系統。
5.目前只採用Doumanglou數據庫
(1)考慮加入其它數據庫考察算法的更多物體的識別能力 ,而非只着重重疊物體的能力。
(2)增加實際場景中的識別,這樣也便於之後的進一步改進算法。
————————————————
版權聲明:本文爲CSDN博主「羊羊羊機器人」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_40799950/article/details/96510087
有很多人通過郵箱聯繫到了我我也給出了我的解答。如有問題請發郵件到: [email protected] 最近依然不會回覆csdn。
如果有人感興趣想加入的話,自動化所招實習生啦!!!
【自動化所類腦中心-類腦機器人實習生招聘】
類腦認知機器人算法及應用實習生:主要負責基於ROS的認知機器人開發,要求自動控制及相關專業(或個人十分感興趣),具有機器人ROS開發經驗/python編程基礎者優先,最好能實習6個月以上。我們將提供Baxter機器人、Robotnik機器底盤、NAO機器人等作爲硬件支撐實習生的研究。
有意者請聯繫[email protected]
---------------------------2020.3.2更新-------------------------------------------------------------
最近在準備公務員面試,有問題可以聯繫上面的郵箱。最終的文章代碼鏈接以及原文、實現步驟已經在系列終結篇給出。
另外本人畫的場景設計畫在站酷上,歡迎交流www.zcool.com.cn/u/20178144