해당 문서에서는 CVAT(Computer Vision Annotation Tool)를 활용하여 딥러닝 모델을 추가하는 방법을 기술합니다.
먼저, CVAT를 설치하기 위해서는 docker
와 docker-compose
가 로컬 환경에 설치되어 있어야 합니다.
설치가 완료되었으면, CVAT git repository에 접속하여 clone을 진행합니다.
git clone https://github.com/openvinotoolkit/cvat.git
docker-compose
명령을 통해 컨테이너 환경을 구축합니다.
docker-compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml up -d
docker-compose ps
를 실행했을 때 다음과 같이 7개의 컨테이너가 실행되고 있다면 정상적으로 실행된 것입니다.
localhost:8080 (CVAT)에 접속합니다.
계정이 없다면, 계정을 생성해줍니다.
그 뒤, 로그인을 하여 다음과 같은 화면이 나왔다면 CVAT 환경 구축은 성공적으로 완료된 것입니다.
일반적으로 CVAT에 모델을 추가할 때는 Nuclio CLI(Command Line Interface)인 nuctl
을 사용합니다. Nuclio는 FaaS (Function-as-a-Service) 를 제공할 수 있는 오픈 소스 서버리스 프레임워크입니다.
FaaS는 함수를 서비스로 제공하는 형태를 의미하며, 함수를 실행하기 위해 서버와 런타임을 구성하고 코드를 배포해서 실행하는 일련의 과정을 없애고, 함수가 호출되기만 하면 해당 런타임 내에서 정의해놓은 함수가 실행되는 방식입니다. 서버가 계속 대기하면서 사용자의 요청을 처리하는 것이 아니라, 이벤트가 발생할 때마다 실행되는 작은 코드라고 할 수 있겠습니다.
사용중인 컴퓨터의 운영체제와 docker-compose.serveless.yaml
에 정의된 nuclio의 버전을 확인한 뒤, 다음 명령을 실행합니다.
설치 가능한 nuctl 버전은 해당 링크에서 확인하실 수 있습니다.
wget [https://github.com/nuclio/nuclio/releases/download/](https://github.com/nuclio/nuclio/releases/download/)<version>/nuctl-<version>-<os-type>-amd64
nuclio를 설치한 뒤, 사용자 권한을 재설정하고 커맨드로 사용할 수 있도록 링크 파일을 생성합니다.
sudo chmod +x nuctl-<os-type>-linux-amd64
sudo ln -sf $(pwd)/nuctl-<version>-<os-type>-amd64 /usr/local/bin/nuctl
터미널에 nuctl
을 입력했을 때 다음과 같이 출력되면 정상적으로 설치된 것입니다.
serverless function과 model을 저장할 cvat 프로젝트를 생성합니다.
nuctl create project cvat
nuclio dashboard(localhost:8070)에 접속하면 아래와 같이 해당 프로젝트가 생성된 것을 확인할 수 있습니다.
아래 링크에는 CVAT에서 배포 가능한 serverless function 및 모델이 정리되어 있습니다. 로컬 환경에서 배포하는 경우에는 —-platform local
옵션을 추가합니다.
https://github.com/openvinotoolkit/cvat/tree/develop/serverless
위 저장소에 있는 모델 중 하나를 로컬환경에서 배포해보도록 하겠습니다. 모델은 컨테이너 형식으로 배포되며, hostpath에 마운트할 수 있습니다.
nuctl deploy --project-name cvat \
--path /root/cvat_dev/cvat/serverless/tensorflow/faster_rcnn_inception_v2_coco/nuclio \
--volume `pwd`/serverless/common:/opt/nuclio/common \
--http-trigger-service-type NodePort
--platform local
Function deploy complete 메시지가 출력되면 모델이 정상적으로 배포된 것입니다.
nuctl get functions
명령을 통해 nuclio에 배포된 함수 및 모델을 확인할 수 있습니다.배포된 모델은 CVAT의 model 탭에서 확인 가능합니다.
외부에서 해당 모델을 통해 접근할 수 있도록 하기 위해서는 별도의 정보를 추가해야 합니다. nuclio function의 포트번호와 cvat network를 지정합니다. spec.triggers.myHttpTrigger.attributes
에 특정 port를 추가하고, spec.platform.attributes
에 도커 컴포즈를 실행했을 때 생성된 도커 네트워크(cvat_cvat)를 추가합니다. 동일한 커맨드로 배포를 진행하면, 다음과 같이 NODE PORT가 지정된 상태로 nuclio function이 배포된 것을 확인하실 수 있습니다.