2023.11.04 & 05 주말 TIL 🫠
차선 인식 프로젝트를 하는 동안 못 들었던 opencv 강의를 들었다!
다음주부터 오프라인 프로젝트를 진행하는데 그 전에 자이카를 사용하지 않고 할 수 있는 것들은 다 해놓고 싶다. 그러다보니 갑자기 할게 많아졌다ㅠㅠ 환경 설정도 해야하고 오프라인 프로젝트 코드도 정리하고 ROS와 같이 사용할 수 있도록 만들어야하고... 머리가 복잡하다..ㅎㅎ 저번 오프라인 실습 때는 vmware를 사용했는데 그걸 다 밀고 아에 ubuntu 환경을 만들어버려서 그때 환경들이 다 사라졌다ㅠ 그걸 오늘 깨달아버렸다... 급히 ROS를 다시 깔았다. ROS를 한지 시간이 좀 지나니 ROS를 어떻게 했는지 가물가물하다. 오프라인 전에 복습을 해야겠다.
목요일부터 오프라인 시작이니 월화수 열심히 준비해야겠다!!!!!
📝 배운 내용
HOG 알고리즘
- 그레디언트 방향 정보를 특징 벡터로 사용
- 알고리즘 순서
- 입력 영상에서 부분 영상 추출 (200x100)
- resize (64x128)
- 8x8크기의 셀로 나누고 각 셀에서 그레디언트 (크기 & 방향) 계산 (가로 8개, 세로 16개)
- 그레디언트 정보를 바탕으로 9개 방향 성산(180°/20°)에 대해 히스토그램 계산
- 블록 히스토그램 구하기 (4개의 셀을 하나의 블록으로 지정) -> 각 블록의 히스토그램 bin개수는 4x9=36개
- 특징벡터 : 7x15x36
- 후에 svm을 사용하여 분류 가능
OpenCV DNN
Net 클래스
Net readNet()
: Net 객체 생성, 네트워크 불러오기
Mat blobFromImage()
: 네트워크 입력 blob 만들기
setInput()
: 네트워크 입력 설정
forward()
: 네트워크 순방향 실행(추론)
OpenCV와 GPU
CUDA
- 예전에 버전으로 애먹었던 기억이 새록새록....
- GPU를 사용할 수 있도록하는 GPCPU 기술
Mat
대신 GpuMat
클래스 사용
- opencv 3.3부터 cuda보단 openCV 사용 권장
OpenCL
- 개방형 범용 병렬 컴퓨팅 프레임워크
Mat
대신 UMat
을 사용하면 다른 함수들은 그대로 사용해도 된다.
- 수행시간이 확! 짧아진다.
- Mat 객체와 UMat 객체를 같이 사용하면 안된다!
😵 어려웠던 점
환경 설정
- 현재 opencv는 프로젝트 안에 thirdparty 폴더에 빌드하여 사용하고 있다.
- 그렇다면 python, ros, torch, tensorflow는 어디에 설치해야하는가...?
- thirdparty 안에 빌드해야하는지, 현재 환경에 바로 설치해야하는지..?
- 내 결론은... pytorch, tensorflow는 라이브러리이니까 thirdparty에 빌드하고, ros와 python은 라이브러리 형식은 아니니까 바로 설치하기로 하였다.
- 사실 아직 정답은 모르겠고... ros, python, tensorflow까지 설치했다. 내일 pytorch도 설치할 예정이다.
- 버전이 꼬이고 잘못 설치될까봐 너무 무섭다ㅠㅠ 조심해야지...아니면 일단 오프라인 프로젝트 끝나고 설치할까ㅠㅠ(그럴 생각도 하고 있다)
python, C++ 혼란
- 강의가... 어떤건 python이고 어떤건 c++이다.
- 결국 c++로 구현해야하겠지만 조금 혼란스러웠다...
- cmake 사용법을 익히는게... 급선무인가...