여기서 굵은 절취선 해놓은데 까지 푸념이다.
얼굴에서 landmark를 인식해서 face alignment를 하려고 하는데 딥러닝으로 학습된 모델이 성능이 좋다고 지표가 나와있었다.
현재 프로젝트는 C++로 만들어져 있기때문에 왠만하면 c++로 짜져있는 코드가 필요했다. tensorflow에서 c++로 학습 시키고 테스트 하는 게 되어있는 face alignment 코드를 찾았다.
https://github.com/bobetocalo/faces_framework
그게 위 링크인데
이걸 Cmake 빌드하려다 보니 골때리는게 한두가지가 아니다.
우선 opencv는 깔려져 있으니 패스
Boost는 빌드 해서 shared library만 cmake로 연결해주니 어찌저찌 되었는데
문제는
https://github.com/bobetocalo/bobetocalo_prl19/
faces_framework submodule로 존재하는 여기서 tensorflow를 연결해주어야 한다.
해당 깃에는 tensorflow 버전을 몇을 쓰라는지 적혀있는 내용이없어 그냥 대충 git 날짜 보고
2.0만 아니면 되겠지 라는 생각으로 1.4를 통째로 받아서
연결만 하면 될 줄 알았는데
python에서 tensorflow를 사용하는건
pip install tensorflow
이러면 땡이였는데
c++에선 그냥 make 만 해서 되는게 아니였다. ㅋㅋㅋㅋㅋㅋ
여기저기 뒤지다 우선 tensorflow build 하는 문서를 찾았고
https://www.tensorflow.org/install/source
1. 먼저 bazel 부터 깔아야된다. (docker python 등등 쓸게 아니면..)
bazel도 버전을 잘 맞춰서 깔아야 된다. (2.0.0 버전 깔았다가 다시 지우고 개고생 했다.)
tensorflow 버전에 따른 bazel,cuda,cudnn test completed version은 아래링크 에서 확인할 수 있다.
https://www.tensorflow.org/install/source#tested_build_configurations
tensorflow 공식 문서에도 적혀있지만
bazelink 를 쓰면 쉽게 깔린다고 하는데 나는 무시하고 그 아래 그냥 bazel 설치하는 링크로 들어갔다.
https://docs.bazel.build/versions/master/install.html
나는 우분투니 우분투 기준으로 하고 installer를 다운받아서 하는 방법을 택했다.
그 외의 경우 위링크에서 확인하면 된다.
의존성 패키지를 깔면 된다.(사실 왠만하면 깔려있을것이다.)
sudo apt install g++ unzip zip
그 다음에는 자바를 까는데 자바프로젝트를 빌드하고 싶으면 까는 건데 굳이 tensorflow 빌드하는데 필요는 없어보이지만 혹시모르니 깔았다. (필요없을거같긴한데)
# Ubuntu 16.04 (LTS) uses OpenJDK 8 by default:
sudo apt-get install openjdk-8-jdk
# Ubuntu 18.04 (LTS) uses OpenJDK 11 by default:
sudo apt-get install openjdk-11-jdk
그다음에 installer를 다운 받아야 한다.
https://github.com/bazelbuild/bazel/releases
여기서 다운 받으면 된다.
r1.14 를 빌드하려고 하는 경우 그냥 0.26.0 받으면 된다. ( 그외의 경우는 알아서 잘... duckduckgo 같은데 잘 뒤져보면 있을걸..?)
그리고 아래 처럼 실행 권한 주고 실행하면 된다.
chmod +x bazel-<version>-installer-linux-x86_64.sh
./bazel-<version>-installer-linux-x86_64.sh --user
2.cuda toolkit 설치
이게 개빡친다.
tensorflow 에서 gpu를 사용하려면 cuda관련 된 것들이 연결 되어야 하는데 이걸 안깔고 하면 bazel로 configure 할때 계속 파일 없다고 뜨면서 진행이 안된다.
cuda toolkit 다운 링크
https://developer.nvidia.com/cuda-downloads
알아서 잘 선택 하면 되는데 나는 runfile 방식으로 설치할 것이다.
wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
sudo sh cuda_10.2.89_440.33.01_linux.run
근데 이것만 깔면 될줄 알았는데 또 cudnn을 못찾는 댄다.
3. cudnn 설치
아 정말 cuda toolkit에 제발 한번에 넣어줬으면 좋겠다. 내가 모르는 건가..
https://developer.nvidia.com/rdp/cudnn-download
여기서 받아야 되는데 또 빡치는건 로그인을 해야된다.
로그인 하기 싫은 사람을 위해 다운링크(cuda 10.2 x86-64 linux 만 된다. cudnn v7.6.5) 딴거 받고싶으면 로그인하시고...
https://developer.nvidia.com/compute/machine-learning/cudnn/secure/7.6.5.32/Production/10.2_20191118/cudnn-10.2-linux-x64-v7.6.5.32.tgz
(아 이제 다운로드가 어느 정도 됬다.)
다운받고 나서는 압축 풀고.
tar -xzvf cudnn-10.2-linux-x64-v7.6.5.32.tgz
그냥 무식하게 압축 푼 거를 다 usr/local/cuda (cuda 기본 설치 경로) 에 복사하면 된다.
(이게 내가 만든게 아니고 공식 문서에 있는 내용 임.. 진짜..
https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html)
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
4.(선택) TensorRT 설치.
아.. 정말 깔게 많다..
TensorRT가 뭐냐면 실수형을 정수형으로 변환해 빠르게 Inference 할수 있게 도와주는 툴이다.
솔직히 실시간 할께 아니면 필요없는데....
또 양아치 같은 nvidia 홈페이지에 들어가야한다.
https://developer.nvidia.com/nvidia-tensorrt-download
여기서 나는 tensorRT 6을 받을 것이다.
다운받으려면 설문을 해야되는데 걍 매우 귀찮았기 때문에 회사명에 ㅁㄴㅇㄹㅁㄴㅇㄹ를 적음..
버전 6을 받은 이유는 그냥 은 아니고 ubuntu16.04에 cuda10.2 를 만족하는 최소 버전이라서..?
다른 분들은 눈치껏 잘 받기 바란다. 안그러면 또 bazel에서 빠꾸먹는다.
슬슬 지치기 시작하기 때문에 편한 deb 설치파일을 받아서 설치했다.
그냥 더블클릭해서 깔아도 되긴한데 command가 편한 분들을 위해
sudo apt install ./nv-tensorrt-repo-ubuntu1604-cuda10.2-trt6.0.1.8-ga-20191108_1-1_amd64.deb
5.Bazel configure 하기.
자 이제 준비가 되었으니(사실 나는 5번 과정을 bazel한테 빠꾸먹고 시행착오로 1,2,3,4 스텝을 만들었다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ)
tensorflow 다운 받았던 폴더로 들어가서
혹시나 다운이 안되있으면
아래처럼 하면 된다. 용량 개많음 주의.. (r1.14 는 내꺼 기준이라.. 원하는 버전으로.하면됨.)
git clone https://github.com/tensorflow/tensorflow.git
git checkout r1.14
자 다운을 받았으니 configure를 해볼까...
./configure
그냥 아래 내용 나오면 다 엔터 쳐주면 된다.
(설마하니 python이 안깔린 사람은 없겟지)
Please specify the location of python. [Default is /usr/bin/python]:
Please input the desired Python library path to use. Default is [/usr/local/lib/python2.7/dist-packages]
Do you wish to build TensorFlow with XLA JIT support? [Y/n]: Y
이거 N 해야 된다. 안그러면 깔게 매우 많다.
Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: N
SYCL ROCm 다 N 해줘야된다.
Do you wish to build TensorFlow with ROCm support? [y/N]: N
gpu 사용할거기때문에 Y
Do you wish to build TensorFlow with CUDA support? [y/N]:
그냥 N하는게 정신건강에 좋다.(하다 포기했다. 다음에 도전)
Do you wish to build TensorFlow with TensorRT support? [y/N]: N
Please specify the CUDA SDK version you want to use. [Leave empty to default to CUDA 10]:
Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7]:
Please specify the TensorRT version you want to use. [Leave empty to default to TensorRT 5]:
Please specify the locally installed NCCL version you want to use. [Leave empty to use http://github.com/nvidia/nccl]:
Please specify the comma-separated list of base paths to look for CUDA libraries and headers. [Leave empty to use the default]:
Please note that each additional compute capability significantly increases your build time and binary size, and that TensorFlow only supports compute capabilities >= 3.5 [Default is: 3.5,7.0]:
Do you want to use clang as CUDA compiler? [y/N]: n
그냥 나머지 다 엔터
하고 Configuration finished 뜨면 완료 된 것이다.
그리고
bazel build tensorflow
하면 전부다 빌드를 한다.
사실 core만 따로 빌드하면 되었는데 괜히 다 빌드 한것 같다.
나중에 기회 되면 따로 빌드하는 것을 올려보겠다.
오 응원합니다.
무슨프로젝트하시나요?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
아 스팀 관련된건 아니고 음성인식에 얼굴 방향을 인식 하는 게 필요해서 찾아보고 있습니다 ㅎㅎ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
오 재밌군요.
오디오 신호로만 방향찾으시나요?
Speech to text는 요새 라이브러리가 많은데
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
사람 두명이 서로 대화 하는지 판단하는게 필요하다고 해서
멀티모달로 얼굴 방향정보와 음성신호를 같이 사용해서 하면 어떨까 해서 해보는중입니다
Stt 가 꼭 필요하지는 않은것 같아요
감사합니다
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
네 텍스트가 필요한게 아니라면 stt는 필요없을거같습니다.
멀티모달이 마이크가 여러개달린거 였나요?
감사합니다. 마이크 여러개달린거로 어디서 말하는지 추정하는걸 본거같네요
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
멀티모달이 영상 제스처 음성등 여러 정보를 같이 모아서 새로운 정보를 얻어내는 것인데
마이크 여러개달린거로 추정하는 것도 어찌보면 멀티모달로 볼수도 있겠네요
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit