MLOps 맛보기(darknet,YOLOv4)

Nicholas·2022년 7월 12일
1

MLOps

목록 보기
1/1

본 내용은 기업인턴과정에서 발생했던 내용을 정리한 내용입니다.

1. 과제 내용

2. MLOps란?

  • MLOps : Machine Learning Model Operationalization Management 약자
  • AI를 통해 비즈니스 발전을 도와주는 소프트웨어 제품들과 클라우드 서비스
  • 참고 : MLOps가 무엇인고

3. 접근방법

  • yolov4를 사용하려면 darknet이 선행되어야되고 darknet가 동작하려면 CUDA와 cuDNN, openCV, CMAKE가 설치되어야되서 먼저 로컬에 설치해보려했으나 yolov4는 python 3.7버전을 대응하는데 m1노트북은 python 3.8버전부터 사용가능하여 실패
  • 우분투 20.0.4버전이 설치된 서버활용, ssh로 접근 하여 실습진행
  • openCV는 이미 설치되어있었고 CMake는 sudo없이 설치가능하여 설치, CUDA와 cuDNN은 sudo없이 설치가 불가능하여 도움요청

    세팅버전

    • CMake = 3.20
      CUDA = 11.6
      cuDNN = cudnn-linux-x86_64-8.0.27_cuda11.6-archieve
      openCV4 = 4.2.0

1) CMake

  • https://github.com/AlexeyAB/darknet 에서 제시하는 darknet 실행방법 중 CMake 를 활용한방법을 먼저 사용
    cd darknet
    mkdir build_release
    cd build_release
    cmake ..
    cmake --build . --target install --parallel 8
  • yolov4 클론받고 conda-gpu.yml파일을 실행시켜 pip install진행
  • conda-gpu.yml파일 안에 tensorflow-gpu 2.3.0rc0 버전이 설치 불가
    (rc0 : 베타버전이라는 의미)
  • 2022.07.01기준 받을 수 없어 tensorflow-gpu 2.3.0으로 변경 후 설치 진행
  • data디렉토리에 sample.weights 파일을 넣어두고 save_model.py를 실행시켜 AI가 학습한 데이터의 결과물인 weights파일을 yolov4가 사용할 수 있도록 변환작업 진행
    python save_model.py --weights ./data/[weights파일이름].weights --output ./checkpoints/yolov4-416 --input_size 416 --model yolov4 ```
  • yolov4 내에 chekpoints 디렉토리가 생성되고 그안에 yolov4-416디렉토리안에 pb파일로 변환되어 저장된다.
    [django에서 makemigrations 명령어와 비슷한 개념]
  • 트레킹을 하는 명령어를 실행시켜 트레킹을 실시
    python object_tracker.py --video ./data/video/sample_wecode_renew.mp4 --output ./outputs/result_renew.avi --model yolov4

4. 첫번째 문제점 발생

  • 문제점 : 트레킹이 되지 않고 원본파일이 그대로 렌더링 되서 저장되는 문제 발생
  • 해결하기 위한 가설 설정
  1. 1차 시도
  • 가설1 : tensorflow 버전 을 올려보자.
    • 2.3.0 > 2.5.0 : 변화없음
    • 2.5.0 > 2.7.0 : 변화없음
  • 가설2 : object_tracker.py의 iou threshold 수치를 변화시켜보자.
    • 디폴트값 0.45 > 0.1로 변경 : 변화없음
    • 0.1. > 0.5 : 변화없음
    • 0.5. > 1.0 : 변화없음
  • 가설3 : object_tracker.py의 score threshold 수치를 변화시켜보자
    • 디폴트 0.5 > 0.1 로 변경 : 변화없음
  • 가설4 : sample.mp4 동영상에서 트레킹이 가능한 장면을 스크린샷을찍어 이미지파일을 트레킹해보자
    • 변화없음

⇒ 결론 : 초기설정부터 잘못되었다.

  1. 2차시도
  1. 3차시도
  • 처음부터 darknet 설정부터 다시 진행
    (GitHub readme 참고)
  • 초기설정시 CMake이아닌 makefile을 이용한 make명령어를 사용한 방법 시도 : 기존것에서 하니 오류발생
  • 새롭게 디렉토리 생성, 다시 클론을 받고 설정값을 변경한뒤 다시 시도 : 변경완료
  • yml파일로 가상환경을 만들지말고 conda create로 python 3.7버전으로 생성
  • requirements-gpu.txt 파일에 tensorflow-gpu의 버전을 2.3.0으로 변경
  • pip install -r requirements-gpu.txt 로 모듈 설치
    트레킹성공

5. 트레킹성공과 실패에 대한 비교

  1. 성공에 대한 가설 설정
    1. yml파일로 가상환경을 만드는것이 아니라 가상환경 생성 후 requirement-gpu.txt 로 설치해서 성공했다.
    2. 이전에 실패했던 가상환경과 성공했던 가상환경의 pip freeze로 비교, 다른점발견
    • 실패했던 가상환경은 tensorflow와 tensorflow-gpu가 동시에 설치되어있었고 성공했던 가상환경은 tensorflow-gpu 만 설치되어있었다.
    1. darknet 의 설정과정에서 CMake 방식으로는 안됬고 makefile를 이용한 make명령어는 성공했다
  2. 가설 확인 작업진행
    1. 실험에 사용된 tensorflow 버전 2.3.0, 2.4.0, 2.5.0
    2. 위의 1번에 대한 실험진행 : 각각 yml, requirement파일로 가상환경을 따로 만들어 진행
    ⇒ 둘다 성공
    3. 위의 2번에 대한 실험진행 : tensorflow와 tensorflow-gpu 동시에 설치한 가상환경과 tensorflow-gpu만 설치한 가상환경 을 버전별로 만들어 진행
    ⇒ 둘다 성공

결론 :
1. tensorflow와 tensorflow-gpu는 둘다설치되어있어도 상관없다.
2. yml로 가상환경만들거나 가상환경 생성후 requirement파일로 설치하나 크게 상관없다.
3. CMake 방식이아닌 makefile 방식이 맞다고 잠정적 결론 내림.(확신은 없음..)

6. 추가 이슈 발생

  • save_model.py를 tensor flow 2.5.0 버전으로 올린 뒤 save_model.py를 실행시켜 weights파일을 변환한뒤 트레킹이 되지 않는 문제 발생

⇒ 해결 : tensorflow 2.3.0 버전으로 낮춘뒤 다시 save_model.py를 실행시키면 다시 트레킹이 됨을 확인
다만, tensorflow 2.3.0 버전은 트레킹속도가 2.4.0이상의 버전에 비해 10분의 1속도가 나와 save_model.py를 동작시길때만 2.3.0버전으로 하고 트레킹을 실시할때는 2.4.0버전으로 진행

최종결론 :

  • YOLOv4는 tensorflow 2.3.0버전으로 만들었기때문에 모든 설정파일을 만들때(save_model.py)는 2.3.0버전으로 해야 정상적 작동한다.
    단, 설정파일의 설정부분이 완료된상태에서 사용(tracking)할때는 버전과 상관없이 동작한다.
profile
WEB Developer

0개의 댓글