반응형

우선.. 한가지 말하자면.. 나는 이 블로그에서 전에 Yolo V5를 학습하는 설명을 하다가 말았던 적이 있다..

2022년 (고2) 때 쓰던건데.. 중간에 그만 둬서.. 2025년 이번에 다시 써볼려 한다..!

 

YOLO 란?

YOLO 모델은 간단히 말하면 객체 인식 인공지능 모델 중 하나이다. (YOLO(You Only Look Once) 이건 그냥 모델의 이름;;)

 

YOLO는 2015년에 Yolo V1 출시로 지금까지 있으며, 현재 마지막으로 출시한건 Yolo V12이다. 

특이한건 Yolo V12가 출시는 했으나 아직 Yolo 깃허브에는 V11로 등록이 되어있다. 

그래서 이번껀 V11로 학습해볼 것이다. 다만 V11과 V12의 학습 방법의 차이는 그냥 이름만 변경하면 되는거라서 똑같이 진행하면 된다.

 

참고로.. 2022년 정도 까지만 해도 Yolo V5를 많이 사용해왔고.. 현재도 Yolo를 검색해보면 대부분 Yolo V5가 나온다.. 

내가 알기론 여러 기관에서도 Yolo V5를 많이 사용 한다고도 알고 있고.. 그 이유는 Yolo V5의 성능이 좋기도 하고 다른 버전에 비해 커뮤니티가 활발하기에 그렇다고 생각된다.. 

 

하지만 Yolo V11은 확실히 좋기는 하다.. 속도도 빨라졌고.. 모델 성능도 더 좋아진 것이 체감될 정도이다..

여기 표를 보면 알 수가 있는데.. 일단 첫번째 이미지는 그냥 Yolo V5는 없지만 Yolo V12는 있어서 넣은 사진이고 두번째 이미지는 Yolo V5는 있지만 Yolo V12는 없어서 같이 올렸다.

 

여기에서 Latency는 추론 속도이다. FLOPs는 딱히 알 필요는 없지만 연산 개수이다. 추론할 때 내부에서 몇번을 계산하는지.. 그냥 모델 크기로 이해해도 될 것 같다. Latency, FLOPs는 왼쪽으로 낮으면 좋다.

마지막으로 COCO mAP는 Yolo의 모델은 Coco 라는 데이터셋으로 학습이 되어있는데.. 그 데이터셋으로 객체 인식을 했을 때 얼마나 정확한지 라는 것이다. 높으면 좋다.

 

아무튼 그렇게 두고 보면 Yolo V12가 역시 좋긴 하다.. 하지만 아직 제대로 출시는 안한 것 같으니.. 이번에는 넘어가는데..

Yolo V11과 Yolo V5를 비교하면 확실히.. Yolo V11를 안쓰기에는 성능이 꽤 차이난다는 것이다.

 

모델 크기

그리고 저 위에 사진을 보면 각 모델 뒤에 n, s, m, l, x 이건 모델의 크기이다.

이게 각 모델의 크기이다. 

Nano, Small, Medium, Large, X-Large의 앞 글자를 딴 것이다.

 

모델이 커질 수록 속도가 느리지만.. 정확도는 올라간다. 하지만 걱정하지 않아도 될껀.. X Large 모델까지 가는 경우는 간단한 프로젝트에선 별로 필요없다는 것이다. 보통은 Nano나 Medium 모델 정도 까지만 쓰이고 그 이외에는 진짜 제대로 예측해야한다.. 

몇십만장 데이터셋을 학습해서 해야한다.. 이정도일 때 정도이지.. 간단하게 예측하는 용도라면 X Large 까지 선택할 이유는 없다. 오히려 학습을 더 많이 해야하기도 하고 속도도 쓸데 없이 느리고.. 데이터셋이 충분하지 않다면.. 오히려 좋지 않다..

 

그렇기에 여기에서는 Nano로 진행할 것이다..!

 

참고로 저기에 보면 size라고 나와있는건.. 괄호 안에 pixels를 봤겠지만.. 말 그대로 픽셀의 개수이다..

모델의 용량이라고 생각하면 안된다.

Yolo는 다양한 픽셀을 받아서 추론할 수가 없다. 대부분의 모델도 그렇겠지만.. 이미 모델의 크기는 확정되어있기 때문에.. 딱 지정된 크기의 사진만 받아서 처리한다.

그렇기에 만약 내가 1920 * 1080의 사진을 추론할려고 하면.. Yolo V11 Nano 모델이 640 size이니 1920 * 1080px를 640 * 640px으로 변경한 후 모델로 넣어서 추론을 한다는 것이다. 마찬가지로 270 * 320px 이런 이미지를 넣으면 강제로 640 * 640px 이미지로 변경해서 추론을 한다.

작은 객체 탐지..?

이러면 한가지 의문이 들 수 있다.. 만약 큰 해상도의 이미지에서 작은 객체를 탐지할려는 경우.. 이미지가 축소되고 객체가 손실되어 작아지는 경우 탐지하기가 어려운거 아니야? 라고 생각할 수 있는데.. 정답이다.

 

Yolo 로는 작은 객체를 탐지하기가 매우 어렵다. 대부분의 인공지능 모델도 이걸 해결하기는 쉽지가 않다..

물론 모델의 이미지 입력 크기를 늘리면 되긴 한다.. 하지만 그렇게 되면 모델을 다시 처음부터 학습해야하기도 하고.. 작은 객체를 찾을 순 있겠지만 굉장히 느리고.. 기존에 640 * 640으로 맞춰 설계된건데.. 늘려서 학습하게 되면 구조가 또 잘 안맞아.. 오히려 정확도가 떨어질 수도 있다..

 

https://shaunyuan22.github.io/SODA/

 

SODA: A large-scale Small Object Detection dAtaset

Small Objects, Big Challenges.

shaunyuan22.github.io

그래서 이런 것들도 있다. 

 

아무튼 작은 객체인 경우 무조건 못 찾는다고 볼 수는 없다..

알고리즘이지만 다른 기법이 있다. SAHI 라는 기법이 있다.

나중에 시간이 된다면.. SAHI에 대해서도 쓰겠다만.. 간단하게 말하면 큰 이미지를 나눠서 추론하고 결과를 합치는 방법이다. (물론 나눈 만큼 전부 추론해야하기 때문에 시간이 나눈 만큼 늘어난다는게 함정이다..)

https://docs.ultralytics.com/ko/guides/sahi-tiled-inference/

 

SAHI 타일형 추론

슬라이스 추론을 위해 SAHI로 YOLO11 구현하는 방법을 알아보세요. 대규모 애플리케이션의 메모리 사용량을 최적화하고 탐지 정확도를 향상하세요.

docs.ultralytics.com

타일로 나누는 경우 객체가 반쪽 반쪽 인식되어서 한개의 객체가 2개 이상으로 탐지 되는 경우도 저기에선 해결했다. 그냥 겹쳐서 탐지한 후에 알고리즘으로 합친다..

 

뭐 아무튼 저런 것도 있다는걸 알아두면 좋을 것 같다..

 

학습에 대한 것

마지막으로 이제부터 쓸 학습에 대한 것인데..

 

우선 YOLO는 기본적으로 COCO 데이터셋으로 학습되어있고.. 학습된 객체는 매우 많다.

https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/coco.yaml

 

ultralytics/ultralytics/cfg/datasets/coco.yaml at main · ultralytics/ultralytics

Ultralytics YOLO11 🚀. Contribute to ultralytics/ultralytics development by creating an account on GitHub.

github.com

아마 저 링크에 나와있는데로 기본 모델은 80개의 객체를 탐지할 수 있는걸로 알고 있다.

 

그래서 만약에 자신이 탐지할려는게 저기에 나와있는 범용적인 것이라면 그냥 기본 모델을 쓰면 된다. (물론 기본 모델은 여러 객체 탐지를 목표로 하기에 딱 한개만 탐지할려는 경우 따로 학습하는 것 보다 정확도가 떨어질 순 있다.)

 

하지만 저 리스트에도 없고 새라는 것 중에 빨간 새 이런 딱 확실하게 어느 하나를 탐지할려고 한다면.. 학습을 하는 것이 좋다..

 

근데 모델을 학습하는 방법은 2가지 정도가 있는데.. 하나는 완전 처음부터 학습하는 것이고, 하나는 파인튜닝이라고 기존에 학습된 모델을 내 데이터셋에 맞추도록 하는 것인데..

 

파인튜닝을 쓰면 처음부터 학습하는게 아니기 때문에 내 데이터셋을 학습할 때 더욱 빨리 학습할 수 있게 된다.

그래서 새로 학습을 할 때 1000번 학습한다면.. 파인튜닝은 50~100번 정도만 학습해도 정확도가 1000번 학습한 것 보다 높아질 수 있다. (물론 데이터셋의 종류와 양에 따라 다르겠지만..)

그리고 파인튜닝을 하면.. 내가 설정한 데이터셋에 대해서만 탐지하고 기존에 학습된 것 들은 더 이상 탐지할 순 없다.

 

아무튼 그렇기에 나는 파인튜닝을 하는 방법에 대해서 작성할 것이다.

어차피 새로 학습하는 것과는 방법에는 별 차이가 없긴 하다..

 

찐막

그리고 진짜 마지막으로 말할껀.. 내가 자주 YOLO를 탐지가 아닌 추적이라고 쓸 때가 있는데.. 일단 여기에선 탐지라고 썼지만.. 실수로라도 추적이라고 쓸 수도 있다.. 그냥 내 실수이긴 하지만.. (그냥 추적이라고 적혀있으면 탐지라고 보면 된다..)

 

