채팅0

    메이플 AI기반 인식 자사구현법 공유

    조회수 2184

    별로 높은수준의 지식도 아니고, 구현의 영역이라기 보단 게임개발영역에서 보면 그냥 유니티로 캐릭터 이동수준의

     

    그러니까 아주 기초적인 부분에 대해서 다뤄보려고함. 

     

    그 기초적인 부분만으로도 일자맵에 대한 자동사냥은 손사냥과 비슷한 효율을 만들어낼 수 있을 거라고 생각함

     

     

    읽기전에. 

     

    떳떳한일은 아니지만 해당 게시글을 보고 매크로구현에 도움이 됐다면, 서로 정보를 공유하고 조금 더 나은 개발이 될 수 있도록 서로 도왔으면 좋겠음

     

     

    1. 학습데이터 확보

     

    가장 먼저해야할 일은 학습데이터를 확보하는데 있음 이 부분은 자동 캡쳐뜨게해서 학습데이터 여러벌 만들 수도 있는데

     

    메이플랜드는 2D특성상 정말 단순하게 이미지가 그려지기 때문에 귀찮더라도 프린트 스크린키로 스크린샷 10~20장 정도면 충분함

     

     내가 만약 좀비루팡과 루팡을 사냥하는 매크로를 제작하고 싶으면 아래와 같이 스크린샷을 찍으면됨

    thumb-20240415105653_94f3fe86017780c4838f954deee5eea8_u94a_800x.png

    + 샘플데이터를 가져오느라 아무사진 줏어온건데 모든 캡쳐본엔 내 캐릭터가 포함되어있는게 좋음

     

    2. 학습데이터 학습(https://app.roboflow.com/)

     

    roboflow라는 학습데이터 학습 사이트인데, 사이트를 이용하지 않고 스스로 학습 시킬 수 있는 사람이라면 이글을 읽지도 않을테니 

     

    AI매크로를 접하는게 처음이라면 그냥 사이트를 이용하는게 좋음
     

    thumb-20240415110511_94f3fe86017780c4838f954deee5eea8_8x8u_800x.png

    사이트에 로그인까지 완료했다면 create New Project를 통해서 프로젝트를 생성해주면 됨 

     

    그 뒤 Project Name은 그냥 꼴리는대로 적고 Annotioan Group도 대충지어도 된다.

    thumb-20240415111028_94f3fe86017780c4838f954deee5eea8_4qu9_800x.png

    프로젝트가 생성되면 자동으로 upload화면으로 넘어갈텐데 대충 학습시킬 스크린샷 폴더째로 넣거나 파일 선택하면 됨

    thumb-20240415111204_94f3fe86017780c4838f954deee5eea8_2mlk_800x.png

    아래와 같이 업로드가 완료되면 Save and Continue로 넘어가주고

    thumb-20240415111224_94f3fe86017780c4838f954deee5eea8_k1vc_800x.png

    완료 된 후에는 자동으로 아래 화면으로 넘어갈텐데 Manual Labeling으로 하는게 좋음 

     

    이유는 당연히 내가 원하는 객체를 확실하게 인식하려면 셀프로 라벨링하는게 가장 정확한 방법이고, 메이플은 단순하기 때문에

     

    이미지 셋이 적으니 조금 귀찮더라도 셀프 라벨링을 해주는게 좋음

    thumb-20240415111401_94f3fe86017780c4838f954deee5eea8_9sc7_800x.png

    라벨링을 다 마치면 아마 아래과 같이 될텐데 하는 방법은 굉장히 간단함

     

    드래그를 통해 박스를 만들고 박스명을 지정해주면 됨 나는 일반 루팡같은 경우 rupin 좀비 루팡같은 경운 zombie rupin으로 라벨링 했음

    !! 내가 깜빡한게 있는 데 꼭 자기캐릭터도 학습데이터에 포함시켜야 함, 나는 실제 학습은 스킵할 예정이라 그냥 예시용 이미지만 올려놓은것 !!

    thumb-20240415111942_94f3fe86017780c4838f954deee5eea8_4ig4_800x.png

     

    위와 같이 라벨링까지 완료했다면 왼쪽상단에 뒤로가기 아이콘을 클릭해서 다시 Annotate화면으로 돌아간뒤

     

    Add Image라고 써져있는 버튼을 클릭하면 된다.  그리고 Add Images버튼으로 데이터셋을 추가한 후

     

    thumb-20240415113021_94f3fe86017780c4838f954deee5eea8_zwg8_800x.png

    create NewVersion 버튼 클릭 후

     

    그냥 프로세스대로 진행하면 

     

    thumb-20240415113145_94f3fe86017780c4838f954deee5eea8_lw5j_800x.png

     

    아래와 같은 화면이 출력되는데 꼭 Custiom Train and Upload버튼을 통해 학습을 진행하자

     

    나는 YOLOv8버젼으로 Export시켰는데 그냥 취향껏 고른 뒤 Get Snippet을 클릭한다.

    thumb-20240415113250_94f3fe86017780c4838f954deee5eea8_1adc_800x.png

     

    그럼 아래와 같은 코드가 생성되는데

     

    thumb-20240415113333_94f3fe86017780c4838f954deee5eea8_nlvt_800x.png

     

    복사 후 하단에 Copy Snippet and Open YOLOv8 NoterBook을 클릭하자.

     

    그럼 아래와 같은 화면이 생성될텐데, 그냥 순서대로 실행시키면 됨 

    thumb-20240415121029_94f3fe86017780c4838f954deee5eea8_nwhv_800x.png

     

    다만 아래의 코드를 실행시킬때는 복사해온 코드를 복붙해야한다. !pip install 부분부터 복붙후 실행시켜주면

     

    내가 만든 데이터셋을 학습시킬 수 있음

    thumb-20240415113547_94f3fe86017780c4838f954deee5eea8_ouc0_800x.png

    과정도 추가시키고 싶었는데 너무 길어져서 패스 그냥 순서대로만 잘 실행시키면 아마 문제없이 실행될거라고 생각됨

    다만 위의 코드를 실행시키고

     

    %cd {HOME}


     

    !yolo task=detect mode=train model=yolov8s.pt data={dataset.location}/data.yaml epochs=25 imgsz=800 plots=True

     

    를 실행시킬때 오류가 발생하면 epochs값을 줄여주는게 좋음

     

    학습이 끝나고나면 /runs/detect/train/weights/경로에 best.pt라는 파일이 생성되는데 이게 우리가 학습시킨 데이터임

     

    가상환경에서 실행했기때문에 오른쪽 폴더모양을 클릭해서 해당경로값에 도달하면됨

     

    thumb-20240415114034_94f3fe86017780c4838f954deee5eea8_a3j1_800x.png

     

    그럼 이제 끝. 

     

    남은건 파이썬을 통해서 학습시킨 데이터를 응용하면 됨

     

    소스코드는 아래에 첨부했고 주석달아놨으니 참고하면됨

     

    *당연히 나는 샘플에서 me라벨링안해서 제대로 동작안함!! 다음에 또 글쓸기회 있으면 안헷갈리게 잘써봄

     

    + 동작하는게 보고싶다면 학습과정에서 내 캐릭터의 라벨을 me로 하고 좀비루팡과 같이 라벨링해서 데이터셋에 추가하면됨

        OR 다른 몬스터 학습 후 라벨링한 이름대로 소스코드만 수정해주면 됨

     

       EX) 드레이크 학습시 drake로 라벨링했다면

     

            decision = {
               "me": False,
               "drake": False,
           }

     

           위와 같이 사용하는 라벨명 선언 후

     

                if name == "drake": # 여기가 실제 라벨값이랑 비교하는 로직
                   decision["drake"] = True
                   decision["drake_location"] = (center_x, center_y)

              와 같이 수정하면됨 혹은 더 나은 코드로 변경하거나

     

    필요한 패키지들도 requireements.txt에 써놨으니

     

    pip install -r requirements.txt로 설치해주자

     

     

    댓글4

    회원프로필

    추천 꽝 찍고갑니다!

    2024.04.15 12:18
    회원프로필

    개추를 딱

    2024.04.15 12:39
    회원프로필

    정성추

    2024.04.15 13:19
    회원프로필

    개추
    me는 캐릭터보단 다른걸로 받아오는게

    2024.04.15 19:19