Web Analytics

Mapperatorinator

⭐ 398 stars Thai by OliBomby

🌐 ภาษา

Mapperatorinator

ลองใช้โมเดลสร้างสรรค์ ได้ที่นี่ หรือ MaiMod ได้ที่นี่ และรับชมวิดีโอแนะนำ ที่นี่

Mapperatorinator เป็นเฟรมเวิร์กแบบมัลติ-โมเดลที่ใช้สเปกโตรแกรมเป็นอินพุตเพื่อสร้าง osu! beatmap ที่สมบูรณ์สำหรับทุกโหมดเกมและช่วยม็อดบีทแมพ เป้าหมายของโปรเจกต์นี้คือการสร้าง osu! beatmap คุณภาพระดับจัดอันดับโดยอัตโนมัติจากเพลงใดก็ได้ พร้อมความสามารถในการปรับแต่งสูง

โปรเจกต์นี้สร้างขึ้นบนพื้นฐานของ osuT5 และ osu-diffusion ในการพัฒนา ฉันใช้เวลาประมาณ 2500 ชั่วโมงของการประมวลผล GPU ใน 142 รอบบน 4060 Ti ของฉันและเครื่องเช่า 4090 บน vast.ai

#### กรุณาใช้เครื่องมือนี้อย่างมีความรับผิดชอบ และเปิดเผยทุกครั้งเมื่อใช้ AI ในการสร้างบีทแมปของคุณ

การติดตั้ง

คำแนะนำด้านล่างนี้จะช่วยให้คุณสร้างบีทแมปบนเครื่องของคุณเอง หรือสามารถรันบนคลาวด์โดยใช้ colab notebook ได้เช่นกัน

1. โคลน repository

git clone https://github.com/OliBomby/Mapperatorinator.git
cd Mapperatorinator

2. (ไม่บังคับ) สร้างสภาพแวดล้อมเสมือน

ใช้ Python 3.10 เนื่องจากเวอร์ชันที่ใหม่กว่าอาจไม่สามารถใช้งานร่วมกับไลบรารีที่จำเป็นได้

python -m venv .venv

In cmd.exe

.venv\Scripts\activate.bat

In PowerShell

.venv\Scripts\Activate.ps1

In Linux or MacOS

source .venv/bin/activate

3. ติดตั้งไลบรารีที่จำเป็น

pip install -r requirements.txt

Web GUI (แนะนำ)

เพื่อประสบการณ์ที่ใช้งานง่ายขึ้น แนะนำให้ใช้ Web UI ซึ่งมีอินเทอร์เฟซกราฟิกสำหรับตั้งค่าพารามิเตอร์การสร้าง เริ่มต้นกระบวนการ และตรวจสอบผลลัพธ์

เปิดใช้งาน GUI

ไปที่ไดเรกทอรี Mapperatorinator ที่ถูกโคลนในเทอร์มินัลของคุณแล้วรัน:

python web-ui.py
การดำเนินการนี้จะเริ่มเซิร์ฟเวอร์เว็บในเครื่องและเปิด UI ในหน้าต่างใหม่โดยอัตโนมัติ

การใช้งาน GUI

Web UI ทำหน้าที่เป็นตัวช่วยที่สะดวกสำหรับสคริปต์ inference.py สำหรับตัวเลือกขั้นสูงหรือการแก้ไขปัญหา โปรดดูคำแนะนำการใช้บรรทัดคำสั่ง

python_u3zyW0S3Vs

การอนุมานด้วยบรรทัดคำสั่ง

สำหรับผู้ใช้ที่ชอบใช้บรรทัดคำสั่งหรือจำเป็นต้องเข้าถึงการตั้งค่าขั้นสูง ให้ปฏิบัติตามขั้นตอนด้านล่าง หมายเหตุ: สำหรับอินเทอร์เฟซกราฟิกที่ง่ายกว่า โปรดดูหัวข้อ Web UI (แนะนำ) ด้านบน

เรียกใช้ inference.py และระบุอาร์กิวเมนต์เพื่อสร้างบีตแมป สำหรับกรณีนี้ให้ใช้ Hydra override syntax ดู configs/inference_v29.yaml สำหรับพารามิเตอร์ทั้งหมดที่มีให้

python inference.py \
  audio_path           [Path to input audio] \
  output_path          [Path to output directory] \
  beatmap_path         [Path to .osu file to autofill metadata, and output_path, or use as reference] \
  
  gamemode             [Game mode to generate 0=std, 1=taiko, 2=ctb, 3=mania] \
  difficulty           [Difficulty star rating to generate] \
  mapper_id            [Mapper user ID for style] \
  year                 [Upload year to simulate] \
  hitsounded           [Whether to add hitsounds] \
  slider_multiplier    [Slider velocity multiplier] \
  circle_size          [Circle size] \
  keycount             [Key count for mania] \
  hold_note_ratio      [Hold note ratio for mania 0-1] \
  scroll_speed_ratio   [Scroll speed ratio for mania and ctb 0-1] \
  descriptors          [List of beatmap user tags for style] \
  negative_descriptors [List of beatmap user tags for classifier-free guidance] \
  
  add_to_beatmap       [Whether to add generated content to the reference beatmap instead of making a new beatmap] \
  start_time           [Generation start time in milliseconds] \
  end_time             [Generation end time in milliseconds] \
  in_context           [List of additional context to provide to the model [NONE,TIMING,KIAI,MAP,GD,NO_HS]] \
  output_type          [List of content types to generate] \
  cfg_scale            [Scale of the classifier-free guidance] \
  super_timing         [Whether to use slow accurate variable BPM timing generator] \
  seed                 [Random seed for generation] \

ตัวอย่าง:

python inference.py beatmap_path="'C:\Users\USER\AppData\Local\osu!\Songs\1 Kenji Ninuma - DISCO PRINCE\Kenji Ninuma - DISCOPRINCE (peppy) [Normal].osu'" gamemode=0 difficulty=5.5 year=2023 descriptors="['jump aim','clean']" in_context=[TIMING,KIAI]

อินเทอร์แอคทีฟ CLI

สำหรับผู้ที่ชื่นชอบการทำงานผ่านเทอร์มินัลแต่ต้องการการตั้งค่าแบบมีคำแนะนำ สคริปต์ CLI แบบอินเทอร์แอคทีฟถือเป็นทางเลือกที่ยอดเยี่ยมนอกจาก Web UI

เปิดใช้งาน CLI

ไปยังไดเรกทอรีที่คุณได้โคลนมา คุณอาจต้องตั้งค่าสคริปต์ให้สามารถรันได้ก่อน

# Make the script executable (only needs to be done once)
chmod +x cli_inference.sh

# Run the script
./cli_inference.sh

การใช้งาน CLI

สคริปต์จะนำคุณผ่านชุดคำถามเพื่อกำหนดค่าพารามิเตอร์การสร้างทั้งหมด คล้ายกับ Web UI

มันใช้อินเทอร์เฟซที่มีการระบุสีเพื่อความชัดเจน มีเมนูแบบเลือกหลายตัวขั้นสูงสำหรับเลือกคำอธิบายสไตล์โดยใช้ปุ่มลูกศรและแป้นเว้นวรรค หลังจากที่คุณตอบคำถามทั้งหมดแล้ว จะมีการแสดงคำสั่งสุดท้ายเพื่อให้คุณตรวจสอบ คุณสามารถยืนยันเพื่อดำเนินการโดยตรงหรือยกเลิกและคัดลอกคำสั่งไปใช้เองก็ได้

เคล็ดลับการสร้าง

MaiMod: เครื่องมือม็อดอัตโนมัติขับเคลื่อนด้วย AI

MaiMod เป็นเครื่องมือม็อดสำหรับบีทแมป osu! ที่ใช้การคาดการณ์จาก Mapperatorinator เพื่อหาข้อผิดพลาดและความไม่สอดคล้องกันที่เครื่องมือม็อดอัตโนมัติอื่น เช่น Mapset Verifier ไม่สามารถตรวจจับได้ มันสามารถตรวจจับปัญหาเช่น:

คุณสามารถลองใช้งาน MaiMod ที่นี่ หรือรันในเครื่องของคุณเอง: ในการรัน MaiMod ในเครื่อง คุณต้องติดตั้ง Mapperatorinator ก่อน จากนั้นรันสคริปต์ mai_mod.py โดยระบุ path ของบีทแมปด้วยอาร์กิวเมนต์ beatmap_path
python mai_mod.py beatmap_path="'C:\Users\USER\AppData\Local\osu!\Songs\1 Kenji Ninuma - DISCO PRINCE\Kenji Ninuma - DISCOPRINCE (peppy) [Normal].osu'"
ระบบจะพิมพ์คำแนะนำการม็อดลงในคอนโซล ซึ่งคุณสามารถนำไปปรับใช้กับบีทแมพของคุณได้ด้วยตนเอง ข้อเสนอจะแสดงตามลำดับเวลาและถูกจัดกลุ่มเป็นหมวดหมู่ ค่าตัวแรกในวงกลมแสดงถึงค่า 'surprisal' ซึ่งเป็นการวัดว่ารุ่นโมเดลพบปัญหานี้ไม่คาดคิดแค่ไหน เพื่อให้คุณสามารถจัดลำดับความสำคัญของปัญหาที่สำคัญที่สุดได้

โมเดลอาจทำผิดพลาดได้ โดยเฉพาะกับปัญหาที่มีค่า surprisal ต่ำ ดังนั้นควรตรวจสอบข้อเสนออีกครั้งก่อนนำไปใช้กับบีทแมพของคุณเสมอ เป้าหมายหลักคือช่วยให้คุณจำกัดขอบเขตของปัญหาที่อาจเกิดขึ้น เพื่อที่คุณจะไม่ต้องตรวจสอบอ็อบเจกต์แต่ละตัวในบีทแมพด้วยตนเอง

MaiMod GUI

หากต้องการใช้งาน MaiMod Web UI คุณจะต้องติดตั้ง Mapperatorinator ก่อน จากนั้นให้รันสคริปต์ mai_mod_ui.py ซึ่งจะเริ่มต้นเว็บเซิร์ฟเวอร์ภายในเครื่องและเปิด UI ในหน้าต่างใหม่โดยอัตโนมัติ

python mai_mod_ui.py

afbeelding

ภาพรวม

การแปลงเป็นโทเคน

Mapperatorinator จะแปลง osu! beatmaps ให้เป็นตัวแทนอีเวนต์แบบกลางที่สามารถแปลงเป็นและจากโทเคนได้โดยตรง ซึ่งรวมถึงวัตถุตี, เสียงตี, ความเร็วสไลเดอร์, คอมโบใหม่, จุดเวลา, ช่วงเวลาคิไอ และความเร็วการเลื่อนของ taiko/mania

ตัวอย่างกระบวนการแปลงเป็นโทเคนขนาดเล็กมีดังนี้:

mapperatorinator_parser

เพื่อประหยัดขนาดคำศัพท์ เหตุการณ์เวลา (time events) จะถูกควอนไทซ์เป็นช่วง 10 มิลลิวินาที และพิกัดตำแหน่งจะถูกควอนไทซ์เป็นจุดกริด 32 พิกเซล

สถาปัตยกรรมโมเดล

โมเดลนี้โดยพื้นฐานแล้วเป็นตัวห่อรอบ HF Transformers Whisper โดยมีอินพุตฝังตัวและฟังก์ชันสูญเสียแบบกำหนดเอง ขนาดโมเดลอยู่ที่ 219M พารามิเตอร์ โมเดลนี้พบว่าทำงานได้รวดเร็วและแม่นยำกว่า T5 สำหรับงานนี้

ภาพรวมระดับสูงของอินพุต-เอาต์พุตของโมเดลมีดังนี้:

Picture2

โมเดลนี้ใช้เฟรม Mel spectrogram เป็นอินพุตของ encoder โดยหนึ่งเฟรมต่อหนึ่งตำแหน่งอินพุต เอาต์พุตของ decoder ในแต่ละขั้นคือการแจกแจง softmax บนคำศัพท์ของอีเวนต์ที่กำหนดไว้ล่วงหน้าแบบไม่ต่อเนื่อง เอาต์พุตจะเป็นแบบกระจาย (sparse) จะมีอีเวนต์เฉพาะเมื่อมี hit-object แทนที่จะต้องใส่คำอธิบายประกอบทุกเฟรมเสียง

รูปแบบการฝึกแบบมัลติทาสก์

Multitask training format

ก่อนโทเคน SOS จะมีโทเคนเพิ่มเติมที่ช่วยในการสร้างแบบมีเงื่อนไข ซึ่งรวมถึงโหมดเกม, ความยาก, รหัสผู้สร้าง, ปี และข้อมูลเมตาอื่นๆ ระหว่างการฝึก โทเคนเหล่านี้จะไม่มีฉลากกำกับ จึงไม่ถูกสร้างโดยโมเดล นอกจากนี้ระหว่างการฝึกยังมีโอกาสสุ่มที่โทเคนเมตาจะถูกแทนที่ด้วยโทเคน 'unknown' ดังนั้นระหว่างการทำนายจึงสามารถใช้โทเคน 'unknown' เพื่อลดปริมาณเมตาดาต้าที่ต้องป้อนให้โมเดล

การสร้างอย่างต่อเนื่องไร้รอยต่อ