추적은 객체가 이동하는걸 추적할 때를 말하는거고..

탐지는 객체가 있다는 것만 알 수가 있다.

 

즉 동영상에서 특정 객체가 어디로 이동하는지 알려면 추적을 해야하는거고.. 그냥 동영상에서 어떤 객체가 있는지만 볼려면 탐지를 해야한다는 것이다.. (분명 다른 단어인데.. 나는 자주 실수로 같이 쓸 때가 있다..)

 

YOLO는 객체를 추적할 순 없고 탐지만 가능하다..

추적을 할려면.. 알고리즘으로 하는 방법도 있고.. 인공지능으로 하는 방법도 있으니.. 잘 찾아보시길..

 

그리고 두번째로 말할껀

YOLO에는 탐지만 할 수 있지만.. 탐지할 수 있는 종류가 꽤 여러가지이다.

https://docs.ultralytics.com/ko/tasks/

 

Ultralytics YOLO11 지원하는 컴퓨터 비전 작업

Ultralytics YOLO11 에서 높은 정확도와 속도로 감지, 세분화, 분류, OBB 및 포즈 추정 기능을 살펴보세요. 각 작업을 적용하는 방법을 알아보세요.

docs.ultralytics.com

저 위에 사이트에 들어가면 뭐를 탐지할 수 있는지 종류가 나와있다.

 

YOLO는 Detect, Segment, Classify, Pose, OBB를 지원한다.

Detect는 이번 글에서 진행할 방법이고..

Segment는 딱 객체가 차지하고 있는 그 부분만 찾는거고..

Classify는 이미지를 넣었을 때 그 이미지 자체가 고양이인지 개인지 이런걸 분류하는거고..

Pose는 인간의 포즈가 어떻게 된건지.. 뭐 다른 동물도 학습하면 가능할테고..

OBB는 객체를 탐지하는건 같지만 어느정도 회전했는지도 감지하는 것이다.

 

마무리

아무튼 이제 설명은 끝났고..

다음 글 부터는 데이터셋을 만들고.. 데이터셋을 학습하는 방법에 대해 설명을 할 것이다..!

솔직히.. 코드 같은건 작성할게 거의 없기 때문에.. 코딩을 모르는 경우에도 쉽게 할 수 있을 정도로 간단하다..!

물론 노가다 작업들이 있긴 하지만.. 시간을 투자하면 충분히 가능..!

 

암튼 그렇다..!

반응형
반응형

서론

2025년 2월 27일 Sesame AI (참깨 AI?)에서 굉장히 현실적인 목소리의 음성 대화 모델을 출시했다고 했다.

 

Demo 도 출시했었는데, 실제로 써보니깐 퀄리티가 엄청나게 좋았었다. 실시간 대화는 기본이고 ChatGPT의 초기 보이스 모드 처럼 대화하면서 웃는다거나 울거나 노래를 불르는 진짜 사람과 대화하는 것 같은 모델이 나왔었다. (다만 말이 너무 많은..)

 

다만 영어 모델만 지원하고 있었어서 내가 직접 사용하기에는 어려웠고 영어를 제일 잘하는 친구에게 시켜보았었는데.. 굉장히 대화를 잘 하고 있었고.. 대화 중에 웃거나 한숨을 쉬거나 여러 특이한 장면들도 볼 수 있었다.

대화가 끝난 후 물어보니 약간 대화의 흐름을 잘 파악하지 못하는 것 같은 느낌은 있었지만 진짜 사람 같고 자연스러운 대화 같았다고 했었다.

일본어나 한국어를 시켜볼 때는 약간 하기 싫어하는 느낌으로 끊어서 "お、は、よ、う、ご、ざ、い、ま、す” 같은 느낌으로 끊어서 한자리씩 천천히 말하기도 했었다.

참고로 말이 엄청 빠르고 말이 많기 때문에 영어를 원어민 처럼 잘하는게 아니라면 AI도 이해를 잘 못하고 자신도 이해를 못하는 것을 경험할 수 있을 것이다;;

 

실제로 대화해보실 분은.. 여기 링크로! https://www.sesame.com/research/crossing_the_uncanny_valley_of_voice#demo

 

Crossing the uncanny valley of conversational voice

At Sesame, our goal is to achieve “voice presence”—the magical quality that makes spoken interactions feel real, understood, and valued.

www.sesame.com

다만 대화하는데 통화 품질 검토를 위해 녹음한다고는 한다. (학습에는 사용되지 않는다고 하지만.. 그건 잘 모르겠다.)

 

https://www.sesame.com/research/crossing_the_uncanny_valley_of_voice

 

Crossing the uncanny valley of conversational voice

At Sesame, our goal is to achieve “voice presence”—the magical quality that makes spoken interactions feel real, understood, and valued.

www.sesame.com

여기에서 설명하는 것으로는 앞으로 언어 지원을 20개 이상 추가한다고 한다. 아마도 그 중에는 한국어도 포함 되어있을꺼라 생각된다..

그리고 모델의 크기는 굉장히 작은

  • Tiny: 1B backbone, 100M decoder
  • Small: 3B backbone, 250M decoder
  • Medium: 8B backbone, 300M decoder

이 정도의 모델 사이즈를 가지고 출시된다고 한다.

그리고 라이센스가 Apache-2.0 license 라이센스 이기 때문에, 상업적으로 사용하거나 학습하는 것에 문제는 없는 것 같다. 다만 사기나 이런 곳에는 사용하지 않는 것이 좋다고 적혀있다. github 아래에.. (당연한거지만)

 

본론

암튼 이 모델이 출시되기를 엄청 기다렸다..!!

https://x.com/_apkumar/status/1895492615220707723

위 글을 보면 출시가 2025년 3월 1일 기준으로 1 ~ 2주 안에 출시된다고 하고.. 현재 글을 쓰는 시점으로 20시간 전에 출시를 했다..! (현재 시간은 2025년 3월 15일 1시 40분)

 

 

암튼 이제 설치부터 해보는걸로!

 

일단 우선 Github 링크이다.

https://github.com/SesameAILabs/csm

 

GitHub - SesameAILabs/csm: A Conversational Speech Generation Model

A Conversational Speech Generation Model. Contribute to SesameAILabs/csm development by creating an account on GitHub.

github.com

GIthub 링크에도 설치 방법이 잘 나와있다. 그렇기 때문에 나는 2가지 방법으로 해볼 것이다. 처음은 Windows 두번째는 WSL로

 

HuggingFace 모델 권한 요청

일단 먼저 HuggingFace에 모델 사용 권한 허락 부터 받아야 한다.. 반드시 이걸 먼저 해준 후 진행해야한다.

https://huggingface.co/meta-llama/Llama-3.2-1B

https://huggingface.co/sesame/csm-1b

 

sesame/csm-1b · Hugging Face

This model is not currently available via any of the supported Inference Providers. The model cannot be deployed to the HF Inference API: The model has no library tag.

huggingface.co

CSM-1B 모델의 경우 그냥 사이트 가서

아래의 Agree and access repository를 눌르면 바로 사용할 수 있도록 권한을 얻을 수 있다.

 

다만 Llama의 경우는 좀 어렵다.

이렇게 떠 있을 텐데

Expand to review and access라 나오는걸 눌르면 그 아래에

이렇게 입력하는 창이 나오는데 전부 제대로 입력해야한다. 그 후 메타에서 승인해줄 때 까지 기다려야 한다. 대충 1시간 이내로 요청을 허락해준다.

다만 귀찮다고 대충 쓰면 안된다. 제대로 써야만 허락을 해준다.

(며칠전에.. 친구가 귀찮다고 대충 쓰고 영원히 그 계정에선 요청 권한이 사라진..)

 

Windows에서 설치 방법

암튼 먼저 Windows 부터!

 

Windows 같은 경우 제대로 지원하지는 않기에 조금 방법이 까다롭고 굳이이긴 하다.. WSL로 설치하는걸 가장 추천..

일단 Github에 설치하는 방법이 있지만 그걸 따르기는 좀 애매하다. Linux에서 설치하는 방법이기 때문에..

 

암튼 먼저 가상환경 부터 만들자! (Python 버전의 경우 Github에 나와있다.)

conda create -n csm python=3.10 -y

 

그 후 가상환경을 활성화 시킨다!

conda activate csm

 

그리고 csm github 레포를 다운한다. (아래 설치에선 requirements.txt를 사용하여 설치는 안하지만 다른 파일들을 사용하기에 미리 cd로 접근한 것이다.)

git clone https://github.com/SesameAILabs/csm.git
cd csm

 

그 후 필요한 라이브러리를 설치해야한다.

pip install tokenizers==0.21.0 transformers==4.49.0 huggingface_hub==0.28.1 moshi==0.2.2 torchtune==0.5.0 torchao==0.9.0 bitsandbytes==0.45.3 triton-windows==triton-windows==3.2.0.post13 silentcipher@git+https://github.com/SesameAILabs/silentcipher@master

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126

Windows의 경우 지원안하는 것이 좀 있기에 따로 설치해줘야 하는것이 있다. 그리고 silentcipher 이 라이브러리를 따로 설치하는데.. 이 라이브러리에 가보면 torch를 2.4.0으로 설치하게 되고.. 이 CSM Github에서도 2.4.0을 설치한다. 그래서 깔꺼 전부 깔고 난 후에 torch를 새로 설치하는 것이다. 아마도 2.x.x 버전이면 다 될 것 같다.

 

암튼 이렇게 하면 바로 설치가 끝난다..!

 

WSL에서 설치 방법

일단 WSL에서 설치하기 전에 Anaconda와 Cuda, Cudnn을 설치한다. 아래 링크에 가서 따라서 설치하면 된다.

https://www.anaconda.com/download/success

https://developer.nvidia.com/cuda-downloads (https://docs.nvidia.com/cuda/wsl-user-guide/index.html)

https://developer.nvidia.com/cudnn-downloads

다 설치를 한 후에 아래 방법을 하면 된다. 좀 더 간단하다..!

 

암튼 먼저 가상환경 부터 만들자! (Python 버전의 경우 Github에 나와있다.)

conda create -n csm python=3.10 -y

그 후 가상환경을 활성화 시킨다!

conda activate csm

그리고 csm github 레포를 다운한다. 그 후 csm 폴더로 접근한다. (이전 Windows와 다르게 csm 폴더에 있는 requirements.txt를 사용하여 다운하기 때문에 폴더 접근이 필요하다.)

git clone https://github.com/SesameAILabs/csm.git
cd csm

그 후 필요한 라이브러리를 설치해야한다.

pip install -r requirements.txt
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126

그리고 나는 torch는 따로 설치해줬다. 2.4.0으로 써도 되긴 하지만, 좀 찝찝해서 2.6.0으로 추가 설치했다.

암튼 이러면 WSL도 설치는 다 끝난다..

 

이제부턴 코드를 실행해볼 것이다! 다만 그 전에 HuggingFace에서 토큰을 발급받아야 해서 그것부터 해봐야 한다.

 

HuggingFace Token 발급

여기에서 필요한 2개의 llama 모델과 csm 모델을 다운받기 위해선 권한이 필요하기에 그 권한을 받은 계정으로 로그인을 해야한다. 로그인 방법은 Token을 발급해서 코드에서 쓸 수 있도록 하면 되는데 발급 방법은 간단하다.

 

https://huggingface.co/settings/tokens

 

Hugging Face – The AI community building the future.

 

huggingface.co

여기 링크로 접속을 한다.

그 후에

오른쪽 상단에 Create new token이라는 표시가 있을 것이다. 그걸 누른다.

 

그러면 다른 창으로 가지는데

이런 창이 보일 것이다. 이거는 딱히 필요없고.. Fine grained 바로 오른쪽에 Read 라는 버튼이 있다. 그걸 눌르면 된다.

 

그러면 이렇게 Token name 인 토큰 이름 적는게 나오는데 그냥 아무 이름 적으면 된다. 나는 간단히 하기 위해 그냥 "asd"로 입력했다. 그 후 아래에 Create token을 누른다.

 

그 후에는 토큰이 바로 나오는데, 알 수 없는 영어들이다. 그냥 그 오른쪽에 있는 Copy 버튼을 눌르면 토큰이 복사된다. 그렇게 가지고 있으면 된다. 만약에 까먹었으면 저 위에 링크 다시 가서 만들었던 토큰을 복사하면 된다.

 

이제 다 됬으니 바로 코드를 실행해보는걸로..!

 

코드 실행

코드 같은 경우 github에 적혀있지만.. 간단하게만 적어둬서 실행할려면 좀 python을 알아야 한다.

근데 뭐 그냥 아래 코드 복사하면 된다.

from huggingface_hub import hf_hub_download
from generator import load_csm_1b
import torchaudio
import os
import time

os.environ["HUGGING_FACE_HUB_TOKEN"] = "위에서 얻은 Token 그대로 이 문장 지우고 붙여넣기"

print("Model Loading...")
start_time = time.time()
model_path = hf_hub_download(repo_id="sesame/csm-1b", filename="ckpt.pt")
generator = load_csm_1b(model_path, "cuda")
print(f"Model Loading Complete: {time.time() - start_time:.2f}s")

print("Audio Generation Start...")
start_time = time.time()
audio = generator.generate(
    text="Hello from Sesame.",
    speaker=0,
    context=[],
    max_audio_length_ms=30_000,
)
print(f"Audio Generation Complete: {time.time() - start_time:.2f}s")

print("Audio Saving...")
start_time = time.time()
torchaudio.save("audio.wav", audio.unsqueeze(0).cpu(), generator.sample_rate)
print(f"Audio Saving Complete: {time.time() - start_time:.2f}s")

 

좀 더 쉽게 알 수 있게 시간도 측정할 수 있도록 추가했다.

그리고 출력하는건 한국어도 할 수 있지만.. 폼이 안나기에 영어로..

 

일단 우선 알아야 할 것이 있다.

이 코드는 반드시 아까 다운로드한 csm 레포 안에다가 파일을 생성하고 거기에 붙여서 실행해야한다.

이유는 이용해야하는 파일이 그 폴더에 있기 때문..

 

그리고 코드에 보면

audio = generator.generate(
    text="Hello from Sesame.",
    speaker=0,
    context=[],
    max_audio_length_ms=30_000,
)

이 부분이 제일 중요하다. 

text는 말 그대로 그냥 음성으로 바꿀 텍스트이고

speaker은 아마 말할 화자가 누구인가 일 텐데.. 이건 이후 다른 코드에서 쓰인다. 일단 위 코드는 간단하게 1명만 말하는 코드이기에 0으로 설정하면 된다.

context도 이후 다른 코드에서 쓰인다. 이것도 누구 화자인지에 대한 것을 설정할 때 쓰인다.

max_audio_length_ms 이게 가장 중요하다. 몇초를 만들게 할지이다. 내가 설정해놓은건 30초인데 그냥 앞에 2자리 숫자만 바꿔서 숫자를 늘리거나 줄이면 된다.

나는 문장도 길게 입력할 것이기에 적당히 늘려놓았다. (어차피 AI가 알아서 다 말하면 끊어버리기 때문에 그냥 길게 놓아도 상관은 없다.)

 

그리고 아까 복사했던 HuggingFace Token은 입력하라는 곳에 그대로 입력하면 된다.

그 후에 바로 실행해보면 된다..!

 

참고로 GPU는 6GB 이상은 필요하다. 그냥 적당히 8GB 이상은 되게 해야한다.

만약 그래픽카드가 부족하거나 없다면.. 그냥 CPU도 가능은 할 것이다. torch를 cpu 버전으로 깔았다면

 

암튼 실행!

/home/cheongpark/anaconda3/envs/csm/lib/python3.10/site-packages/pydub/utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
  warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
Model Loading...
ckpt path or config path does not exist! Downloading the model from the Hugging Face Hub...
Fetching 13 files: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████| 13/13 [00:00<00:00, 198276.19it/s]
Model Loading Complete: 12.54s
Audio Generation Start...
Audio Generation Complete: 4.94s
Audio Saving...
Audio Saving Complete: 0.01s

실행해보면 이렇게 영어가 이상하게 나오면서 정상적으로 실행이 된다..! 물론 이 전에 모델을 한번 다운 받고 실행하게 된다. 모델은 대충 6GB이다.. 만약 모델 다운 받을 때 다운 안되면 Token 제대로 발급 안했거나 Read로 발급 안했을 때 발생한다. 아니면 라이브러리 잘 못 깔았던지..

 

그리고 소리를 들어보면..

이렇게 잘 된다..!

 

그리고 목소리의 경우 실행할 때 마다 바뀐다.. 저건 뭔가 빵 먹으면서 말하는 것 같은데..

똑같은걸 다시 실행하면 이렇게 된다.

 

테스트 및 Windows와 WSL  속도 비교

한번 Windows와 WSL의 속도 차이를 비교해볼 것이다.

 

우선 내 컴퓨터 사양을 말하자면..

CPU : AMD 5900X

RAM : Samsung DDR4 32GB 3200

GPU : MSI RTX 3080 TI 

이다.

 

어차피 코드하고 GPU 이런거는 다 같기 때문에 소리는 거의 차이 없을 것이고.. 그냥 단순히 실행 속도를 비교한다면..

Windows

Model Loading...
Model Loading Complete: 16.23s
Audio Generation Start...
Audio Generation Complete: 7.19s
Audio Saving...
Audio Saving Complete: 0.00s
WSL

Model Loading...
Model Loading Complete: 13.42s
Audio Generation Start...
Audio Generation Complete: 4.84s
Audio Saving...
Audio Saving Complete: 0.01s

대충 이렇다. Windows가 살짝 더 느리다..

 

그리고 이번에는.. 아까 설정했던 text에 따로 ChatGPT 한테 말해서 생성한 문장을 넣고 max_audio_length_ms를 60_000으로 설정해서 실행해볼 것이다.

 

문장의 경우 아래 문장을 사용했다.

Hi, I’m Robi!

Nice to meet you!  
I’m Robi, a friendly robot designed to make life more fun and interactive.  

I can walk, talk, dance,  
and even understand your feelings!  
I respond to your voice and can have simple conversations with you.  

I’m made up of over 70 parts,  
and I was built step-by-step using a special magazine series.  
My design allows me to express emotions  
through my eyes and gestures,  
making me feel more lifelike.  

I’m powered by a sophisticated control board and motors  
that help me move smoothly.  
My speech recognition lets me understand commands,  
and I can even learn new things over time.  

I’m always ready to chat, play,  
and keep you company.  
Let’s have fun together!

참고로 문장 넣을 때는 "문장" 이렇게 쌍따옴표 한개로 하면 한줄로만 작성할 수가 있고..

'''문장''' 이렇게 따옴표를 3개씩 해두면 여러 줄에 걸쳐서 입력할 수 있다. 여러줄에 걸쳐서 입력하는게 좋긴 하다.

 

암튼 실행해보면!

Windows (파일 크기 : 4.15MB)

WSL (파일 크기 : 3.7MB)

