이번 포스트에서는 레이블링 툴은 CVAT를 소개해 드리고 model 기능을 사용 할 수 있는 Localhost에서 CVAT를 실행하는 방법에 대해 알려 드리고 실행해보겠습니다.
이번 포스트는 아래 흐름으로 작성 되었습니다.
1. Windows 기능켜기/끄기 - WSL / Hyper-V 활성화
2. Docker 설치
3. WSL Ubuntu 18.04 설치
4. CVAT 설치 및 모델 배포
5. 테스트
6. 마무리

CVAT는 인텔에서 개발한 Computer Vision Annotation Tool은 컴퓨터 비전 알고리즘용 데이터에 레이블을 지정하는 데 사용되는 무료 오픈 소스 웹 기반 이미지 및 비디오 주석 도구입니다. AI 학습 및 객체 인식에 필요한 데이터셋을 만들기 위한 레이블링 & Annotation 작업을 쉽게 할 수 있는 TOOL입니다.

CVAT는 간단한 사용 방법이 특징이며, 내부에서 Projects, Tesks, Jobs 단계를 나눠서 관리 할 수 있습니다.

강력한 장점은 model을 사용하여 Auto annotation 작업을 수행 할 수 있다는 점입니다만, 웹버전에서는 model 기능은 유료(구독)로 서비스 되고 있습니다.
???: 이번 프로젝트만 작업하면 되는데 구독을 해야한다니 크흠....

비싼 비용은 아닐 수 있지만 한번의 프로젝트 진행을 위해 구독하시기 망설여지시는 분들도 있고 자본이 넉넉하지 않은 학생분들은 유료 서비스를 사용하기 어려울 수 있습니다.
하지만! 구독을 하지 않고도 모델을 사용 할 수 있는 방법이 있습니다.

CVAT는 웹서비스 외에도 로컬호스트에서 구동 할 수 있다는 사실! (이번 포스트의 주요 주제)

아래에 이어서 설치 방법을 설명 드리겠습니다.
(레츠 기릿)
설명드리는 운영 체제 기준은 Windows 10 Home edition이며, Windows 환경에서 WSL(Windows Subsystem for Linux)를 사용하여 진행해보겠습니다. 설치 방법은 아래 링크의 CVAT Documention 중 Installation serverless functions on Windows 10 with using the Ubuntu subsystem을 기반으로 설명 드리겠습니다.
Serverless tutorial
Introduction Leveraging the power of computers to solve daily routine problems, fix mistakes, and find information has become second nature. It is therefore natural to use computing power in annotating datasets. There are multiple publicly available DL mod
opencv.github.io
1. Windows 기능켜기/끄기 - WSL / Hyper-V 활성화
작업표시줄 검색 창에 'Windows 기능 켜기/끄기'라고 검색 후 실행합니다.
또는 ' 제어판 - 프로그램 및 기능 - Windows 기능 켜기/끄기'으로 실행 할 수 있습니다.


아래처럼 실행된 Windows 기능 창에서 Hyper-V와 Linux용 Windows 하위 시스템이 체크(√)가 되어있어야 합니다.
체크 후 확인을 클릭합니다.
Hyper-V는 Docker desktop 실행을 위해 필요하며, Linux용 Windows 하위 시스템은 Ubuntu 실행에 필요합니다.
※ Windows 10 Home edition 환경에서 기능 목록에 Hyper-V가 보이지 않을 경우 구글에 Windows 10 home Hyper-V라고 검색해보시면 도움을 받을 수 있습니다.


다음은 WSL 설치 및 버전을 확인해보겠습니다. Windows 시작버튼을 우클릭하여 Windows PowerShell(관리자)를 실행합니다.

실행된 PowerShell에서 아래 명령을 입력합니다.
wsl --install
Linux 배포판이 WSL 1 또는 WSL 2로 설정되어 있는지 확인하려면 wsl -l -v 명령을 사용합니다.
wsl -l -v
WSL2로 되어있다면 아래와 같이 확인 할 수 있습니다.

만약 VERSION이 1로 표기되거나 진행에 어려움이 있을 시, Microsoft의 아래 공식 문서를 참고해주세요.
https://learn.microsoft.com/ko-kr/windows/wsl/install
WSL 설치
wsl --install 명령을 사용하여 Linux용 Windows 하위 시스템을 설치합니다. Ubuntu, Debian, SUSE, Kali, Fedora, Pengwin, Alpine 등 원하는 Linux 배포판에서 실행되는 Windows 머신에서 Bash 터미널을 사용할 수 있습니
learn.microsoft.com
여기까지 기능 관련 세팅은 끝났고 다음은 Docker를 설치하겠습니다.
2. Docker 설치
이미 Docker가 설치되어 있을 경우 3번부터 진행해주세요
아래 링크로 도커 홈페이지에 들어갑니다.
https://www.docker.com/products/docker-desktop/
Docker Desktop: The #1 Containerization Tool for Developers | Docker
Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.
www.docker.com
Docker desktop은 공식 홈페이지에서 windows 버전의 docker desktop을 설치해줍니다.


Docker 설치까지 끝났습니다.
3. WSL Ubuntu 18.04 설치
이번에는 Ubuntu 18.04를 설치하겠습니다. 18.04를 설치하는 이유는 CVAT 가이드에 18.04를 설치하라고 안내되어 있어 설치하려고 합니다.

아래 링크를 누르시고 설치를 진행합니다.
https://apps.microsoft.com/detail/9N9TNGVNDL3Q?hl=en-us&gl=US
Ubuntu 18.04 on Windows - Official app in the Microsoft Store
Ubuntu 18.04 on Windows allows one to use Ubuntu Terminal and run Ubuntu command line utilities including bash, ssh, git, apt and many more. Please note that Windows 10 S does not support running this app. To launch, use "ubuntu1804" on the command-line pr
apps.microsoft.com
Install을 누르시고 진행하시면 간단한 설치가 완료됩니다.


설치 후 Ubuntu 18.04를 실행합니다. 만약 지정된 파일을 찾을 수 없다는 에러가 발생한다면
Powershell 터미널에서 아래 명령을 입력 후 다시 Ubuntu를 다시 실행해주세요.
wsl --unregister Ubuntu-18.04
Ubuntu 실행 후 wsl.exe -l -v를 입력하여 아래와 같이 18.04의 wsl version이 '2'임을 확인합니다.

Ubuntu 18.04까지 잘 설치가 되었습니다.
앞으로 아래 진행되는 터미널 명령은 모두 Ubuntu 18.04에서 실행하게 됩니다.
여기까지 Docker와 Ubuntu 18.04 설치가 완료되었습니다. 여기에서 잠깐 Docker desktop을 실행해보겠습니다.

처음 실행하면 아래 창이 나옵니다. Accept를 클릭해 줍니다.

Accept를 누르셨으면 로그인 페이지가 나옵니다. 저는 'Continue without signing in'으로 진행하겠습니다.
Tell us about the work you do 물음에 Skip 또는 간단히 답을 체크한 후 넘어가줍니다.

Docker 실행 화면입니다. 아래 그림에서와 같이 오른쪽 위를 보시면 Settings 아이콘이 있습니다. 눌러주세요.

Resources - WSL integration으로 들어가면
Enable integration with additional distros: 아래에 Ubuntu-18.04의 토글을 enable 시켜줍니다.
그 다음 Apply & restart를 눌러줍니다.

이제 WSL Ubuntu 18.04 환경에서 Docker 명령어를 사용 할 수 있습니다.
Ubuntu에서 docker를 입력 후 확인해봅니다.

4. CVAT 설치 및 모델 배포
이제 CVAT를 설치해볼겁니다. 저는 Ubuntu에서 git 명령어로 설치해보겠습니다.
저는 d 드라이브에 d:/CVAT 폴더에 설치되도록 진행하겠습니다.
ubuntu에서 다음 명령어를 실행하여 d 드라이브로 이동 후, d 경로에 cvat 디렉토리를 생성하겠습니다.
cd /mnt/d
mkdir cvat
git clone 명령어로 github의 cvat를 clone한 후, cd cvat 명령으로 cvat 폴더 내부로 이동합니다.
git clone https://github.com/opencv/cvat
cd cvat

여기까지 진행하셨다면 실제 설치한 경로에 cvat가 clone되었음을 확인 할 수 있습니다.

다음은 serverless로 모델을 사용하기 위해 nuclio를 설치하겠습니다. localhost에서 모델을 사용하기 위해 필수로 설치가 필요합니다. CVAT documentation에 따라 설치해보겠습니다.
https://opencv.github.io/cvat/docs/administration/advanced/installation_automatic_annotation/
Semi-automatic and Automatic Annotation
Information about the installation of components needed for semi-automatic and automatic annotation.
opencv.github.io
설치 가이드의 내용입니다.

가이드에서는 nuclio 1.11.24 버전을 설치하라고 하네요.
/mnt/d/cvat 경로에서 아래와 같이 version 부분을 1.11.24로 수정한 명령어를 입력합니다.
wget https://github.com/nuclio/nuclio/releases/download/1.11.24/nuctl-1.11.24-linux-amd64

nuclio 설치 후 아래 명령어를 한 줄씩 차례로 입력합니다.
sudo 명령어를 입력하게 될 경우 password를 요구하는데 ubuntu 처음 실행 시 만든 계정의 password를 입력하면 됩니다.
sudo chmod +x nuctl-1.11.24-linux-amd64
sudo ln -sf $(pwd)/nuctl-1.11.24-linux-amd64 /usr/local/bin/nuctl
위 두 명령어는 입력해도 별 반응이 없지만 그것이 정상입니다.
여기까지 진행 후 ubuntu에서 docker를 실행해보겠습니다.
ubuntu에서 다음 명령어로 실행합니다. 명령어가 먹히지 않는다면 windows에 docker가 켜져있는지 확인해주세요.
sudo docker compose up -d
명령어를 실행하시면 필수 이미지를 다운로드하고 컨테이너를 생성하게 됩니다. 시간이 조금 걸립니다.

CVAT 컨테이너 생성이 완료되었다면, docker 컨테이너에서 CVAT를 확인 할 수 있습니다.
Status가 Running으로 되어있다면 localhost:8000에서 확인 가능합니다.

확인해보겠습니다. 우선 CVAT 설치 가이드에 보면 CVAT는 크롬에서 동작한다고 되어 있습니다.
크롬을 켜시고 주소창에 localhost:8080 입력 후 엔터를 누릅니다.
잘 따라오셨다면 localhost:8080접속 시 cvat 웹페이지가 나올겁니다.

제 컴퓨터의 localhost이지만 접속할 수 없는 계정이 없습니다. 아래와 같이 입력해서 superuser 계정을 생성하겠습니다.
이전과 마찬가지로 ubuntu 터미널에서 /mnt/d/cvat $ 경로에서 입력해줍니다.
sudo docker exec -it cvat_server bash -ic 'python3 ~/manage.py createsuperuser'


[sudo] password 입력하고 나면, 새로 생성할 Superuser의 Username, Email address, Password를 차례로 입력해야 합니다. 저는 Username: admin, Email address: 생략(엔터), Password: 1234로 하겠습니다.
password에 대해 경고가 나오는데, Bypass password validation and create user anyway? 에 대해 y를 입력 후 엔터를 누르면 계정이 생성됩니다.
이제 CVAT localhost에 로그인 할 수 있는 슈퍼계정이 만들어졌습니다. localhost:8080에 다시 접속 후 로그인을 합니다.

로그인을 하셨으면 웹버전과 동일하게 바로 작업이 가능합니다. 이제 Auto Annotation을 사용 할 수 있도록 모델 배포만 남았습니다.

설치한 /CVAT/serverless 안에 폴더들을 하나씩 확인해보면 모델들을 확인 할 수 있습니다.

테스트 삼아 모델을 배포해보겠습니다. 모델은 이전에 설치한 nuclio에서 CVAT 로컬로 배포하게 됩니다.
가이드에 나와있는대로 dextr와 Yolov3를 설치해보겠습니다.
이전과 마찬가지로 ubuntu 터미널 - /mnt/d/cvat 경로에서 아래 명령어를 한 줄씩 입력 후 실행합니다.
두 명령어를 처리하기까지 5~10분 정도 소요됩니다.
sudo ./serverless/deploy_cpu.sh serverless/openvino/dextr
sudo ./serverless/deploy_cpu.sh serverless/openvino/omz/public/yolo-v3-tf
배포가 다 되었으면 아래 명령어를 실행하여 compose 합니다.
docker compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml up -d
이제 모든 설치 및 배포, 실행이 끝났습니다.
Docker 컨테이너를 확인해보면 nuclio 모델 및 storage가 추가된걸 확인 할 수 있습니다.

5. 테스트
localhost:8080으로 접속해보겠습니다.

아까와 달라진 점을 눈치채셨나요? 상단에 Models 메뉴가 활성화되었으며, Models에 들어가보면 배포한 DEXTR와 YOLO v3 모델을 확인 할 수 있습니다.
간단한 테스트를 해보겠습니다. Projects와 Tasks를 만들고 person이라는 라벨을 생성하였습니다. 이 부분은 어렵지 않은 부분이라 생략하겠습니다.
Input 영상은 CVAT 가이드에서 다운받은 테스트 영상입니다.
Tasks 메뉴를 누르면 아래와 같이 Jobs을 확인할 수 있고 클릭하게 되면 작업을 할 수 있습니다.

첨부한 영상의 가장 첫 프레임입니다. 사람들이 걸어다니는 모습을 CCTV로 촬영한 듯 합니다.

좌측 메뉴 중 AI Tools를 누르고 Detectors에서 Model: YOLO V3를 선택합니다. 제가 person이라는 라벨을 이미 생성해 놓았기 때문에 자동으로 person - person으로 매칭되어 있습니다. Annotate를 진행합니다.

보행자들에게 자동으로 person이라는 레이블로 rectangle shape가 생성되었습니다!

영상 전체에 레이블링을 해보겠습니다. Tasks 메뉴에 들어간 후 생성한 task 오른쪽의 Actions 에 마우스를 올린 후 Automatic annotation을 클릭합니다.

Model: YOLO v3를 선택하고 필요하다면 인식할 객체(오른쪽 콤보박스)와 레이블링(왼쪽 콤보박스)을 선택해줍니다.
저는 person - person으로 선택 후 Annotate를 하겠습니다.

진행률을 확인 할 수 있고 잠시 후면 완료됩니다. CPU 사양에 따라 시간차이가 있을 수 있습니다.

Open 후 재생해 보겠습니다. 아래 움짤과 같이 레이블링이 잘 되었음을 확인 할 수 있습니다!

6. 마무리
YOLOv3 모델에는 person 외에도 다양한 객체들이 포함되어 있습니다. 데이터셋에 맞게 레이블링을 진행해보세요.

모든 작업을 마치고 난 후에는 Docker desktop에서 모든 컨테이너를 stop 하신 후에 ubuntu에서 아래 명령어를 입력해주세요. stop 및 compose down을 하지 않을 시 재부팅 후 시작 시 실행이 되지 않는 문제가 생길 수 있습니다.
sudo docker compose down
sudo docker compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml down
다시 시작할 때는 아래 순서로 진행해주세요
1. Docker desktop 실행
2. ubuntu 터미널에서 /mnt/d/cvat 경로에 아래 명령어 실행
sudo docker compose up -d
sudo docker compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml up -d
여기까지 CVAT Localhost 구축 및 모델 사용 방법이었습니다.
CVAT documentation을 확인해보시면 유저의 custom model 또한 serverless로 배포가 가능합니다. 자신만의 모델로 레이블링을 수행하고자하신 분은 시도해보셔도 좋을 것 같습니다.