ความยาวบริบทของโมเดลคือ 8.192 วินาที ซึ่งเห็นได้ชัดว่าไม่พอสำหรับการสร้างบีตแมปเต็มเพลง ดังนั้นต้องแบ่งเพลงเป็นหลายหน้าต่างแล้วสร้างบีตแมปเป็นส่วนเล็กๆ เพื่อให้แน่ใจว่าบีตแมปที่สร้างขึ้นจะไม่มีรอยต่อที่เห็นได้ชัดระหว่างหน้าต่าง เราจะใช้การซ้อนทับ 90% และสร้างหน้าต่างตามลำดับ ทุกหน้าต่างการสร้างยกเว้นหน้าต่างแรกจะเริ่มด้วยการเติม decoder ล่วงหน้าสูงสุด 50% ของหน้าต่างการสร้างด้วยโทเคนจากหน้าต่างก่อนหน้า เราใช้ตัวประมวลผล logit เพื่อให้แน่ใจว่าโมเดลจะไม่สามารถสร้างโทเคนเวลาที่อยู่ใน 50% แรกของหน้าต่างการสร้างได้ นอกจากนี้ 40% สุดท้ายของหน้าต่างการสร้างจะถูกสงวนไว้สำหรับหน้าต่างถัดไป โทเคนเวลาที่ถูกสร้างในช่วงนี้จะถูกจัดการเป็นโทเคน EOS สิ่งนี้ทำให้มั่นใจได้ว่าแต่ละโทเคนที่สร้างขึ้นจะอิงกับโทเคนก่อนหน้าอย่างน้อย 4 วินาที และเสียงในอนาคต 3.3 วินาทีสำหรับการคาดการณ์

เพื่อป้องกันการลอยของออฟเซ็ตระหว่างการสร้างที่ยาวนาน ได้มีการเพิ่มออฟเซ็ตแบบสุ่มไปยังอีเวนต์เวลาในดีโคเดอร์ระหว่างการฝึก สิ่งนี้บังคับให้โมเดลแก้ไขข้อผิดพลาดของเวลาโดยการฟังออนเซ็ตในเสียงแทน ซึ่งส่งผลให้ได้ออฟเซ็ตที่แม่นยำอย่างสม่ำเสมอ

พิกัดที่ขัดเกลาด้วย diffusion

พิกัดตำแหน่งที่สร้างโดยดีโคเดอร์จะถูกควอนไทซ์ไปยังจุดกริด 32 พิกเซล ดังนั้นหลังจากนั้นเราจะใช้ diffusion เพื่อลดสัญญาณรบกวนของพิกัดให้ได้ตำแหน่งสุดท้าย สำหรับสิ่งนี้ เราได้ฝึกฝนเวอร์ชันดัดแปลงของ osu-diffusion ที่เชี่ยวชาญเฉพาะ 10% สุดท้ายของกำหนดการ noise และรับโทเคน metadata ขั้นสูงที่ Mapperatorinator ใช้สำหรับการสร้างแบบมีเงื่อนไข

เนื่องจากโมเดล Mapperatorinator ให้เอาต์พุตค่า SV ของ slider ความยาวที่จำเป็นของ slider จะถูกกำหนดคงที่ไม่ว่าเส้นทางจุดควบคุมจะมีรูปร่างอย่างไร ดังนั้นเราจึงพยายามนำทางกระบวนการ diffusion เพื่อสร้างพิกัดที่ตรงกับความยาว slider ที่ต้องการ เราทำสิ่งนี้โดยคำนวณตำแหน่งปลาย slider ใหม่หลังจากแต่ละขั้นตอนของกระบวนการ diffusion ตามความยาวที่ต้องการและเส้นทางจุดควบคุมปัจจุบัน ซึ่งหมายความว่ากระบวนการ diffusion จะไม่สามารถควบคุมตำแหน่งปลาย slider ได้โดยตรง แต่ก็ยังสามารถมีอิทธิพลต่อมันได้โดยการเปลี่ยนเส้นทางจุดควบคุม

การประมวลผลหลัง

Mapperatorinator ทำการประมวลผลหลังเพิ่มเติมเพื่อปรับปรุงคุณภาพของบีทแมปที่สร้างขึ้น:

ตัวสร้าง Super timing

Super timing generator เป็นอัลกอริธึมที่ช่วยปรับปรุงความแม่นยำของเวลาโดยการอนุมานเวลาทั้งเพลง 20 ครั้งและเฉลี่ยผลลัพธ์ สิ่งนี้มีประโยชน์กับเพลงที่มี BPM แปรผัน หรือเพลงที่มีการเปลี่ยน BPM ผลลัพธ์ที่ได้จะเกือบสมบูรณ์แบบโดยบางครั้งอาจมีบางช่วงที่ต้องปรับด้วยตนเอง

การฝึกฝน