이렇게 출력된다.

 

나는 추가로 여기에는 Seed를 설정을 따로 할 순 없지만.. 토치나 이런거는 가능하기에 그건 Seed를 설정했다. 그래서 음성은 그나마 비슷하나.. 다른 곳에선 Seed 영향을 안받는 것이 있을 것이기 때문에.. 위 오디오 처럼 약간만 비슷하다.

그 시드 설정을 안하면 아예 똑같은 느낌도 아니긴 하다..

암튼.. 생성이 잘 못 되었는지.. 음성이 조금 깨져서.. 별로긴 하다..

 

이것도 속도 비교를 해보면..

Windows

Model Loading...
Model Loading Complete: 22.65s
Audio Generation Start...
Audio Generation Complete: 149.14s
Audio Saving...
Audio Saving Complete: 0.04s
WSL

Model Loading...
Model Loading Complete: 15.53s
Audio Generation Start...
Audio Generation Complete: 115.58s
Audio Saving...
Audio Saving Complete: 0.01s

이렇게 확실하게 차이가 나는 것 같지만.. 파일 크기를 보면 다르기에.. WSL이나 Windows나 WSL이 좀 더 속도가 빠르긴 하지만 거의 비슷하다는 것을 알 수 있다. 30초 정도의 차이는 파일 크기에 비례하는걸로.. 생각하는걸로..

 

이것 외에 추가로 테스트 해보면 똑같은 문장을 생성을 잘 해본게 있는데..

 

이건 깔끔하게 잘 되었다..!

 

그리고 2번째 테스트!

2번째 코드

이 코드는 첨부만 하고 딱히 실행은 안해볼 것이다. 실행을 해보긴 했지만.. 좋긴 하나 실행하는 것에 어렵기도 하고.. 글 쓸 시간도 부족해서..

from huggingface_hub import hf_hub_download
from generator import load_csm_1b
from dataclasses import dataclass
import torch
import torchaudio
import os

@dataclass
class Segment:
    text: str
    speaker: int
    audio: torch.Tensor

os.environ["HUGGING_FACE_HUB_TOKEN"] = "위에서 얻은 Token 그대로 이 문장 지우고 붙여넣기"

model_path = hf_hub_download(repo_id="sesame/csm-1b", filename="ckpt.pt")
generator = load_csm_1b(model_path, "cuda")

speakers = [0, 1, 0, 0]
transcripts = [
    "Hey how are you doing.",
    "Pretty good, pretty good.",
    "I'm great.",
    "So happy to be speaking to you.",
]
audio_paths = [
    "utterance_0.wav",
    "utterance_1.wav",
    "utterance_2.wav",
    "utterance_3.wav",
]

def load_audio(audio_path):
    audio_tensor, sample_rate = torchaudio.load(audio_path)
    audio_tensor = torchaudio.functional.resample(
        audio_tensor.squeeze(0), orig_freq=sample_rate, new_freq=generator.sample_rate
    )
    return audio_tensor

segments = [
    Segment(text=transcript, speaker=speaker, audio=load_audio(audio_path))
    for transcript, speaker, audio_path in zip(transcripts, speakers, audio_paths)
]
audio = generator.generate(
    text="Me too, this is some cool stuff huh?",
    speaker=1,
    context=segments,
    max_audio_length_ms=30_000,
)

torchaudio.save("audio.wav", audio.unsqueeze(0).cpu(), generator.sample_rate)

 

이번엔 이런 코드이다. 이 코드를 간략하게 설명하자면.. 이전 대화들의 억양, 목소리, 흐름, 등등을 파악해서 그 목소리를 구현하는 것이다.

 

코드를 보면 알 수 있는데..

speakers = [0, 1, 0, 0]
transcripts = [
    "Hey how are you doing.",
    "Pretty good, pretty good.",
    "I'm great.",
    "So happy to be speaking to you.",
]
audio_paths = [
    "utterance_0.wav",
    "utterance_1.wav",
    "utterance_2.wav",
    "utterance_3.wav",
]

여기에서 speakers에 있는 것이 위에 잠시 말했던.. speaker인 누가 말하는 화자인지.. 여기에서는 1번이 AI 화자 인 것이다.

그리고 transcripts는 대화 들인데..

간단하게 정리를 해보면

  • 대화 : "Hey how are you doing.", 파일 이름 : "utterance_0.wav", 화자 ID : 0
  • 대화 : "Pretty good, pretty good.", 파일 이름 : "utterance_1.wav", 화자 ID : 1
  • 대화 : "I'm great.", 파일 이름 : "utterance_2.wav", 화자 ID : 0
  • 대화 : "So happy to be speaking to you.", 파일 이름 : "utterance_3.wav", 화자 ID : 0

이렇게 정리할 수 있고.. 이게 편하게 알 수 있을 것이다.

이걸 나중에 생성할 때 아까 위에서 설정한 speaker를 1로 설정하고 실행하게 되는데.. 그렇게 하면 이전 대화에 화자 ID의 1번 목소리를 복사해서 흐름에 맞춰 자연스럽게 말하게 된다.

 

audio = generator.generate(
    text="Me too, this is some cool stuff huh?",
    speaker=1,
    context=segments,
    max_audio_length_ms=30_000,
)

여기에서 보이는 것 처럼 위에 대화에 따라서 다음 말할 것을 지정해주고.. 몇번 ID의 화자를 복사할 것인지 설정을 해주고 이전 대화 목록들을 저장한 segments를 지정하고 초를 지정해주면 되는데.. 아마 실행이 안될 것이다.

이유는 audio_paths에 진짜 음성 파일이 없기 때문이다..

그래서 음성을 만들거나.. 아니면 직접 목소리를 녹음해서 해보면 된다..

 

(글 쓸 시간이 부족해서.. 따로 해본것은 적지 않겠다. 직접 해보시길..!)

 

암튼 그렇다.

 

결론

위에서 예시를 봤듯이..

이건 데모 처럼 실시간 음성 대화 모델은 아닌 것 같다..

 

아직 모델이 1B 밖에 풀리지 않았고 추가적인 코드가 풀리지 않았기에.. 바로 말하기는 어렵지만..

현재 공개된 코드에서는.. 음성 대화 모델은 아닌 느낌이다..

 

솔직히 그냥 TTS 모델 같다.

그냥 대화를 지정하고 그것에 맞춰서 말하게 하는 Zero Shot TTS 모델으로 생각된다.

이런 TTS 모델은 이미 다른 곳에서도 개발되고 연구되었기에.. 실시간 음성 대화 모델이 공개로 풀리지 않는 이상..

이 모델을 사용해야하는 이유는 딱히 없다고 생각된다..

그리고 일반 GPU에서 이정도 속도이면.. 너무 느리기도 하고..

 

암튼.. 이번 모델은 약간 아쉽다..

 

암튼 그렇다.

그리고 모델 크기는 크기 때문에 한번 사용하고 나면 지우는걸 추천한다. (컴퓨터 용량 크면 딱히 상관은 없지만..)

기본 모델 설치 경로는 아래로 가면 된다.

  • Windows : C:\Users\<컴퓨터이름>\.cache\huggingface\hub
  • WSL : /home/<컴퓨터이름>/.cache/huggingface/hub

저거 폴더 그냥 지우면 된다.

 

암튼 끝!

반응형
반응형

빠르게 사용하기 위해 제작된 글 입니다! 제대로 된 설치나 실행코드가 아닐 수 있습니다!

일단 이것을 도전한다면 아나콘다나 미니콘다는 설치해주세요.

설치 안해도 되지만 관리하기가 편하기 때문에 설치하는 것이 좋습니다!

 

속도 테스트 영상 (제가 찍었습니다.)

 

SDXL Turbo란

2023년 11월 28일.. 바로 이 글을 쓰는 2일전에 나온 것이 SDXL Turbo입니다.. ㄷㄷ

원리나 자세한 것은 잘 모르지만 보통 Stable Diffusion으로 이미지를 만들 때 step 수를 늘려서 20~50 정도로 스텝을 반복하면서 이미지를 만듭니다. 그런데 SDXL Turbo는 이런 스텝 없이 한번의 스텝으로 이미지를 완성한다는 것이죠..

 

일반 Stable Diffusion은 이미지에 노이즈가 잔뜩 끼어있는데.. 이러지 않고 바로 완성된 이미지를 생성한다는 것.. 엄청난 기술..!

https://stability.ai/news/stability-ai-sdxl-turbo

 

Introducing SDXL Turbo: A Real-Time Text-to-Image Generation Model — Stability AI

SDXL Turbo is a new text-to-image mode based on a novel distillation technique called Adversarial Diffusion Distillation (ADD), enabling the model to create image outputs in a single step and generate real-time text-to-image outputs while maintaining high

stability.ai

아무튼 이런 SDXL Turbo를 직접 컴퓨터에서 돌려볼 수도 있도록 오픈소스로 풀렸기 때문에 바로 사용해봅시다!

기본적으로 모든 방법은 이 링크 아래에 있습니다.

https://huggingface.co/stabilityai/sdxl-turbo

 

stabilityai/sdxl-turbo · Hugging Face

Inference API has been turned off for this model.

huggingface.co

 

1. 가상환경 만들기

일단 가상환경을 만들겠습니다.

Anaconda Prompt를 열어주고 아래 명령어를 입력해주세요!

conda create -n SDXLTurbo python=3.10 -y

이렇게 하면 자동으로 가상환경을 만들어지게 됩니다.

여기에서 제가 따로 테스트 했을 때 파이썬 3.10 버전에서도 됬기 때문에 3.10으로 했습니다.

 

