TSN 編譯記錄

2021-08-20 05:57:59 字數 2733 閱讀 1981

tsn 作者yjxiong etc.開源了**並且公布了自己訓練的所有模型,提供了使用gpu得到tvl1光流的方法,以及幾種資料集切分的方法,比自己的渣**順眼很多,這個專案很讚~

tsn-project

但是(據說但是前都是廢話),dl框架用的caffe,提供的自然是caffemodel和prototxt檔案,習慣了tensorflow和pytorch,表示很不想用caffe,而且工程裡用到了opencv(必須是版本2.x),需要支援gpu。很麻煩,基本上要重新安裝各個依賴。

很好的是,作者提供了build_all.sh指令碼檔案,一次安裝完所有依賴。不建議直接在自己的伺服器/主機上執行。建議使用docker。

當然,如果本機上使用的是caffe + cuda8.0 + opencv-2.x(gpu support)可以考慮直接按照作者的思路

這大概是歷史上最痛苦的兩天….,需要用到tsn作者提供的pre-trained model on kinetics, 然鵝tsn在伺服器上各種編譯不過, 整個實驗工作都被blocked…,最終發現好用便捷的方案,記錄如下

使用docker的好處就是不用擔心安裝失敗等問題,可以盡情折騰

由於自己用的伺服器上已經安裝好了opencv, caffe,torch 等,且版本不同,因此最好的方案是用docker,但是tsn的作者沒有提供docker映象,有個tsn-docker的映象裡只裝好了caffe,不可以用,因此主要使用以下三步進行編譯

docker

nvidia-docker

docker pull allansp84/ubuntu16.04-cuda8.0-opencv2.4.13
如果速度過慢,有很多docker加速的方法

執行容器, –ipc=host容器與主機共享記憶體,注意不要用docker執行,使用nvidia-docker, -it:鏈結終端 -v:對映資料夾,這樣可以同步容器和主機的資料夾, bash:顯示bash

nvidia-docker run -it -v ~/code:/code -v /dataset:/dataset --ipc=host  allansp84/ubuntu16.04-cuda8.0-opencv2.4.13 bash
進入容器後,檢視顯示卡資訊和nvcc版本是否和自己主機一致

nvidia-smi

nvcc --version

若一切正常,繼續,否則檢查nvidia驅動和cuda8.0是否正確安裝

接下來clone tsn**

cd /code

git clone --recursive

cd temporal-segment-networks

執行編譯

bash build_all.sh
如果順利的話,終端會顯示

到此時,整個工程還沒有完全可用

cd /lib/dense_flow/build
使用編譯生成的可執行檔案extract_gpu來提取光流進行測試

mkdir tmp-d0

-s1 -o dir

如果出現莫名奇妙的問題,如果出現

檢視記憶體和cpu利用率,看是不是被這個容器阻塞

top
若發現cpu利用率一直卡在100%

exit

sudo pkill -sighup dockerd

docker exec -it 容器id bash

注意容器id可以通過

docker ps -a
檢視

tsn編輯需要cuda8.0

首先用nvcc檢視版本

nvcc --version
若版本為8.0,正常,若安裝了8.0後但nvcc顯示7.5/9.0 等版本,說明沒有正確鏈結到nvcc,首先進入cuda資料夾檢視是不是有nvcc檔案

cd /usr/local/cuda/bin
若有,則

sudo gedit ~/.bashrc
在末尾加入

export path=$path:/usr/local/cuda/bin
這時候再使用

nvcc --version
就可以正常檢視了~

雖然專案中的opencv編譯時候是在本地,但是在使用densor_flow的時候,會鏈結到opencv(gpu support),出現諸如nvcc ******x或者 no gpu …. 或者 cuda…等等原因均是因為自己安裝的opencv版本不對或者沒有新增gpu支援,且加了全域性symbol。

解決方案

1.解除安裝之前版本,安裝opencv2.4.13(gpu support)

2.使用docker

其它問題過多…..,有各種各樣的原因,主要原因是已經配好了很多依賴庫,或者.so檔案鏈結失效等等….. 這裡不再一一列出

我最近如果有時間將我配置好的容器打包成映象發布~

交叉編譯 TSN之linuxptp交叉編譯

注 下面的可能會遺漏部分細節,但主要的部分基本都寫出來了,應該無大礙。注 以下步驟雖然針對的imx8mp evk,但只要是aarch64架構的晶元,大部分操作都通用的。我利用它主要是為了測試tsn的802.1as特性,使用的軟體為 phc2sys pmc ptpmanagement client 如...

TSN之iproute2交叉編譯

iproute2是linux上有關tcp ip網路的一系列工具,現時由stephen hemminger負責維護。這一系列工具的原作是alexey kuznetsov,他亦是linux核心中有關qos實現的作者。這一系列的工具包括了以下幾個元件 這一系列工具是為了取代一些過時不更新的命令 以上參考自...

有交叉編譯工具嗎 TSN之iproute2交叉編譯

標題圖 於 注 下面的可能會遺漏部分細節,但主要的部分基本都寫出來了,應該無大礙。注 以下步驟雖然針對的imx8mp evk,但只要是aarch64架構的晶元,大部分操作都通用的。iproute2是linux上有關tcp ip網路的一系列工具,現時由stephen hemminger負責維護。這一系...