คำแนะนำด้านล่างนี้จะสร้างสภาพแวดล้อมการฝึกบนเครื่องของคุณ

1. โคลน repository

git clone https://github.com/OliBomby/Mapperatorinator.git
cd Mapperatorinator

2. สร้างชุดข้อมูล

สร้างชุดข้อมูลของคุณเองโดยใช้ แอปคอนโซล Mapperator ซึ่งต้องใช้ โทเคน OAuth ของ osu! เพื่อยืนยันบีตแมพและรับข้อมูลเมตาเพิ่มเติม ให้วางชุดข้อมูลไว้ในไดเรกทอรี datasets ข้างๆ ไดเรกทอรี Mapperatorinator

Mapperator.ConsoleApp.exe dataset2 -t "/Mapperatorinator/datasets/beatmap_descriptors.csv" -i "path/to/osz/files" -o "/datasets/cool_dataset"

3. (ไม่บังคับ) ตั้งค่า Weight & Biases สำหรับการบันทึกข้อมูล

สร้างบัญชีบน Weight & Biases และรับ API key จากการตั้งค่าบัญชีของคุณ จากนั้นตั้งค่าตัวแปรสภาพแวดล้อม WANDB_API_KEY เพื่อให้กระบวนการฝึกสอนทราบว่าจะบันทึกข้อมูลไปยังคีย์นี้

export WANDB_API_KEY=

4. สร้างคอนเทนเนอร์ Docker

การฝึกใน venv ของคุณก็สามารถทำได้เช่นกัน แต่เราแนะนำให้ใช้ Docker บน WSL เพื่อประสิทธิภาพที่ดีกว่า
docker compose up -d --force-recreate
docker attach mapperatorinator_space
cd Mapperatorinator

5. กำหนดค่าพารามิเตอร์และเริ่มการฝึกสอน

การกำหนดค่าทั้งหมดอยู่ใน ./configs/train/default.yaml โปรดตรวจสอบให้แน่ใจว่าได้ตั้งค่า train_dataset_path และ test_dataset_path ให้ตรงกับชุดข้อมูลของคุณ รวมถึงดัชนี mapset เริ่มต้นและสิ้นสุดสำหรับการแบ่งชุดฝึก/ทดสอบ เส้นทางจะเป็นแบบ local ใน docker container ดังนั้นหากคุณวางชุดข้อมูลชื่อ cool_dataset ไว้ในไดเรกทอรี datasets เส้นทางควรเป็น /workspace/datasets/cool_dataset

ขอแนะนำให้สร้างไฟล์ config แบบกำหนดเองที่ override ค่า config หลัก เพื่อให้คุณมีบันทึกการตั้งค่าการฝึกสอนสำหรับการทำซ้ำผลลัพธ์

data:
  train_dataset_path: "/workspace/datasets/cool_dataset"
  test_dataset_path: "/workspace/datasets/cool_dataset"
  train_dataset_start: 0
  train_dataset_end: 90
  test_dataset_start: 90
  test_dataset_end: 100

Begin training by calling python osuT5/train.py or torchrun --nproc_per_node=NUM_GPUS osuT5/train.py for multi-GPU training.

python osuT5/train.py -cn train_v29 train_dataset_path="/workspace/datasets/cool_dataset" test_dataset_path="/workspace/datasets/cool_dataset" train_dataset_end=90 test_dataset_start=90 test_dataset_end=100

6. การปรับแต่งแบบ LoRA

คุณยังสามารถปรับแต่งโมเดลที่ผ่านการฝึกมาแล้วด้วย LoRA เพื่อให้เหมาะสมกับสไตล์หรือโหมดเกมที่ต้องการได้ ในการทำเช่นนี้ ให้ปรับ configs/train/lora.yaml ตามความต้องการของคุณ และรันการตั้งค่าการฝึก lora:

python osuT5/train.py -cn lora train_dataset_path="/workspace/datasets/cool_dataset" test_dataset_path="/workspace/datasets/cool_dataset" train_dataset_end=90 test_dataset_start=90 test_dataset_end=100

พารามิเตอร์สำคัญของ LoRA ที่ควรพิจารณา:

ขณะ inference สามารถระบุ weight ของ LoRA ที่ต้องใช้ผ่าน argument lora_path โดยอาจเป็นเส้นทางในเครื่องหรือรีโป Hugging Face ก็ได้

ดูเพิ่มเติม

เครดิต

ขอขอบคุณเป็นพิเศษแก่:

ผลงานที่เกี่ยวข้อง

--- Tranlated By Open Ai Tx | Last indexed: 2026-01-24 ---