그 후에 만들어진 가상환경을 활성화 시킵니다.

conda activate SDXLTurbo

이렇게 하면 가상환경이 활성화 되면서 커맨드 창의 왼쪽에 (base) 가 (SDXLTurbo)로 바뀌었을 겁니다!

 

2. 라이브러리 설치

이제 라이브러리를 설치해야합니다!

일단 GPU를 사용할 것이기 때문에 Pytorch를 설치하고 나머지는 제공되는 것을 설치할 것입니다. 

https://pytorch.org/get-started/locally/

 

Start Locally

Start Locally

pytorch.org

일단 여기에 가서 자신의 OS, 자신의 CUDA 버전에 맞춰 명령어를 만든 후에 이걸 입력해서 설치해줍시다!

저의 경우 아래 처럼 나왔기 때문에 아래 명령어로 설치했습니다. (설치할 때 kaggle 뭐라면서 빨간색 뜨는건.. 아마 무시해도 될겁니다..;;)

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

 

설치가 완료 되었다면 2번째로 이미지 생성에 필요한 라이브러리를 설치해줘야 합니다! 설치 명령어는 허깅페이스에도 나와있습니다.

아래 명령어로 설치해주시면 됩니다.

pip install diffusers transformers accelerate --upgrade

 

설치가 되었다면 모든 준비는 끝났습니다!

 

3. 코드 입력 및 실행

여기에서 실행하는건 2가지 방법이 있습니다.

첫번째 방법은 커맨드 창에 python을 적고 엔터 눌른 후에 아래에 적힌 코드를 입력해서 실행하는 방법이 있지만 이건 제대로 확인하기도 어렵고 좀 별로인 방법이기 때문에 두번째 방법으로 하겠습니다.

두번째 방법은 

일단 Visual Studio Code를 엽니다!

그 후 프로젝트 폴더를 생성한 후에 그 안에 main.py든 아무 파이썬 파일을 생성합니다.

그리고 main.py를 열고 그 아래 

대충 이런 느낌의 하단 바가 있을겁니다. 여기에서 3.11.2 64-bit 쪽의 버튼을 클릭합니다. (버튼의 버전 등은 다를 수 있습니다.)

그러면 인터프리터 선택창이 나오는데 여기에서 아래와 비슷한 것을 찾아 선택합니다.

만약 없다면 오른쪽 상단의 새로고침이나 Visual Studio Code를 종료했다가 다시 열어보세요!

 

그 후에 아래 코드를 입력합니다. (아래 코드는 원본 코드에서 조금 변화 시켰습니다. 시간 측정 코드, 무한 입력 코드, 이미지 저장 코드 들을 추가했습니다.)

from diffusers import AutoPipelineForText2Image
from torchvision.transforms.functional import to_pil_image
from torchvision.transforms import ToTensor
import torch
import time

pipe = AutoPipelineForText2Image.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float16, variant="fp16")
pipe.to("cuda")

while True: # 반복
    prompt = input("prompt: ") # 프롬프트 입력

    start_time = time.time() # 시간 측정 1
    image = pipe(prompt=prompt, num_inference_steps=1, guidance_scale=0.0).images[0] # 이미지 제작
    end_time = time.time() # 시간 측정 2

    # 이미지 저장을 위해 PIL 이미지로 변환
    tensor_image = ToTensor()(image)
    image = to_pil_image(tensor_image)

    print(f"제작된 시간: {round((end_time - start_time) * 1000, 2)}ms") # 측정된 시간 출력 밀리초로
    image.save("image.jpg") # 이미지 저장

