Web Analytics

Mapperatorinator

⭐ 398 stars Hindi by OliBomby

🌐 भाषा

मैपराटोरिनेटर

जनरेटिव मॉडल को यहाँ आज़माएँ, या माईमोड यहाँ देखें। वीडियो प्रस्तुति के लिए यहाँ देखें।

मैपराटोरिनेटर एक मल्टी-मॉडल फ्रेमवर्क है जो स्पेक्ट्रोग्राम इनपुट का उपयोग करके सभी गेममोड्स के लिए पूर्ण osu! बीटमैप जनरेट करता है और मॉडिंग में सहायता करता है। इस प्रोजेक्ट का उद्देश्य किसी भी गाने से स्वचालित रूप से उच्च गुणवत्ता वाले, रैंक योग्य osu! बीटमैप्स को अत्यधिक अनुकूलन क्षमता के साथ बनाना है।

यह प्रोजेक्ट osuT5 और osu-diffusion पर आधारित है। इसे बनाते समय मैंने अपने 4060 Ti और vast.ai पर किराए के 4090 इंस्टेंसेस पर 142 रन में करीब 2500 घंटे GPU कंप्यूट में लगाए।

#### इस टूल का जिम्मेदारी से उपयोग करें। हमेशा अपनी बीटमैप्स में एआई के उपयोग का खुलासा करें।

स्थापना

नीचे दिए गए निर्देश आपको अपनी स्थानीय मशीन पर बीटमैप्स जनरेट करने की अनुमति देते हैं, वैकल्पिक रूप से आप इसे क्लाउड में colab notebook के साथ चला सकते हैं।

1. रिपॉजिटरी को क्लोन करें

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

वेब GUI (अनुशंसित)

एक अधिक उपयोगकर्ता-अनुकूल अनुभव के लिए, वेब UI का उपयोग करने पर विचार करें। यह जेनरेशन पैरामीटर को कॉन्फ़िगर करने, प्रक्रिया शुरू करने और आउटपुट की निगरानी के लिए एक ग्राफिकल इंटरफ़ेस प्रदान करता है।

GUI लॉन्च करें

अपने टर्मिनल में क्लोन किए गए Mapperatorinator डायरेक्टरी पर जाएं और चलाएं:

python web-ui.py
यह एक स्थानीय वेब सर्वर शुरू करेगा और स्वचालित रूप से UI को एक नई विंडो में खोलेगा।

GUI का उपयोग करना

वेब UI inference.py स्क्रिप्ट के चारों ओर एक सुविधाजनक आवरण के रूप में कार्य करता है। उन्नत विकल्पों या समस्या निवारण के लिए, कमांड-लाइन निर्देश देखें।

python_u3zyW0S3Vs

कमांड-लाइन इंफेरेंस

उन उपयोगकर्ताओं के लिए जो कमांड लाइन पसंद करते हैं या जिन्हें उन्नत कॉन्फ़िगरेशन की आवश्यकता होती है, नीचे दिए गए चरणों का पालन करें। नोट: एक सरल ग्राफिकल इंटरफेस के लिए कृपया ऊपर Web UI (Recommended) अनुभाग देखें।

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 स्क्रिप्ट वेब 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: एआई-चालित मॉडिंग टूल

MaiMod एक मॉडिंग टूल है जो Mapperatorinator की प्रेडिक्शंस का उपयोग करके संभावित गलतियों और विसंगतियों का पता लगाता है जिन्हें अन्य स्वचालित मॉडिंग टूल्स जैसे Mapset Verifier नहीं पकड़ सकते। यह निम्नलिखित समस्याओं का पता लगा सकता है:

आप MaiMod को यहां आजमा सकते हैं, या इसे लोकली चला सकते हैं: MaiMod को लोकली चलाने के लिए, आपको Mapperatorinator इंस्टॉल करना होगा। फिर, mai_mod.py स्क्रिप्ट चलाएं, और अपने बीटमैप के पथ को 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'"
यह मॉडिंग सुझावों को कंसोल में प्रिंट करेगा, जिन्हें आप फिर अपने बीटमैप पर मैन्युअली लागू कर सकते हैं। सुझावों को कालानुक्रमिक रूप से क्रमबद्ध किया गया है और श्रेणियों में समूहित किया गया है। वृत्त में पहला मान 'सरप्राइजल' को दर्शाता है, जो यह मापता है कि मॉडल को यह समस्या कितनी अप्रत्याशित लगी, ताकि आप सबसे महत्वपूर्ण मुद्दों को प्राथमिकता दे सकें।

मॉडल गलतियां कर सकता है, खासकर कम सरप्राइजल वाले मुद्दों पर, इसलिए अपने बीटमैप पर लागू करने से पहले हमेशा सुझावों को दोबारा जांचें। मुख्य उद्देश्य यह है कि संभावित समस्याओं के लिए खोज क्षेत्र को संकीर्ण करने में आपकी मदद करना, ताकि आपको अपने बीटमैप में हर एक हिट ऑब्जेक्ट को मैन्युअली जांचना न पड़े।

MaiMod GUI

MaiMod Web UI चलाने के लिए, आपको Mapperatorinator इंस्टॉल करना होगा। फिर, mai_mod_ui.py स्क्रिप्ट चलाएं। इससे एक लोकल वेब सर्वर शुरू होगा और UI अपने आप नई विंडो में खुलेगा:

python mai_mod_ui.py

afbeelding

अवलोकन

टोकनाइजेशन

Mapperatorinator osu! बीटमैप्स को एक मध्यवर्ती ईवेंट प्रतिनिधित्व में बदलता है जिसे सीधे टोकन में बदला जा सकता है और पुनः प्राप्त किया जा सकता है। इसमें हिट ऑब्जेक्ट्स, हिटसाउंड्स, स्लाइडर वेलोसिटी, न्यू कॉम्बो, टाइमिंग पॉइंट्स, कियाई टाइम्स, और टैइको/मैनिया स्क्रॉल स्पीड शामिल हैं।

यहाँ टोकनाइजेशन प्रक्रिया का एक छोटा उदाहरण है:

mapperatorinator_parser

शब्दावली के आकार को कम करने के लिए, समय ईवेंट्स को 10ms अंतराल में क्वांटाइज़ किया गया है और स्थिति निर्देशांक को 32 पिक्सेल ग्रिड बिंदुओं पर क्वांटाइज़ किया गया है।

मॉडल आर्किटेक्चर

मॉडल मूल रूप से HF Transformers Whisper मॉडल के चारों ओर एक रैपर है, जिसमें कस्टम इनपुट एम्बेडिंग और लॉस फंक्शन है। मॉडल का आकार 219M पैरामीटर्स है। यह मॉडल इस कार्य के लिए T5 से तेज़ और अधिक सटीक पाया गया।

मॉडल के इनपुट-आउटपुट का उच्च-स्तरीय अवलोकन निम्नानुसार है:

Picture2

मॉडल मेल स्पेक्ट्रोग्राम फ्रेम्स को एन्कोडर इनपुट के रूप में उपयोग करता है, प्रत्येक इनपुट स्थिति के लिए एक फ्रेम के साथ। मॉडल डिकोडर आउटपुट प्रत्येक चरण पर घटनाओं की एक विविक्त, पूर्व-परिभाषित शब्दावली पर सॉफ्टमैक्स वितरण है। आउटपुट विरल हैं, ईवेंट्स केवल तब आवश्यक होते हैं जब कोई हिट-ऑब्जेक्ट होता है, हर ऑडियो फ्रेम को एनोटेट करने के बजाय।

मल्टीटास्क प्रशिक्षण प्रारूप

Multitask training format

SOS टोकन से पहले अतिरिक्त टोकन होते हैं जो सशर्त जनरेशन की सुविधा प्रदान करते हैं। इन टोकनों में गेममोड, कठिनाई, मैपर आईडी, वर्ष और अन्य मेटाडेटा शामिल हैं। प्रशिक्षण के दौरान, इन टोकनों के साथ लेबल नहीं होते, इसलिए इन्हें मॉडल द्वारा कभी आउटपुट नहीं किया जाता। साथ ही प्रशिक्षण के दौरान एक यादृच्छिक संभावना होती है कि किसी मेटाडेटा टोकन को 'अज्ञात' टोकन से बदल दिया जाए, ताकि अनुमान के समय हम इन 'अज्ञात' टोकनों का उपयोग मॉडल को दी जाने वाली मेटाडेटा की मात्रा कम करने के लिए कर सकें।

निर्बाध लंबी जनरेशन

मॉडल की संदर्भ लंबाई 8.192 सेकंड लंबी है। यह स्पष्ट रूप से एक पूर्ण बीटमैप उत्पन्न करने के लिए पर्याप्त नहीं है, इसलिए हमें गीत को कई विंडो में विभाजित करना पड़ता है और बीटमैप को छोटे हिस्सों में उत्पन्न करना पड़ता है। सुनिश्चित करने के लिए कि उत्पन्न बीटमैप की विंडोज़ के बीच कोई स्पष्ट सीम न हो, हम 90% ओवरलैप का उपयोग करते हैं और विंडोज़ को क्रमिक रूप से उत्पन्न करते हैं। प्रत्येक जनरेशन विंडो, पहली को छोड़कर, डिकोडर के साथ विंडो की 50% तक की टोकन पिछली विंडोज़ से प्री-फिल की जाती है। हम लॉजिट प्रोसेसर का उपयोग यह सुनिश्चित करने के लिए करते हैं कि मॉडल जनरेशन विंडो के पहले 50% में समय टोकन उत्पन्न न कर सके। इसके अतिरिक्त, जनरेशन विंडो के अंतिम 40% को अगली विंडो के लिए आरक्षित किया गया है। उस श्रेणी में उत्पन्न समय टोकन को EOS टोकन के रूप में माना जाता है। यह सुनिश्चित करता है कि प्रत्येक उत्पन्न टोकन कम से कम पिछले 4 सेकंड के टोकनों और भविष्य के 3.3 सेकंड के ऑडियो पर आधारित हो ताकि अनुमान लगाया जा सके।

लंबी जनरेशन के दौरान ऑफसेट ड्रिफ्टिंग को रोकने के लिए, प्रशिक्षण के दौरान डिकोडर में समय घटनाओं में यादृच्छिक ऑफसेट जोड़े गए हैं। यह इसे ऑडियो में ऑनसेट्स को सुनकर टाइमिंग त्रुटियों को सुधारने के लिए मजबूर करता है, और परिणामस्वरूप लगातार सटीक ऑफसेट मिलता है।

डिफ्यूजन के साथ सुधारे गए निर्देशांक

डिकोडर द्वारा उत्पन्न स्थिति निर्देशांक 32 पिक्सल ग्रिड बिंदुओं पर क्वांटाइज़ किए जाते हैं, इसलिए बाद में हम अंतिम स्थिति के लिए निर्देशांक को डीनोइज़ करने के लिए डिफ्यूजन का उपयोग करते हैं। इसके लिए हमने osu-diffusion के एक संशोधित संस्करण को प्रशिक्षित किया है, जो केवल शोर अनुसूची के अंतिम 10% के लिए विशेषीकृत है, और Mapperatorinator द्वारा उपयोग किए जाने वाले अधिक उन्नत मेटाडेटा टोकन को सशर्त जनरेशन के लिए स्वीकार करता है।

चूंकि Mapperatorinator मॉडल स्लाइडर्स के SV को आउटपुट करता है, स्लाइडर की आवश्यक लंबाई नियंत्रण बिंदु पथ के आकार की परवाह किए बिना निश्चित रहती है। इसलिए, हम डिफ्यूजन प्रक्रिया को आवश्यक स्लाइडर लंबाई में फिट होने वाले निर्देशांक बनाने के लिए मार्गदर्शन करने का प्रयास करते हैं। हम यह आवश्यक लंबाई और वर्तमान नियंत्रण बिंदु पथ के आधार पर डिफ्यूजन प्रक्रिया के प्रत्येक चरण के बाद स्लाइडर एंड पोजीशन को पुनः गणना करके करते हैं। इसका अर्थ है कि डिफ्यूजन प्रक्रिया को स्लाइडर एंड पोजीशन पर प्रत्यक्ष नियंत्रण नहीं है, लेकिन यह नियंत्रण बिंदु पथ को बदलकर उन्हें प्रभावित कर सकती है।

पोस्ट-प्रोसेसिंग

Mapperatorinator उत्पन्न बीटमैप की गुणवत्ता सुधारने के लिए कुछ अतिरिक्त पोस्ट-प्रोसेसिंग करता है:

सुपर टाइमिंग जनरेटर

सुपर टाइमिंग जनरेटर एक एल्गोरिदम है जो पूरे गीत के लिए टाइमिंग का अनुमान लगाकर 20 बार उसे उत्पन्न करता है और परिणामों का औसत निकालता है, जिससे उत्पन्न टाइमिंग की सटीकता और परिशुद्धता बढ़ जाती है। यह परिवर्तनीय BPM वाले गीतों या BPM परिवर्तन वाले गीतों के लिए उपयोगी है। परिणाम लगभग परिपूर्ण होता है, जिसमें केवल कभी-कभी किसी अनुभाग को मैन्युअल समायोजन की आवश्यकता होती है।

प्रशिक्षण

नीचे दिया गया निर्देश आपके स्थानीय मशीन पर प्रशिक्षण वातावरण बनाता है।

1. रिपॉजिटरी को क्लोन करें

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

2. डेटासेट बनाएं

Mapperator कंसोल ऐप का उपयोग करके अपना खुद का डेटासेट बनाएं। यह बीटमैप्स को सत्यापित करने और अतिरिक्त मेटाडाटा प्राप्त करने के लिए एक osu! OAuth क्लाइंट टोकन की आवश्यकता होती है। डेटासेट को datasets डायरेक्टरी में रखें, जो Mapperatorinator डायरेक्टरी के पास होनी चाहिए।

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

3. (वैकल्पिक) लॉगिंग के लिए वेट एंड बायस सेट-अप करें

वेट एंड बायस पर एक खाता बनाएं और अपनी खाता सेटिंग्स से अपना API कुंजी प्राप्त करें। फिर WANDB_API_KEY एनवायरनमेंट वेरिएबल सेट करें, ताकि प्रशिक्षण प्रक्रिया को पता चले कि किस कुंजी पर लॉग करना है।

export WANDB_API_KEY=

4. डॉकर कंटेनर बनाएं

आप अपने venv में भी प्रशिक्षण कर सकते हैं, लेकिन बेहतर प्रदर्शन के लिए हम WSL पर डॉकर का उपयोग करने की सलाह देते हैं।
docker compose up -d --force-recreate
docker attach mapperatorinator_space
cd Mapperatorinator

5. पैरामीटर कॉन्फ़िगर करें और प्रशिक्षण शुरू करें

सभी कॉन्फ़िगरेशन ./configs/train/default.yaml में स्थित हैं। सुनिश्चित करें कि आपने अपने डेटासेट के लिए सही train_dataset_path और test_dataset_path सेट किया है, साथ ही ट्रेन/टेस्ट स्प्लिट के लिए स्टार्ट और एंड मैपसेट इंडेक्स भी। पथ डॉकर कंटेनर के लिए स्थानीय है, इसलिए यदि आपने अपना डेटासेट cool_dataset नाम से datasets डायरेक्टरी में रखा है, तो यह /workspace/datasets/cool_dataset होना चाहिए।

मैं सुझाव देता हूँ कि आप एक कस्टम कॉन्फ़िग फाइल बनाएं जो डिफ़ॉल्ट कॉन्फ़िग को ओवरराइड करे, ताकि आपके पास अपने प्रशिक्षण कॉन्फ़िग का रिकॉर्ड प्रजननशीलता के लिए रहे।

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 पैरामीटर जिन्हें ध्यान में रखना चाहिए: इनफेरेंस के दौरान, आप lora_path आर्ग्युमेंट के साथ उपयोग करने के लिए LoRA वेट्स निर्दिष्ट कर सकते हैं। यह एक लोकल पथ या Hugging Face रिपॉजिटरी हो सकता है।

यह भी देखें

श्रेय

विशेष धन्यवाद:

संबंधित कार्य

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