그 후에 Ctrl + Shift + ` 를 동시에 눌러서 새 터미널을 엽니다. 

그리고 python main.py를 입력해서 실행합니다! main.py 말고 다른 이름으로 해주었다면 그 이름으로!

 

아무튼 그러면 실행이 되고 자동으로

C:\Users\<컴퓨터 이름>\.cache\huggingface\hub

위 경로 안에 필요한 SDXL Turbo 모델을 다운로드 하게 됩니다. 약 6.46GB입니다.

 

모든 것이 정상적으로 설치되었다면 아래 처럼 뜰 것입니다. (prompt: )

그 후에 원하는 프롬프트를 입력해서 이미지를 생성합니다. 이미지는 현재 프로젝트 파일의 image.jpg에 생성됩니다.

이미지는 한번 생성하고 또 생성하면 이미지가 변경됨으로 마음에 드는 사진이 있다면 만든 후에 백업해야 합니다!

 

나머지

이미지를 생성할 때 한번은 2~10초 정도 느리게 생성됩니다. 이건 아마 모델의 최초 로드 하고 연관이 있는 것 같습니다.

그 후에는 제 컴퓨터 기준으로 (RTX 3080TI) 약 0.2초 만에 생성이 됩니다.

 

암튼 잘 되네요! 다만 상업적이용이 아직은 불가하므로 주의해주세요!

반응형
반응형

오늘 학교에서 머신러닝 과목으로 첫 인공지능을 배웠습니다!

K-최근접 이웃(K-Neighbors Classifier) 알고리즘은 여러 데이터에서 가장 가까운 k개의 이웃을 찾아 다수결로 분류하는 방식의 알고리즘입니다.(아마)

 

어쨋든!

학교에서 수업한 내용은 파이썬으로 되어있지만.. 파이썬은 여러 라이브러리를 통해 쉽게 할 수 있기 때문에.. 이해가 잘 안되는 것 들도 많았습니다..

그래서 최대한 이해하고자 라이브러리가 별로 없는 C++로 진행하고 싶어 만들어봤습니다!

 

Matplotlib을 통해 표시한 그래프
C++ 콘솔 창으로 만든 그래프

일단 하기전에.. 원래는 그래프로 직접 보기 위해 Matplotlib C++를 가져올려 했으나.. 버전이 너무 오래 되어 불가능 했습니다.. 그래서 직접 만들고자 했지만.. 함수화 하는 과정에서 너무 어려워져 제쳐두었습니다. 위 사진은 시도한 흔적입니다.

 

아래 데이터셋을 이용!

bream_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 
                31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 
                35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0]
bream_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 
                500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 
                700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0]
smelt_length = [9.8, 10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0] 
smelt_weight = [6.7, 7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]

 

설명을 딱히 하긴 어렵지만.. 일단 구현이 안된건 score()입니다.. 어떤 식으로 구현해야할지 감이 안잡혀서.. 하하;;

 

어쨌든 아래 코드를 오늘 수업한 내용 과정 그대로 C++로 옮겨보았습니다! 2개의 데이터와 1개의 정답으로 벡터를 만들어 2개의 데이터와 예측 데이터로 유클리드 거리를 사용해서 거리 값을 구해 k개의 가까운 거리 값을 뽑아 어떤 것이 더 큰지 찾는 코드입니다!

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

//거리 기준으로 오름차순 정렬을 하기 위한거
bool cmp(vector<double> x, vector<double> y) {
	return x[3] < y[3];
}

int main() {
	//데이터 정의
	vector<double> bream_length = { 
		25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0,
		31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0,
		35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0 
	};
	vector<double> bream_weight = {
		242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0,
		500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0,
		700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0 
	};
	
	vector<double> smelt_length = {
		9.8, 10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0
	};
	vector<double> smelt_weight = {
		6.7, 7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9
	};

	vector<double> length, weight;

	//bream과 smelt 데이터를 나란히 이어 붙이는 코드
	length.insert(length.end(), bream_length.begin(), bream_length.end());
	length.insert(length.end(), smelt_length.begin(), smelt_length.end());

	weight.insert(weight.end(), bream_weight.begin(), bream_weight.end());
	weight.insert(weight.end(), smelt_weight.begin(), smelt_weight.end());

	//length와 weight 데이터를 하나의 자료형에 때려 박는거
	vector<vector<double>> fish_data;
	
	for (int i = 0; i < length.size(); i++)
		fish_data.push_back({ length[i], weight[i] });

	//확인용
	if(0) 
		for (int i = 0; i < length.size(); i++)
			cout << fish_data[i][0] << "\t" << fish_data[i][1] << endl;

	//정답 데이터 생성
	vector<int> fish_target;
	for (int i = 0; i < bream_length.size(); i++) fish_target.push_back(1);
	for (int i = 0; i < smelt_length.size(); i++) fish_target.push_back(0);

	//확인용
	if (0)
		for (int i = 0; i < fish_target.size(); i++)
			cout << fish_target[i] << " ";

	//kn 모델 정의(그냥 데이터와 정답데이터 붙이는거임)
	int k = 5;
	vector<vector<double>> kn;
	for (int i = 0; i < fish_data.size(); i++)
		kn.push_back({ fish_data[i][0], fish_data[i][1], double(fish_target[i]) });

	//확인용
	if (0)
		for (int i = 0; i < length.size(); i++)
			cout << kn[i][0] << "\t" << kn[i][1] << "\t" << kn[i][2] << endl;

	//예측
	//30, 600으로
	double p1 = 30, p2 = 600;
	
	//유클리드 거리 공식을 이용해서 거리를 구하고 kn벡터에 삽입하고 거리 기준으로 정렬하여 상위 k개를 뽑아서 누가 더 큰지 비교한다.
	for (int i = 0; i < kn.size(); i++)
		kn[i].push_back(sqrt(pow((kn[i][0] - p1), 2) + pow((kn[i][1] - p2),2)));
	
	sort(kn.begin(), kn.end(), cmp);

	//확인용
	if (true)
		for (int i = 0; i < length.size(); i++)
			cout << kn[i][0] << "\t" << kn[i][1] << "\t" << kn[i][2] << "\t" << kn[i][3] << endl;

	int bream_c = 0, smelt_c = 0;
	for (int i = 0; i < k; i++) {
		(kn[i][2] == 1 ? bream_c++ : smelt_c++);
	}

	cout << (bream_c > smelt_c ? "이건 bream임" : "이건 smelt임") << endl;
}

위 코드를 실행한 결과

암튼 끝!

반응형
반응형

https://cheongpark.tistory.com/33

 

마인크래프트 인공지능(Minecraft AI) 플레이 시켜보기 Pt. 3 설치

https://cheongpark.tistory.com/32 마인크래프트 인공지능(Minecraft AI) 플레이 시켜보기 Pt. 2 설치 https://cheongpark.tistory.com/31 마인크래프트 인공지능(Minecraft AI) 플레이 시켜보기 Pt. 1 분석 이 글을 쓰기 전에

cheongpark.tistory.com

이전 글과 연결됩니다.

 

이제 제일 중요한 실행을 해볼 것인데..

모델을 학습시키는건 아직 해보지 않았기 때문에 학습 해본다면 그때 글을 쓸 것 같고.. 일단 실행만 해볼 것이다!

 

일단 실행하기 전에 MineRL에 아쉬운 점이 몇가지 있다..

NEURO SAMA의 영상을 보면 실제 개발자하고 주변에서 같이 있거나 여러가지 채팅창으로 무언가를 말한다..

근데 문제는 MineRL 1.0은 사용자와 상호작용이 불가능하다. 즉 인공지능과 함께 자신의 마인크래프트로 플레이가 불가능 하다는 것.. 근데 MineRL 0.4 버전은 가능하다는데.. 문제는 VPT가 MineRL 0.4 버전을 지원을 하지 않는다.. 그래서 첫번째 글에서는 VPT로 추정되지만 다른 버전인 것 같다고도 생각이 드는데.. MineRL 폴더를 뜯어보는 중 상호작용에 관한 파일도 있긴 했다..

그래서 어느정도 잘 건들여보면 1.0.0으로도 상호작용은 가능할 수도 있을 것 같다라는 생각이 든다..

 

또 다른 아쉬운점은 첫번째 글에서도 말했던 거지만.. 해상도와 버전에 제한이 있다..

위 업데이트 된 것을 보면 1.0은 무조건 16.5 버전에서만 작동이 되고 해상도는 640 * 360에서만 고정된다는 것이다.. 더 줄이거나 늘리는건 어떻게 하는진 모르겠지만.. 일단 힘들다 라는건 알 수 있을 것 같다..

 

그리고 아직 제대로 해보지 않아 잘은 모르지만.. 내가 원하는 월드(평지, 건축물)은 커스텀으로 가져올 수가 없다는 것이다..

또한 모드도 지원 안한다는 것..

MineRL 개발자 말로는 커스텀 월드나 모드 같은건 해킹을 하거나 여러가지 방법을 써야 가능할수도 있다고는 한다..

근데 한가지 가능한건 시드는 직접 변경은 가능하다..

(근데 난 파쿠르를 가르켜 보고 싶었는데..)

 

모델 부터 다운해보자!

https://github.com/openai/Video-Pre-Training

 

GitHub - openai/Video-Pre-Training: Video PreTraining (VPT): Learning to Act by Watching Unlabeled Online Videos

Video PreTraining (VPT): Learning to Act by Watching Unlabeled Online Videos - GitHub - openai/Video-Pre-Training: Video PreTraining (VPT): Learning to Act by Watching Unlabeled Online Videos

github.com

일단 이 곳으로 가면 직접 학습 시킬 수 있는 파일이나 이미 학습된 모델 파일들이 있다. 설명 아래에

거기에서 다운을 하면 된다! 속도는 느리지만..

 

일단 가보면 Agent Model Zoo 이런 항목 아래에 여러가지 파일들을 다운받으라고 안내하는데..

자신이 쓰면 될 것 같은 파일만 다운로드 하면 된다.. 일단 model 파일과 weights 파일 2가지를 다운받아야 하는데..

2x 나 3x 그런걸 통일해서 다운 받으면 될 것 같다.

그래서 영어 번역하면서 자신한테 필요할 것 같은 것으로 다운받고 나는 최종적으로

2x.model 파일과 rl-from-house-2x.weights 파일을 다운받았다..

 

다운로드 했으면 바로 여기에 있는 글 처럼 파일을 배치하면 된다.. 뭐 안해도 상관은 없지만..

이런식으로.. 나는 좀더 쉽게 관리하기 위해서 이렇게 하는 거지만 직접 원하는대로 배치하면 되긴 한다.. 그렇지만 그렇게 되면 아래 명령어 경로는 약간 변경해야한다는 점!

 

2번째 글에서 가상환경을 활성화 했지만.. 다시 적어보면..

만들었던 폴더의 이름 부분을 클릭하고 거기에서 cmd를 적고 엔터!

그러면 그 폴더를 접속한 터미널 창이 나오는데 거기에서 이전 글에서 만들었던 가상환경을 활성화 해준다.

conda env list

만약 이름을 까먹었다면 위 명령어로 어떤 가상환경이 있는지 검색하고 그 가상환경 이름으로 아래 명령어로 활성화 하면 될 것 같다!

conda activate MineRL_VPT

여기에서 가상환경 이름은 자신이 만들었던 가상환경 이름으로 해야한다는 점!

 

그러면 이제 여기에서 run_agent.py를 실행하면서 파라미터에 모델을 넣으면 되는데

규칙은 이렇다

python "./Video-Pre-Training/run_agent.py" --model "model 파일 경로.model" --weights "weights 파일 경로.weights"

대충 설명하자면 .은 자기 경로에서 시작한다는? 그런거고 / 이건 뭐 알테고.. 어쨌든 그렇게 해서 자신의 폴더 위치에서 이전에 설치했던 Video-Pre-Training 폴더로 찾아가서 run_agent.py를 실행하는데 파라미터로 model과 weights를 경로로 넣어준다는 것! " " <-- 이건 혹시라도 띄어쓰기가 있으면 안될 수도 있으니..

 

그래서 위 규칙에 맞게 내 기준으로 명령어를 만든다면

python "./Video-Pre-Training/run_agent.py" --model "2x.model" --weights "rl-from-house-2x.weights"

이렇게 적으면 된다..!

 

만약 가상환경을 제대로 활성화 시킨 터미널 창에서 정확히 run_agent.py를 실행하면서 파라미터로 model 파일과 weights 파일을 제대로 넣어줬다면 아래처럼 정상적으로 실행이 가능할 것이다!

---Loading model---
---Launching MineRL enviroment (be patient)---
C:\Users\user\anaconda3\envs\MineRL_VPT\lib\runpy.py:127: RuntimeWarning: 'minerl.utils.process_watcher' found in sys.modules after import of package 'minerl.utils', but prior to execution of 'minerl.utils.process_watcher'; this may result in unpredictable behaviour
  warn(RuntimeWarning(msg))
C:\Users\user\anaconda3\envs\MineRL_VPT\lib\runpy.py:127: RuntimeWarning: 'daemoniker._daemonize_windows' found in sys.modules after import of package 'daemoniker', but prior to execution of 'daemoniker._daemonize_windows'; this may result in unpredictable behaviour
  warn(RuntimeWarning(msg))

모델 파일을 불러오고 환경을 실행하고 하면서 되는데 아마 윈도우 같은 경우 RuntimeWarning이 뜰 것이다..

이건 그냥 무시해도 상관없다..

확실하진 않지만 윈도우여서 뜨는 것 같다..

 

https://youtu.be/efnCUsNvxyQ

그렇게 되면 MineRL Render이라는 창으로 자기 혼자서 마인크래프트를 한다.. (신기방기 신기방기)

이 인공지능은 영상으로만 학습을 하기 때문에 실제 플레이어가 하는 짓들을 유사하게 따라한다. 대충 메뉴 창에서 멍때리기 같은거..

 

그리고 만약 정상적으로 켜졌는데 제대로 작동 안하고 일도 제대로 안하는 것 같다면 weights 파일을 다른걸로 다운 받아보는 것을 추천! 일단 난 잘된다..!

 

이전에 할때 가끔 플레이하다가 오류가 뜨긴 했었는데.. 8GB 뭐 말하면서.. 이런건 아마 GPU 메모리나 램이 거의 꽉 차서 안되는 것일꺼다.. 왜 컴퓨터를 혹사시키고 있는데도.. 이 오류가 뜨지 않는 이유는 모르겠지만.. 플레이하다 오류가 난다면 메모리나 GPU 메모리를 확장시켜보는 것이 좋을 것 같다는 것..!

 

암튼 머 그러면 이제 끝!

반응형
반응형

https://cheongpark.tistory.com/32

 

마인크래프트 인공지능(Minecraft AI) 플레이 시켜보기 Pt. 2 설치

https://cheongpark.tistory.com/31 마인크래프트 인공지능(Minecraft AI) 플레이 시켜보기 Pt. 1 분석 이 글을 쓰기 전에 미리 해본 영상입니다! https://youtu.be/efnCUsNvxyQ 궁금증 내가 마인크래프트 인공지능이 있

cheongpark.tistory.com

이전 글과 바로 이어집니다!

 

추가적으로 필요한 라이브러리 설치

일단 추가적으로 필요한 라이브러리들이 있기 때문에 설치할 것을 보자!

우리는 여기에서 "run_agent.py"를 실행할 것이기 때문에 필요한 라이브러리들을 보기 위해 실행해봐야함!

 

일단 이전 글과 바로 연결해서 본다면 run_agent.py는 다른 폴더에 있기 때문에 그곳으로 이동해야 한다! 이 글과 같은 방법으로 폴더를 만들었다면 아래 명령어를 실행하고 좀 다르면 그것대로 하시길! 어쨌든 아까 다운로드 했던 "Video-Pre-Training"  이 폴더로 접속해야 한다는 것!

 

가상환경이 활성화 되어있는 상태에서 아래 명령어를 실행!

cd "..\Video-Pre-Training"

(..은 뒤로 가는 것)

 

그 후 일단 테스트로 실행해보자! 일단 여기에서 인공지능 모델은 이 다음 글에서 실행할 것이기 때문에 먼저 "run_agent.py"부터 테스트로 실행해보는 것! 원래는 이 뒤에 여러가지 파라미터를 넣어야 함..

python run_agent.py

일단 실행해보니 처음에 뜨는 오류는 이거였다..

AttributeError: module 'numpy' has no attribute 'bool'.
`np.bool` was a deprecated alias for the builtin `bool`. To avoid this error in existing code, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
    https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations

대충 더 이상 numpy에서 bool 속성이 안쓰인다는 것 같은데..

분명 저번에는 이런 오류가 안떴었는데.. 뜨는거 보니 허허

지인짜 이 글을 쓰는 최근에 Numpy에서 여러가지 intfloat 등등 어떤 문제점으로 삭제했다고 하는데.. 이게 그대로 깔리면서 문제가 일어났던거 였다..

 

해결 방법은 간단하다! Numpy를 다운그레이드 해서 설치하면 된다!

pip install "numpy<1.24"

이렇게 하면 일단 첫번째 오류는 끝이다!

 

또 다시 run_agent.py를 실행해보자!

ModuleNotFoundError: No module named 'torch'

이번엔 이런 오류가 떴다..

torch.. PyTorch인건데.. 여기에서 조금 어려워진다..

일단 내 컴퓨터가 고사양 인데도 GPU를 연결했어도 실행할 때 약간씩 렉이 있다.. 그래서 무조건 CPU로만 하는건 어렵다고 생각되긴 하는데.. 일단 PyTorch를 설치할 때 CPUGPU 2가지 버전으로 설치할 수 있다.

CPU 버전으로 하면 그냥 CPU만 사용하고 GPU 하면 GPU하고 CPU 같이 사용할 것 같은데.. 뭐 암튼

 

일단 모르겠고 설치해보자! 난 GPU 버전을 설치할 것이기 때문에.. 만약 CPU 버전을 설치한다면.. 추천은 안한다는 점..

이제 설치할 버전이 중요한데.. 이전 글에서 준비하는 것에 CUDA가 있었다. CUDA를 설치했다면 계속 글을 읽으면 되지만 설치 안했다면 설치하고.. 다시 보세요..

 

일단 CUDA의 버전을 확인하기 위해 아래의 명령어를 친다!

nvcc --version

이 명령어를 치면 현재 내 컴퓨터에 깔린 CUDA 버전이 나오는데..

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_May__3_19:41:42_Pacific_Daylight_Time_2021
Cuda compilation tools, release 11.3, V11.3.109
Build cuda_11.3.r11.3/compiler.29920130_0

뭐.. 대충 11.3이라고 한다..

이제 CUDA11.3이라는 것을 확인했으니 PyTorch를 설치하러!

https://pytorch.org/get-started/previous-versions/

이 링크로 들어가면 PyTorch 설치 버전들이 엄청 나온다.. 여기에서 검색으로 11.3을 검색!

그렇게 되면 Conda 버전과 Wheel 버전이 있는데 이건 설치 방법? 같은 것이다.. 아나콘다로 설치할지 pip으로 설치할지.. 하지만 PyTorch는 내가 깔아봤을 때 아나콘다가 더 잘 깔리고 적용도 잘되기 때문에 아나콘다 버전으로 설치할 것임!

 

그래서 1.12.1 버전에 있는 것중 CUDA 11.3 으로 되어있는 것을 찾았다.

conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch -y

*위 명령어를 따라 쓰면 안되고 무조건 자신의 컴퓨터에 맞춰서 설치해야 합니다!!

-y는 중간에 확인 과정 없이 바로 넘기기 위해 직접 추가한 것입니다!

 

이제 가상환경이 활성화 되어있는 아나콘다 터미널 창에서 실행한다. 그러면 정상적으로 깔리는데.. 만약 오류가 있으면 문제점을 찾아보기를..

 

어쨌든 다시 run_agent.py를 실행해본다!

ModuleNotFoundError: No module named 'gym3'

이번엔 gym3가 없다한다..얘는 설치하기 쉽다.

그냥

pip install gym3

이거 입력하면 바로 설치된다.

 

그러면 다시 run_agent.py를 실행!

ModuleNotFoundError: No module named 'attr'

이번엔 attr이 없다 한다..! 근데 한가지 여기서 속지말아야 할 것이 있다!

신기하게 저걸 설치해보면 일단 attr이 없다면서 안된다..

이유는 attrattrs 이 2가지 존재하는데.. attrs를 설치해야한다.. 하하하하

한가지만 있어주지..

 

아래 명령어로 해결 가능!

pip install attrs

 

!! 이제 이 글로 여기까지 따라왔으면 아래 같은 메세지가 뜬다!

usage: Run pretrained models on MineRL environment [-h] --weights WEIGHTS --model MODEL
Run pretrained models on MineRL environment: error: the following arguments are required: --weights, --model

이건 이제 모든 것이 다 깔렸다는 뜻이다!

 

이제부턴 인공지능 모델 파일들을 같이 제공해달라는건데 이건 다음 Pt에서 말하겠음요!

반응형
반응형

https://cheongpark.tistory.com/31

 

마인크래프트 인공지능(Minecraft AI) 플레이 시켜보기 Pt. 1 분석

이 글을 쓰기 전에 미리 해본 영상입니다! https://youtu.be/efnCUsNvxyQ 궁금증 내가 마인크래프트 인공지능이 있다는 것은.. https://youtu.be/L4nfzJx7uDI 이 영상으로 부터 알게 되었었다.. 굉장히 신기한 영

cheongpark.tistory.com

이전글은 여기!

 

일단 이전 글에서 말했던 대로 여기부턴 설치 단계!

일단 여기에선 윈도우 10을 사용할 것이기 때문에.. 다른 윈도우 버전은 될 수 있으니 다른 운영체재는 이 글로 바로 될지는 모릅니다!

 

미리 준비할 것

아나콘다(Anaconda)

쿠다(CUDA) 

위 2개는 이곳을 참고하여 설치해주세요. (https://cheongpark.tistory.com/6)

깃(Git) (필수 O)

WSL (필수 O) --제일 중요하지만 설치가 어렵기 때문에 설치 방법은 여기서 알려주지 않습니다.

Visual Studio Code(필수 X)

 

필요한 파일들 다운로드

일단 먼저 폴더를 생성하겠습니다! 여기에서 모든 파일들을 관리할꺼니 이름은 각자 알아서!

새 폴더 만들기로 생성해도 되고.. 전 그냥 명령어로! (간지)

mkdir MineRL_VPT_Blog

그리고 필요한 파일들을 설치하겠습니다!

그냥 깃허브 가서 짚 파일 다운받아서 압축 풀어서 넣어도 되지만 귀찮으니 명령어로 합니다!

 

위에 폴더 주소? 그걸 클린 한 후 cmd 적고 엔터!

그렇게 되면 해당 폴더를 접속한 상태에서 cmd를 실행하게 되는데 여기에서 필요한 명령어는!

git clone https://github.com/openai/Video-Pre-Training
git clone https://github.com/minerllabs/minerl

(첫번째 명령어의 해당 깃허브 주소로 들어가보면 어떻게 모델을 실행하는지 방법이 나와있는데.. 여기에서 보면 이 깃허브 파일을 다운하라고는 안나오지만.. run_agent.py를 실행하려면 저 파일들이 필요하기 때문에.. 다운을 해야하는 것..)

가상환경 만들기

이제 Anaconda Prompt를 실행합니다! (단 실행할 땐 관리자 권한으로 실행해주세요! 나중에 MineRL를 설치하는 과정에서 오류가 뜹니다..)

이제 가상환경을 만들 것인데.. 문제는 나도 아직 정확하게 여기에 사용되는 권장 파이썬 버전은 모른다는 것..

하지만 일단 제가 됬었던 파이썬 버전은 3.9 아마 다른 버전들도 될 것입니다..

일단 여기에선 3.9 버전으로 가상환경을 만듭니다!

conda create -n MineRL_VPT python=3.9 -y

여기에서 -n 뒤에 이름은 가상환경의 이름, python=3.9에서 3.9는 사용할 파이썬 버전, -y는 설치할 때 설치할지 묻는 단계가 나오는데 바로 설치하게 해주는 명령어!

 

설치하는데 오류가 없었다면 이것이 출력되는데 여기에서 가상환경을 이용하여 라이브러리를 설치할 것이기 때문에 아래 명령어를 실행합니다!

conda activate MineRL_VPT

activate 뒤에 나오는 이름은 자신이 만들었던 가상 환경 이름으로 하셔야 되요!

 

활성화가 되면 커맨드 창 맨 앞이 원래는 (base)인데 (가상환경이름)으로 변했을 겁니다!

MineRL 1.0.0 설치

그리고 여기에서 https://github.com/openai/Video-Pre-Training 이곳에 있는 Running agent models에 나와있는 명령어를 실행해주면 되는데.. 문제는 첫번째 명령어가 정상적으로 동작하지 않는 다는 거다.. (잘 되면 패스해도 됩니다.)

pip install git+https://github.com/minerllabs/minerl@v1.0.0
pip install -r requirements.txt

이유는 "pip install git+https://github.com/minerllabs/minerl@v1.0.0" 이 명령어를 실행하면 MineRL V1.0에 있는 깃허브의 setup.py를 실행해서 설치하게 되는데.. 그 파일을 실행하면서 아래 오류가 발생하기 때문..

일단 오류를 살펴보면 첫번째는 WSL를 사용해야 한다는 것 같고.. 두번째는 bash 뭐가 되야한다고 하는 것 같다.

https://minerl.readthedocs.io/en/latest/tutorials/index.html

설치 가이드에서도 2번에서 WSL이 권장된다 하고 있다.. 그러므로 나도 WSL를 사용할 것이다! WSL 말고 다른 방법은 계속 되는 오류로 해결하기 어려웠지만.. (만약 1.0.0 말고 0.4.0이나 0.3.0 버전의 MineRL를 사용한다면 WSL 없이 바로 설치가 가능하다.. 하지만 VPT1.0.0이 필수적으로 필요하기 때문에 WSL를 사용한다.)

 

일단 준비단계에서 WSL은 필요하다 말했기 때문에 WSL를 실행합니다!

Ubuntu(WSL) 실행! 이 글에선 "Ubuntu 20.04.5 LTS" 이 버전을 사용합니다!

 

우분투를 실행하고 다시 아까 "pip install git+https://github.com/minerllabs/minerl@v1.0.0" 이 명령어를 실행해주면 이번엔 아마 다른 오류가 뜰겁니다!

대충 java, javac 커맨드를 찾을 수 없다는 것인데.. 이 이유는 JDK 8이 설치가 안되어 있기 때문입니다!

MineRL 깃허브를 보면 무조건 JDK 8이 필요하다고 설명 되어있어요!

 

그렇기 때문에 마지막 줄에 있는 명령어를 입력해봅시다!

sudo apt update; sudo apt install openjdk-8-jdk

우분투에서 이걸 입력하면 먼저 우분투를 업데이트 하고 JDK 8를 설치하게 됩니다. 설치가 완료 된 후 

 

다시 "pip install git+https://github.com/minerllabs/minerl@v1.0.0" 이 명령어를 실행하면 정상적으로 MineRL 1.0.0이 설치되게 됩니다!

(만약 중간에 오류가 뜨거나 한다면 다시 한번 이 글을 보거나 해보시길!)

 

문제는 설치 시간입니다.. 굉장히 설치 시간이 오래 걸린다는 점..

10분 이상 걸릴 수도 있으니 너무 안된다고 취소하거나 하지는 말아주세요.. 그럼 또 기다려야 하니..

Successfully installed minerl-1.0.0

다 설치하면 위 문구가 나올 것입니다!

 

만약 설치하다 아래 같은 오류가 나온다면..

PermissionError: [WinError 32] 다른 프로세스가 파일을 사용 중이기 때문에 프로세스가 액세스 할 수 없습니다: '주소들~~\\scripts'

이건 단순 관리자 권한 오류 같다.. Permission Error 그래서 위에 Anaconda를 실행할 때 관리자 권한으로 실행해야 한다는 이유! 다시 관리자 권한에서 설치하면 된다!

 

이제 어려운 것은 끝났고.. 이제 깃허브에 설치 방법 중에 있던 아래 2번째 명령어를 입력해서 설치하시면 됩니다!

하지만 설치하기 전에 requirements.txt 파일은 minerl 폴더에 있기 때문에 터미널 창에선 해당 폴더로 접속해야합니다! (아마 첫번째 명령어 실행하고 바로 두번째 명령어 실행하면 설치는 되긴 할겁니다..! 이건 수동으로 파일 다운받아서 설치하는 것이예요!)

그렇기 때문에 아~~까 만들었던 폴더 주소를 복사하고 cd 뒤에 복사한 주소 입력하고 \minerl 입력해서 접속하시면 됩니다.

cd "복사한 주소\minerl"

pip install -r requirements.txt

" " <-- 이건 주소에 띄어쓰기가 있을 수도 있으니 하는 것! 만약 띄어쓰기가 있는데 안하면 다른 명령어로 인식해서 접속이 안될겁니다..

그리고 -r 하면 라이브러리 목록 파일로 라이브러리를 설치할 수 있는 뭐 그런거예여! 

 

암튼 길이 너무 길어지므로 그 다음 설치 방법은 Pt 3에서 설명하겠습니다!

반응형
반응형

이 글을 쓰기 전에 미리 해본 영상입니다!

https://youtu.be/efnCUsNvxyQ

궁금증

내가 마인크래프트 인공지능이 있다는 것은.. 

https://youtu.be/L4nfzJx7uDI

이 영상으로 부터 알게 되었었다..

 

굉장히 신기한 영상.. 처음에는 에이 설마 진짜겠어 하고.. 영상을 좀 봤다..

솔직히 그냥 사람이 인공지능 처럼 플레이하는 줄만 알았다..

근데 NEURO SAMA라는 인공지능 관련 글들을 찾아보고 진짜 인공지능마인크래프트를 플레이 한다는 것을 알았다..

그리고 마인크래프트 인공지능에 대해 좀 더 찾아본 결과 무엇인지 알게되었다.

 

어떤 것을 사용했을까?? 분석 & 추정

 

어쨌든 짧게 말하면 예상이지만

해당 마인크래프트 인공지능 플레이 영상은 진짜로 인공지능이 플레이하는 것이며 MineRL 1.0을 사용해서 VPT라는 인공지능 모델이 마인크래프트를 플레이 하는 것으로 추정된다..!

 

MineRL은 마인크래프트와 파이썬이 상호작용해서 파이썬으로 마인크래프트를 플레이 시킨다거나 할 수 있는 파이썬 3 라이브러리!

 

어쨌든 내가 이것으로 추정 할 수 있던 이유는 MineRL은 기본적으로 실행 Minecraft 해상도가 정해져있는데(어떻게 바꾸는진 모름..) 이 해상도가 V0.3, V0.4 버전에는 64 * 64px 인데 V1.0 버전에서 640 * 360px 이다. 그런데 영상을 잘보면 글씨 폰트들이 많이 무더져 보인다..

뭐 그래도 글씨가 잘 보이는 이유는 마인크래프트가 픽셀 게임 같은거라 그런게 아닐까.. 

 

그리고 VPT 인공지능 모델을 사용한다. 생각했던 이유는 마우스 포인터이다.

NEURO SAMA 마인크래프트 마우스 포인터

위 사진은 NEURO SAMA의 마인크래프트 방송에 나오는 마우스 포인터인데 좀 두껍다..

 

그런데 이 마우스 포인터는 

VPT 인공지능 모델을 플레이 시키면 나타나는 마우스 포인터이다.

VPT Github에 가보면 cursorsmouse_cursor_white_16x16.png 파일이 보이는데

https://github.com/openai/Video-Pre-Training/blob/main/cursors/mouse_cursor_white_16x16.png

위 사진으로 가면 볼 수 있다.

거기에서 따온 마우스 포인터인데.. 굉장히 똑같다..

 

어떻게 플레이 할 수 있을까?

간단하다. 그냥 깃허브에서 다운로드 해서 바로 플레이 시키면 된다.

단 컴퓨터는 고사양이여야 그나마 플레이하기 적당하다..

나 같은 경우 컴퓨터는 아래 사양이지만 중간중간 어느정도 렉이 유발되기도 했다.

  • CPU : AMD 5900X
  • GPU : RTX 3080TI
  • RAM : 32GB

플레이 방법은 이 게시글 이후로 파트 2~ 부터 설치와 플레이 방법을 올릴 것인데 대충 먼저 말하면

https://github.com/minerllabs/minerl

이곳에서 인공지능과 상호작용할 수 있는 라이브러리를 설치하고 

https://github.com/openai/Video-Pre-Training

이곳에서는 인공지능을 실행할 수 있는 파일과 인공지능 모델을 다운받아서 패키지 설치할꺼 모두 설치하고 실행하면 된다.

 

대충 찾아본거지만 VPT 기술은 영상으로만 인공지능 모델을 학습시키는 것이다.

기본적으로 VPT 깃허브에서 제공하는 인공지능 모델들은 이미 어느정도 학습은 되어있어 바로 플레이도 시킬 수 있다.

만약 학습을 시킨다면 이것은 영상으로 학습을 하기 때문에 영상을 촬영하거나 다운을 받아서 인공지능한테 학습하라고 시키면 되는 것!

 

굉장히 신기하다.. 영상에서 유저가 어떻게 움직이는지도 분석하고 유저가 해야할 목표를 비슷하게라도 따라한다는 것이.. 신기하다..

 

아쉬운 점

MineRL로 매년 MineRL Diamond Competition 이라는 대회를 여는 것 같은데 여기에서 VPT 말고 2022년에 제작되었다는 MineDojo라는 것도 제작되었다는데..

https://github.com/MineDojo/MineDojo

이것을 어떻게든 윈도우 돌려볼려고 했지만... 아쉽게 실패했다..

이유는 리눅스 용이기 때문에..

WSL 사용해서 하면 되겠지만.. 윈도우 10 버전이라.. (GPU나 여러가지 이용할려면 윈도우 11 사용해야함)

그래서 어떻게든 해도 안되서 포기하고 VPT로 해본 것..!

 

뭐 그래도 좋았다!

 

어쨌든 이 다음 글 부턴 설치부터 플레이 방법이 나와있답니다!

반응형

+ Recent posts