Upload folder using huggingface_hub
Browse filesThis view is limited to 50 files because it contains too many changes. ย
See raw diff
- .env +9 -0
- .github/ISSUE_TEMPLATE/bug_report.md +32 -0
- .github/ISSUE_TEMPLATE/feature_request.md +20 -0
- .github/PULL_REQUEST_TEMPLATE.md +20 -0
- .github/workflows/checksum.yml +45 -0
- .github/workflows/close-issue.yml +23 -0
- .github/workflows/docker.yml +70 -0
- .github/workflows/genlocale.yml +38 -0
- .github/workflows/pull_format.yml +48 -0
- .github/workflows/push_format.yml +52 -0
- .github/workflows/sync_dev.yml +23 -0
- .github/workflows/unitest.yml +36 -0
- .gitignore +14 -0
- Dockerfile +46 -0
- LICENSE +661 -0
- README.md +199 -12
- app.py +105 -0
- assets/hubert/.gitignore +2 -0
- assets/indices/.gitignore +2 -0
- assets/pretrained/.gitignore +2 -0
- assets/pretrained_v2/.gitignore +2 -0
- assets/rmvpe/.gitignore +2 -0
- assets/uvr5_weights/.gitignore +2 -0
- configs/__init__.py +1 -0
- configs/config.json +21 -0
- configs/config.py +259 -0
- configs/inuse/.gitignore +4 -0
- configs/inuse/v1/.gitignore +2 -0
- configs/inuse/v2/.gitignore +2 -0
- configs/v1/32k.json +46 -0
- configs/v1/40k.json +46 -0
- configs/v1/48k.json +46 -0
- configs/v2/32k.json +46 -0
- configs/v2/48k.json +46 -0
- docker-compose.yml +20 -0
- docs/cn/README.cn.md +198 -0
- docs/cn/faq.md +150 -0
- docs/en/faiss_tips_en.md +102 -0
- docs/en/faq_en.md +114 -0
- docs/en/training_tips_en.md +65 -0
- docs/fr/README.fr.md +166 -0
- docs/fr/faiss_tips_fr.md +105 -0
- docs/fr/faq_fr.md +164 -0
- docs/fr/training_tips_fr.md +65 -0
- docs/jp/README.ja.md +203 -0
- docs/jp/faiss_tips_ja.md +101 -0
- docs/jp/faq_ja.md +117 -0
- docs/jp/training_tips_ja.md +64 -0
- docs/kr/README.ko.han.md +100 -0
- docs/kr/README.ko.md +359 -0
.env
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
OPENBLAS_NUM_THREADS = 1
|
2 |
+
no_proxy = localhost, 127.0.0.1, ::1
|
3 |
+
|
4 |
+
# You can change the location of the model, etc. by changing here
|
5 |
+
weight_root = assets/weights
|
6 |
+
weight_uvr5_root = assets/uvr5_weights
|
7 |
+
index_root = logs
|
8 |
+
outside_index_root = assets/indices
|
9 |
+
rmvpe_root = assets/rmvpe
|
.github/ISSUE_TEMPLATE/bug_report.md
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
name: Bug report
|
3 |
+
about: Create a report to help us improve
|
4 |
+
title: ''
|
5 |
+
labels: ''
|
6 |
+
assignees: ''
|
7 |
+
|
8 |
+
---
|
9 |
+
|
10 |
+
**Describe the bug**
|
11 |
+
A clear and concise description of what the bug is.
|
12 |
+
|
13 |
+
**To Reproduce**
|
14 |
+
Steps to reproduce the behavior:
|
15 |
+
1. Go to '...'
|
16 |
+
2. Click on '....'
|
17 |
+
3. Scroll down to '....'
|
18 |
+
4. See error
|
19 |
+
|
20 |
+
**Expected behavior**
|
21 |
+
A clear and concise description of what you expected to happen.
|
22 |
+
|
23 |
+
**Screenshots**
|
24 |
+
If applicable, add screenshots to help explain your problem.
|
25 |
+
|
26 |
+
**Desktop (please complete the following information):**
|
27 |
+
- OS and version: [e.g. Windows, Linux]
|
28 |
+
- Python version: [e.g. 3.9.7, 3.11]
|
29 |
+
- Commit/Tag with the issue: [e.g. 22]
|
30 |
+
|
31 |
+
**Additional context**
|
32 |
+
Add any other context about the problem here.
|
.github/ISSUE_TEMPLATE/feature_request.md
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
name: Feature request
|
3 |
+
about: Suggest an idea for this project
|
4 |
+
title: ''
|
5 |
+
labels: ''
|
6 |
+
assignees: ''
|
7 |
+
|
8 |
+
---
|
9 |
+
|
10 |
+
**Is your feature request related to a problem? Please describe.**
|
11 |
+
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
12 |
+
|
13 |
+
**Describe the solution you'd like**
|
14 |
+
A clear and concise description of what you want to happen.
|
15 |
+
|
16 |
+
**Describe alternatives you've considered**
|
17 |
+
A clear and concise description of any alternative solutions or features you've considered.
|
18 |
+
|
19 |
+
**Additional context**
|
20 |
+
Add any other context or screenshots about the feature request here.
|
.github/PULL_REQUEST_TEMPLATE.md
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Pull request checklist
|
2 |
+
|
3 |
+
- [ ] The PR has a proper title. Use [Semantic Commit Messages](https://seesparkbox.com/foundry/semantic_commit_messages). (No more branch-name title please)
|
4 |
+
- [ ] Make sure you are requesting the right branch: `dev`.
|
5 |
+
- [ ] Make sure this is ready to be merged into the relevant branch. Please don't create a PR and let it hang for a few days.
|
6 |
+
- [ ] Ensure all tests are passing.
|
7 |
+
- [ ] Ensure linting is passing.
|
8 |
+
|
9 |
+
# PR type
|
10 |
+
|
11 |
+
- Bug fix / new feature / chore
|
12 |
+
|
13 |
+
# Description
|
14 |
+
|
15 |
+
- Describe what this pull request is for.
|
16 |
+
- What will it affect.
|
17 |
+
|
18 |
+
# Screenshot
|
19 |
+
|
20 |
+
- Please include a screenshot if applicable
|
.github/workflows/checksum.yml
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Calculate and Sync SHA256
|
2 |
+
on:
|
3 |
+
push:
|
4 |
+
branches:
|
5 |
+
- main
|
6 |
+
- dev
|
7 |
+
jobs:
|
8 |
+
checksum:
|
9 |
+
runs-on: ubuntu-latest
|
10 |
+
steps:
|
11 |
+
- uses: actions/checkout@master
|
12 |
+
|
13 |
+
- name: Setup Go Environment
|
14 |
+
uses: actions/setup-go@master
|
15 |
+
|
16 |
+
- name: Run RVC-Models-Downloader
|
17 |
+
run: |
|
18 |
+
wget https://github.com/fumiama/RVC-Models-Downloader/releases/download/v0.2.3/rvcmd_linux_amd64.deb
|
19 |
+
sudo apt -y install ./rvcmd_linux_amd64.deb
|
20 |
+
rm -f ./rvcmd_linux_amd64.deb
|
21 |
+
rvcmd -notrs -w 1 -notui assets/all
|
22 |
+
|
23 |
+
- name: Calculate all Checksums
|
24 |
+
run: go run tools/checksum/*.go
|
25 |
+
|
26 |
+
- name: Commit back
|
27 |
+
if: ${{ !github.head_ref }}
|
28 |
+
id: commitback
|
29 |
+
continue-on-error: true
|
30 |
+
run: |
|
31 |
+
git config --local user.name 'github-actions[bot]'
|
32 |
+
git config --local user.email 'github-actions[bot]@users.noreply.github.com'
|
33 |
+
git add --all
|
34 |
+
git commit -m "chore(env): sync checksum on ${{github.ref_name}}"
|
35 |
+
|
36 |
+
- name: Create Pull Request
|
37 |
+
if: steps.commitback.outcome == 'success'
|
38 |
+
continue-on-error: true
|
39 |
+
uses: peter-evans/create-pull-request@v5
|
40 |
+
with:
|
41 |
+
delete-branch: true
|
42 |
+
body: "Automatically sync checksum in .env"
|
43 |
+
title: "chore(env): sync checksum on ${{github.ref_name}}"
|
44 |
+
commit-message: "chore(env): sync checksum on ${{github.ref_name}}"
|
45 |
+
branch: checksum-${{github.ref_name}}
|
.github/workflows/close-issue.yml
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Close Inactive Issues
|
2 |
+
on:
|
3 |
+
schedule:
|
4 |
+
- cron: "0 4 * * *"
|
5 |
+
|
6 |
+
jobs:
|
7 |
+
close-issues:
|
8 |
+
runs-on: ubuntu-latest
|
9 |
+
permissions:
|
10 |
+
issues: write
|
11 |
+
pull-requests: write
|
12 |
+
steps:
|
13 |
+
- uses: actions/stale@v5
|
14 |
+
with:
|
15 |
+
exempt-issue-labels: "help wanted,good first issue,documentation,following up,todo list"
|
16 |
+
days-before-issue-stale: 30
|
17 |
+
days-before-issue-close: 15
|
18 |
+
stale-issue-label: "stale"
|
19 |
+
close-issue-message: "This issue was closed because it has been inactive for 15 days since being marked as stale."
|
20 |
+
days-before-pr-stale: -1
|
21 |
+
days-before-pr-close: -1
|
22 |
+
operations-per-run: 10000
|
23 |
+
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
.github/workflows/docker.yml
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Build and Push Docker Image
|
2 |
+
|
3 |
+
on:
|
4 |
+
workflow_dispatch:
|
5 |
+
push:
|
6 |
+
# Sequence of patterns matched against refs/tags
|
7 |
+
tags:
|
8 |
+
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
|
9 |
+
|
10 |
+
jobs:
|
11 |
+
build:
|
12 |
+
runs-on: ubuntu-latest
|
13 |
+
permissions:
|
14 |
+
packages: write
|
15 |
+
contents: read
|
16 |
+
steps:
|
17 |
+
- uses: actions/checkout@v3
|
18 |
+
- name: Set time zone
|
19 |
+
uses: szenius/[email protected]
|
20 |
+
with:
|
21 |
+
timezoneLinux: "Asia/Shanghai"
|
22 |
+
timezoneMacos: "Asia/Shanghai"
|
23 |
+
timezoneWindows: "China Standard Time"
|
24 |
+
|
25 |
+
# # ๅฆๆๆ dockerhub ่ดฆๆท๏ผๅฏไปฅๅจgithub็secretsไธญ้
็ฝฎไธ้ขไธคไธช๏ผ็ถๅๅๆถไธ้ขๆณจ้็่ฟๅ ่ก๏ผๅนถๅจmetaๆญฅ้ชค็imagesๅขๅ ไธ่ก ${{ github.repository }}
|
26 |
+
# - name: Login to DockerHub
|
27 |
+
# uses: docker/login-action@v1
|
28 |
+
# with:
|
29 |
+
# username: ${{ secrets.DOCKERHUB_USERNAME }}
|
30 |
+
# password: ${{ secrets.DOCKERHUB_TOKEN }}
|
31 |
+
|
32 |
+
- name: Login to GHCR
|
33 |
+
uses: docker/login-action@v2
|
34 |
+
with:
|
35 |
+
registry: ghcr.io
|
36 |
+
username: ${{ github.repository_owner }}
|
37 |
+
password: ${{ secrets.GITHUB_TOKEN }}
|
38 |
+
|
39 |
+
- name: Extract metadata (tags, labels) for Docker
|
40 |
+
id: meta
|
41 |
+
uses: docker/metadata-action@v4
|
42 |
+
with:
|
43 |
+
images: |
|
44 |
+
ghcr.io/${{ github.repository }}
|
45 |
+
# generate Docker tags based on the following events/attributes
|
46 |
+
# nightly, master, pr-2, 1.2.3, 1.2, 1
|
47 |
+
tags: |
|
48 |
+
type=schedule,pattern=nightly
|
49 |
+
type=edge
|
50 |
+
type=ref,event=branch
|
51 |
+
type=ref,event=pr
|
52 |
+
type=semver,pattern={{version}}
|
53 |
+
type=semver,pattern={{major}}.{{minor}}
|
54 |
+
type=semver,pattern={{major}}
|
55 |
+
|
56 |
+
- name: Set up QEMU
|
57 |
+
uses: docker/setup-qemu-action@v2
|
58 |
+
|
59 |
+
- name: Set up Docker Buildx
|
60 |
+
uses: docker/setup-buildx-action@v2
|
61 |
+
|
62 |
+
- name: Build and push
|
63 |
+
id: docker_build
|
64 |
+
uses: docker/build-push-action@v4
|
65 |
+
with:
|
66 |
+
context: .
|
67 |
+
platforms: linux/amd64,linux/arm64
|
68 |
+
push: true
|
69 |
+
tags: ${{ steps.meta.outputs.tags }}
|
70 |
+
labels: ${{ steps.meta.outputs.labels }}
|
.github/workflows/genlocale.yml
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Generate and Sync Locale
|
2 |
+
on:
|
3 |
+
push:
|
4 |
+
branches:
|
5 |
+
- main
|
6 |
+
- dev
|
7 |
+
jobs:
|
8 |
+
genlocale:
|
9 |
+
runs-on: ubuntu-latest
|
10 |
+
steps:
|
11 |
+
- uses: actions/checkout@master
|
12 |
+
|
13 |
+
- name: Run locale generation
|
14 |
+
run: |
|
15 |
+
python3 i18n/scan_i18n.py
|
16 |
+
cd i18n
|
17 |
+
python3 locale_diff.py
|
18 |
+
|
19 |
+
- name: Commit back
|
20 |
+
if: ${{ !github.head_ref }}
|
21 |
+
id: commitback
|
22 |
+
continue-on-error: true
|
23 |
+
run: |
|
24 |
+
git config --local user.name 'github-actions[bot]'
|
25 |
+
git config --local user.email 'github-actions[bot]@users.noreply.github.com'
|
26 |
+
git add --all
|
27 |
+
git commit -m "chore(i18n): sync locale on ${{github.ref_name}}"
|
28 |
+
|
29 |
+
- name: Create Pull Request
|
30 |
+
if: steps.commitback.outcome == 'success'
|
31 |
+
continue-on-error: true
|
32 |
+
uses: peter-evans/create-pull-request@v5
|
33 |
+
with:
|
34 |
+
delete-branch: true
|
35 |
+
body: "Automatically sync i18n translation jsons"
|
36 |
+
title: "chore(i18n): sync locale on ${{github.ref_name}}"
|
37 |
+
commit-message: "chore(i18n): sync locale on ${{github.ref_name}}"
|
38 |
+
branch: genlocale-${{github.ref_name}}
|
.github/workflows/pull_format.yml
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Check Pull Format
|
2 |
+
|
3 |
+
on:
|
4 |
+
pull_request_target:
|
5 |
+
types: [opened, reopened]
|
6 |
+
|
7 |
+
jobs:
|
8 |
+
# This workflow closes invalid PR
|
9 |
+
close_pr:
|
10 |
+
# The type of runner that the job will run on
|
11 |
+
runs-on: ubuntu-latest
|
12 |
+
permissions: write-all
|
13 |
+
|
14 |
+
# Steps represent a sequence of tasks that will be executed as part of the job
|
15 |
+
steps:
|
16 |
+
- name: Close PR if it is not pointed to dev branch
|
17 |
+
if: github.event.pull_request.base.ref != 'dev'
|
18 |
+
uses: superbrothers/close-pull-request@v3
|
19 |
+
with:
|
20 |
+
# Optional. Post a issue comment just before closing a pull request.
|
21 |
+
comment: "Invalid PR to `non-dev` branch `${{ github.event.pull_request.base.ref }}`."
|
22 |
+
|
23 |
+
pull_format:
|
24 |
+
runs-on: ubuntu-latest
|
25 |
+
permissions:
|
26 |
+
contents: write
|
27 |
+
|
28 |
+
continue-on-error: true
|
29 |
+
|
30 |
+
steps:
|
31 |
+
- name: Checkout
|
32 |
+
continue-on-error: true
|
33 |
+
uses: actions/checkout@v3
|
34 |
+
with:
|
35 |
+
ref: ${{ github.head_ref }}
|
36 |
+
fetch-depth: 0
|
37 |
+
|
38 |
+
- name: Set up Python ${{ matrix.python-version }}
|
39 |
+
uses: actions/setup-python@v4
|
40 |
+
with:
|
41 |
+
python-version: ${{ matrix.python-version }}
|
42 |
+
|
43 |
+
- name: Install Black
|
44 |
+
run: pip install "black[jupyter]"
|
45 |
+
|
46 |
+
- name: Run Black
|
47 |
+
# run: black $(git ls-files '*.py')
|
48 |
+
run: black .
|
.github/workflows/push_format.yml
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Standardize Code Format
|
2 |
+
|
3 |
+
on:
|
4 |
+
push:
|
5 |
+
branches:
|
6 |
+
- main
|
7 |
+
- dev
|
8 |
+
|
9 |
+
jobs:
|
10 |
+
push_format:
|
11 |
+
runs-on: ubuntu-latest
|
12 |
+
|
13 |
+
permissions:
|
14 |
+
contents: write
|
15 |
+
pull-requests: write
|
16 |
+
|
17 |
+
steps:
|
18 |
+
- uses: actions/checkout@v3
|
19 |
+
with:
|
20 |
+
ref: ${{github.ref_name}}
|
21 |
+
|
22 |
+
- name: Set up Python ${{ matrix.python-version }}
|
23 |
+
uses: actions/setup-python@v4
|
24 |
+
with:
|
25 |
+
python-version: ${{ matrix.python-version }}
|
26 |
+
|
27 |
+
- name: Install Black
|
28 |
+
run: pip install "black[jupyter]"
|
29 |
+
|
30 |
+
- name: Run Black
|
31 |
+
# run: black $(git ls-files '*.py')
|
32 |
+
run: black .
|
33 |
+
|
34 |
+
- name: Commit Back
|
35 |
+
continue-on-error: true
|
36 |
+
id: commitback
|
37 |
+
run: |
|
38 |
+
git config --local user.email "github-actions[bot]@users.noreply.github.com"
|
39 |
+
git config --local user.name "github-actions[bot]"
|
40 |
+
git add --all
|
41 |
+
git commit -m "chore(format): run black on ${{github.ref_name}}"
|
42 |
+
|
43 |
+
- name: Create Pull Request
|
44 |
+
if: steps.commitback.outcome == 'success'
|
45 |
+
continue-on-error: true
|
46 |
+
uses: peter-evans/create-pull-request@v5
|
47 |
+
with:
|
48 |
+
delete-branch: true
|
49 |
+
body: "Automatically apply code formatter change"
|
50 |
+
title: "chore(format): run black on ${{github.ref_name}}"
|
51 |
+
commit-message: "chore(format): run black on ${{github.ref_name}}"
|
52 |
+
branch: formatter-${{github.ref_name}}
|
.github/workflows/sync_dev.yml
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Merge dev into main
|
2 |
+
|
3 |
+
on:
|
4 |
+
workflow_dispatch:
|
5 |
+
|
6 |
+
jobs:
|
7 |
+
sync_dev:
|
8 |
+
runs-on: ubuntu-latest
|
9 |
+
|
10 |
+
permissions:
|
11 |
+
contents: write
|
12 |
+
pull-requests: write
|
13 |
+
|
14 |
+
steps:
|
15 |
+
- uses: actions/checkout@v3
|
16 |
+
with:
|
17 |
+
ref: main
|
18 |
+
|
19 |
+
- name: Create Pull Request
|
20 |
+
run: |
|
21 |
+
gh pr create --title "chore(sync): merge dev into main" --body "Merge dev to main" --base main --head dev
|
22 |
+
env:
|
23 |
+
GH_TOKEN: ${{ github.token }}
|
.github/workflows/unitest.yml
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name: Unit Test
|
2 |
+
on: [ push, pull_request ]
|
3 |
+
jobs:
|
4 |
+
build:
|
5 |
+
runs-on: ${{ matrix.os }}
|
6 |
+
strategy:
|
7 |
+
matrix:
|
8 |
+
python-version: ["3.8", "3.9", "3.10"]
|
9 |
+
os: [ubuntu-latest]
|
10 |
+
fail-fast: true
|
11 |
+
|
12 |
+
steps:
|
13 |
+
- uses: actions/checkout@master
|
14 |
+
- name: Set up Python ${{ matrix.python-version }}
|
15 |
+
uses: actions/setup-python@v4
|
16 |
+
with:
|
17 |
+
python-version: ${{ matrix.python-version }}
|
18 |
+
- name: Install dependencies
|
19 |
+
run: |
|
20 |
+
sudo apt update
|
21 |
+
wget https://github.com/fumiama/RVC-Models-Downloader/releases/download/v0.2.3/rvcmd_linux_amd64.deb
|
22 |
+
sudo apt -y install ./rvcmd_linux_amd64.deb
|
23 |
+
python -m pip install --upgrade pip
|
24 |
+
python -m pip install --upgrade setuptools
|
25 |
+
python -m pip install --upgrade wheel
|
26 |
+
pip install torch torchvision torchaudio
|
27 |
+
pip install -r requirements/main.txt
|
28 |
+
rvcmd -notrs -w 1 -notui assets/all
|
29 |
+
- name: Test step 1 & 2
|
30 |
+
run: |
|
31 |
+
mkdir -p logs/mi-test
|
32 |
+
touch logs/mi-test/preprocess.log
|
33 |
+
python infer/modules/train/preprocess.py logs/mute/0_gt_wavs 48000 8 logs/mi-test True 3.7
|
34 |
+
touch logs/mi-test/extract_f0_feature.log
|
35 |
+
python infer/modules/train/extract/extract_f0_print.py logs/mi-test $(nproc) pm
|
36 |
+
python infer/modules/train/extract_feature_print.py cpu 1 0 0 logs/mi-test v1 True
|
.gitignore
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.DS_Store
|
2 |
+
__pycache__
|
3 |
+
/TEMP
|
4 |
+
*.pyd
|
5 |
+
.venv
|
6 |
+
.vscode
|
7 |
+
.idea
|
8 |
+
xcuserdata
|
9 |
+
/opt
|
10 |
+
|
11 |
+
# Generated by RVC
|
12 |
+
/logs
|
13 |
+
|
14 |
+
/assets/weights/*
|
Dockerfile
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# syntax=docker/dockerfile:1
|
2 |
+
|
3 |
+
FROM nvidia/cuda:11.6.2-cudnn8-runtime-ubuntu20.04
|
4 |
+
|
5 |
+
EXPOSE 7865
|
6 |
+
|
7 |
+
WORKDIR /app
|
8 |
+
|
9 |
+
# Install dependenceis to add PPAs
|
10 |
+
RUN apt-get update && \
|
11 |
+
apt-get install -y -qq aria2 && apt clean && \
|
12 |
+
apt-get install -y software-properties-common && \
|
13 |
+
apt-get clean && \
|
14 |
+
rm -rf /var/lib/apt/lists/*
|
15 |
+
# Add the deadsnakes PPA to get Python 3.9
|
16 |
+
RUN add-apt-repository ppa:deadsnakes/ppa
|
17 |
+
|
18 |
+
# Install Python 3.9 and pip
|
19 |
+
RUN apt-get update && \
|
20 |
+
apt-get install -y build-essential python-dev python3-dev python3.9-distutils python3.9-dev python3.9 curl && \
|
21 |
+
apt-get clean && \
|
22 |
+
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1 && \
|
23 |
+
curl https://bootstrap.pypa.io/get-pip.py | python3.9
|
24 |
+
|
25 |
+
# Set Python 3.9 as the default
|
26 |
+
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1
|
27 |
+
|
28 |
+
COPY . .
|
29 |
+
|
30 |
+
RUN python3 -m pip install --no-cache-dir -r requirements/main.txt
|
31 |
+
|
32 |
+
RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/D40k.pth -d assets/pretrained_v2/ -o D40k.pth
|
33 |
+
RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/G40k.pth -d assets/pretrained_v2/ -o G40k.pth
|
34 |
+
RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0D40k.pth -d assets/pretrained_v2/ -o f0D40k.pth
|
35 |
+
RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/pretrained_v2/f0G40k.pth -d assets/pretrained_v2/ -o f0G40k.pth
|
36 |
+
|
37 |
+
RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP2-ไบบๅฃฐvocals+้ไบบๅฃฐinstrumentals.pth -d assets/uvr5_weights/ -o HP2-ไบบๅฃฐvocals+้ไบบๅฃฐinstrumentals.pth
|
38 |
+
RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/uvr5_weights/HP5-ไธปๆๅพไบบๅฃฐvocals+ๅ
ถไปinstrumentals.pth -d assets/uvr5_weights/ -o HP5-ไธปๆๅพไบบๅฃฐvocals+ๅ
ถไปinstrumentals.pth
|
39 |
+
|
40 |
+
RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt -d assets/hubert -o hubert_base.pt
|
41 |
+
|
42 |
+
RUN aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/rmvpe.pt -d assets/rmvpe -o rmvpe.pt
|
43 |
+
|
44 |
+
VOLUME [ "/app/weights", "/app/opt" ]
|
45 |
+
|
46 |
+
CMD ["python3", "web.py"]
|
LICENSE
ADDED
@@ -0,0 +1,661 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
GNU AFFERO GENERAL PUBLIC LICENSE
|
2 |
+
Version 3, 19 November 2007
|
3 |
+
|
4 |
+
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
5 |
+
Everyone is permitted to copy and distribute verbatim copies
|
6 |
+
of this license document, but changing it is not allowed.
|
7 |
+
|
8 |
+
Preamble
|
9 |
+
|
10 |
+
The GNU Affero General Public License is a free, copyleft license for
|
11 |
+
software and other kinds of works, specifically designed to ensure
|
12 |
+
cooperation with the community in the case of network server software.
|
13 |
+
|
14 |
+
The licenses for most software and other practical works are designed
|
15 |
+
to take away your freedom to share and change the works. By contrast,
|
16 |
+
our General Public Licenses are intended to guarantee your freedom to
|
17 |
+
share and change all versions of a program--to make sure it remains free
|
18 |
+
software for all its users.
|
19 |
+
|
20 |
+
When we speak of free software, we are referring to freedom, not
|
21 |
+
price. Our General Public Licenses are designed to make sure that you
|
22 |
+
have the freedom to distribute copies of free software (and charge for
|
23 |
+
them if you wish), that you receive source code or can get it if you
|
24 |
+
want it, that you can change the software or use pieces of it in new
|
25 |
+
free programs, and that you know you can do these things.
|
26 |
+
|
27 |
+
Developers that use our General Public Licenses protect your rights
|
28 |
+
with two steps: (1) assert copyright on the software, and (2) offer
|
29 |
+
you this License which gives you legal permission to copy, distribute
|
30 |
+
and/or modify the software.
|
31 |
+
|
32 |
+
A secondary benefit of defending all users' freedom is that
|
33 |
+
improvements made in alternate versions of the program, if they
|
34 |
+
receive widespread use, become available for other developers to
|
35 |
+
incorporate. Many developers of free software are heartened and
|
36 |
+
encouraged by the resulting cooperation. However, in the case of
|
37 |
+
software used on network servers, this result may fail to come about.
|
38 |
+
The GNU General Public License permits making a modified version and
|
39 |
+
letting the public access it on a server without ever releasing its
|
40 |
+
source code to the public.
|
41 |
+
|
42 |
+
The GNU Affero General Public License is designed specifically to
|
43 |
+
ensure that, in such cases, the modified source code becomes available
|
44 |
+
to the community. It requires the operator of a network server to
|
45 |
+
provide the source code of the modified version running there to the
|
46 |
+
users of that server. Therefore, public use of a modified version, on
|
47 |
+
a publicly accessible server, gives the public access to the source
|
48 |
+
code of the modified version.
|
49 |
+
|
50 |
+
An older license, called the Affero General Public License and
|
51 |
+
published by Affero, was designed to accomplish similar goals. This is
|
52 |
+
a different license, not a version of the Affero GPL, but Affero has
|
53 |
+
released a new version of the Affero GPL which permits relicensing under
|
54 |
+
this license.
|
55 |
+
|
56 |
+
The precise terms and conditions for copying, distribution and
|
57 |
+
modification follow.
|
58 |
+
|
59 |
+
TERMS AND CONDITIONS
|
60 |
+
|
61 |
+
0. Definitions.
|
62 |
+
|
63 |
+
"This License" refers to version 3 of the GNU Affero General Public License.
|
64 |
+
|
65 |
+
"Copyright" also means copyright-like laws that apply to other kinds of
|
66 |
+
works, such as semiconductor masks.
|
67 |
+
|
68 |
+
"The Program" refers to any copyrightable work licensed under this
|
69 |
+
License. Each licensee is addressed as "you". "Licensees" and
|
70 |
+
"recipients" may be individuals or organizations.
|
71 |
+
|
72 |
+
To "modify" a work means to copy from or adapt all or part of the work
|
73 |
+
in a fashion requiring copyright permission, other than the making of an
|
74 |
+
exact copy. The resulting work is called a "modified version" of the
|
75 |
+
earlier work or a work "based on" the earlier work.
|
76 |
+
|
77 |
+
A "covered work" means either the unmodified Program or a work based
|
78 |
+
on the Program.
|
79 |
+
|
80 |
+
To "propagate" a work means to do anything with it that, without
|
81 |
+
permission, would make you directly or secondarily liable for
|
82 |
+
infringement under applicable copyright law, except executing it on a
|
83 |
+
computer or modifying a private copy. Propagation includes copying,
|
84 |
+
distribution (with or without modification), making available to the
|
85 |
+
public, and in some countries other activities as well.
|
86 |
+
|
87 |
+
To "convey" a work means any kind of propagation that enables other
|
88 |
+
parties to make or receive copies. Mere interaction with a user through
|
89 |
+
a computer network, with no transfer of a copy, is not conveying.
|
90 |
+
|
91 |
+
An interactive user interface displays "Appropriate Legal Notices"
|
92 |
+
to the extent that it includes a convenient and prominently visible
|
93 |
+
feature that (1) displays an appropriate copyright notice, and (2)
|
94 |
+
tells the user that there is no warranty for the work (except to the
|
95 |
+
extent that warranties are provided), that licensees may convey the
|
96 |
+
work under this License, and how to view a copy of this License. If
|
97 |
+
the interface presents a list of user commands or options, such as a
|
98 |
+
menu, a prominent item in the list meets this criterion.
|
99 |
+
|
100 |
+
1. Source Code.
|
101 |
+
|
102 |
+
The "source code" for a work means the preferred form of the work
|
103 |
+
for making modifications to it. "Object code" means any non-source
|
104 |
+
form of a work.
|
105 |
+
|
106 |
+
A "Standard Interface" means an interface that either is an official
|
107 |
+
standard defined by a recognized standards body, or, in the case of
|
108 |
+
interfaces specified for a particular programming language, one that
|
109 |
+
is widely used among developers working in that language.
|
110 |
+
|
111 |
+
The "System Libraries" of an executable work include anything, other
|
112 |
+
than the work as a whole, that (a) is included in the normal form of
|
113 |
+
packaging a Major Component, but which is not part of that Major
|
114 |
+
Component, and (b) serves only to enable use of the work with that
|
115 |
+
Major Component, or to implement a Standard Interface for which an
|
116 |
+
implementation is available to the public in source code form. A
|
117 |
+
"Major Component", in this context, means a major essential component
|
118 |
+
(kernel, window system, and so on) of the specific operating system
|
119 |
+
(if any) on which the executable work runs, or a compiler used to
|
120 |
+
produce the work, or an object code interpreter used to run it.
|
121 |
+
|
122 |
+
The "Corresponding Source" for a work in object code form means all
|
123 |
+
the source code needed to generate, install, and (for an executable
|
124 |
+
work) run the object code and to modify the work, including scripts to
|
125 |
+
control those activities. However, it does not include the work's
|
126 |
+
System Libraries, or general-purpose tools or generally available free
|
127 |
+
programs which are used unmodified in performing those activities but
|
128 |
+
which are not part of the work. For example, Corresponding Source
|
129 |
+
includes interface definition files associated with source files for
|
130 |
+
the work, and the source code for shared libraries and dynamically
|
131 |
+
linked subprograms that the work is specifically designed to require,
|
132 |
+
such as by intimate data communication or control flow between those
|
133 |
+
subprograms and other parts of the work.
|
134 |
+
|
135 |
+
The Corresponding Source need not include anything that users
|
136 |
+
can regenerate automatically from other parts of the Corresponding
|
137 |
+
Source.
|
138 |
+
|
139 |
+
The Corresponding Source for a work in source code form is that
|
140 |
+
same work.
|
141 |
+
|
142 |
+
2. Basic Permissions.
|
143 |
+
|
144 |
+
All rights granted under this License are granted for the term of
|
145 |
+
copyright on the Program, and are irrevocable provided the stated
|
146 |
+
conditions are met. This License explicitly affirms your unlimited
|
147 |
+
permission to run the unmodified Program. The output from running a
|
148 |
+
covered work is covered by this License only if the output, given its
|
149 |
+
content, constitutes a covered work. This License acknowledges your
|
150 |
+
rights of fair use or other equivalent, as provided by copyright law.
|
151 |
+
|
152 |
+
You may make, run and propagate covered works that you do not
|
153 |
+
convey, without conditions so long as your license otherwise remains
|
154 |
+
in force. You may convey covered works to others for the sole purpose
|
155 |
+
of having them make modifications exclusively for you, or provide you
|
156 |
+
with facilities for running those works, provided that you comply with
|
157 |
+
the terms of this License in conveying all material for which you do
|
158 |
+
not control copyright. Those thus making or running the covered works
|
159 |
+
for you must do so exclusively on your behalf, under your direction
|
160 |
+
and control, on terms that prohibit them from making any copies of
|
161 |
+
your copyrighted material outside their relationship with you.
|
162 |
+
|
163 |
+
Conveying under any other circumstances is permitted solely under
|
164 |
+
the conditions stated below. Sublicensing is not allowed; section 10
|
165 |
+
makes it unnecessary.
|
166 |
+
|
167 |
+
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
168 |
+
|
169 |
+
No covered work shall be deemed part of an effective technological
|
170 |
+
measure under any applicable law fulfilling obligations under article
|
171 |
+
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
172 |
+
similar laws prohibiting or restricting circumvention of such
|
173 |
+
measures.
|
174 |
+
|
175 |
+
When you convey a covered work, you waive any legal power to forbid
|
176 |
+
circumvention of technological measures to the extent such circumvention
|
177 |
+
is effected by exercising rights under this License with respect to
|
178 |
+
the covered work, and you disclaim any intention to limit operation or
|
179 |
+
modification of the work as a means of enforcing, against the work's
|
180 |
+
users, your or third parties' legal rights to forbid circumvention of
|
181 |
+
technological measures.
|
182 |
+
|
183 |
+
4. Conveying Verbatim Copies.
|
184 |
+
|
185 |
+
You may convey verbatim copies of the Program's source code as you
|
186 |
+
receive it, in any medium, provided that you conspicuously and
|
187 |
+
appropriately publish on each copy an appropriate copyright notice;
|
188 |
+
keep intact all notices stating that this License and any
|
189 |
+
non-permissive terms added in accord with section 7 apply to the code;
|
190 |
+
keep intact all notices of the absence of any warranty; and give all
|
191 |
+
recipients a copy of this License along with the Program.
|
192 |
+
|
193 |
+
You may charge any price or no price for each copy that you convey,
|
194 |
+
and you may offer support or warranty protection for a fee.
|
195 |
+
|
196 |
+
5. Conveying Modified Source Versions.
|
197 |
+
|
198 |
+
You may convey a work based on the Program, or the modifications to
|
199 |
+
produce it from the Program, in the form of source code under the
|
200 |
+
terms of section 4, provided that you also meet all of these conditions:
|
201 |
+
|
202 |
+
a) The work must carry prominent notices stating that you modified
|
203 |
+
it, and giving a relevant date.
|
204 |
+
|
205 |
+
b) The work must carry prominent notices stating that it is
|
206 |
+
released under this License and any conditions added under section
|
207 |
+
7. This requirement modifies the requirement in section 4 to
|
208 |
+
"keep intact all notices".
|
209 |
+
|
210 |
+
c) You must license the entire work, as a whole, under this
|
211 |
+
License to anyone who comes into possession of a copy. This
|
212 |
+
License will therefore apply, along with any applicable section 7
|
213 |
+
additional terms, to the whole of the work, and all its parts,
|
214 |
+
regardless of how they are packaged. This License gives no
|
215 |
+
permission to license the work in any other way, but it does not
|
216 |
+
invalidate such permission if you have separately received it.
|
217 |
+
|
218 |
+
d) If the work has interactive user interfaces, each must display
|
219 |
+
Appropriate Legal Notices; however, if the Program has interactive
|
220 |
+
interfaces that do not display Appropriate Legal Notices, your
|
221 |
+
work need not make them do so.
|
222 |
+
|
223 |
+
A compilation of a covered work with other separate and independent
|
224 |
+
works, which are not by their nature extensions of the covered work,
|
225 |
+
and which are not combined with it such as to form a larger program,
|
226 |
+
in or on a volume of a storage or distribution medium, is called an
|
227 |
+
"aggregate" if the compilation and its resulting copyright are not
|
228 |
+
used to limit the access or legal rights of the compilation's users
|
229 |
+
beyond what the individual works permit. Inclusion of a covered work
|
230 |
+
in an aggregate does not cause this License to apply to the other
|
231 |
+
parts of the aggregate.
|
232 |
+
|
233 |
+
6. Conveying Non-Source Forms.
|
234 |
+
|
235 |
+
You may convey a covered work in object code form under the terms
|
236 |
+
of sections 4 and 5, provided that you also convey the
|
237 |
+
machine-readable Corresponding Source under the terms of this License,
|
238 |
+
in one of these ways:
|
239 |
+
|
240 |
+
a) Convey the object code in, or embodied in, a physical product
|
241 |
+
(including a physical distribution medium), accompanied by the
|
242 |
+
Corresponding Source fixed on a durable physical medium
|
243 |
+
customarily used for software interchange.
|
244 |
+
|
245 |
+
b) Convey the object code in, or embodied in, a physical product
|
246 |
+
(including a physical distribution medium), accompanied by a
|
247 |
+
written offer, valid for at least three years and valid for as
|
248 |
+
long as you offer spare parts or customer support for that product
|
249 |
+
model, to give anyone who possesses the object code either (1) a
|
250 |
+
copy of the Corresponding Source for all the software in the
|
251 |
+
product that is covered by this License, on a durable physical
|
252 |
+
medium customarily used for software interchange, for a price no
|
253 |
+
more than your reasonable cost of physically performing this
|
254 |
+
conveying of source, or (2) access to copy the
|
255 |
+
Corresponding Source from a network server at no charge.
|
256 |
+
|
257 |
+
c) Convey individual copies of the object code with a copy of the
|
258 |
+
written offer to provide the Corresponding Source. This
|
259 |
+
alternative is allowed only occasionally and noncommercially, and
|
260 |
+
only if you received the object code with such an offer, in accord
|
261 |
+
with subsection 6b.
|
262 |
+
|
263 |
+
d) Convey the object code by offering access from a designated
|
264 |
+
place (gratis or for a charge), and offer equivalent access to the
|
265 |
+
Corresponding Source in the same way through the same place at no
|
266 |
+
further charge. You need not require recipients to copy the
|
267 |
+
Corresponding Source along with the object code. If the place to
|
268 |
+
copy the object code is a network server, the Corresponding Source
|
269 |
+
may be on a different server (operated by you or a third party)
|
270 |
+
that supports equivalent copying facilities, provided you maintain
|
271 |
+
clear directions next to the object code saying where to find the
|
272 |
+
Corresponding Source. Regardless of what server hosts the
|
273 |
+
Corresponding Source, you remain obligated to ensure that it is
|
274 |
+
available for as long as needed to satisfy these requirements.
|
275 |
+
|
276 |
+
e) Convey the object code using peer-to-peer transmission, provided
|
277 |
+
you inform other peers where the object code and Corresponding
|
278 |
+
Source of the work are being offered to the general public at no
|
279 |
+
charge under subsection 6d.
|
280 |
+
|
281 |
+
A separable portion of the object code, whose source code is excluded
|
282 |
+
from the Corresponding Source as a System Library, need not be
|
283 |
+
included in conveying the object code work.
|
284 |
+
|
285 |
+
A "User Product" is either (1) a "consumer product", which means any
|
286 |
+
tangible personal property which is normally used for personal, family,
|
287 |
+
or household purposes, or (2) anything designed or sold for incorporation
|
288 |
+
into a dwelling. In determining whether a product is a consumer product,
|
289 |
+
doubtful cases shall be resolved in favor of coverage. For a particular
|
290 |
+
product received by a particular user, "normally used" refers to a
|
291 |
+
typical or common use of that class of product, regardless of the status
|
292 |
+
of the particular user or of the way in which the particular user
|
293 |
+
actually uses, or expects or is expected to use, the product. A product
|
294 |
+
is a consumer product regardless of whether the product has substantial
|
295 |
+
commercial, industrial or non-consumer uses, unless such uses represent
|
296 |
+
the only significant mode of use of the product.
|
297 |
+
|
298 |
+
"Installation Information" for a User Product means any methods,
|
299 |
+
procedures, authorization keys, or other information required to install
|
300 |
+
and execute modified versions of a covered work in that User Product from
|
301 |
+
a modified version of its Corresponding Source. The information must
|
302 |
+
suffice to ensure that the continued functioning of the modified object
|
303 |
+
code is in no case prevented or interfered with solely because
|
304 |
+
modification has been made.
|
305 |
+
|
306 |
+
If you convey an object code work under this section in, or with, or
|
307 |
+
specifically for use in, a User Product, and the conveying occurs as
|
308 |
+
part of a transaction in which the right of possession and use of the
|
309 |
+
User Product is transferred to the recipient in perpetuity or for a
|
310 |
+
fixed term (regardless of how the transaction is characterized), the
|
311 |
+
Corresponding Source conveyed under this section must be accompanied
|
312 |
+
by the Installation Information. But this requirement does not apply
|
313 |
+
if neither you nor any third party retains the ability to install
|
314 |
+
modified object code on the User Product (for example, the work has
|
315 |
+
been installed in ROM).
|
316 |
+
|
317 |
+
The requirement to provide Installation Information does not include a
|
318 |
+
requirement to continue to provide support service, warranty, or updates
|
319 |
+
for a work that has been modified or installed by the recipient, or for
|
320 |
+
the User Product in which it has been modified or installed. Access to a
|
321 |
+
network may be denied when the modification itself materially and
|
322 |
+
adversely affects the operation of the network or violates the rules and
|
323 |
+
protocols for communication across the network.
|
324 |
+
|
325 |
+
Corresponding Source conveyed, and Installation Information provided,
|
326 |
+
in accord with this section must be in a format that is publicly
|
327 |
+
documented (and with an implementation available to the public in
|
328 |
+
source code form), and must require no special password or key for
|
329 |
+
unpacking, reading or copying.
|
330 |
+
|
331 |
+
7. Additional Terms.
|
332 |
+
|
333 |
+
"Additional permissions" are terms that supplement the terms of this
|
334 |
+
License by making exceptions from one or more of its conditions.
|
335 |
+
Additional permissions that are applicable to the entire Program shall
|
336 |
+
be treated as though they were included in this License, to the extent
|
337 |
+
that they are valid under applicable law. If additional permissions
|
338 |
+
apply only to part of the Program, that part may be used separately
|
339 |
+
under those permissions, but the entire Program remains governed by
|
340 |
+
this License without regard to the additional permissions.
|
341 |
+
|
342 |
+
When you convey a copy of a covered work, you may at your option
|
343 |
+
remove any additional permissions from that copy, or from any part of
|
344 |
+
it. (Additional permissions may be written to require their own
|
345 |
+
removal in certain cases when you modify the work.) You may place
|
346 |
+
additional permissions on material, added by you to a covered work,
|
347 |
+
for which you have or can give appropriate copyright permission.
|
348 |
+
|
349 |
+
Notwithstanding any other provision of this License, for material you
|
350 |
+
add to a covered work, you may (if authorized by the copyright holders of
|
351 |
+
that material) supplement the terms of this License with terms:
|
352 |
+
|
353 |
+
a) Disclaiming warranty or limiting liability differently from the
|
354 |
+
terms of sections 15 and 16 of this License; or
|
355 |
+
|
356 |
+
b) Requiring preservation of specified reasonable legal notices or
|
357 |
+
author attributions in that material or in the Appropriate Legal
|
358 |
+
Notices displayed by works containing it; or
|
359 |
+
|
360 |
+
c) Prohibiting misrepresentation of the origin of that material, or
|
361 |
+
requiring that modified versions of such material be marked in
|
362 |
+
reasonable ways as different from the original version; or
|
363 |
+
|
364 |
+
d) Limiting the use for publicity purposes of names of licensors or
|
365 |
+
authors of the material; or
|
366 |
+
|
367 |
+
e) Declining to grant rights under trademark law for use of some
|
368 |
+
trade names, trademarks, or service marks; or
|
369 |
+
|
370 |
+
f) Requiring indemnification of licensors and authors of that
|
371 |
+
material by anyone who conveys the material (or modified versions of
|
372 |
+
it) with contractual assumptions of liability to the recipient, for
|
373 |
+
any liability that these contractual assumptions directly impose on
|
374 |
+
those licensors and authors.
|
375 |
+
|
376 |
+
All other non-permissive additional terms are considered "further
|
377 |
+
restrictions" within the meaning of section 10. If the Program as you
|
378 |
+
received it, or any part of it, contains a notice stating that it is
|
379 |
+
governed by this License along with a term that is a further
|
380 |
+
restriction, you may remove that term. If a license document contains
|
381 |
+
a further restriction but permits relicensing or conveying under this
|
382 |
+
License, you may add to a covered work material governed by the terms
|
383 |
+
of that license document, provided that the further restriction does
|
384 |
+
not survive such relicensing or conveying.
|
385 |
+
|
386 |
+
If you add terms to a covered work in accord with this section, you
|
387 |
+
must place, in the relevant source files, a statement of the
|
388 |
+
additional terms that apply to those files, or a notice indicating
|
389 |
+
where to find the applicable terms.
|
390 |
+
|
391 |
+
Additional terms, permissive or non-permissive, may be stated in the
|
392 |
+
form of a separately written license, or stated as exceptions;
|
393 |
+
the above requirements apply either way.
|
394 |
+
|
395 |
+
8. Termination.
|
396 |
+
|
397 |
+
You may not propagate or modify a covered work except as expressly
|
398 |
+
provided under this License. Any attempt otherwise to propagate or
|
399 |
+
modify it is void, and will automatically terminate your rights under
|
400 |
+
this License (including any patent licenses granted under the third
|
401 |
+
paragraph of section 11).
|
402 |
+
|
403 |
+
However, if you cease all violation of this License, then your
|
404 |
+
license from a particular copyright holder is reinstated (a)
|
405 |
+
provisionally, unless and until the copyright holder explicitly and
|
406 |
+
finally terminates your license, and (b) permanently, if the copyright
|
407 |
+
holder fails to notify you of the violation by some reasonable means
|
408 |
+
prior to 60 days after the cessation.
|
409 |
+
|
410 |
+
Moreover, your license from a particular copyright holder is
|
411 |
+
reinstated permanently if the copyright holder notifies you of the
|
412 |
+
violation by some reasonable means, this is the first time you have
|
413 |
+
received notice of violation of this License (for any work) from that
|
414 |
+
copyright holder, and you cure the violation prior to 30 days after
|
415 |
+
your receipt of the notice.
|
416 |
+
|
417 |
+
Termination of your rights under this section does not terminate the
|
418 |
+
licenses of parties who have received copies or rights from you under
|
419 |
+
this License. If your rights have been terminated and not permanently
|
420 |
+
reinstated, you do not qualify to receive new licenses for the same
|
421 |
+
material under section 10.
|
422 |
+
|
423 |
+
9. Acceptance Not Required for Having Copies.
|
424 |
+
|
425 |
+
You are not required to accept this License in order to receive or
|
426 |
+
run a copy of the Program. Ancillary propagation of a covered work
|
427 |
+
occurring solely as a consequence of using peer-to-peer transmission
|
428 |
+
to receive a copy likewise does not require acceptance. However,
|
429 |
+
nothing other than this License grants you permission to propagate or
|
430 |
+
modify any covered work. These actions infringe copyright if you do
|
431 |
+
not accept this License. Therefore, by modifying or propagating a
|
432 |
+
covered work, you indicate your acceptance of this License to do so.
|
433 |
+
|
434 |
+
10. Automatic Licensing of Downstream Recipients.
|
435 |
+
|
436 |
+
Each time you convey a covered work, the recipient automatically
|
437 |
+
receives a license from the original licensors, to run, modify and
|
438 |
+
propagate that work, subject to this License. You are not responsible
|
439 |
+
for enforcing compliance by third parties with this License.
|
440 |
+
|
441 |
+
An "entity transaction" is a transaction transferring control of an
|
442 |
+
organization, or substantially all assets of one, or subdividing an
|
443 |
+
organization, or merging organizations. If propagation of a covered
|
444 |
+
work results from an entity transaction, each party to that
|
445 |
+
transaction who receives a copy of the work also receives whatever
|
446 |
+
licenses to the work the party's predecessor in interest had or could
|
447 |
+
give under the previous paragraph, plus a right to possession of the
|
448 |
+
Corresponding Source of the work from the predecessor in interest, if
|
449 |
+
the predecessor has it or can get it with reasonable efforts.
|
450 |
+
|
451 |
+
You may not impose any further restrictions on the exercise of the
|
452 |
+
rights granted or affirmed under this License. For example, you may
|
453 |
+
not impose a license fee, royalty, or other charge for exercise of
|
454 |
+
rights granted under this License, and you may not initiate litigation
|
455 |
+
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
456 |
+
any patent claim is infringed by making, using, selling, offering for
|
457 |
+
sale, or importing the Program or any portion of it.
|
458 |
+
|
459 |
+
11. Patents.
|
460 |
+
|
461 |
+
A "contributor" is a copyright holder who authorizes use under this
|
462 |
+
License of the Program or a work on which the Program is based. The
|
463 |
+
work thus licensed is called the contributor's "contributor version".
|
464 |
+
|
465 |
+
A contributor's "essential patent claims" are all patent claims
|
466 |
+
owned or controlled by the contributor, whether already acquired or
|
467 |
+
hereafter acquired, that would be infringed by some manner, permitted
|
468 |
+
by this License, of making, using, or selling its contributor version,
|
469 |
+
but do not include claims that would be infringed only as a
|
470 |
+
consequence of further modification of the contributor version. For
|
471 |
+
purposes of this definition, "control" includes the right to grant
|
472 |
+
patent sublicenses in a manner consistent with the requirements of
|
473 |
+
this License.
|
474 |
+
|
475 |
+
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
476 |
+
patent license under the contributor's essential patent claims, to
|
477 |
+
make, use, sell, offer for sale, import and otherwise run, modify and
|
478 |
+
propagate the contents of its contributor version.
|
479 |
+
|
480 |
+
In the following three paragraphs, a "patent license" is any express
|
481 |
+
agreement or commitment, however denominated, not to enforce a patent
|
482 |
+
(such as an express permission to practice a patent or covenant not to
|
483 |
+
sue for patent infringement). To "grant" such a patent license to a
|
484 |
+
party means to make such an agreement or commitment not to enforce a
|
485 |
+
patent against the party.
|
486 |
+
|
487 |
+
If you convey a covered work, knowingly relying on a patent license,
|
488 |
+
and the Corresponding Source of the work is not available for anyone
|
489 |
+
to copy, free of charge and under the terms of this License, through a
|
490 |
+
publicly available network server or other readily accessible means,
|
491 |
+
then you must either (1) cause the Corresponding Source to be so
|
492 |
+
available, or (2) arrange to deprive yourself of the benefit of the
|
493 |
+
patent license for this particular work, or (3) arrange, in a manner
|
494 |
+
consistent with the requirements of this License, to extend the patent
|
495 |
+
license to downstream recipients. "Knowingly relying" means you have
|
496 |
+
actual knowledge that, but for the patent license, your conveying the
|
497 |
+
covered work in a country, or your recipient's use of the covered work
|
498 |
+
in a country, would infringe one or more identifiable patents in that
|
499 |
+
country that you have reason to believe are valid.
|
500 |
+
|
501 |
+
If, pursuant to or in connection with a single transaction or
|
502 |
+
arrangement, you convey, or propagate by procuring conveyance of, a
|
503 |
+
covered work, and grant a patent license to some of the parties
|
504 |
+
receiving the covered work authorizing them to use, propagate, modify
|
505 |
+
or convey a specific copy of the covered work, then the patent license
|
506 |
+
you grant is automatically extended to all recipients of the covered
|
507 |
+
work and works based on it.
|
508 |
+
|
509 |
+
A patent license is "discriminatory" if it does not include within
|
510 |
+
the scope of its coverage, prohibits the exercise of, or is
|
511 |
+
conditioned on the non-exercise of one or more of the rights that are
|
512 |
+
specifically granted under this License. You may not convey a covered
|
513 |
+
work if you are a party to an arrangement with a third party that is
|
514 |
+
in the business of distributing software, under which you make payment
|
515 |
+
to the third party based on the extent of your activity of conveying
|
516 |
+
the work, and under which the third party grants, to any of the
|
517 |
+
parties who would receive the covered work from you, a discriminatory
|
518 |
+
patent license (a) in connection with copies of the covered work
|
519 |
+
conveyed by you (or copies made from those copies), or (b) primarily
|
520 |
+
for and in connection with specific products or compilations that
|
521 |
+
contain the covered work, unless you entered into that arrangement,
|
522 |
+
or that patent license was granted, prior to 28 March 2007.
|
523 |
+
|
524 |
+
Nothing in this License shall be construed as excluding or limiting
|
525 |
+
any implied license or other defenses to infringement that may
|
526 |
+
otherwise be available to you under applicable patent law.
|
527 |
+
|
528 |
+
12. No Surrender of Others' Freedom.
|
529 |
+
|
530 |
+
If conditions are imposed on you (whether by court order, agreement or
|
531 |
+
otherwise) that contradict the conditions of this License, they do not
|
532 |
+
excuse you from the conditions of this License. If you cannot convey a
|
533 |
+
covered work so as to satisfy simultaneously your obligations under this
|
534 |
+
License and any other pertinent obligations, then as a consequence you may
|
535 |
+
not convey it at all. For example, if you agree to terms that obligate you
|
536 |
+
to collect a royalty for further conveying from those to whom you convey
|
537 |
+
the Program, the only way you could satisfy both those terms and this
|
538 |
+
License would be to refrain entirely from conveying the Program.
|
539 |
+
|
540 |
+
13. Remote Network Interaction; Use with the GNU General Public License.
|
541 |
+
|
542 |
+
Notwithstanding any other provision of this License, if you modify the
|
543 |
+
Program, your modified version must prominently offer all users
|
544 |
+
interacting with it remotely through a computer network (if your version
|
545 |
+
supports such interaction) an opportunity to receive the Corresponding
|
546 |
+
Source of your version by providing access to the Corresponding Source
|
547 |
+
from a network server at no charge, through some standard or customary
|
548 |
+
means of facilitating copying of software. This Corresponding Source
|
549 |
+
shall include the Corresponding Source for any work covered by version 3
|
550 |
+
of the GNU General Public License that is incorporated pursuant to the
|
551 |
+
following paragraph.
|
552 |
+
|
553 |
+
Notwithstanding any other provision of this License, you have
|
554 |
+
permission to link or combine any covered work with a work licensed
|
555 |
+
under version 3 of the GNU General Public License into a single
|
556 |
+
combined work, and to convey the resulting work. The terms of this
|
557 |
+
License will continue to apply to the part which is the covered work,
|
558 |
+
but the work with which it is combined will remain governed by version
|
559 |
+
3 of the GNU General Public License.
|
560 |
+
|
561 |
+
14. Revised Versions of this License.
|
562 |
+
|
563 |
+
The Free Software Foundation may publish revised and/or new versions of
|
564 |
+
the GNU Affero General Public License from time to time. Such new versions
|
565 |
+
will be similar in spirit to the present version, but may differ in detail to
|
566 |
+
address new problems or concerns.
|
567 |
+
|
568 |
+
Each version is given a distinguishing version number. If the
|
569 |
+
Program specifies that a certain numbered version of the GNU Affero General
|
570 |
+
Public License "or any later version" applies to it, you have the
|
571 |
+
option of following the terms and conditions either of that numbered
|
572 |
+
version or of any later version published by the Free Software
|
573 |
+
Foundation. If the Program does not specify a version number of the
|
574 |
+
GNU Affero General Public License, you may choose any version ever published
|
575 |
+
by the Free Software Foundation.
|
576 |
+
|
577 |
+
If the Program specifies that a proxy can decide which future
|
578 |
+
versions of the GNU Affero General Public License can be used, that proxy's
|
579 |
+
public statement of acceptance of a version permanently authorizes you
|
580 |
+
to choose that version for the Program.
|
581 |
+
|
582 |
+
Later license versions may give you additional or different
|
583 |
+
permissions. However, no additional obligations are imposed on any
|
584 |
+
author or copyright holder as a result of your choosing to follow a
|
585 |
+
later version.
|
586 |
+
|
587 |
+
15. Disclaimer of Warranty.
|
588 |
+
|
589 |
+
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
590 |
+
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
591 |
+
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
592 |
+
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
593 |
+
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
594 |
+
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
595 |
+
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
596 |
+
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
597 |
+
|
598 |
+
16. Limitation of Liability.
|
599 |
+
|
600 |
+
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
601 |
+
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
602 |
+
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
603 |
+
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
604 |
+
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
605 |
+
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
606 |
+
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
607 |
+
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
608 |
+
SUCH DAMAGES.
|
609 |
+
|
610 |
+
17. Interpretation of Sections 15 and 16.
|
611 |
+
|
612 |
+
If the disclaimer of warranty and limitation of liability provided
|
613 |
+
above cannot be given local legal effect according to their terms,
|
614 |
+
reviewing courts shall apply local law that most closely approximates
|
615 |
+
an absolute waiver of all civil liability in connection with the
|
616 |
+
Program, unless a warranty or assumption of liability accompanies a
|
617 |
+
copy of the Program in return for a fee.
|
618 |
+
|
619 |
+
END OF TERMS AND CONDITIONS
|
620 |
+
|
621 |
+
How to Apply These Terms to Your New Programs
|
622 |
+
|
623 |
+
If you develop a new program, and you want it to be of the greatest
|
624 |
+
possible use to the public, the best way to achieve this is to make it
|
625 |
+
free software which everyone can redistribute and change under these terms.
|
626 |
+
|
627 |
+
To do so, attach the following notices to the program. It is safest
|
628 |
+
to attach them to the start of each source file to most effectively
|
629 |
+
state the exclusion of warranty; and each file should have at least
|
630 |
+
the "copyright" line and a pointer to where the full notice is found.
|
631 |
+
|
632 |
+
<one line to give the program's name and a brief idea of what it does.>
|
633 |
+
Copyright (C) <year> <name of author>
|
634 |
+
|
635 |
+
This program is free software: you can redistribute it and/or modify
|
636 |
+
it under the terms of the GNU Affero General Public License as published
|
637 |
+
by the Free Software Foundation, either version 3 of the License, or
|
638 |
+
(at your option) any later version.
|
639 |
+
|
640 |
+
This program is distributed in the hope that it will be useful,
|
641 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
642 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
643 |
+
GNU Affero General Public License for more details.
|
644 |
+
|
645 |
+
You should have received a copy of the GNU Affero General Public License
|
646 |
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
647 |
+
|
648 |
+
Also add information on how to contact you by electronic and paper mail.
|
649 |
+
|
650 |
+
If your software can interact with users remotely through a computer
|
651 |
+
network, you should also make sure that it provides a way for users to
|
652 |
+
get its source. For example, if your program is a web application, its
|
653 |
+
interface could display a "Source" link that leads users to an archive
|
654 |
+
of the code. There are many ways you could offer source, and different
|
655 |
+
solutions will be better for different programs; see section 13 for the
|
656 |
+
specific requirements.
|
657 |
+
|
658 |
+
You should also get your employer (if you work as a programmer) or school,
|
659 |
+
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
660 |
+
For more information on this, and how to apply and follow the GNU AGPL, see
|
661 |
+
<https://www.gnu.org/licenses/>.
|
README.md
CHANGED
@@ -1,12 +1,199 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div align="center">
|
2 |
+
|
3 |
+
# Retrieval-based-Voice-Conversion-WebUI
|
4 |
+
An easy-to-use voice conversion framework based on VITS.
|
5 |
+
|
6 |
+
|
7 |
+
|
8 |
+
[![madewithlove](https://img.shields.io/badge/made_with-%E2%9D%A4-red?style=for-the-badge&labelColor=orange
|
9 |
+
)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI)
|
10 |
+
|
11 |
+
![moe](https://counter.seku.su/cmoe?name=rvc&theme=r34)
|
12 |
+
|
13 |
+
[![Licence](https://img.shields.io/github/license/fumiama/Retrieval-based-Voice-Conversion-WebUI?style=for-the-badge)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/blob/main/LICENSE)
|
14 |
+
[![Huggingface](https://img.shields.io/badge/๐ค%20-Spaces-yellow.svg?style=for-the-badge)](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
15 |
+
|
16 |
+
[![Discord](https://img.shields.io/badge/RVC%20Developers-Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/HcsmBBGyVk)
|
17 |
+
|
18 |
+
[**FAQ (Frequently Asked Questions)**](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/wiki/FAQ-(Frequently-Asked-Questions))
|
19 |
+
|
20 |
+
[**English**](./README.md) | [**ไธญๆ็ฎไฝ**](./docs/cn/README.cn.md) | [**ๆฅๆฌ่ช**](./docs/jp/README.ja.md) | [**ํ๊ตญ์ด**](./docs/kr/README.ko.md) ([**้ๅ่ช**](./docs/kr/README.ko.han.md)) | [**Franรงais**](./docs/fr/README.fr.md) | [**Tรผrkรงe**](./docs/tr/README.tr.md) | [**Portuguรชs**](./docs/pt/README.pt.md)
|
21 |
+
|
22 |
+
</div>
|
23 |
+
|
24 |
+
> The base model is trained using nearly 50 hours of high-quality open-source VCTK training set. Therefore, there are no copyright concerns, please feel free to use.
|
25 |
+
|
26 |
+
> Please look forward to the base model of RVCv3 with larger parameters, larger dataset, better effects, basically flat inference speed, and less training data required.
|
27 |
+
|
28 |
+
> There's a [one-click downloader](https://github.com/fumiama/RVC-Models-Downloader) for models/integration packages/tools. Welcome to try.
|
29 |
+
|
30 |
+
| Training and inference Webui |
|
31 |
+
| :--------: |
|
32 |
+
| ![web](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/assets/41315874/17e48404-2627-4fad-a0ec-65f9065aeade) |
|
33 |
+
|
34 |
+
| Real-time voice changing GUI |
|
35 |
+
| :---------: |
|
36 |
+
| ![realtime-gui](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/assets/41315874/95b36866-b92d-40c7-b5db-6a35ca5caeac) |
|
37 |
+
|
38 |
+
## Features:
|
39 |
+
+ Reduce tone leakage by replacing the source feature to training-set feature using top1 retrieval;
|
40 |
+
+ Easy + fast training, even on poor graphics cards;
|
41 |
+
+ Training with a small amounts of data (>=10min low noise speech recommended);
|
42 |
+
+ Model fusion to change timbres (using ckpt processing tab->ckpt merge);
|
43 |
+
+ Easy-to-use WebUI;
|
44 |
+
+ UVR5 model to quickly separate vocals and instruments;
|
45 |
+
+ High-pitch Voice Extraction Algorithm [InterSpeech2023-RMVPE](#Credits) to prevent a muted sound problem. Provides the best results (significantly) and is faster with lower resource consumption than Crepe_full;
|
46 |
+
+ AMD/Intel graphics cards acceleration supported;
|
47 |
+
+ Intel ARC graphics cards acceleration with IPEX supported.
|
48 |
+
|
49 |
+
Check out our [Demo Video](https://www.bilibili.com/video/BV1pm4y1z7Gm/) here!
|
50 |
+
|
51 |
+
## Environment Configuration
|
52 |
+
### Python Version Limitation
|
53 |
+
> It is recommended to use conda to manage the Python environment.
|
54 |
+
|
55 |
+
> For the reason of the version limitation, please refer to this [bug](https://github.com/facebookresearch/fairseq/issues/5012).
|
56 |
+
|
57 |
+
```bash
|
58 |
+
python --version # 3.8 <= Python < 3.11
|
59 |
+
```
|
60 |
+
|
61 |
+
### Linux/MacOS One-click Dependency Installation & Startup Script
|
62 |
+
By executing `run.sh` in the project root directory, you can configure the `venv` virtual environment, automatically install the required dependencies, and start the main program with one click.
|
63 |
+
```bash
|
64 |
+
sh ./run.sh
|
65 |
+
```
|
66 |
+
|
67 |
+
### Manual Installation of Dependencies
|
68 |
+
1. Install `pytorch` and its core dependencies, skip if already installed. Refer to: https://pytorch.org/get-started/locally/
|
69 |
+
```bash
|
70 |
+
pip install torch torchvision torchaudio
|
71 |
+
```
|
72 |
+
2. If you are using Nvidia Ampere architecture (RTX30xx) in Windows, according to the experience of #21, you need to specify the cuda version corresponding to pytorch.
|
73 |
+
```bash
|
74 |
+
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
|
75 |
+
```
|
76 |
+
3. Install the corresponding dependencies according to your own graphics card.
|
77 |
+
- Nvidia GPU
|
78 |
+
```bash
|
79 |
+
pip install -r requirements/main.txt
|
80 |
+
```
|
81 |
+
- AMD/Intel GPU
|
82 |
+
```bash
|
83 |
+
pip install -r requirements/dml.txt
|
84 |
+
```
|
85 |
+
- AMD ROCM (Linux)
|
86 |
+
```bash
|
87 |
+
pip install -r requirements/amd.txt
|
88 |
+
```
|
89 |
+
- Intel IPEX (Linux)
|
90 |
+
```bash
|
91 |
+
pip install -r requirements/ipex.txt
|
92 |
+
```
|
93 |
+
|
94 |
+
## Preparation of Other Files
|
95 |
+
### 1. Assets
|
96 |
+
> RVC requires some models located in the `assets` folder for inference and training.
|
97 |
+
#### Check/Download Automatically (Default)
|
98 |
+
> By default, RVC can automatically check the integrity of the required resources when the main program starts.
|
99 |
+
|
100 |
+
> Even if the resources are not complete, the program will continue to start.
|
101 |
+
|
102 |
+
- If you want to download all resources, please add the `--update` parameter.
|
103 |
+
- If you want to skip the resource integrity check at startup, please add the `--nocheck` parameter.
|
104 |
+
|
105 |
+
#### Download Manually
|
106 |
+
> All resource files are located in [Hugging Face space](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
107 |
+
|
108 |
+
> You can find some scripts to download them in the `tools` folder
|
109 |
+
|
110 |
+
> You can also use the [one-click downloader](https://github.com/fumiama/RVC-Models-Downloader) for models/integration packages/tools
|
111 |
+
|
112 |
+
Below is a list that includes the names of all pre-models and other files required by RVC.
|
113 |
+
|
114 |
+
- ./assets/hubert/hubert_base.pt
|
115 |
+
```bash
|
116 |
+
rvcmd assets/hubert # RVC-Models-Downloader command
|
117 |
+
```
|
118 |
+
- ./assets/pretrained
|
119 |
+
```bash
|
120 |
+
rvcmd assets/v1 # RVC-Models-Downloader command
|
121 |
+
```
|
122 |
+
- ./assets/uvr5_weights
|
123 |
+
```bash
|
124 |
+
rvcmd assets/uvr5 # RVC-Models-Downloader command
|
125 |
+
```
|
126 |
+
If you want to use the v2 version of the model, you need to download additional resources in
|
127 |
+
|
128 |
+
- ./assets/pretrained_v2
|
129 |
+
```bash
|
130 |
+
rvcmd assets/v2 # RVC-Models-Downloader command
|
131 |
+
```
|
132 |
+
|
133 |
+
### 2. Download the required files for the rmvpe vocal pitch extraction algorithm
|
134 |
+
|
135 |
+
If you want to use the latest RMVPE vocal pitch extraction algorithm, you need to download the pitch extraction model parameters and place them in `assets/rmvpe`.
|
136 |
+
|
137 |
+
- [rmvpe.pt](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.pt)
|
138 |
+
```bash
|
139 |
+
rvcmd assets/rmvpe # RVC-Models-Downloader command
|
140 |
+
```
|
141 |
+
|
142 |
+
#### Download DML environment of RMVPE (optional, for AMD/Intel GPU)
|
143 |
+
|
144 |
+
- [rmvpe.onnx](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.onnx)
|
145 |
+
```bash
|
146 |
+
rvcmd assets/rmvpe # RVC-Models-Downloader command
|
147 |
+
```
|
148 |
+
|
149 |
+
### 3. AMD ROCM (optional, Linux only)
|
150 |
+
|
151 |
+
If you want to run RVC on a Linux system based on AMD's ROCM technology, please first install the required drivers [here](https://rocm.docs.amd.com/en/latest/deploy/linux/os-native/install.html).
|
152 |
+
|
153 |
+
If you are using Arch Linux, you can use pacman to install the required drivers.
|
154 |
+
````
|
155 |
+
pacman -S rocm-hip-sdk rocm-opencl-sdk
|
156 |
+
````
|
157 |
+
For some models of graphics cards, you may need to configure the following environment variables (such as: RX6700XT).
|
158 |
+
````
|
159 |
+
export ROCM_PATH=/opt/rocm
|
160 |
+
export HSA_OVERRIDE_GFX_VERSION=10.3.0
|
161 |
+
````
|
162 |
+
Also, make sure your current user is in the `render` and `video` user groups.
|
163 |
+
````
|
164 |
+
sudo usermod -aG render $USERNAME
|
165 |
+
sudo usermod -aG video $USERNAME
|
166 |
+
````
|
167 |
+
## Getting Started
|
168 |
+
### Direct Launch
|
169 |
+
Use the following command to start the WebUI.
|
170 |
+
```bash
|
171 |
+
python web.py
|
172 |
+
```
|
173 |
+
### Linux/MacOS
|
174 |
+
```bash
|
175 |
+
./run.sh
|
176 |
+
```
|
177 |
+
### For I-card users who need to use IPEX technology (Linux only)
|
178 |
+
```bash
|
179 |
+
source /opt/intel/oneapi/setvars.sh
|
180 |
+
./run.sh
|
181 |
+
```
|
182 |
+
### Using the Integration Package (Windows Users)
|
183 |
+
Download and unzip `RVC-beta.7z`. After unzipping, double-click `go-web.bat` to start the program with one click.
|
184 |
+
```bash
|
185 |
+
rvcmd packs/general/latest # RVC-Models-Downloader command
|
186 |
+
```
|
187 |
+
|
188 |
+
## Credits
|
189 |
+
+ [ContentVec](https://github.com/auspicious3000/contentvec/)
|
190 |
+
+ [VITS](https://github.com/jaywalnut310/vits)
|
191 |
+
+ [HIFIGAN](https://github.com/jik876/hifi-gan)
|
192 |
+
+ [Gradio](https://github.com/gradio-app/gradio)
|
193 |
+
+ [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)
|
194 |
+
+ [audio-slicer](https://github.com/openvpi/audio-slicer)
|
195 |
+
+ [Vocal pitch extraction:RMVPE](https://github.com/Dream-High/RMVPE)
|
196 |
+
+ The pretrained model is trained and tested by [yxlllc](https://github.com/yxlllc/RMVPE) and [RVC-Boss](https://github.com/RVC-Boss).
|
197 |
+
|
198 |
+
## Thanks to all contributors for their efforts
|
199 |
+
[![contributors](https://contrib.rocks/image?repo=fumiama/Retrieval-based-Voice-Conversion-WebUI)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/graphs/contributors)
|
app.py
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from web import *
|
2 |
+
import gradio as gr
|
3 |
+
import os
|
4 |
+
|
5 |
+
with gr.Blocks(title="RVC UI") as app:
|
6 |
+
gr.Markdown("<center><h1> **RVC UI**")
|
7 |
+
gr.Markdown("<h1>this ui not done yet!")
|
8 |
+
with gr.TabItem("inference"):
|
9 |
+
with gr.Tabs():
|
10 |
+
models = gr.Dropdown(label="voice model", choices=sorted(names))
|
11 |
+
with gr.Row():
|
12 |
+
clean_button = gr.Button("Refresh model", variant="primary")
|
13 |
+
with gr.Row():
|
14 |
+
with gr.Row():
|
15 |
+
pith_voice = gr.Number(label="Transpose 12 for femal, -12 fo male)", value=0)
|
16 |
+
spk_item = gr.Slider(minimum=0, maximum=2333, step=1, label="Select Speaker/Singer ID", value=0, visible=False, interactive=False)
|
17 |
+
clean_button.click(fn=clean, inputs=[], outputs=[models], api_name="infer_clean")
|
18 |
+
modelinfo = gr.Textbox(label="Model info", max_lines=8, visible=False)
|
19 |
+
|
20 |
+
input_audio0 = gr.Audio(label="The audio file to be processed", type="filepath")
|
21 |
+
file_index1 = gr.File(label="Path to the feature index file. Leave blank to use the selected result from the dropdown")
|
22 |
+
with gr.Column():
|
23 |
+
f0method0 = gr.Radio(label="Select the pitch extraction algorithm ('pm': faster extraction but lower-quality speech; 'harvest': better bass but extremely slow; 'crepe': better quality but GPU intensive), 'rmvpe': best quality, and little GPU requirement", choices=["pm", "dio", "harvest", "crepe", "rmvpe", "fcpe"], value="rmvpe", interactive=True)
|
24 |
+
resample_sr0 = gr.Slider(minimum=0, maximum=48000, label="Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling", value=0, step=1, interactive=True)
|
25 |
+
rms_mix_rate0 = gr.Slider(minimum=0, maximum=1, label="Adjust the volume envelope scaling. Closer to 0, the more it mimicks the volume of the original vocals. Can help mask noise and make volume sound more natural when set relatively low. Closer to 1 will be more of a consistently loud volume", value=0.25, interactive=True)
|
26 |
+
protect0 = gr.Slider(minimum=0, maximum=0.5, label="Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy", value=0.33, step=0.01, interactive=True)
|
27 |
+
filter_radius0 = gr.Slider(minimum=0, maximum=7, label="If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.", value=3, step=1, interactive=True)
|
28 |
+
f0_file = gr.File(label="F0 curve file (optional). One pitch per line. Replaces the default F0 and pitch modulation", visible=False)
|
29 |
+
but0 = gr.Button("Convert", variant="primary")
|
30 |
+
vc_output1 = gr.Textbox(label="Output information", interactive=False)
|
31 |
+
vc_output2 = gr.Audio(label="Export audio (click on the three dots in the lower right corner to download)", type="filepath", interactive=False)
|
32 |
+
#refresh_button.click(fn=change_choices, inputs=[], outputs=[models, file_index2], api_name="infer_refresh")
|
33 |
+
with gr.Accordion("Batch inference"):
|
34 |
+
gr.Markdown("<center>Batch conversion\n. Enter the folder containing the audio files to be converted or upload multiple audio files. The converted audio will be output in the specified folder (default: 'opt').")
|
35 |
+
vc_transform1 = gr.Number(label="Transpose (integer, number of semitones, raise by an octave: 12, lower by an octave: -12)", value=0)
|
36 |
+
dir_input = gr.Textbox(label="Enter the path of the audio folder to be processed (copy it from the address bar of the file manager)", placeholder="C:\\Users\\Desktop\\input_vocal_dir")
|
37 |
+
inputs = gr.File(file_count="multiple", label="Multiple audio files can also be imported. If a folder path exists, this input is ignored.")
|
38 |
+
opt_input = gr.Textbox(label="Specify output folder", value="opt")
|
39 |
+
file_index4 = gr.Dropdown(label="Auto-detect index path and select from the dropdown", choices=sorted(index_paths), interactive=True)
|
40 |
+
file_index3 = gr.File(label="Path to the feature index file. Leave blank to use the selected result from the dropdown")
|
41 |
+
#refresh_button.click(fn=lambda: change_choices()[1], inputs=[], outputs=file_index4, api_name="infer_refresh_batch")
|
42 |
+
f0method1 = gr.Radio(label="Select the pitch extraction algorithm ('pm': faster extraction but lower-quality speech; 'harvest': better bass but extremely slow; 'crepe': better quality but GPU intensive), 'rmvpe': best quality, and little GPU requirement", choices=["pm", "harvest", "crepe", "rmvpe", "fcpe"], value="rmvpe", interactive=True)
|
43 |
+
resample_sr1 = gr.Slider(minimum=0, maximum=48000, label="Resample the output audio in post-processing to the final sample rate. Set to 0 for no resampling", value=0, step=1, interactive=True)
|
44 |
+
rms_mix_rate1 = gr.Slider(minimum=0, maximum=1, label="Adjust the volume envelope scaling. Closer to 0, the more it mimicks the volume of the original vocals. Can help mask noise and make volume sound more natural when set relatively low. Closer to 1 will be more of a consistently loud volume", value=1, interactive=True)
|
45 |
+
protect1 = gr.Slider(minimum=0, maximum=0.5, label="Protect voiceless consonants and breath sounds to prevent artifacts such as tearing in electronic music. Set to 0.5 to disable. Decrease the value to increase protection, but it may reduce indexing accuracy", value=0.33, step=0.01, interactive=True)
|
46 |
+
filter_radius1 = gr.Slider(minimum=0, maximum=7, label="If >=3: apply median filtering to the harvested pitch results. The value represents the filter radius and can reduce breathiness.", value=3, step=1, interactive=True)
|
47 |
+
index_rate2 = gr.Slider(minimum=0, maximum=1, label="Feature searching ratio", value=1, interactive=True)
|
48 |
+
format1 = gr.Radio(label="Export file format", choices=["wav", "flac", "mp3", "m4a"], value="wav", interactive=True)
|
49 |
+
but1 = gr.Button("Convert", variant="primary")
|
50 |
+
vc_output3 = gr.Textbox(
|
51 |
+
label="Output information",
|
52 |
+
interactive=False
|
53 |
+
)
|
54 |
+
|
55 |
+
with gr.TabItem("Train"):
|
56 |
+
gr.Markdown("### Step 1. Fill in the experimental configuration.\nExperimental data is stored in the 'logs' folder, with each experiment having a separate folder. Manually enter the experiment name path, which contains the experimental configuration, logs, and trained model files.")
|
57 |
+
exp_dir1 = gr.Textbox(label="Enter the experiment name", value="my voice")
|
58 |
+
author = gr.Textbox(label="Model Author (Nullable)")
|
59 |
+
np7 = gr.Slider(minimum=0, maximum=config.n_cpu, step=1, label="Number of CPU processes used for pitch extraction and data processing", value=int(np.ceil(config.n_cpu / 1.5)), interactive=True)
|
60 |
+
sr2 = gr.Radio(label="Target sample rate", choices=["40k", "48k"], value="40k", interactive=True)
|
61 |
+
if_f0_3 = gr.Radio(label="Whether the model has pitch guidance (required for singing, optional for speech)", choices=["Yes", "No"], value="Yes", interactive=True)
|
62 |
+
version19 = gr.Radio(label="Version", choices=["v1", "v2"], value="v2", interactive=True, visible=True)
|
63 |
+
gr.Markdown("### Step 2. Audio processing. \n#### 1. Slicing.\nAutomatically traverse all files in the training folder that can be decoded into audio and perform slice normalization. Generates 2 wav folders in the experiment directory. Currently, only single-singer/speaker training is supported.")
|
64 |
+
trainset_dir4 = gr.Textbox(label="Enter the path of the training folder")
|
65 |
+
spk_id5 = gr.Slider(minimum=0, maximum=4, step=1, label="Please specify the speaker/singer ID", value=0, interactive=True)
|
66 |
+
gr.Markdown("#### 2. Feature extraction.\nUse CPU to extract pitch (if the model has pitch), use GPU to extract features (select GPU index).")
|
67 |
+
gpu_info9 = gr.Textbox(label="GPU Information",value=gpu_info,visible=F0GPUVisible)
|
68 |
+
gpus6 = gr.Textbox(label="Enter the GPU index(es) separated by '-', e.g., 0-1-2 to use GPU 0, 1, and 2",value=gpus,interactive=True,visible=F0GPUVisible)
|
69 |
+
gpus_rmvpe = gr.Textbox(label="Enter the GPU index(es) separated by '-', e.g., 0-0-1 to use 2 processes in GPU0 and 1 process in GPU1",value="%s-%s" % (gpus, gpus),interactive=True,visible=F0GPUVisible)
|
70 |
+
f0method8 = gr.Radio(label="Select the pitch extraction algorithm: when extracting singing, you can use 'pm' to speed up. For high-quality speech with fast performance, but worse CPU usage, you can use 'dio'. 'harvest' results in better quality but is slower. 'rmvpe' has the best results and consumes less CPU/GPU", choices=["pm", "harvest", "dio", "rmvpe", "rmvpe_gpu"], value="rmvpe_gpu", interactive=True)
|
71 |
+
f0method8.change(fn=change_f0_method,inputs=[f0method8],outputs=[gpus_rmvpe])
|
72 |
+
gr.Markdown("### Step 3. Start training.\nFill in the training settings and start training the model and index.")
|
73 |
+
save_epoch10 = gr.Slider(minimum=1, maximum=50, step=1, label="Save frequency (save_every_epoch)", value=5, interactive=True)
|
74 |
+
total_epoch11 = gr.Slider(minimum=2, maximum=1000, step=1, label="Total training epochs (total_epoch)", value=20, interactive=True)
|
75 |
+
batch_size12 = gr.Slider(minimum=1, maximum=40, step=1, label="Batch size per GPU", value=20, interactive=True)
|
76 |
+
if_save_latest13 = gr.Radio(label="Save only the latest '.ckpt' file to save disk space", choices=["Yes", "No"], value="No", interactive=True)
|
77 |
+
if_cache_gpu17 = gr.Radio(label="Cache all training sets to GPU memory. Caching small datasets (less than 10 minutes) can speed up training, but caching large datasets will consume a lot of GPU memory and may not provide much speed improvement", choices=["Yes", "No"], value="No", interactive=True)
|
78 |
+
if_save_every_weights18 = gr.Radio(label="Save a small final model to the 'weights' folder at each save point", choices=["Yes","No"], value="No", interactive=True)
|
79 |
+
pretrained_G14 = gr.Textbox(label="Load pre-trained base model G path", value="assets/pretrained_v2/f0G40k.pth", interactive=True)
|
80 |
+
pretrained_D15 = gr.Textbox(label="Load pre-trained base model D path", value="assets/pretrained_v2/f0D40k.pth", interactive=True)
|
81 |
+
gpus16 = gr.Textbox(label="Enter the GPU index(es) separated by '-', e.g., 0-1-2 to use GPU 0, 1, and 2", value="0", interactive=True)
|
82 |
+
sr2.change(change_sr2,[sr2, if_f0_3, version19],[pretrained_G14, pretrained_D15])
|
83 |
+
version19.change(change_version19,[sr2, if_f0_3, version19],[pretrained_G14, pretrained_D15, sr2])
|
84 |
+
if_f0_3.change(fn=lambda: None, inputs=[if_f0_3, sr2, version19], outputs=[f0method8, gpus_rmvpe, pretrained_G14, pretrained_D15])
|
85 |
+
but1 = gr.Button("Process data", variant="primary")
|
86 |
+
but2 = gr.Button("Feature extraction", variant="primary")
|
87 |
+
but3 = gr.Button("Train model", variant="primary")
|
88 |
+
but4 = gr.Button("Train feature index", variant="primary")
|
89 |
+
but5 = gr.Button("One-click training", variant="primary")
|
90 |
+
info1 = gr.Textbox(label="Output information", value="")
|
91 |
+
|
92 |
+
but2.click(extract_f0_feature,[gpus6,np7,f0method8,if_f0_3,exp_dir1,version19,gpus_rmvpe,],[info1],api_name="train_extract_f0_feature")
|
93 |
+
but1.click(preprocess_dataset,[trainset_dir4, exp_dir1, sr2, np7],[info1],api_name="train_preprocess")
|
94 |
+
but3.click(click_train,[exp_dir1,sr2,if_f0_3,spk_id5,save_epoch10,total_epoch11,batch_size12,if_save_latest13,pretrained_G14,pretrained_D15,gpus16,if_cache_gpu17,if_save_every_weights18,version19,author,],info1,api_name="train_start")
|
95 |
+
but4.click(train_index, [exp_dir1, version19], info3)
|
96 |
+
but5.click(train1key,[exp_dir1,sr2,if_f0_3,trainset_dir4,spk_id5,np7,f0method8,save_epoch10,total_epoch11,batch_size12,if_save_latest13,pretrained_G14,pretrained_D15,gpus16,if_cache_gpu17,if_save_every_weights18,version19,gpus_rmvpe,author],info1,api_name="train_start_all")
|
97 |
+
|
98 |
+
with gr.TabItem('Credits'):
|
99 |
+
gr.Markdown(
|
100 |
+
f"""
|
101 |
+
This UI's Made by Blane187
|
102 |
+
"""
|
103 |
+
)
|
104 |
+
app.launch()
|
105 |
+
|
assets/hubert/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
assets/indices/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
assets/pretrained/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
assets/pretrained_v2/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
assets/rmvpe/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
assets/uvr5_weights/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
configs/__init__.py
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
from .config import singleton_variable, Config, CPUConfig
|
configs/config.json
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"pth_path": "",
|
3 |
+
"index_path": "",
|
4 |
+
"sg_hostapi": "MME",
|
5 |
+
"sg_wasapi_exclusive": false,
|
6 |
+
"sg_input_device": "",
|
7 |
+
"sg_output_device": "",
|
8 |
+
"sr_type": "sr_device",
|
9 |
+
"threhold": -60.0,
|
10 |
+
"pitch": 12.0,
|
11 |
+
"formant": 0.0,
|
12 |
+
"rms_mix_rate": 0.5,
|
13 |
+
"index_rate": 0.0,
|
14 |
+
"block_time": 0.15,
|
15 |
+
"crossfade_length": 0.08,
|
16 |
+
"extra_time": 2.0,
|
17 |
+
"n_cpu": 4.0,
|
18 |
+
"use_jit": false,
|
19 |
+
"use_pv": false,
|
20 |
+
"f0method": "fcpe"
|
21 |
+
}
|
configs/config.py
ADDED
@@ -0,0 +1,259 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import argparse
|
2 |
+
import os
|
3 |
+
import sys
|
4 |
+
import json
|
5 |
+
import shutil
|
6 |
+
from multiprocessing import cpu_count
|
7 |
+
|
8 |
+
import torch
|
9 |
+
|
10 |
+
# TODO: move device selection into rvc
|
11 |
+
import logging
|
12 |
+
|
13 |
+
logger = logging.getLogger(__name__)
|
14 |
+
|
15 |
+
|
16 |
+
version_config_list = [
|
17 |
+
"v1/32k.json",
|
18 |
+
"v1/40k.json",
|
19 |
+
"v1/48k.json",
|
20 |
+
"v2/48k.json",
|
21 |
+
"v2/32k.json",
|
22 |
+
]
|
23 |
+
|
24 |
+
|
25 |
+
def singleton_variable(func):
|
26 |
+
def wrapper(*args, **kwargs):
|
27 |
+
if wrapper.instance is None:
|
28 |
+
wrapper.instance = func(*args, **kwargs)
|
29 |
+
return wrapper.instance
|
30 |
+
|
31 |
+
wrapper.instance = None
|
32 |
+
return wrapper
|
33 |
+
|
34 |
+
|
35 |
+
@singleton_variable
|
36 |
+
class Config:
|
37 |
+
def __init__(self):
|
38 |
+
self.device = "cuda:0"
|
39 |
+
self.is_half = True
|
40 |
+
self.use_jit = False
|
41 |
+
self.n_cpu = 0
|
42 |
+
self.gpu_name = None
|
43 |
+
self.json_config = self.load_config_json()
|
44 |
+
self.gpu_mem = None
|
45 |
+
(
|
46 |
+
self.python_cmd,
|
47 |
+
self.listen_port,
|
48 |
+
self.global_link,
|
49 |
+
self.noparallel,
|
50 |
+
self.noautoopen,
|
51 |
+
self.dml,
|
52 |
+
self.nocheck,
|
53 |
+
self.update,
|
54 |
+
) = self.arg_parse()
|
55 |
+
self.instead = ""
|
56 |
+
self.preprocess_per = 3.7
|
57 |
+
self.x_pad, self.x_query, self.x_center, self.x_max = self.device_config()
|
58 |
+
|
59 |
+
@staticmethod
|
60 |
+
def load_config_json() -> dict:
|
61 |
+
d = {}
|
62 |
+
for config_file in version_config_list:
|
63 |
+
p = f"configs/inuse/{config_file}"
|
64 |
+
if not os.path.exists(p):
|
65 |
+
shutil.copy(f"configs/{config_file}", p)
|
66 |
+
with open(f"configs/inuse/{config_file}", "r") as f:
|
67 |
+
d[config_file] = json.load(f)
|
68 |
+
return d
|
69 |
+
|
70 |
+
@staticmethod
|
71 |
+
def arg_parse() -> tuple:
|
72 |
+
exe = sys.executable or "python"
|
73 |
+
parser = argparse.ArgumentParser()
|
74 |
+
parser.add_argument("--port", type=int, default=7865, help="Listen port")
|
75 |
+
parser.add_argument("--pycmd", type=str, default=exe, help="Python command")
|
76 |
+
parser.add_argument(
|
77 |
+
"--global_link", action="store_true", help="Generate a global proxy link"
|
78 |
+
)
|
79 |
+
parser.add_argument(
|
80 |
+
"--noparallel", action="store_true", help="Disable parallel processing"
|
81 |
+
)
|
82 |
+
parser.add_argument(
|
83 |
+
"--noautoopen",
|
84 |
+
action="store_true",
|
85 |
+
help="Do not open in browser automatically",
|
86 |
+
)
|
87 |
+
parser.add_argument(
|
88 |
+
"--dml",
|
89 |
+
action="store_true",
|
90 |
+
help="torch_dml",
|
91 |
+
)
|
92 |
+
parser.add_argument(
|
93 |
+
"--nocheck", action="store_true", help="Run without checking assets"
|
94 |
+
)
|
95 |
+
parser.add_argument(
|
96 |
+
"--update", action="store_true", help="Update to latest assets"
|
97 |
+
)
|
98 |
+
cmd_opts = parser.parse_args()
|
99 |
+
|
100 |
+
cmd_opts.port = cmd_opts.port if 0 <= cmd_opts.port <= 65535 else 7865
|
101 |
+
|
102 |
+
return (
|
103 |
+
cmd_opts.pycmd,
|
104 |
+
cmd_opts.port,
|
105 |
+
cmd_opts.global_link,
|
106 |
+
cmd_opts.noparallel,
|
107 |
+
cmd_opts.noautoopen,
|
108 |
+
cmd_opts.dml,
|
109 |
+
cmd_opts.nocheck,
|
110 |
+
cmd_opts.update,
|
111 |
+
)
|
112 |
+
|
113 |
+
# has_mps is only available in nightly pytorch (for now) and MasOS 12.3+.
|
114 |
+
# check `getattr` and try it for compatibility
|
115 |
+
@staticmethod
|
116 |
+
def has_mps() -> bool:
|
117 |
+
if not torch.backends.mps.is_available():
|
118 |
+
return False
|
119 |
+
try:
|
120 |
+
torch.zeros(1).to(torch.device("mps"))
|
121 |
+
return True
|
122 |
+
except Exception:
|
123 |
+
return False
|
124 |
+
|
125 |
+
@staticmethod
|
126 |
+
def has_xpu() -> bool:
|
127 |
+
if hasattr(torch, "xpu") and torch.xpu.is_available():
|
128 |
+
return True
|
129 |
+
else:
|
130 |
+
return False
|
131 |
+
|
132 |
+
def use_fp32_config(self):
|
133 |
+
for config_file in version_config_list:
|
134 |
+
self.json_config[config_file]["train"]["fp16_run"] = False
|
135 |
+
with open(f"configs/inuse/{config_file}", "r") as f:
|
136 |
+
strr = f.read().replace("true", "false")
|
137 |
+
with open(f"configs/inuse/{config_file}", "w") as f:
|
138 |
+
f.write(strr)
|
139 |
+
logger.info("overwrite " + config_file)
|
140 |
+
self.preprocess_per = 3.0
|
141 |
+
logger.info("overwrite preprocess_per to %d" % (self.preprocess_per))
|
142 |
+
|
143 |
+
def device_config(self):
|
144 |
+
if torch.cuda.is_available():
|
145 |
+
if self.has_xpu():
|
146 |
+
self.device = self.instead = "xpu:0"
|
147 |
+
self.is_half = True
|
148 |
+
i_device = int(self.device.split(":")[-1])
|
149 |
+
self.gpu_name = torch.cuda.get_device_name(i_device)
|
150 |
+
if (
|
151 |
+
("16" in self.gpu_name and "V100" not in self.gpu_name.upper())
|
152 |
+
or "P40" in self.gpu_name.upper()
|
153 |
+
or "P10" in self.gpu_name.upper()
|
154 |
+
or "1060" in self.gpu_name
|
155 |
+
or "1070" in self.gpu_name
|
156 |
+
or "1080" in self.gpu_name
|
157 |
+
):
|
158 |
+
logger.info("Found GPU %s, force to fp32", self.gpu_name)
|
159 |
+
self.is_half = False
|
160 |
+
self.use_fp32_config()
|
161 |
+
else:
|
162 |
+
logger.info("Found GPU %s", self.gpu_name)
|
163 |
+
self.gpu_mem = int(
|
164 |
+
torch.cuda.get_device_properties(i_device).total_memory
|
165 |
+
/ 1024
|
166 |
+
/ 1024
|
167 |
+
/ 1024
|
168 |
+
+ 0.4
|
169 |
+
)
|
170 |
+
if self.gpu_mem <= 4:
|
171 |
+
self.preprocess_per = 3.0
|
172 |
+
elif self.has_mps():
|
173 |
+
logger.info("No supported Nvidia GPU found")
|
174 |
+
self.device = self.instead = "mps"
|
175 |
+
self.is_half = False
|
176 |
+
self.use_fp32_config()
|
177 |
+
else:
|
178 |
+
logger.info("No supported Nvidia GPU found")
|
179 |
+
self.device = self.instead = "cpu"
|
180 |
+
self.is_half = False
|
181 |
+
self.use_fp32_config()
|
182 |
+
|
183 |
+
if self.n_cpu == 0:
|
184 |
+
self.n_cpu = cpu_count()
|
185 |
+
|
186 |
+
if self.is_half:
|
187 |
+
# 6Gๆพๅญ้
็ฝฎ
|
188 |
+
x_pad = 3
|
189 |
+
x_query = 10
|
190 |
+
x_center = 60
|
191 |
+
x_max = 65
|
192 |
+
else:
|
193 |
+
# 5Gๆพๅญ้
็ฝฎ
|
194 |
+
x_pad = 1
|
195 |
+
x_query = 6
|
196 |
+
x_center = 38
|
197 |
+
x_max = 41
|
198 |
+
|
199 |
+
if self.gpu_mem is not None and self.gpu_mem <= 4:
|
200 |
+
x_pad = 1
|
201 |
+
x_query = 5
|
202 |
+
x_center = 30
|
203 |
+
x_max = 32
|
204 |
+
if self.dml:
|
205 |
+
logger.info("Use DirectML instead")
|
206 |
+
import torch_directml
|
207 |
+
|
208 |
+
self.device = torch_directml.device(torch_directml.default_device())
|
209 |
+
self.is_half = False
|
210 |
+
else:
|
211 |
+
if self.instead:
|
212 |
+
logger.info(f"Use {self.instead} instead")
|
213 |
+
logger.info(
|
214 |
+
"Half-precision floating-point: %s, device: %s"
|
215 |
+
% (self.is_half, self.device)
|
216 |
+
)
|
217 |
+
return x_pad, x_query, x_center, x_max
|
218 |
+
|
219 |
+
|
220 |
+
@singleton_variable
|
221 |
+
class CPUConfig:
|
222 |
+
def __init__(self):
|
223 |
+
self.device = "cpu"
|
224 |
+
self.is_half = False
|
225 |
+
self.use_jit = False
|
226 |
+
self.n_cpu = 1
|
227 |
+
self.gpu_name = None
|
228 |
+
self.json_config = self.load_config_json()
|
229 |
+
self.gpu_mem = None
|
230 |
+
self.instead = "cpu"
|
231 |
+
self.preprocess_per = 3.7
|
232 |
+
self.x_pad, self.x_query, self.x_center, self.x_max = self.device_config()
|
233 |
+
|
234 |
+
@staticmethod
|
235 |
+
def load_config_json() -> dict:
|
236 |
+
d = {}
|
237 |
+
for config_file in version_config_list:
|
238 |
+
with open(f"configs/{config_file}", "r") as f:
|
239 |
+
d[config_file] = json.load(f)
|
240 |
+
return d
|
241 |
+
|
242 |
+
def use_fp32_config(self):
|
243 |
+
for config_file in version_config_list:
|
244 |
+
self.json_config[config_file]["train"]["fp16_run"] = False
|
245 |
+
self.preprocess_per = 3.0
|
246 |
+
|
247 |
+
def device_config(self):
|
248 |
+
self.use_fp32_config()
|
249 |
+
|
250 |
+
if self.n_cpu == 0:
|
251 |
+
self.n_cpu = cpu_count()
|
252 |
+
|
253 |
+
# 5Gๆพๅญ้
็ฝฎ
|
254 |
+
x_pad = 1
|
255 |
+
x_query = 6
|
256 |
+
x_center = 38
|
257 |
+
x_max = 41
|
258 |
+
|
259 |
+
return x_pad, x_query, x_center, x_max
|
configs/inuse/.gitignore
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
3 |
+
!v1
|
4 |
+
!v2
|
configs/inuse/v1/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
configs/inuse/v2/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*
|
2 |
+
!.gitignore
|
configs/v1/32k.json
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train": {
|
3 |
+
"log_interval": 200,
|
4 |
+
"seed": 1234,
|
5 |
+
"epochs": 20000,
|
6 |
+
"learning_rate": 1e-4,
|
7 |
+
"betas": [0.8, 0.99],
|
8 |
+
"eps": 1e-9,
|
9 |
+
"batch_size": 4,
|
10 |
+
"fp16_run": true,
|
11 |
+
"lr_decay": 0.999875,
|
12 |
+
"segment_size": 12800,
|
13 |
+
"init_lr_ratio": 1,
|
14 |
+
"warmup_epochs": 0,
|
15 |
+
"c_mel": 45,
|
16 |
+
"c_kl": 1.0
|
17 |
+
},
|
18 |
+
"data": {
|
19 |
+
"max_wav_value": 32768.0,
|
20 |
+
"sampling_rate": 32000,
|
21 |
+
"filter_length": 1024,
|
22 |
+
"hop_length": 320,
|
23 |
+
"win_length": 1024,
|
24 |
+
"n_mel_channels": 80,
|
25 |
+
"mel_fmin": 0.0,
|
26 |
+
"mel_fmax": null
|
27 |
+
},
|
28 |
+
"model": {
|
29 |
+
"inter_channels": 192,
|
30 |
+
"hidden_channels": 192,
|
31 |
+
"filter_channels": 768,
|
32 |
+
"n_heads": 2,
|
33 |
+
"n_layers": 6,
|
34 |
+
"kernel_size": 3,
|
35 |
+
"p_dropout": 0,
|
36 |
+
"resblock": "1",
|
37 |
+
"resblock_kernel_sizes": [3,7,11],
|
38 |
+
"resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
|
39 |
+
"upsample_rates": [10,4,2,2,2],
|
40 |
+
"upsample_initial_channel": 512,
|
41 |
+
"upsample_kernel_sizes": [16,16,4,4,4],
|
42 |
+
"use_spectral_norm": false,
|
43 |
+
"gin_channels": 256,
|
44 |
+
"spk_embed_dim": 109
|
45 |
+
}
|
46 |
+
}
|
configs/v1/40k.json
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train": {
|
3 |
+
"log_interval": 200,
|
4 |
+
"seed": 1234,
|
5 |
+
"epochs": 20000,
|
6 |
+
"learning_rate": 1e-4,
|
7 |
+
"betas": [0.8, 0.99],
|
8 |
+
"eps": 1e-9,
|
9 |
+
"batch_size": 4,
|
10 |
+
"fp16_run": true,
|
11 |
+
"lr_decay": 0.999875,
|
12 |
+
"segment_size": 12800,
|
13 |
+
"init_lr_ratio": 1,
|
14 |
+
"warmup_epochs": 0,
|
15 |
+
"c_mel": 45,
|
16 |
+
"c_kl": 1.0
|
17 |
+
},
|
18 |
+
"data": {
|
19 |
+
"max_wav_value": 32768.0,
|
20 |
+
"sampling_rate": 40000,
|
21 |
+
"filter_length": 2048,
|
22 |
+
"hop_length": 400,
|
23 |
+
"win_length": 2048,
|
24 |
+
"n_mel_channels": 125,
|
25 |
+
"mel_fmin": 0.0,
|
26 |
+
"mel_fmax": null
|
27 |
+
},
|
28 |
+
"model": {
|
29 |
+
"inter_channels": 192,
|
30 |
+
"hidden_channels": 192,
|
31 |
+
"filter_channels": 768,
|
32 |
+
"n_heads": 2,
|
33 |
+
"n_layers": 6,
|
34 |
+
"kernel_size": 3,
|
35 |
+
"p_dropout": 0,
|
36 |
+
"resblock": "1",
|
37 |
+
"resblock_kernel_sizes": [3,7,11],
|
38 |
+
"resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
|
39 |
+
"upsample_rates": [10,10,2,2],
|
40 |
+
"upsample_initial_channel": 512,
|
41 |
+
"upsample_kernel_sizes": [16,16,4,4],
|
42 |
+
"use_spectral_norm": false,
|
43 |
+
"gin_channels": 256,
|
44 |
+
"spk_embed_dim": 109
|
45 |
+
}
|
46 |
+
}
|
configs/v1/48k.json
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train": {
|
3 |
+
"log_interval": 200,
|
4 |
+
"seed": 1234,
|
5 |
+
"epochs": 20000,
|
6 |
+
"learning_rate": 1e-4,
|
7 |
+
"betas": [0.8, 0.99],
|
8 |
+
"eps": 1e-9,
|
9 |
+
"batch_size": 4,
|
10 |
+
"fp16_run": true,
|
11 |
+
"lr_decay": 0.999875,
|
12 |
+
"segment_size": 11520,
|
13 |
+
"init_lr_ratio": 1,
|
14 |
+
"warmup_epochs": 0,
|
15 |
+
"c_mel": 45,
|
16 |
+
"c_kl": 1.0
|
17 |
+
},
|
18 |
+
"data": {
|
19 |
+
"max_wav_value": 32768.0,
|
20 |
+
"sampling_rate": 48000,
|
21 |
+
"filter_length": 2048,
|
22 |
+
"hop_length": 480,
|
23 |
+
"win_length": 2048,
|
24 |
+
"n_mel_channels": 128,
|
25 |
+
"mel_fmin": 0.0,
|
26 |
+
"mel_fmax": null
|
27 |
+
},
|
28 |
+
"model": {
|
29 |
+
"inter_channels": 192,
|
30 |
+
"hidden_channels": 192,
|
31 |
+
"filter_channels": 768,
|
32 |
+
"n_heads": 2,
|
33 |
+
"n_layers": 6,
|
34 |
+
"kernel_size": 3,
|
35 |
+
"p_dropout": 0,
|
36 |
+
"resblock": "1",
|
37 |
+
"resblock_kernel_sizes": [3,7,11],
|
38 |
+
"resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
|
39 |
+
"upsample_rates": [10,6,2,2,2],
|
40 |
+
"upsample_initial_channel": 512,
|
41 |
+
"upsample_kernel_sizes": [16,16,4,4,4],
|
42 |
+
"use_spectral_norm": false,
|
43 |
+
"gin_channels": 256,
|
44 |
+
"spk_embed_dim": 109
|
45 |
+
}
|
46 |
+
}
|
configs/v2/32k.json
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train": {
|
3 |
+
"log_interval": 200,
|
4 |
+
"seed": 1234,
|
5 |
+
"epochs": 20000,
|
6 |
+
"learning_rate": 1e-4,
|
7 |
+
"betas": [0.8, 0.99],
|
8 |
+
"eps": 1e-9,
|
9 |
+
"batch_size": 4,
|
10 |
+
"fp16_run": true,
|
11 |
+
"lr_decay": 0.999875,
|
12 |
+
"segment_size": 12800,
|
13 |
+
"init_lr_ratio": 1,
|
14 |
+
"warmup_epochs": 0,
|
15 |
+
"c_mel": 45,
|
16 |
+
"c_kl": 1.0
|
17 |
+
},
|
18 |
+
"data": {
|
19 |
+
"max_wav_value": 32768.0,
|
20 |
+
"sampling_rate": 32000,
|
21 |
+
"filter_length": 1024,
|
22 |
+
"hop_length": 320,
|
23 |
+
"win_length": 1024,
|
24 |
+
"n_mel_channels": 80,
|
25 |
+
"mel_fmin": 0.0,
|
26 |
+
"mel_fmax": null
|
27 |
+
},
|
28 |
+
"model": {
|
29 |
+
"inter_channels": 192,
|
30 |
+
"hidden_channels": 192,
|
31 |
+
"filter_channels": 768,
|
32 |
+
"n_heads": 2,
|
33 |
+
"n_layers": 6,
|
34 |
+
"kernel_size": 3,
|
35 |
+
"p_dropout": 0,
|
36 |
+
"resblock": "1",
|
37 |
+
"resblock_kernel_sizes": [3,7,11],
|
38 |
+
"resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
|
39 |
+
"upsample_rates": [10,8,2,2],
|
40 |
+
"upsample_initial_channel": 512,
|
41 |
+
"upsample_kernel_sizes": [20,16,4,4],
|
42 |
+
"use_spectral_norm": false,
|
43 |
+
"gin_channels": 256,
|
44 |
+
"spk_embed_dim": 109
|
45 |
+
}
|
46 |
+
}
|
configs/v2/48k.json
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"train": {
|
3 |
+
"log_interval": 200,
|
4 |
+
"seed": 1234,
|
5 |
+
"epochs": 20000,
|
6 |
+
"learning_rate": 1e-4,
|
7 |
+
"betas": [0.8, 0.99],
|
8 |
+
"eps": 1e-9,
|
9 |
+
"batch_size": 4,
|
10 |
+
"fp16_run": true,
|
11 |
+
"lr_decay": 0.999875,
|
12 |
+
"segment_size": 17280,
|
13 |
+
"init_lr_ratio": 1,
|
14 |
+
"warmup_epochs": 0,
|
15 |
+
"c_mel": 45,
|
16 |
+
"c_kl": 1.0
|
17 |
+
},
|
18 |
+
"data": {
|
19 |
+
"max_wav_value": 32768.0,
|
20 |
+
"sampling_rate": 48000,
|
21 |
+
"filter_length": 2048,
|
22 |
+
"hop_length": 480,
|
23 |
+
"win_length": 2048,
|
24 |
+
"n_mel_channels": 128,
|
25 |
+
"mel_fmin": 0.0,
|
26 |
+
"mel_fmax": null
|
27 |
+
},
|
28 |
+
"model": {
|
29 |
+
"inter_channels": 192,
|
30 |
+
"hidden_channels": 192,
|
31 |
+
"filter_channels": 768,
|
32 |
+
"n_heads": 2,
|
33 |
+
"n_layers": 6,
|
34 |
+
"kernel_size": 3,
|
35 |
+
"p_dropout": 0,
|
36 |
+
"resblock": "1",
|
37 |
+
"resblock_kernel_sizes": [3,7,11],
|
38 |
+
"resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
|
39 |
+
"upsample_rates": [12,10,2,2],
|
40 |
+
"upsample_initial_channel": 512,
|
41 |
+
"upsample_kernel_sizes": [24,20,4,4],
|
42 |
+
"use_spectral_norm": false,
|
43 |
+
"gin_channels": 256,
|
44 |
+
"spk_embed_dim": 109
|
45 |
+
}
|
46 |
+
}
|
docker-compose.yml
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
version: "3.8"
|
2 |
+
services:
|
3 |
+
rvc:
|
4 |
+
build:
|
5 |
+
context: .
|
6 |
+
dockerfile: Dockerfile
|
7 |
+
container_name: rvc
|
8 |
+
volumes:
|
9 |
+
- ./weights:/app/assets/weights
|
10 |
+
- ./opt:/app/opt
|
11 |
+
# - ./dataset:/app/dataset # you can use this folder in order to provide your dataset for model training
|
12 |
+
ports:
|
13 |
+
- 7865:7865
|
14 |
+
deploy:
|
15 |
+
resources:
|
16 |
+
reservations:
|
17 |
+
devices:
|
18 |
+
- driver: nvidia
|
19 |
+
count: 1
|
20 |
+
capabilities: [gpu]
|
docs/cn/README.cn.md
ADDED
@@ -0,0 +1,198 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div align="center">
|
2 |
+
|
3 |
+
# Retrieval-based-Voice-Conversion-WebUI
|
4 |
+
ไธไธชๅบไบVITS็็ฎๅๆ็จ็ๅๅฃฐๆกๆถ<br><br>
|
5 |
+
|
6 |
+
[![madewithlove](https://img.shields.io/badge/made_with-%E2%9D%A4-red?style=for-the-badge&labelColor=orange
|
7 |
+
)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI)
|
8 |
+
|
9 |
+
![moe](https://counter.seku.su/cmoe?name=rvc&theme=r34)
|
10 |
+
|
11 |
+
[![Licence](https://img.shields.io/github/license/fumiama/Retrieval-based-Voice-Conversion-WebUI?style=for-the-badge)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/blob/main/LICENSE)
|
12 |
+
[![Huggingface](https://img.shields.io/badge/๐ค%20-Spaces-yellow.svg?style=for-the-badge)](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
13 |
+
|
14 |
+
[![Discord](https://img.shields.io/badge/RVC%20Developers-Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/HcsmBBGyVk)
|
15 |
+
|
16 |
+
[**ๅธธ่ง้ฎ้ข่งฃ็ญ**](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E7%AD%94) | [**AutoDLยท5ๆฏ้ฑ่ฎญ็ปAIๆญๆ**](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/wiki/Autodl%E8%AE%AD%E7%BB%83RVC%C2%B7AI%E6%AD%8C%E6%89%8B%E6%95%99%E7%A8%8B) | [**ๅฏน็
งๅฎ้ช่ฎฐๅฝ**](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/wiki/Autodl%E8%AE%AD%E7%BB%83RVC%C2%B7AI%E6%AD%8C%E6%89%8B%E6%95%99%E7%A8%8B](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/wiki/%E5%AF%B9%E7%85%A7%E5%AE%9E%E9%AA%8C%C2%B7%E5%AE%9E%E9%AA%8C%E8%AE%B0%E5%BD%95)) | [**ๅจ็บฟๆผ็คบ**](https://modelscope.cn/studios/FlowerCry/RVCv2demo)
|
17 |
+
|
18 |
+
[**English**](../../README.md) | [**ไธญๆ็ฎไฝ**](../cn/README.cn.md) | [**ๆฅๆฌ่ช**](../jp/README.ja.md) | [**ํ๊ตญ์ด**](../kr/README.ko.md) ([**้ๅ่ช**](../kr/README.ko.han.md)) | [**Franรงais**](../fr/README.fr.md) | [**Tรผrkรงe**](../tr/README.tr.md) | [**Portuguรชs**](../pt/README.pt.md)
|
19 |
+
|
20 |
+
</div>
|
21 |
+
|
22 |
+
> ๅบๆจกไฝฟ็จๆฅ่ฟ50ๅฐๆถ็ๅผๆบ้ซ่ดจ้VCTK่ฎญ็ป้่ฎญ็ป๏ผๆ ็ๆๆน้ข็้กพ่๏ผ่ฏทๅคงๅฎถๆพๅฟไฝฟ็จ
|
23 |
+
|
24 |
+
> ่ฏทๆๅพ
RVCv3็ๅบๆจก๏ผๅๆฐๆดๅคง๏ผๆฐๆฎ้ๆดๅคง๏ผๆๆๆดๅฅฝ๏ผๅบๆฌๆๅนณ็ๆจ็้ๅบฆ๏ผ้่ฆ่ฎญ็ปๆฐๆฎ้ๆดๅฐใ
|
25 |
+
|
26 |
+
> ็ฑไบๆไบๅฐๅบๆ ๆณ็ด่ฟHugging Face๏ผๅณไฝฟ่ฎพๆณๆๅ่ฎฟ้ฎ๏ผ้ๅบฆไนๅๅ็ผๆ
ข๏ผ็นๆจๅบๆจกๅ/ๆดๅๅ
/ๅทฅๅ
ท็ไธ้ฎไธ่ฝฝๅจ๏ผๆฌข่ฟ่ฏ็จ๏ผ[RVC-Models-Downloader](https://github.com/fumiama/RVC-Models-Downloader)
|
27 |
+
|
28 |
+
| ่ฎญ็ปๆจ็็้ข |
|
29 |
+
| :--------: |
|
30 |
+
| ![web](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/assets/41315874/17e48404-2627-4fad-a0ec-65f9065aeade) |
|
31 |
+
|
32 |
+
| ๅฎๆถๅๅฃฐ็้ข |
|
33 |
+
| :---------: |
|
34 |
+
| ![realtime-gui](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/assets/41315874/95b36866-b92d-40c7-b5db-6a35ca5caeac) |
|
35 |
+
|
36 |
+
## ็ฎไป
|
37 |
+
ๆฌไปๅบๅ
ทๆไปฅไธ็น็น
|
38 |
+
+ ไฝฟ็จtop1ๆฃ็ดขๆฟๆข่พๅ
ฅๆบ็นๅพไธบ่ฎญ็ป้็นๅพๆฅๆ็ป้ณ่ฒๆณๆผ
|
39 |
+
+ ๅณไพฟๅจ็ธๅฏน่พๅทฎ็ๆพๅกไธไน่ฝๅฟซ้่ฎญ็ป
|
40 |
+
+ ไฝฟ็จๅฐ้ๆฐๆฎ่ฟ่ก่ฎญ็ปไน่ฝๅพๅฐ่พๅฅฝ็ปๆ(ๆจ่่ณๅฐๆถ้10ๅ้ไฝๅบๅช่ฏญ้ณๆฐๆฎ)
|
41 |
+
+ ๅฏไปฅ้่ฟๆจกๅ่ๅๆฅๆนๅ้ณ่ฒ(ๅๅฉckptๅค็้้กนๅกไธญ็ckpt-merge)
|
42 |
+
+ ็ฎๅๆ็จ็็ฝ้กต็้ข
|
43 |
+
+ ๅฏ่ฐ็จUVR5ๆจกๅๆฅๅฟซ้ๅ็ฆปไบบๅฃฐๅไผดๅฅ
|
44 |
+
+ ไฝฟ็จๆๅ
่ฟ็[ไบบๅฃฐ้ณ้ซๆๅ็ฎๆณInterSpeech2023-RMVPE](#ๅ่้กน็ฎ)ๆ น็ปๅ้ณ้ฎ้ข๏ผๆๆๆดๅฅฝ๏ผ่ฟ่กๆดๅฟซ๏ผ่ตๆบๅ ็จๆดๅฐ
|
45 |
+
+ AๅกIๅกๅ ้ๆฏๆ
|
46 |
+
|
47 |
+
็นๆญคๆฅ็ๆไปฌ็[ๆผ็คบ่ง้ข](https://www.bilibili.com/video/BV1pm4y1z7Gm/) !
|
48 |
+
|
49 |
+
## ็ฏๅข้
็ฝฎ
|
50 |
+
### Python ็ๆฌ้ๅถ
|
51 |
+
> ๅปบ่ฎฎไฝฟ็จ conda ็ฎก็ Python ็ฏๅข
|
52 |
+
|
53 |
+
> ็ๆฌ้ๅถๅๅ ๅ่งๆญค[bug](https://github.com/facebookresearch/fairseq/issues/5012)
|
54 |
+
|
55 |
+
```bash
|
56 |
+
python --version # 3.8 <= Python < 3.11
|
57 |
+
```
|
58 |
+
|
59 |
+
### Linux/MacOS ไธ้ฎไพ่ตๅฎ่ฃ
ๅฏๅจ่ๆฌ
|
60 |
+
ๆง่ก้กน็ฎๆ น็ฎๅฝไธ`run.sh`ๅณๅฏไธ้ฎ้
็ฝฎ`venv`่ๆ็ฏๅขใ่ชๅจๅฎ่ฃ
ๆ้ไพ่ตๅนถๅฏๅจไธป็จๅบใ
|
61 |
+
```bash
|
62 |
+
sh ./run.sh
|
63 |
+
```
|
64 |
+
|
65 |
+
### ๆๅจๅฎ่ฃ
ไพ่ต
|
66 |
+
1. ๅฎ่ฃ
`pytorch`ๅๅ
ถๆ ธๅฟไพ่ต๏ผ่ฅๅทฒๅฎ่ฃ
ๅ่ทณ่ฟใๅ่่ช: https://pytorch.org/get-started/locally/
|
67 |
+
```bash
|
68 |
+
pip install torch torchvision torchaudio
|
69 |
+
```
|
70 |
+
2. ๅฆๆๆฏ win ็ณป็ป + Nvidia Ampere ๆถๆ(RTX30xx)๏ผๆ นๆฎ #21 ็็ป้ช๏ผ้่ฆๆๅฎ pytorch ๅฏนๅบ็ CUDA ็ๆฌ
|
71 |
+
```bash
|
72 |
+
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
|
73 |
+
```
|
74 |
+
3. ๆ นๆฎ่ชๅทฑ็ๆพๅกๅฎ่ฃ
ๅฏนๅบไพ่ต
|
75 |
+
- Nๅก
|
76 |
+
```bash
|
77 |
+
pip install -r requirements/main.txt
|
78 |
+
```
|
79 |
+
- Aๅก/Iๅก
|
80 |
+
```bash
|
81 |
+
pip install -r requirements/dml.txt
|
82 |
+
```
|
83 |
+
- AๅกROCM(Linux)
|
84 |
+
```bash
|
85 |
+
pip install -r requirements/amd.txt
|
86 |
+
```
|
87 |
+
- IๅกIPEX(Linux)
|
88 |
+
```bash
|
89 |
+
pip install -r requirements/ipex.txt
|
90 |
+
```
|
91 |
+
|
92 |
+
## ๅ
ถไป่ตๆบๅๅค
|
93 |
+
### 1. assets
|
94 |
+
> RVC้่ฆไฝไบ`assets`ๆไปถๅคนไธ็ไธไบๆจกๅ่ตๆบ่ฟ่กๆจ็ๅ่ฎญ็ปใ
|
95 |
+
#### ่ชๅจๆฃๆฅ/ไธ่ฝฝ่ตๆบ(้ป่ฎค)
|
96 |
+
> ้ป่ฎคๆ
ๅตไธ๏ผRVCๅฏๅจไธป็จๅบๅฏๅจๆถ่ชๅจๆฃๆฅๆ้่ตๆบ็ๅฎๆดๆงใ
|
97 |
+
|
98 |
+
> ๅณไฝฟ่ตๆบไธๅฎๆด๏ผ็จๅบไนๅฐ็ปง็ปญๅฏๅจใ
|
99 |
+
|
100 |
+
- ๅฆๆๆจๅธๆไธ่ฝฝๆๆ่ตๆบ๏ผ่ฏทๆทปๅ `--update`ๅๆฐ
|
101 |
+
- ๅฆๆๆจๅธๆ่ทณ๏ฟฝ๏ฟฝ๏ฟฝๅฏๅจๆถ็่ตๆบๅฎๆดๆงๆฃๆฅ๏ผ่ฏทๆทปๅ `--nocheck`ๅๆฐ
|
102 |
+
|
103 |
+
#### ๆๅจไธ่ฝฝ่ตๆบ
|
104 |
+
> ๆๆ่ตๆบๆไปถๅไฝไบ[Hugging Face space](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
105 |
+
|
106 |
+
> ไฝ ๅฏไปฅๅจ`tools`ๆไปถๅคนๆพๅฐไธ่ฝฝๅฎไปฌ็่ๆฌ
|
107 |
+
|
108 |
+
> ไฝ ไนๅฏไปฅไฝฟ็จๆจกๅ/ๆดๅๅ
/ๅทฅๅ
ท็ไธ้ฎไธ่ฝฝๅจ๏ผ[RVC-Models-Downloader](https://github.com/fumiama/RVC-Models-Downloader)
|
109 |
+
|
110 |
+
ไปฅไธๆฏไธไปฝๆธ
ๅ๏ผๅ
ๆฌไบๆๆRVCๆ้็้ขๆจกๅๅๅ
ถไปๆไปถ็ๅ็งฐใ
|
111 |
+
|
112 |
+
- ./assets/hubert/hubert_base.pt
|
113 |
+
```bash
|
114 |
+
rvcmd assets/hubert # RVC-Models-Downloader command
|
115 |
+
```
|
116 |
+
- ./assets/pretrained
|
117 |
+
```bash
|
118 |
+
rvcmd assets/v1 # RVC-Models-Downloader command
|
119 |
+
```
|
120 |
+
- ./assets/uvr5_weights
|
121 |
+
```bash
|
122 |
+
rvcmd assets/uvr5 # RVC-Models-Downloader command
|
123 |
+
```
|
124 |
+
ๆณไฝฟ็จv2็ๆฌๆจกๅ็่ฏ๏ผ้่ฆ้ขๅคไธ่ฝฝ
|
125 |
+
|
126 |
+
- ./assets/pretrained_v2
|
127 |
+
```bash
|
128 |
+
rvcmd assets/v2 # RVC-Models-Downloader command
|
129 |
+
```
|
130 |
+
|
131 |
+
### 2. ไธ่ฝฝ rmvpe ไบบๅฃฐ้ณ้ซๆๅ็ฎๆณๆ้ๆไปถ
|
132 |
+
|
133 |
+
ๅฆๆไฝ ๆณไฝฟ็จๆๆฐ็RMVPEไบบๅฃฐ้ณ้ซๆๅ็ฎๆณ๏ผๅไฝ ้่ฆไธ่ฝฝ้ณ้ซๆๅๆจกๅๅๆฐๅนถๆพ็ฝฎไบ`assets/rmvpe`ใ
|
134 |
+
|
135 |
+
- ไธ่ฝฝ[rmvpe.pt](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.pt)
|
136 |
+
```bash
|
137 |
+
rvcmd assets/rmvpe # RVC-Models-Downloader command
|
138 |
+
```
|
139 |
+
|
140 |
+
#### ไธ่ฝฝ rmvpe ็ dml ็ฏๅข(ๅฏ้, Aๅก/Iๅก็จๆท)
|
141 |
+
|
142 |
+
- ไธ่ฝฝ[rmvpe.onnx](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.onnx)
|
143 |
+
```bash
|
144 |
+
rvcmd assets/rmvpe # RVC-Models-Downloader command
|
145 |
+
```
|
146 |
+
|
147 |
+
### 3. AMDๆพๅกRocm(ๅฏ้, ไป
Linux)
|
148 |
+
|
149 |
+
ๅฆๆไฝ ๆณๅบไบAMD็RocmๆๆฏๅจLinux็ณป็ปไธ่ฟ่กRVC๏ผ่ฏทๅ
ๅจ[่ฟ้](https://rocm.docs.amd.com/en/latest/deploy/linux/os-native/install.html)ๅฎ่ฃ
ๆ้็้ฉฑๅจใ
|
150 |
+
|
151 |
+
่ฅไฝ ไฝฟ็จ็ๆฏArch Linux๏ผๅฏไปฅไฝฟ็จpacmanๆฅๅฎ่ฃ
ๆ้้ฉฑๅจ๏ผ
|
152 |
+
````
|
153 |
+
pacman -S rocm-hip-sdk rocm-opencl-sdk
|
154 |
+
````
|
155 |
+
ๅฏนไบๆไบๅๅท็ๆพๅก๏ผไฝ ๅฏ่ฝ้่ฆ้ขๅค้
็ฝฎๅฆไธ็็ฏๅขๅ้๏ผๅฆ๏ผRX6700XT๏ผ๏ผ
|
156 |
+
````
|
157 |
+
export ROCM_PATH=/opt/rocm
|
158 |
+
export HSA_OVERRIDE_GFX_VERSION=10.3.0
|
159 |
+
````
|
160 |
+
ๅๆถ็กฎไฟไฝ ็ๅฝๅ็จๆทๅคไบ`render`ไธ`video`็จๆท็ปๅ
๏ผ
|
161 |
+
````
|
162 |
+
sudo usermod -aG render $USERNAME
|
163 |
+
sudo usermod -aG video $USERNAME
|
164 |
+
````
|
165 |
+
|
166 |
+
## ๅผๅงไฝฟ็จ
|
167 |
+
### ็ดๆฅๅฏๅจ
|
168 |
+
ไฝฟ็จไปฅไธๆไปคๆฅๅฏๅจ WebUI
|
169 |
+
```bash
|
170 |
+
python web.py
|
171 |
+
```
|
172 |
+
### Linux/MacOS ็จๆท
|
173 |
+
```bash
|
174 |
+
./run.sh
|
175 |
+
```
|
176 |
+
### ๅฏนไบ้่ฆไฝฟ็จIPEXๆๆฏ็Iๅก็จๆท(ไป
Linux)
|
177 |
+
```bash
|
178 |
+
source /opt/intel/oneapi/setvars.sh
|
179 |
+
./run.sh
|
180 |
+
```
|
181 |
+
### ไฝฟ็จๆดๅๅ
(Windows ็จๆท)
|
182 |
+
ไธ่ฝฝๅนถ่งฃๅ`RVC-beta.7z`๏ผ่งฃๅๅๅๅป`go-web.bat`ๅณๅฏไธ้ฎๅฏๅจใ
|
183 |
+
```bash
|
184 |
+
rvcmd packs/general/latest # RVC-Models-Downloader command
|
185 |
+
```
|
186 |
+
|
187 |
+
## ๅ่้กน็ฎ
|
188 |
+
+ [ContentVec](https://github.com/auspicious3000/contentvec/)
|
189 |
+
+ [VITS](https://github.com/jaywalnut310/vits)
|
190 |
+
+ [HIFIGAN](https://github.com/jik876/hifi-gan)
|
191 |
+
+ [Gradio](https://github.com/gradio-app/gradio)
|
192 |
+
+ [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)
|
193 |
+
+ [audio-slicer](https://github.com/openvpi/audio-slicer)
|
194 |
+
+ [Vocal pitch extraction:RMVPE](https://github.com/Dream-High/RMVPE)
|
195 |
+
+ The pretrained model is trained and tested by [yxlllc](https://github.com/yxlllc/RMVPE) and [RVC-Boss](https://github.com/RVC-Boss).
|
196 |
+
|
197 |
+
## ๆ่ฐขๆๆ่ดก็ฎ่
ไฝๅบ็ๅชๅ
|
198 |
+
[![contributors](https://contrib.rocks/image?repo=fumiama/Retrieval-based-Voice-Conversion-WebUI)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/graphs/contributors)
|
docs/cn/faq.md
ADDED
@@ -0,0 +1,150 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Q1:ไธ้ฎ่ฎญ็ป็ปๆๆฒกๆ็ดขๅผ
|
2 |
+
|
3 |
+
ๆพ็คบ"Training is done. The program is closed."ๅๆจกๅ่ฎญ็ปๆๅ๏ผๅ็ปญ็ดง้ป็ๆฅ้ๆฏๅ็๏ผ
|
4 |
+
|
5 |
+
|
6 |
+
ไธ้ฎ่ฎญ็ป็ปๆๅฎๆๆฒกๆaddedๅผๅคด็็ดขๅผๆไปถ๏ผๅฏ่ฝๆฏๅ ไธบ่ฎญ็ป้ๅคชๅคงๅกไฝไบๆทปๅ ็ดขๅผ็ๆญฅ้ชค๏ผๅทฒ้่ฟๆนๅค็add็ดขๅผ่งฃๅณๅ
ๅญadd็ดขๅผๅฏนๅ
ๅญ้ๆฑ่ฟๅคง็้ฎ้ขใไธดๆถๅฏๅฐ่ฏๅๆฌก็นๅป"่ฎญ็ป็ดขๅผ"ๆ้ฎใ
|
7 |
+
|
8 |
+
|
9 |
+
## Q2:่ฎญ็ป็ปๆๆจ็ๆฒก็ๅฐ่ฎญ็ป้็้ณ่ฒ
|
10 |
+
็นๅทๆฐ้ณ่ฒๅ็็๏ผๅฆๆ่ฟๆฒกๆ็็่ฎญ็ปๆๆฒกๆๆฅ้๏ผๆงๅถๅฐๅwebui็ๆชๅพ๏ผlogs/ๅฎ้ชๅไธ็log๏ผ้ฝๅฏไปฅๅ็ปๅผๅ่
็็ใ
|
11 |
+
|
12 |
+
|
13 |
+
## Q3:ๅฆไฝๅไบซๆจกๅ
|
14 |
+
โโrvc_root/logs/ๅฎ้ชๅ ไธ้ขๅญๅจ็pthไธๆฏ็จๆฅๅไบซๆจกๅ็จๆฅๆจ็็๏ผ่ๆฏไธบไบๅญๅจๅฎ้ช็ถๆไพๅค็ฐ๏ผไปฅๅ็ปง็ปญ่ฎญ็ป็จ็ใ็จๆฅๅไบซ็ๆจกๅๅบ่ฏฅๆฏweightsๆไปถๅคนไธๅคงๅฐไธบ60+MB็pthๆไปถ๏ผ
|
15 |
+
|
16 |
+
โโๅ็ปญๅฐๆweights/exp_name.pthๅlogs/exp_name/added_xxx.indexๅๅนถๆๅ
ๆweights/exp_name.zip็ๅปๅกซๅindex็ๆญฅ้ชค๏ผ้ฃไนzipๆไปถ็จๆฅๅไบซ๏ผไธ่ฆๅไบซpthๆไปถ๏ผ้ค้ๆฏๆณๆขๆบๅจ็ปง็ปญ่ฎญ็ป๏ผ
|
17 |
+
|
18 |
+
โโๅฆๆไฝ ๆlogsๆไปถๅคนไธ็ๅ ็พMB็pthๆไปถๅคๅถ/ๅไบซๅฐweightsๆไปถๅคนไธๅผบ่ก็จไบๆจ็๏ผๅฏ่ฝไผๅบ็ฐf0๏ผtgt_sr็ญๅ็งkeyไธๅญๅจ็ๆฅ้ใไฝ ้่ฆ็จckpt้้กนๅกๆไธ้ข๏ผๆๅทฅๆ่ชๅจ๏ผๆฌๅฐlogsไธๅฆๆ่ฝๆพๅฐ็ธๅ
ณไฟกๆฏๅไผ่ชๅจ๏ผ้ๆฉๆฏๅฆๆบๅธฆ้ณ้ซใ็ฎๆ ้ณ้ข้ๆ ท็็้้กนๅ่ฟ่กckptๅฐๆจกๅๆๅ๏ผ่พๅ
ฅ่ทฏๅพๅกซGๅผๅคด็้ฃไธช๏ผ๏ผๆๅๅฎๅจweightsๆไปถๅคนไธไผๅบ็ฐ60+MB็pthๆไปถ๏ผๅทๆฐ้ณ่ฒๅๅฏไปฅ้ๆฉไฝฟ็จใ
|
19 |
+
|
20 |
+
|
21 |
+
## Q4:Connection Error.
|
22 |
+
ไน่ฎธไฝ ๅ
ณ้ญไบๆงๅถๅฐ๏ผ้ป่ฒ็ชๅฃ๏ผใ
|
23 |
+
|
24 |
+
|
25 |
+
## Q5:WebUIๅผนๅบExpecting value: line 1 column 1 (char 0).
|
26 |
+
่ฏทๅ
ณ้ญ็ณป็ปๅฑๅ็ฝไปฃ็/ๅ
จๅฑไปฃ็ใ
|
27 |
+
|
28 |
+
|
29 |
+
่ฟไธชไธไป
ๆฏๅฎขๆท็ซฏ็ไปฃ็๏ผไนๅ
ๆฌๆๅก็ซฏ็ไปฃ็๏ผไพๅฆไฝ ไฝฟ็จautodl่ฎพ็ฝฎไบhttp_proxyๅhttps_proxyๅญฆๆฏๅ ้๏ผไฝฟ็จๆถไน้่ฆunsetๅ
ณๆ๏ผ
|
30 |
+
|
31 |
+
|
32 |
+
## Q6:ไธ็จWebUIๅฆไฝ้่ฟๅฝไปค่ฎญ็ปๆจ็
|
33 |
+
่ฎญ็ป่ๆฌ๏ผ
|
34 |
+
|
35 |
+
ๅฏๅ
่ท้WebUI๏ผๆถๆฏ็ชๅ
ไผๆพ็คบๆฐๆฎ้ๅค็ๅ่ฎญ็ป็จๅฝไปค่ก๏ผ
|
36 |
+
|
37 |
+
|
38 |
+
ๆจ็่ๆฌ๏ผ
|
39 |
+
|
40 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/myinfer.py
|
41 |
+
|
42 |
+
|
43 |
+
ไพๅญ๏ผ
|
44 |
+
|
45 |
+
|
46 |
+
runtime\python.exe myinfer.py 0 "E:\codes\py39\RVC-beta\todo-songs\1111.wav" "E:\codes\py39\logs\mi-test\added_IVF677_Flat_nprobe_7.index" harvest "test.wav" "weights/mi-test.pth" 0.6 cuda:0 True
|
47 |
+
|
48 |
+
|
49 |
+
f0up_key=sys.argv[1]
|
50 |
+
|
51 |
+
input_path=sys.argv[2]
|
52 |
+
|
53 |
+
index_path=sys.argv[3]
|
54 |
+
|
55 |
+
f0method=sys.argv[4]#harvest or pm
|
56 |
+
|
57 |
+
opt_path=sys.argv[5]
|
58 |
+
|
59 |
+
model_path=sys.argv[6]
|
60 |
+
|
61 |
+
index_rate=float(sys.argv[7])
|
62 |
+
|
63 |
+
device=sys.argv[8]
|
64 |
+
|
65 |
+
is_half=bool(sys.argv[9])
|
66 |
+
|
67 |
+
|
68 |
+
## Q7:Cuda error/Cuda out of memory.
|
69 |
+
ๅฐๆฆ็ๆฏcuda้
็ฝฎ้ฎ้ขใ่ฎพๅคไธๆฏๆ๏ผๅคงๆฆ็ๆฏๆพๅญไธๅค๏ผout of memory๏ผ๏ผ
|
70 |
+
|
71 |
+
|
72 |
+
่ฎญ็ป็่ฏ็ผฉๅฐbatch size๏ผๅฆๆ็ผฉๅฐๅฐ1่ฟไธๅคๅช่ฝๆดๆขๆพๅก่ฎญ็ป๏ผ๏ผๆจ็็่ฏ้
ๆ
็ผฉๅฐconfig.py็ปๅฐพ็x_pad๏ผx_query๏ผx_center๏ผx_maxใ4Gไปฅไธๆพๅญ๏ผไพๅฆ1060๏ผ3G๏ผๅๅ็ง2Gๆพๅก๏ผๅฏไปฅ็ดๆฅๆพๅผ๏ผ4Gๆพๅญๆพๅก่ฟๆๆใ
|
73 |
+
|
74 |
+
|
75 |
+
## Q8:total_epoch่ฐๅคๅฐๆฏ่พๅฅฝ
|
76 |
+
|
77 |
+
ๅฆๆ่ฎญ็ป้้ณ่ดจๅทฎๅบๅชๅคง๏ผ20~30่ถณๅคไบ๏ผ่ฐๅคช้ซ๏ผๅบๆจก้ณ่ดจๆ ๆณๅธฆ้ซไฝ ็ไฝ้ณ่ดจ่ฎญ็ป้
|
78 |
+
|
79 |
+
ๅฆๆ่ฎญ็ป้้ณ่ดจ้ซๅบๅชไฝๆถ้ฟๅค๏ผๅฏไปฅ่ฐ้ซ๏ผ200ๆฏok็๏ผ่ฎญ็ป้ๅบฆๅพๅฟซ๏ผๆข็ถไฝ ๆๆกไปถๅๅค้ซ้ณ่ดจ่ฎญ็ป้๏ผๆพๅกๆณๅฟ
ๆกไปถไนไธ้๏ผ่ฏๅฎไธๅจไนๅคไธไบ่ฎญ็ปๆถ้ด๏ผ
|
80 |
+
|
81 |
+
|
82 |
+
## Q9:้่ฆๅคๅฐ่ฎญ็ป้ๆถ้ฟ
|
83 |
+
โโๆจ่10min่ณ50min
|
84 |
+
|
85 |
+
โโไฟ่ฏ้ณ่ดจ้ซๅบๅชไฝ็ๆ
ๅตไธ๏ผๅฆๆๆไธชไบบ็น่ฒ็้ณ่ฒ็ปไธ๏ผๅๅคๅค็ๅ
|
86 |
+
|
87 |
+
โโ้ซๆฐดๅนณ็่ฎญ็ป้๏ผ็ฒพ็ฎ+้ณ่ฒๆ็น่ฒ๏ผ๏ผ5min่ณ10minไนๆฏok็๏ผไปๅบไฝ่
ๆฌไบบๅฐฑ็ปๅธธ่ฟไน็ฉ
|
88 |
+
|
89 |
+
โโไนๆไบบๆฟ1min่ณ2min็ๆฐๆฎๆฅ่ฎญ็ปๅนถไธ่ฎญ็ปๆๅ็๏ผไฝๆฏๆๅ็ป้ชๆฏๅ
ถไปไบบไธๅฏๅค็ฐ็๏ผไธๅคชๅ
ทๅคๅ่ไปทๅผใ่ฟ่ฆๆฑ่ฎญ็ป้้ณ่ฒ็น่ฒ้ๅธธๆๆพ๏ผๆฏๅฆ่ฏด้ซ้ขๆฐๅฃฐ่พๆๆพ็่่ๅฐๅฅณ้ณ๏ผ๏ผไธ้ณ่ดจ้ซ๏ผ
|
90 |
+
|
91 |
+
โโ1minไปฅไธๆถ้ฟๆฐๆฎ็ฎๅๆฒก่งๆไบบๅฐ่ฏ๏ผๆๅ๏ผ่ฟใไธๅปบ่ฎฎ่ฟ่ก่ฟ็ง้ฌผ็่กไธบใ
|
92 |
+
|
93 |
+
|
94 |
+
## Q10:index rateๅนฒๅ็จ็๏ผๆไน่ฐ๏ผ็งๆฎ๏ผ
|
95 |
+
โโๅฆๆๅบๆจกๅๆจ็ๆบ็้ณ่ดจ้ซไบ่ฎญ็ป้็้ณ่ดจ๏ผไปไปฌๅฏไปฅๅธฆ้ซๆจ็็ปๆ็้ณ่ดจ๏ผไฝไปฃไปทๅฏ่ฝๆฏ้ณ่ฒๅพๅบๆจก/ๆจ็ๆบ็้ณ่ฒ้ ๏ผ่ฟ็ง็ฐ่ฑกๅซๅ"้ณ่ฒๆณ้ฒ"๏ผ
|
96 |
+
|
97 |
+
โโindex rate็จๆฅๅๅ/่งฃๅณ้ณ่ฒๆณ้ฒ้ฎ้ขใ่ฐๅฐ1๏ผๅ็่ฎบไธไธๅญๅจๆจ็ๆบ็้ณ่ฒๆณ้ฒ้ฎ้ข๏ผไฝ้ณ่ดจๆดๅพๅไบ่ฎญ็ป้ใๅฆๆ่ฎญ็ป้้ณ่ดจๆฏๆจ็ๆบไฝ๏ผๅindex rate่ฐ้ซๅฏ่ฝ้ไฝ้ณ่ดจใ่ฐๅฐ0๏ผๅไธๅ
ทๅคๅฉ็จๆฃ็ดขๆททๅๆฅไฟๆค่ฎญ็ป้้ณ่ฒ็ๆๆ๏ผ
|
98 |
+
|
99 |
+
โโๅฆๆ่ฎญ็ป้ไผ่ดจๆถ้ฟๅค๏ผๅฏ่ฐ้ซtotal_epoch๏ผๆญคๆถๆจกๅๆฌ่บซไธๅคชไผๅผ็จๆจ็ๆบๅๅบๆจก็้ณ่ฒ๏ผๅพๅฐๅญๅจ"้ณ่ฒๆณ้ฒ"้ฎ้ข๏ผๆญคๆถindex_rateไธ้่ฆ๏ผไฝ ็่ณๅฏไปฅไธๅปบ็ซ/ๅไบซindex็ดขๅผๆไปถใ
|
100 |
+
|
101 |
+
|
102 |
+
## Q11:ๆจ็ๆไน้gpu
|
103 |
+
config.pyๆไปถ้device cuda:ๅ้ข้ๆฉๅกๅท๏ผ
|
104 |
+
|
105 |
+
ๅกๅทๅๆพๅก็ๆ ๅฐๅ
ณ็ณป๏ผๅจ๏ฟฝ๏ฟฝ็ป้้กนๅก็ๆพๅกไฟกๆฏๆ ้่ฝ็ๅฐใ
|
106 |
+
|
107 |
+
|
108 |
+
## Q12:ๅฆไฝๆจ็่ฎญ็ปไธญ้ดไฟๅญ็pth
|
109 |
+
้่ฟckpt้้กนๅกๆไธ้ขๆๅๅฐๆจกๅใ
|
110 |
+
|
111 |
+
|
112 |
+
|
113 |
+
## Q13:ๅฆไฝไธญๆญๅ็ปง็ปญ่ฎญ็ป
|
114 |
+
็ฐ้ถๆฎตๅช่ฝๅ
ณ้ญWebUIๆงๅถๅฐๅๅปgo-web.bat้ๅฏ็จๅบใ็ฝ้กตๅๆฐไน่ฆๅทๆฐ้ๆฐๅกซๅ๏ผ
|
115 |
+
|
116 |
+
็ปง็ปญ่ฎญ็ป๏ผ็ธๅ็ฝ้กตๅๆฐ็น่ฎญ็ปๆจกๅ๏ผๅฐฑไผๆฅ็ไธๆฌก็checkpoint็ปง็ปญ่ฎญ็ปใ
|
117 |
+
|
118 |
+
|
119 |
+
## Q14:่ฎญ็ปๆถๅบ็ฐๆไปถ้กต้ข/ๅ
ๅญerror
|
120 |
+
่ฟ็จๅผๅคชๅคไบ๏ผๅ
ๅญ็ธไบใไฝ ๅฏ่ฝๅฏไปฅ้่ฟๅฆไธๆนๅผ่งฃๅณ
|
121 |
+
|
122 |
+
1ใ"ๆๅ้ณ้ซๅๅค็ๆฐๆฎไฝฟ็จ็CPU่ฟ็จๆฐ" ้
ๆ
ๆไฝ๏ผ
|
123 |
+
|
124 |
+
2ใ่ฎญ็ป้้ณ้ขๆๅทฅๅไธไธ๏ผไธ่ฆๅคช้ฟใ
|
125 |
+
|
126 |
+
|
127 |
+
|
128 |
+
## Q15:ๅฆไฝไธญ้ๅ ๆฐๆฎ่ฎญ็ป
|
129 |
+
1ใๆๆๆฐๆฎๆฐๅปบไธไธชๅฎ้ชๅ๏ผ
|
130 |
+
|
131 |
+
2ใๆท่ดไธไธๆฌก็ๆๆฐ็้ฃไธชGๅDๆไปถ๏ผๆ่
ไฝ ๆณๅบไบๅชไธชไธญ้ดckpt่ฎญ็ป๏ผไนๅฏไปฅๆท่ดไธญ้ด็๏ผๅฐๆฐๅฎ้ชๅ๏ผไธ
|
132 |
+
|
133 |
+
3ใไธ้ฎ่ฎญ็ปๆฐๅฎ้ชๅ๏ผไปไผ็ปง็ปญไธไธๆฌก็ๆๆฐ่ฟๅบฆ่ฎญ็ปใ
|
134 |
+
|
135 |
+
|
136 |
+
## Q16: error about llvmlite.dll
|
137 |
+
|
138 |
+
OSError: Could not load shared object file: llvmlite.dll
|
139 |
+
|
140 |
+
FileNotFoundError: Could not find module lib\site-packages\llvmlite\binding\llvmlite.dll (or one of its dependencies). Try using the full path with constructor syntax.
|
141 |
+
|
142 |
+
winๅนณๅฐไผๆฅ่ฟไธช้๏ผ่ฃ
ไธhttps://aka.ms/vs/17/release/vc_redist.x64.exe่ฟไธชๅ้ๅฏWebUIๅฐฑๅฅฝไบใ
|
143 |
+
|
144 |
+
## Q17: RuntimeError: The expanded size of the tensor (17280) must match the existing size (0) at non-singleton dimension 1. Target sizes: [1, 17280]. Tensor sizes: [0]
|
145 |
+
|
146 |
+
wavs16kๆไปถๅคนไธ๏ผๆพๅฐๆไปถๅคงๅฐๆพ่ๆฏๅ
ถไป้ฝๅฐ็ไธไบ้ณ้ขๆไปถ๏ผๅ ๆ๏ผ็นๅป่ฎญ็ปๆจกๅ๏ผๅฐฑไธไผๆฅ้ไบ๏ผไธ่ฟ็ฑไบไธ้ฎๆต็จไธญๆญไบไฝ ่ฎญ็ปๅฎๆจกๅ่ฟ่ฆ็น่ฎญ็ป็ดขๅผใ
|
147 |
+
|
148 |
+
## Q18: RuntimeError: The size of tensor a (24) must match the size of tensor b (16) at non-singleton dimension 2
|
149 |
+
|
150 |
+
ไธ่ฆไธญ้ๅๆด้ๆ ท็็ปง็ปญ่ฎญ็ปใๅฆๆไธๅฎ่ฆๅๆด๏ผๅบๆดๆขๅฎ้ชๅไปๅคด่ฎญ็ปใๅฝ็ถไฝ ไนๅฏไปฅๆไธๆฌกๆๅ็้ณ้ซๅ็นๅพ๏ผ0/1/2/2b folders๏ผๆท่ด่ฟๅปๅ ้่ฎญ็ปๆต็จใ
|
docs/en/faiss_tips_en.md
ADDED
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
faiss tuning TIPS
|
2 |
+
==================
|
3 |
+
# about faiss
|
4 |
+
faiss is a library of neighborhood searches for dense vectors, developed by facebook research, which efficiently implements many approximate neighborhood search methods.
|
5 |
+
Approximate Neighbor Search finds similar vectors quickly while sacrificing some accuracy.
|
6 |
+
|
7 |
+
## faiss in RVC
|
8 |
+
In RVC, for the embedding of features converted by HuBERT, we search for embeddings similar to the embedding generated from the training data and mix them to achieve a conversion that is closer to the original speech. However, since this search takes time if performed naively, high-speed conversion is realized by using approximate neighborhood search.
|
9 |
+
|
10 |
+
# implementation overview
|
11 |
+
In '/logs/your-experiment/3_feature256' where the model is located, features extracted by HuBERT from each voice data are located.
|
12 |
+
From here we read the npy files in order sorted by filename and concatenate the vectors to create big_npy. (This vector has shape [N, 256].)
|
13 |
+
After saving big_npy as /logs/your-experiment/total_fea.npy, train it with faiss.
|
14 |
+
|
15 |
+
In this article, I will explain the meaning of these parameters.
|
16 |
+
|
17 |
+
# Explanation of the method
|
18 |
+
## index factory
|
19 |
+
An index factory is a unique faiss notation that expresses a pipeline that connects multiple approximate neighborhood search methods as a string.
|
20 |
+
This allows you to try various approximate neighborhood search methods simply by changing the index factory string.
|
21 |
+
In RVC it is used like this:
|
22 |
+
|
23 |
+
```python
|
24 |
+
index = faiss.index_factory(256, "IVF%s,Flat" % n_ivf)
|
25 |
+
```
|
26 |
+
Among the arguments of index_factory, the first is the number of dimensions of the vector, the second is the index factory string, and the third is the distance to use.
|
27 |
+
|
28 |
+
For more detailed notation
|
29 |
+
https://github.com/facebookresearch/faiss/wiki/The-index-factory
|
30 |
+
|
31 |
+
## index for distance
|
32 |
+
There are two typical indexes used as similarity of embedding as follows.
|
33 |
+
|
34 |
+
- Euclidean distance (METRIC_L2)
|
35 |
+
- inner product (METRIC_INNER_PRODUCT)
|
36 |
+
|
37 |
+
Euclidean distance takes the squared difference in each dimension, sums the differences in all dimensions, and then takes the square root. This is the same as the distance in 2D and 3D that we use on a daily basis.
|
38 |
+
The inner product is not used as an index of similarity as it is, and the cosine similarity that takes the inner product after being normalized by the L2 norm is generally used.
|
39 |
+
|
40 |
+
Which is better depends on the case, but cosine similarity is often used in embedding obtained by word2vec and similar image retrieval models learned by ArcFace. If you want to do l2 normalization on vector X with numpy, you can do it with the following code with eps small enough to avoid 0 division.
|
41 |
+
|
42 |
+
```python
|
43 |
+
X_normed = X / np.maximum(eps, np.linalg.norm(X, ord=2, axis=-1, keepdims=True))
|
44 |
+
```
|
45 |
+
|
46 |
+
Also, for the index factory, you can change the distance index used for calculation by choosing the value to pass as the third argument.
|
47 |
+
|
48 |
+
```python
|
49 |
+
index = faiss.index_factory(dimention, text, faiss.METRIC_INNER_PRODUCT)
|
50 |
+
```
|
51 |
+
|
52 |
+
## IVF
|
53 |
+
IVF (Inverted file indexes) is an algorithm similar to the inverted index in full-text search.
|
54 |
+
During learning, the search target is clustered with kmeans, and Voronoi partitioning is performed using the cluster center. Each data point is assigned a cluster, so we create a dictionary that looks up the data points from the clusters.
|
55 |
+
|
56 |
+
For example, if clusters are assigned as follows
|
57 |
+
|index|Cluster|
|
58 |
+
|-----|-------|
|
59 |
+
|1|A|
|
60 |
+
|2|B|
|
61 |
+
|3|A|
|
62 |
+
|4|C|
|
63 |
+
|5|B|
|
64 |
+
|
65 |
+
The resulting inverted index looks like this:
|
66 |
+
|
67 |
+
|cluster|index|
|
68 |
+
|-------|-----|
|
69 |
+
|A|1, 3|
|
70 |
+
|B|2, 5|
|
71 |
+
|C|4|
|
72 |
+
|
73 |
+
When searching, we first search n_probe clusters from the clusters, and then calculate the distances for the data points belonging to each cluster.
|
74 |
+
|
75 |
+
# recommend parameter
|
76 |
+
There are official guidelines on how to choose an index, so I will explain accordingly.
|
77 |
+
https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index
|
78 |
+
|
79 |
+
For datasets below 1M, 4bit-PQ is the most efficient method available in faiss as of April 2023.
|
80 |
+
Combining this with IVF, narrowing down the candidates with 4bit-PQ, and finally recalculating the distance with an accurate index can be described by using the following index factory.
|
81 |
+
|
82 |
+
```python
|
83 |
+
index = faiss.index_factory(256, "IVF1024,PQ128x4fs,RFlat")
|
84 |
+
```
|
85 |
+
|
86 |
+
## Recommended parameters for IVF
|
87 |
+
Consider the case of too many IVFs. For example, if coarse quantization by IVF is performed for the number of data, this is the same as a naive exhaustive search and is inefficient.
|
88 |
+
For 1M or less, IVF values are recommended between 4*sqrt(N) ~ 16*sqrt(N) for N number of data points.
|
89 |
+
|
90 |
+
Since the calculation time increases in proportion to the number of n_probes, please consult with the accuracy and choose appropriately. Personally, I don't think RVC needs that much accuracy, so n_probe = 1 is fine.
|
91 |
+
|
92 |
+
## FastScan
|
93 |
+
FastScan is a method that enables high-speed approximation of distances by Cartesian product quantization by performing them in registers.
|
94 |
+
Cartesian product quantization performs clustering independently for each d dimension (usually d = 2) during learning, calculates the distance between clusters in advance, and creates a lookup table. At the time of prediction, the distance of each dimension can be calculated in O(1) by looking at the lookup table.
|
95 |
+
So the number you specify after PQ usually specifies half the dimension of the vector.
|
96 |
+
|
97 |
+
For a more detailed description of FastScan, please refer to the official documentation.
|
98 |
+
https://github.com/facebookresearch/faiss/wiki/Fast-accumulation-of-PQ-and-AQ-codes-(FastScan)
|
99 |
+
|
100 |
+
## RFlat
|
101 |
+
RFlat is an instruction to recalculate the rough distance calculated by FastScan with the exact distance specified by the third argument of index factory.
|
102 |
+
When getting k neighbors, k*k_factor points are recalculated.
|
docs/en/faq_en.md
ADDED
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Q1:Cannot find index file after "One-click Training".
|
2 |
+
If it displays "Training is done. The program is closed," then the model has been trained successfully, and the subsequent errors are fake;
|
3 |
+
|
4 |
+
The lack of an 'added' index file after One-click training may be due to the training set being too large, causing the addition of the index to get stuck; this has been resolved by using batch processing to add the index, which solves the problem of memory overload when adding the index. As a temporary solution, try clicking the "Train Index" button again.<br>
|
5 |
+
|
6 |
+
## Q2:Cannot find the model in โInferencing timbreโ after training
|
7 |
+
Click โRefresh timbre listโ and check again; if still not visible, check if there are any errors during training and send screenshots of the console, web UI, and logs/experiment_name/*.log to the developers for further analysis.<br>
|
8 |
+
|
9 |
+
## Q3:How to share a model/How to use others' models?
|
10 |
+
The pth files stored in rvc_root/logs/experiment_name are not meant for sharing or inference, but for storing the experiment checkpoits for reproducibility and further training. The model to be shared should be the 60+MB pth file in the weights folder;
|
11 |
+
|
12 |
+
In the future, weights/exp_name.pth and logs/exp_name/added_xxx.index will be merged into a single weights/exp_name.zip file to eliminate the need for manual index input; so share the zip file, not the pth file, unless you want to continue training on a different machine;
|
13 |
+
|
14 |
+
Copying/sharing the several hundred MB pth files from the logs folder to the weights folder for forced inference may result in errors such as missing f0, tgt_sr, or other keys. You need to use the ckpt tab at the bottom to manually or automatically (if the information is found in the logs/exp_name), select whether to include pitch infomation and target audio sampling rate options and then extract the smaller model. After extraction, there will be a 60+ MB pth file in the weights folder, and you can refresh the voices to use it.<br>
|
15 |
+
|
16 |
+
## Q4:Connection Error.
|
17 |
+
You may have closed the console (black command line window).<br>
|
18 |
+
|
19 |
+
## Q5:WebUI popup 'Expecting value: line 1 column 1 (char 0)'.
|
20 |
+
Please disable system LAN proxy/global proxy and then refresh.<br>
|
21 |
+
|
22 |
+
## Q6:How to train and infer without the WebUI?
|
23 |
+
Training script:<br>
|
24 |
+
You can run training in WebUI first, and the command-line versions of dataset preprocessing and training will be displayed in the message window.<br>
|
25 |
+
|
26 |
+
Inference script:<br>
|
27 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/myinfer.py<br>
|
28 |
+
|
29 |
+
|
30 |
+
e.g.<br>
|
31 |
+
|
32 |
+
runtime\python.exe myinfer.py 0 "E:\codes\py39\RVC-beta\todo-songs\1111.wav" "E:\codes\py39\logs\mi-test\added_IVF677_Flat_nprobe_7.index" harvest "test.wav" "weights/mi-test.pth" 0.6 cuda:0 True<br>
|
33 |
+
|
34 |
+
|
35 |
+
f0up_key=sys.argv[1]<br>
|
36 |
+
input_path=sys.argv[2]<br>
|
37 |
+
index_path=sys.argv[3]<br>
|
38 |
+
f0method=sys.argv[4]#harvest or pm<br>
|
39 |
+
opt_path=sys.argv[5]<br>
|
40 |
+
model_path=sys.argv[6]<br>
|
41 |
+
index_rate=float(sys.argv[7])<br>
|
42 |
+
device=sys.argv[8]<br>
|
43 |
+
is_half=bool(sys.argv[9])<br>
|
44 |
+
|
45 |
+
## Q7:Cuda error/Cuda out of memory.
|
46 |
+
There is a small chance that there is a problem with the CUDA configuration or the device is not supported; more likely, there is not enough memory (out of memory).<br>
|
47 |
+
|
48 |
+
For training, reduce the batch size (if reducing to 1 is still not enough, you may need to change the graphics card); for inference, adjust the x_pad, x_query, x_center, and x_max settings in the config.py file as needed. 4G or lower memory cards (e.g. 1060(3G) and various 2G cards) can be abandoned, while 4G memory cards still have a chance.<br>
|
49 |
+
|
50 |
+
## Q8:How many total_epoch are optimal?
|
51 |
+
If the training dataset's audio quality is poor and the noise floor is high, 20-30 epochs are sufficient. Setting it too high won't improve the audio quality of your low-quality training set.<br>
|
52 |
+
|
53 |
+
If the training set audio quality is high, the noise floor is low, and there is sufficient duration, you can increase it. 200 is acceptable (since training is fast, and if you're able to prepare a high-quality training set, your GPU likely can handle a longer training duration without issue).<br>
|
54 |
+
|
55 |
+
## Q9:How much training set duration is needed?
|
56 |
+
|
57 |
+
A dataset of around 10min to 50min is recommended.<br>
|
58 |
+
|
59 |
+
With guaranteed high sound quality and low bottom noise, more can be added if the dataset's timbre is uniform.<br>
|
60 |
+
|
61 |
+
For a high-level training set (lean + distinctive tone), 5min to 10min is fine.<br>
|
62 |
+
|
63 |
+
There are some people who have trained successfully with 1min to 2min data, but the success is not reproducible by others and is not very informative. <br>This requires that the training set has a very distinctive timbre (e.g. a high-frequency airy anime girl sound) and the quality of the audio is high;
|
64 |
+
Data of less than 1min duration has not been successfully attempted so far. This is not recommended.<br>
|
65 |
+
|
66 |
+
|
67 |
+
## Q10:What is the index rate for and how to adjust it?
|
68 |
+
If the tone quality of the pre-trained model and inference source is higher than that of the training set, they can bring up the tone quality of the inference result, but at the cost of a possible tone bias towards the tone of the underlying model/inference source rather than the tone of the training set, which is generally referred to as "tone leakage".<br>
|
69 |
+
|
70 |
+
The index rate is used to reduce/resolve the timbre leakage problem. If the index rate is set to 1, theoretically there is no timbre leakage from the inference source and the timbre quality is more biased towards the training set. If the training set has a lower sound quality than the inference source, then a higher index rate may reduce the sound quality. Turning it down to 0 does not have the effect of using retrieval blending to protect the training set tones.<br>
|
71 |
+
|
72 |
+
If the training set has good audio quality and long duration, turn up the total_epoch, when the model itself is less likely to refer to the inferred source and the pretrained underlying model, and there is little "tone leakage", the index_rate is not important and you can even not create/share the index file.<br>
|
73 |
+
|
74 |
+
## Q11:How to choose the gpu when inferring?
|
75 |
+
In the config.py file, select the card number after "device cuda:".<br>
|
76 |
+
|
77 |
+
The mapping between card number and graphics card can be seen in the graphics card information section of the training tab.<br>
|
78 |
+
|
79 |
+
## Q12:How to use the model saved in the middle of training?
|
80 |
+
Save via model extraction at the bottom of the ckpt processing tab.
|
81 |
+
|
82 |
+
## Q13:File/memory error(when training)?
|
83 |
+
Too many processes and your memory is not enough. You may fix it by:
|
84 |
+
|
85 |
+
1ใdecrease the input in field "Threads of CPU".
|
86 |
+
|
87 |
+
2ใpre-cut trainset to shorter audio files.
|
88 |
+
|
89 |
+
## Q14: How to continue training using more data
|
90 |
+
|
91 |
+
step1: put all wav data to path2.
|
92 |
+
|
93 |
+
step2: exp_name2+path2 -> process dataset and extract feature.
|
94 |
+
|
95 |
+
step3: copy the latest G and D file of exp_name1 (your previous experiment) into exp_name2 folder.
|
96 |
+
|
97 |
+
step4: click "train the model", and it will continue training from the beginning of your previous exp model epoch.
|
98 |
+
|
99 |
+
## Q15: error about llvmlite.dll
|
100 |
+
|
101 |
+
OSError: Could not load shared object file: llvmlite.dll
|
102 |
+
|
103 |
+
FileNotFoundError: Could not find module lib\site-packages\llvmlite\binding\llvmlite.dll (or one of its dependencies). Try using the full path with constructor syntax.
|
104 |
+
|
105 |
+
The issue will happen in windows, install https://aka.ms/vs/17/release/vc_redist.x64.exe and it will be fixed.
|
106 |
+
|
107 |
+
## Q16: RuntimeError: The expanded size of the tensor (17280) must match the existing size (0) at non-singleton dimension 1. Target sizes: [1, 17280]. Tensor sizes: [0]
|
108 |
+
|
109 |
+
Delete the wav files whose size is significantly smaller than others, and that won't happen again. Than click "train the model"and "train the index".
|
110 |
+
|
111 |
+
## Q17: RuntimeError: The size of tensor a (24) must match the size of tensor b (16) at non-singleton dimension 2
|
112 |
+
|
113 |
+
Do not change the sampling rate and then continue training. If it is necessary to change, the exp name should be changed and the model will be trained from scratch. You can also copy the pitch and features (0/1/2/2b folders) extracted last time to accelerate the training process.
|
114 |
+
|
docs/en/training_tips_en.md
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Instructions and tips for RVC training
|
2 |
+
======================================
|
3 |
+
This TIPS explains how data training is done.
|
4 |
+
|
5 |
+
# Training flow
|
6 |
+
I will explain along the steps in the training tab of the GUI.
|
7 |
+
|
8 |
+
## step1
|
9 |
+
Set the experiment name here.
|
10 |
+
|
11 |
+
You can also set here whether the model should take pitch into account.
|
12 |
+
If the model doesn't consider pitch, the model will be lighter, but not suitable for singing.
|
13 |
+
|
14 |
+
Data for each experiment is placed in `/logs/your-experiment-name/`.
|
15 |
+
|
16 |
+
## step2a
|
17 |
+
Loads and preprocesses audio.
|
18 |
+
|
19 |
+
### load audio
|
20 |
+
If you specify a folder with audio, the audio files in that folder will be read automatically.
|
21 |
+
For example, if you specify `C:Users\hoge\voices`, `C:Users\hoge\voices\voice.mp3` will be loaded, but `C:Users\hoge\voices\dir\voice.mp3` will Not loaded.
|
22 |
+
|
23 |
+
Since ffmpeg is used internally for reading audio, if the extension is supported by ffmpeg, it will be read automatically.
|
24 |
+
After converting to int16 with ffmpeg, convert to float32 and normalize between -1 to 1.
|
25 |
+
|
26 |
+
### denoising
|
27 |
+
The audio is smoothed by scipy's filtfilt.
|
28 |
+
|
29 |
+
### Audio Split
|
30 |
+
First, the input audio is divided by detecting parts of silence that last longer than a certain period (max_sil_kept=5 seconds?). After splitting the audio on silence, split the audio every 4 seconds with an overlap of 0.3 seconds. For audio separated within 4 seconds, after normalizing the volume, convert the wav file to `/logs/your-experiment-name/0_gt_wavs` and then convert it to 16k sampling rate to `/logs/your-experiment-name/1_16k_wavs ` as a wav file.
|
31 |
+
|
32 |
+
## step2b
|
33 |
+
### Extract pitch
|
34 |
+
Extract pitch information from wav files. Extract the pitch information (=f0) using the method built into parselmouth or pyworld and save it in `/logs/your-experiment-name/2a_f0`. Then logarithmically convert the pitch information to an integer between 1 and 255 and save it in `/logs/your-experiment-name/2b-f0nsf`.
|
35 |
+
|
36 |
+
### Extract feature_print
|
37 |
+
Convert the wav file to embedding in advance using HuBERT. Read the wav file saved in `/logs/your-experiment-name/1_16k_wavs`, convert the wav file to 256-dimensional features with HuBERT, and save in npy format in `/logs/your-experiment-name/3_feature256`.
|
38 |
+
|
39 |
+
## step3
|
40 |
+
train the model.
|
41 |
+
### Glossary for Beginners
|
42 |
+
In deep learning, the data set is divided and the learning proceeds little by little. In one model update (step), batch_size data are retrieved and predictions and error corrections are performed. Doing this once for a dataset counts as one epoch.
|
43 |
+
|
44 |
+
Therefore, the learning time is the learning time per step x (the number of data in the dataset / batch size) x the number of epochs. In general, the larger the batch size, the more stable the learning becomes (learning time per step รท batch size) becomes smaller, but it uses more GPU memory. GPU RAM can be checked with the nvidia-smi command. Learning can be done in a short time by increasing the batch size as much as possible according to the machine of the execution environment.
|
45 |
+
|
46 |
+
### Specify pretrained model
|
47 |
+
RVC starts training the model from pretrained weights instead of from 0, so it can be trained with a small dataset.
|
48 |
+
|
49 |
+
By default
|
50 |
+
|
51 |
+
- If you consider pitch, it loads `rvc-location/pretrained/f0G40k.pth` and `rvc-location/pretrained/f0D40k.pth`.
|
52 |
+
- If you don't consider pitch, it loads `rvc-location/pretrained/G40k.pth` and `rvc-location/pretrained/D40k.pth`.
|
53 |
+
|
54 |
+
When learning, model parameters are saved in `logs/your-experiment-name/G_{}.pth` and `logs/your-experiment-name/D_{}.pth` for each save_every_epoch, but by specifying this path, you can start learning. You can restart or start training from model weights learned in a different experiment.
|
55 |
+
|
56 |
+
### learning index
|
57 |
+
RVC saves the HuBERT feature values used during training, and during inference, searches for feature values that are similar to the feature values used during learning to perform inference. In order to perform this search at high speed, the index is learned in advance.
|
58 |
+
For index learning, we use the approximate neighborhood search library faiss. Read the feature value of `logs/your-experiment-name/3_feature256` and use it to learn the index, and save it as `logs/your-experiment-name/add_XXX.index`.
|
59 |
+
|
60 |
+
(From the 20230428update version, it is read from the index, and saving / specifying is no longer necessary.)
|
61 |
+
|
62 |
+
### Button description
|
63 |
+
- Train model: After executing step2b, press this button to train the model.
|
64 |
+
- Train feature index: After training the model, perform index learning.
|
65 |
+
- One-click training: step2b, model training and feature index training all at once.
|
docs/fr/README.fr.md
ADDED
@@ -0,0 +1,166 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div align="center">
|
2 |
+
|
3 |
+
# Retrieval-based-Voice-Conversion-WebUI
|
4 |
+
Un framework simple et facile ร utiliser pour la conversion vocale (modificateur de voix) basรฉ sur VITS
|
5 |
+
|
6 |
+
|
7 |
+
|
8 |
+
[![madewithlove](https://img.shields.io/badge/made_with-%E2%9D%A4-red?style=for-the-badge&labelColor=orange
|
9 |
+
)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI)
|
10 |
+
|
11 |
+
![moe](https://counter.seku.su/cmoe?name=rvc&theme=r34)
|
12 |
+
|
13 |
+
[![Licence](https://img.shields.io/github/license/fumiama/Retrieval-based-Voice-Conversion-WebUI?style=for-the-badge)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/blob/main/LICENSE)
|
14 |
+
[![Huggingface](https://img.shields.io/badge/๐ค%20-Spaces-yellow.svg?style=for-the-badge)](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
15 |
+
|
16 |
+
[![Discord](https://img.shields.io/badge/RVC%20Developers-Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/HcsmBBGyVk)
|
17 |
+
|
18 |
+
[**FAQ**](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E7%AD%94) | [**AutoDLยทFormation d'un chanteur AI pour 5 centimes**](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/wiki/Autodl%E8%AE%AD%E7%BB%83RVC%C2%B7AI%E6%AD%8C%E6%89%8B%E6%95%99%E7%A8%8B) | [**Enregistrement des expรฉriences comparatives**](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/wiki/%E5%AF%B9%E7%85%A7%E5%AE%9E%E9%AA%8C%C2%B7%E5%AE%9E%E9%AA%8C%E8%AE%B0%E5%BD%95) | [**Dรฉmonstration en ligne**](https://huggingface.co/spaces/Ricecake123/RVC-demo)
|
19 |
+
|
20 |
+
</div>
|
21 |
+
|
22 |
+
------
|
23 |
+
|
24 |
+
[**English**](../en/README.en.md) | [ **ไธญๆ็ฎไฝ**](../../README.md) | [**ๆฅๆฌ่ช**](../jp/README.ja.md) | [**ํ๊ตญ์ด**](../kr/README.ko.md) ([**้ๅ่ช**](../kr/README.ko.han.md)) | [**Franรงais**](../fr/README.fr.md) | [**Turc**](../tr/README.tr.md) | [**Portuguรชs**](../pt/README.pt.md)
|
25 |
+
|
26 |
+
Cliquez ici pour voir notre [vidรฉo de dรฉmonstration](https://www.bilibili.com/video/BV1pm4y1z7Gm/) !
|
27 |
+
|
28 |
+
> Conversion vocale en temps rรฉel avec RVC : [w-okada/voice-changer](https://github.com/w-okada/voice-changer)
|
29 |
+
|
30 |
+
> Le modรจle de base est formรฉ avec prรจs de 50 heures de donnรฉes VCTK de haute qualitรฉ et open source. Aucun souci concernant les droits d'auteur, n'hรฉsitez pas ร l'utiliser.
|
31 |
+
|
32 |
+
> Attendez-vous au modรจle de base RVCv3 : plus de paramรจtres, plus de donnรฉes, de meilleurs rรฉsultats, une vitesse d'infรฉrence presque identique, et nรฉcessite moins de donnรฉes pour la formation.
|
33 |
+
|
34 |
+
## Introduction
|
35 |
+
Ce dรฉpรดt a les caractรฉristiques suivantes :
|
36 |
+
+ Utilise le top1 pour remplacer les caractรฉristiques de la source d'entrรฉe par les caractรฉristiques de l'ensemble d'entraรฎnement pour รฉliminer les fuites de timbre vocal.
|
37 |
+
+ Peut รชtre formรฉ rapidement mรชme sur une carte graphique relativement moins performante.
|
38 |
+
+ Obtient de bons rรฉsultats mรชme avec peu de donnรฉes pour la formation (il est recommandรฉ de collecter au moins 10 minutes de donnรฉes vocales avec un faible bruit de fond).
|
39 |
+
+ Peut changer le timbre vocal en fusionnant des modรจles (avec l'aide de l'onglet ckpt-merge).
|
40 |
+
+ Interface web simple et facile ร utiliser.
|
41 |
+
+ Peut appeler le modรจle UVR5 pour sรฉparer rapidement la voix et l'accompagnement.
|
42 |
+
+ Utilise l'algorithme de pitch vocal le plus avancรฉ [InterSpeech2023-RMVPE](#projets-rรฉfรฉrencรฉs) pour รฉliminer les problรจmes de voix muette. Meilleurs rรฉsultats, plus rapide que crepe_full, et moins gourmand en ressources.
|
43 |
+
+ Support d'accรฉlรฉration pour les cartes AMD et Intel.
|
44 |
+
|
45 |
+
## Configuration de l'environnement
|
46 |
+
Exรฉcutez les commandes suivantes dans un environnement Python de version 3.8 ou supรฉrieure.
|
47 |
+
|
48 |
+
(Windows/Linux)
|
49 |
+
Installez d'abord les dรฉpendances principales via pip :
|
50 |
+
```bash
|
51 |
+
# Installez Pytorch et ses dรฉpendances essentielles, sautez si dรฉjร installรฉ.
|
52 |
+
# Voir : https://pytorch.org/get-started/locally/
|
53 |
+
pip install torch torchvision torchaudio
|
54 |
+
|
55 |
+
# Pour les utilisateurs de Windows avec une architecture Nvidia Ampere (RTX30xx), en se basant sur l'expรฉrience #21, spรฉcifiez la version CUDA correspondante pour Pytorch.
|
56 |
+
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
|
57 |
+
|
58 |
+
# Pour Linux + carte AMD, utilisez cette version de Pytorch:
|
59 |
+
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2
|
60 |
+
```
|
61 |
+
|
62 |
+
Vous pouvez utiliser poetry pour installer les dรฉpendances :
|
63 |
+
```bash
|
64 |
+
# Installez l'outil de gestion des dรฉpendances Poetry, sautez si dรฉjร installรฉ.
|
65 |
+
# Voir : https://python-poetry.org/docs/#installation
|
66 |
+
curl -sSL https://install.python-poetry.org | python3 -
|
67 |
+
|
68 |
+
# Installez les dรฉpendances avec poetry.
|
69 |
+
poetry install
|
70 |
+
```
|
71 |
+
|
72 |
+
Ou vous pouvez utiliser pip pour installer les dรฉpendances :
|
73 |
+
```bash
|
74 |
+
# Cartes Nvidia :
|
75 |
+
pip install -r requirements/main.txt
|
76 |
+
|
77 |
+
# Cartes AMD/Intel :
|
78 |
+
pip install -r requirements/dml.txt
|
79 |
+
|
80 |
+
# Cartes Intel avec IPEX
|
81 |
+
pip install -r requirements/ipex.txt
|
82 |
+
|
83 |
+
# Cartes AMD sur Linux (ROCm)
|
84 |
+
pip install -r requirements/amd.txt
|
85 |
+
```
|
86 |
+
|
87 |
+
------
|
88 |
+
Les utilisateurs de Mac peuvent exรฉcuter `run.sh` pour installer les dรฉpendances :
|
89 |
+
```bash
|
90 |
+
sh ./run.sh
|
91 |
+
```
|
92 |
+
|
93 |
+
## Prรฉparation d'autres modรจles prรฉ-entraรฎnรฉs
|
94 |
+
RVC nรฉcessite d'autres modรจles prรฉ-entraรฎnรฉs pour l'infรฉrence et la formation.
|
95 |
+
|
96 |
+
```bash
|
97 |
+
#Tรฉlรฉcharger tous les modรจles depuis https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/
|
98 |
+
python tools/download_models.py
|
99 |
+
```
|
100 |
+
|
101 |
+
Ou vous pouvez tรฉlรฉcharger ces modรจles depuis notre [espace Hugging Face](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/).
|
102 |
+
|
103 |
+
Voici une liste des modรจles et autres fichiers requis par RVC :
|
104 |
+
```bash
|
105 |
+
./assets/hubert/hubert_base.pt
|
106 |
+
|
107 |
+
./assets/pretrained
|
108 |
+
|
109 |
+
./assets/uvr5_weights
|
110 |
+
|
111 |
+
# Pour tester la version v2 du modรจle, tรฉlรฉchargez รฉgalement :
|
112 |
+
|
113 |
+
./assets/pretrained_v2
|
114 |
+
|
115 |
+
# Si vous souhaitez utiliser le dernier algorithme RMVPE de pitch vocal, tรฉlรฉchargez les paramรจtres du modรจle de pitch et placez-les dans le rรฉpertoire racine de RVC.
|
116 |
+
|
117 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.pt
|
118 |
+
|
119 |
+
# Les utilisateurs de cartes AMD/Intel nรฉcessitant l'environnement DML doivent tรฉlรฉcharger :
|
120 |
+
|
121 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.onnx
|
122 |
+
|
123 |
+
```
|
124 |
+
Pour les utilisateurs d'Intel ARC avec IPEX, exรฉcutez d'abord `source /opt/intel/oneapi/setvars.sh`.
|
125 |
+
Ensuite, exรฉcutez la commande suivante pour dรฉmarrer WebUI :
|
126 |
+
```bash
|
127 |
+
python web.py
|
128 |
+
```
|
129 |
+
|
130 |
+
Si vous utilisez Windows ou macOS, vous pouvez tรฉlรฉcharger et extraire `RVC-beta.7z`. Les utilisateurs de Windows peuvent exรฉcuter `go-web.bat` pour dรฉmarrer WebUI, tandis que les utilisateurs de macOS peuvent exรฉcuter `sh ./run.sh`.
|
131 |
+
|
132 |
+
## Compatibilitรฉ ROCm pour les cartes AMD (seulement Linux)
|
133 |
+
Installez tous les pilotes dรฉcrits [ici](https://rocm.docs.amd.com/en/latest/deploy/linux/os-native/install.html).
|
134 |
+
|
135 |
+
Sur Arch utilisez pacman pour installer le pilote:
|
136 |
+
````
|
137 |
+
pacman -S rocm-hip-sdk rocm-opencl-sdk
|
138 |
+
````
|
139 |
+
|
140 |
+
Vous devrez peut-รชtre crรฉer ces variables d'environnement (par exemple avec RX6700XT):
|
141 |
+
````
|
142 |
+
export ROCM_PATH=/opt/rocm
|
143 |
+
export HSA_OVERRIDE_GFX_VERSION=10.3.0
|
144 |
+
````
|
145 |
+
Assurez-vous que votre utilisateur est dans les groupes `render` et `video`:
|
146 |
+
````
|
147 |
+
sudo usermod -aG render $USERNAME
|
148 |
+
sudo usermod -aG video $USERNAME
|
149 |
+
````
|
150 |
+
Enfin vous pouvez exรฉcuter WebUI:
|
151 |
+
```bash
|
152 |
+
python web.py
|
153 |
+
```
|
154 |
+
|
155 |
+
## Crรฉdits
|
156 |
+
+ [ContentVec](https://github.com/auspicious3000/contentvec/)
|
157 |
+
+ [VITS](https://github.com/jaywalnut310/vits)
|
158 |
+
+ [HIFIGAN](https://github.com/jik876/hifi-gan)
|
159 |
+
+ [Gradio](https://github.com/gradio-app/gradio)
|
160 |
+
+ [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)
|
161 |
+
+ [audio-slicer](https://github.com/openvpi/audio-slicer)
|
162 |
+
+ [Extraction de la hauteur vocale : RMVPE](https://github.com/Dream-High/RMVPE)
|
163 |
+
+ Le modรจle prรฉ-entraรฎnรฉ a รฉtรฉ formรฉ et testรฉ par [yxlllc](https://github.com/yxlllc/RMVPE) et [RVC-Boss](https://github.com/RVC-Boss).
|
164 |
+
|
165 |
+
## Remerciements ร tous les contributeurs pour leurs efforts
|
166 |
+
[![contributors](https://contrib.rocks/image?repo=fumiama/Retrieval-based-Voice-Conversion-WebUI)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/graphs/contributors)
|
docs/fr/faiss_tips_fr.md
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Conseils de rรฉglage pour faiss
|
2 |
+
==================
|
3 |
+
# ร propos de faiss
|
4 |
+
faiss est une bibliothรจque de recherches de voisins pour les vecteurs denses, dรฉveloppรฉe par Facebook Research, qui implรฉmente efficacement de nombreuses mรฉthodes de recherche de voisins approximatifs.
|
5 |
+
La recherche de voisins approximatifs trouve rapidement des vecteurs similaires tout en sacrifiant une certaine prรฉcision.
|
6 |
+
|
7 |
+
## faiss dans RVC
|
8 |
+
Dans RVC, pour l'incorporation des caractรฉristiques converties par HuBERT, nous recherchons des incorporations similaires ร l'incorporation gรฉnรฉrรฉe ร partir des donnรฉes d'entraรฎnement et les mixons pour obtenir une conversion plus proche de la parole originale. Cependant, cette recherche serait longue si elle รฉtait effectuรฉe de maniรจre naรฏve, donc une conversion ร haute vitesse est rรฉalisรฉe en utilisant une recherche de voisinage approximatif.
|
9 |
+
|
10 |
+
# Vue d'ensemble de la mise en ลuvre
|
11 |
+
Dans '/logs/votre-expรฉrience/3_feature256' oรน le modรจle est situรฉ, les caractรฉristiques extraites par HuBERT de chaque donnรฉe vocale sont situรฉes.
|
12 |
+
ร partir de lร , nous lisons les fichiers npy dans un ordre triรฉ par nom de fichier et concatรฉnons les vecteurs pour crรฉer big_npy. (Ce vecteur a la forme [N, 256].)
|
13 |
+
Aprรจs avoir sauvegardรฉ big_npy comme /logs/votre-expรฉrience/total_fea.npy, nous l'entraรฎnons avec faiss.
|
14 |
+
|
15 |
+
Dans cet article, j'expliquerai la signification de ces paramรจtres.
|
16 |
+
|
17 |
+
# Explication de la mรฉthode
|
18 |
+
## Usine d'index
|
19 |
+
Une usine d'index est une notation unique de faiss qui exprime un pipeline qui relie plusieurs mรฉthodes de recherche de voisinage approximatif sous forme de chaรฎne.
|
20 |
+
Cela vous permet d'essayer diverses mรฉthodes de recherche de voisinage approximatif simplement en changeant la chaรฎne de l'usine d'index.
|
21 |
+
Dans RVC, elle est utilisรฉe comme ceci :
|
22 |
+
|
23 |
+
```python
|
24 |
+
index = faiss.index_factory(256, "IVF%s,Flat" % n_ivf)
|
25 |
+
```
|
26 |
+
|
27 |
+
Parmi les arguments de index_factory, le premier est le nombre de dimensions du vecteur, le second est la chaรฎne de l'usine d'index, et le troisiรจme est la distance ร utiliser.
|
28 |
+
|
29 |
+
Pour une notation plus dรฉtaillรฉe :
|
30 |
+
https://github.com/facebookresearch/faiss/wiki/The-index-factory
|
31 |
+
|
32 |
+
## Index pour la distance
|
33 |
+
Il existe deux index typiques utilisรฉs comme similaritรฉ de l'incorporation comme suit :
|
34 |
+
|
35 |
+
- Distance euclidienne (METRIC_L2)
|
36 |
+
- Produit intรฉrieur (METRIC_INNER_PRODUCT)
|
37 |
+
|
38 |
+
La distance euclidienne prend la diffรฉrence au carrรฉ dans chaque dimension, somme les diffรฉrences dans toutes les dimensions, puis prend la racine carrรฉe. C'est la mรชme chose que la distance en 2D et 3D que nous utilisons au quotidien.
|
39 |
+
Le produit intรฉrieur n'est pas utilisรฉ comme index de similaritรฉ tel quel, et la similaritรฉ cosinus qui prend le produit intรฉrieur aprรจs avoir รฉtรฉ normalisรฉ par la norme L2 est gรฉnรฉralement utilisรฉe.
|
40 |
+
|
41 |
+
Lequel est le mieux dรฉpend du cas, mais la similaritรฉ cosinus est souvent utilisรฉe dans l'incorporation obtenue par word2vec et des modรจles de rรฉcupรฉration d'images similaires appris par ArcFace. Si vous voulez faire une normalisation l2 sur le vecteur X avec numpy, vous pouvez le faire avec le code suivant avec eps suffisamment petit pour รฉviter une division par 0.
|
42 |
+
|
43 |
+
```python
|
44 |
+
X_normed = X / np.maximum(eps, np.linalg.norm(X, ord=2, axis=-1, keepdims=True))
|
45 |
+
```
|
46 |
+
|
47 |
+
De plus, pour l'usine d'index, vous pouvez changer l'index de distance utilisรฉ pour le calcul en choisissant la valeur ร passer comme troisiรจme argument.
|
48 |
+
|
49 |
+
```python
|
50 |
+
index = faiss.index_factory(dimention, texte, faiss.METRIC_INNER_PRODUCT)
|
51 |
+
```
|
52 |
+
|
53 |
+
## IVF
|
54 |
+
IVF (Inverted file indexes) est un algorithme similaire ร l'index inversรฉ dans la recherche en texte intรฉgral.
|
55 |
+
Lors de l'apprentissage, la cible de recherche est regroupรฉe avec kmeans, et une partition de Voronoi est effectuรฉe en utilisant le centre du cluster. Chaque point de donnรฉes est attribuรฉ ร un cluster, nous crรฉons donc un dictionnaire qui permet de rechercher les points de donnรฉes ร partir des clusters.
|
56 |
+
|
57 |
+
Par exemple, si des clusters sont attribuรฉs comme suit :
|
58 |
+
|index|Cluster|
|
59 |
+
|-----|-------|
|
60 |
+
|1|A|
|
61 |
+
|2|B|
|
62 |
+
|3|A|
|
63 |
+
|4|C|
|
64 |
+
|5|B|
|
65 |
+
|
66 |
+
L'index inversรฉ rรฉsultant ressemble ร ceci :
|
67 |
+
|
68 |
+
|cluster|index|
|
69 |
+
|-------|-----|
|
70 |
+
|A|1, 3|
|
71 |
+
|B|2, 5|
|
72 |
+
|C|4|
|
73 |
+
|
74 |
+
Lors de la recherche, nous recherchons d'abord n_probe clusters parmi les clusters, puis nous calculons les distances pour les points de donnรฉes appartenant ร chaque cluster.
|
75 |
+
|
76 |
+
# Recommandation de paramรจtre
|
77 |
+
Il existe des directives officielles sur la faรงon de choisir un index, je vais donc expliquer en consรฉquence.
|
78 |
+
https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index
|
79 |
+
|
80 |
+
Pour les ensembles de donnรฉes infรฉrieurs ร 1M, 4bit-PQ est la mรฉthode la plus efficace disponible dans faiss en avril 2023.
|
81 |
+
En combinant cela avec IVF, en rรฉduisant les candidats avec 4bit-PQ, et enfin en recalculant la distance avec un index prรฉcis, on peut le dรฉcrire en utilisant l'usine d'index suivante.
|
82 |
+
|
83 |
+
```python
|
84 |
+
index = faiss.index_factory(256, "IVF1024,PQ128x4fs,RFlat")
|
85 |
+
```
|
86 |
+
|
87 |
+
## Paramรจtres recommandรฉs pour IVF
|
88 |
+
Considรฉrez le cas de trop d'IVF. Par exemple, si une quantification grossiรจre par IVF est effectuรฉe pour le nombre de donnรฉes, cela revient ร une recherche exhaustive naรฏve et est inefficace.
|
89 |
+
Pour 1M ou moins, les valeurs IVF sont recommandรฉes entre 4*sqrt(N) ~ 16*sqrt(N) pour N nombre de points de donnรฉes.
|
90 |
+
|
91 |
+
Comme le temps de calcul augmente proportionnellement au nombre de n_probes, veuillez consulter la prรฉcision et choisir de maniรจre appropriรฉe. Personnellement, je ne pense pas que RVC ait besoin de tant de prรฉcision, donc n_probe = 1 est bien.
|
92 |
+
|
93 |
+
## FastScan
|
94 |
+
FastScan est une mรฉthode qui permet d'approximer rapidement les distances par quantification de produit cartรฉsien en les effectuant dans les registres.
|
95 |
+
La quantification du produit cartรฉsien effectue un regroupement indรฉpendamment
|
96 |
+
|
97 |
+
pour chaque dimension d (gรฉnรฉralement d = 2) pendant l'apprentissage, calcule la distance entre les clusters ร l'avance, et crรฉe une table de recherche. Au moment de la prรฉdiction, la distance de chaque dimension peut รชtre calculรฉe en O(1) en consultant la table de recherche.
|
98 |
+
Le nombre que vous spรฉcifiez aprรจs PQ spรฉcifie gรฉnรฉralement la moitiรฉ de la dimension du vecteur.
|
99 |
+
|
100 |
+
Pour une description plus dรฉtaillรฉe de FastScan, veuillez consulter la documentation officielle.
|
101 |
+
https://github.com/facebookresearch/faiss/wiki/Fast-accumulation-of-PQ-and-AQ-codes-(FastScan)
|
102 |
+
|
103 |
+
## RFlat
|
104 |
+
RFlat est une instruction pour recalculer la distance approximative calculรฉe par FastScan avec la distance exacte spรฉcifiรฉe par le troisiรจme argument de l'usine d'index.
|
105 |
+
Lors de l'obtention de k voisins, k*k_factor points sont recalculรฉs.
|
docs/fr/faq_fr.md
ADDED
@@ -0,0 +1,164 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Q1: Impossible de trouver le fichier index aprรจs "Entraรฎnement en un clic".
|
2 |
+
Si l'affichage indique "L'entraรฎnement est terminรฉ. Le programme est fermรฉ", alors le modรจle a รฉtรฉ formรฉ avec succรจs, et les erreurs subsรฉquentes sont fausses ;
|
3 |
+
|
4 |
+
L'absence d'un fichier index 'ajoutรฉ' aprรจs un entraรฎnement en un clic peut รชtre due au fait que le jeu d'entraรฎnement est trop grand, ce qui bloque l'ajout de l'index ; cela a รฉtรฉ rรฉsolu en utilisant un traitement par lots pour ajouter l'index, ce qui rรฉsout le problรจme de surcharge de mรฉmoire lors de l'ajout de l'index. Comme solution temporaire, essayez de cliquer ร nouveau sur le bouton "Entraรฎner l'index".<br>
|
5 |
+
|
6 |
+
## Q2: Impossible de trouver le modรจle dans โInfรฉrence du timbreโ aprรจs l'entraรฎnement
|
7 |
+
Cliquez sur โActualiser la liste des timbresโ et vรฉrifiez ร nouveau ; si vous ne le voyez toujours pas, vรฉrifiez s'il y a des erreurs pendant l'entraรฎnement et envoyez des captures d'รฉcran de la console, de l'interface utilisateur web, et des logs/nom_de_l'expรฉrience/*.log aux dรฉveloppeurs pour une analyse plus approfondie.<br>
|
8 |
+
|
9 |
+
## Q3: Comment partager un modรจle/Comment utiliser les modรจles d'autres personnes ?
|
10 |
+
Les fichiers pth stockรฉs dans rvc_root/logs/nom_de_l'expรฉrience ne sont pas destinรฉs ร รชtre partagรฉs ou infรฉrรฉs, mais ร stocker les points de contrรดle de l'expรฉrience pour la reproductibilitรฉ et l'entraรฎnement ultรฉrieur. Le modรจle ร partager doit รชtre le fichier pth de 60+MB dans le dossier des poids ;
|
11 |
+
|
12 |
+
ร l'avenir, les poids/nom_de_l'expรฉrience.pth et les logs/nom_de_l'expรฉrience/ajoutรฉ_xxx.index seront fusionnรฉs en un seul fichier poids/nom_de_l'expรฉrience.zip pour รฉliminer le besoin d'une entrรฉe d'index manuelle ; partagez donc le fichier zip, et non le fichier pth, sauf si vous souhaitez continuer l'entraรฎnement sur une machine diffรฉrente ;
|
13 |
+
|
14 |
+
Copier/partager les fichiers pth de plusieurs centaines de Mo du dossier des logs au dossier des poids pour une infรฉrence forcรฉe peut entraรฎner des erreurs telles que des f0, tgt_sr, ou d'autres clรฉs manquantes. Vous devez utiliser l'onglet ckpt en bas pour sรฉlectionner manuellement ou automatiquement (si l'information se trouve dans les logs/nom_de_l'expรฉrience), si vous souhaitez inclure les informations sur la hauteur et les options de taux d'รฉchantillonnage audio cible, puis extraire le modรจle plus petit. Aprรจs extraction, il y aura un fichier pth de 60+ MB dans le dossier des poids, et vous pouvez actualiser les voix pour l'utiliser.<br>
|
15 |
+
|
16 |
+
## Q4: Erreur de connexion.
|
17 |
+
Il se peut que vous ayez fermรฉ la console (fenรชtre de ligne de commande noire).<br>
|
18 |
+
|
19 |
+
## Q5: WebUI affiche 'Expecting value: line 1 column 1 (char 0)'.
|
20 |
+
Veuillez dรฉsactiver le proxy systรจme LAN/proxy global puis rafraรฎchir.<br>
|
21 |
+
|
22 |
+
## Q6: Comment s'entraรฎner et dรฉduire sans le WebUI ?
|
23 |
+
Script d'entraรฎnement :<br>
|
24 |
+
Vous pouvez d'abord lancer l'entraรฎnement dans WebUI, et les versions en ligne de commande de la prรฉparation du jeu de donnรฉes et de l'entraรฎnement seront affichรฉes dans la fenรชtre de message.<br>
|
25 |
+
|
26 |
+
Script d'infรฉrence :<br>
|
27 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/myinfer.py<br>
|
28 |
+
|
29 |
+
Par exemple :<br>
|
30 |
+
|
31 |
+
runtime\python.exe myinfer.py 0 "E:\codes\py39\RVC-beta\todo-songs\1111.wav" "E:\codes\py39\logs\mi-test\added_IVF677_Flat_nprobe_7.index" rรฉcolte "test.wav" "weights/mi-test.pth" 0.6 cuda:0 True<br>
|
32 |
+
|
33 |
+
f0up_key=sys.argv[1]<br>
|
34 |
+
input_path=sys.argv[2]<br>
|
35 |
+
index_path=sys.argv[3]<br>
|
36 |
+
f0method=sys.argv[4]#rรฉcolte ou pm<br>
|
37 |
+
opt_path=sys.argv[5]<br>
|
38 |
+
model_path=sys.argv[6]<br>
|
39 |
+
index_rate=float(sys.argv[7])<br>
|
40 |
+
device=sys.argv[8]<br>
|
41 |
+
is_half=bool(sys.argv[9])<br>
|
42 |
+
|
43 |
+
### Explication des arguments :
|
44 |
+
|
45 |
+
1. **Numรฉro de voix cible** : `0` (dans cet exemple)
|
46 |
+
2. **Chemin du fichier audio d'entrรฉe** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\INPUTS_VOCAL\vocal.wav"`
|
47 |
+
3. **Chemin du fichier index** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\logs\Hagrid.index"`
|
48 |
+
4. **Mรฉthode pour l'extraction du pitch (F0)** : `harvest` (dans cet exemple)
|
49 |
+
5. **Chemin de sortie pour le fichier audio traitรฉ** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\INPUTS_VOCAL\test.wav"`
|
50 |
+
6. **Chemin du modรจle** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\weights\HagridFR.pth"`
|
51 |
+
7. **Taux d'index** : `0.6` (dans cet exemple)
|
52 |
+
8. **Pรฉriphรฉrique pour l'exรฉcution (GPU/CPU)** : `cuda:0` pour une carte NVIDIA, par exemple.
|
53 |
+
9. **Protection des droits d'auteur (True/False)**.
|
54 |
+
|
55 |
+
<!-- Pour myinfer nouveau models :
|
56 |
+
|
57 |
+
runtime\python.exe myinfer.py 0 "C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\INPUTS_VOCAL\vocal.wav" "C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\logs\Hagrid.index" harvest "C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\INPUTS_VOCAL\test.wav" "C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\weights\HagridFR.pth" 0.6 cuda:0 True 5 44100 44100 1.0 1.0 True
|
58 |
+
|
59 |
+
|
60 |
+
f0up_key=sys.argv[1]
|
61 |
+
input_path = sys.argv[2]
|
62 |
+
index_path = sys.argv[3]
|
63 |
+
f0method = sys.argv[4]
|
64 |
+
opt_path = sys.argv[5]
|
65 |
+
model_path = sys.argv[6]
|
66 |
+
index_rate = float(sys.argv[7])
|
67 |
+
device = sys.argv[8]
|
68 |
+
is_half = bool(sys.argv[9])
|
69 |
+
filter_radius = int(sys.argv[10])
|
70 |
+
tgt_sr = int(sys.argv[11])
|
71 |
+
resample_sr = int(sys.argv[12])
|
72 |
+
rms_mix_rate = float(sys.argv[13])
|
73 |
+
version = sys.argv[14]
|
74 |
+
protect = sys.argv[15].lower() == 'false' # change for true if needed
|
75 |
+
|
76 |
+
### Explication des arguments :
|
77 |
+
|
78 |
+
1. **Numรฉro de voix cible** : `0` (dans cet exemple)
|
79 |
+
2. **Chemin du fichier audio d'entrรฉe** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\INPUTS_VOCAL\vocal.wav"`
|
80 |
+
3. **Chemin du fichier index** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\logs\Hagrid.index"`
|
81 |
+
4. **Mรฉthode pour l'extraction du pitch (F0)** : `harvest` (dans cet exemple)
|
82 |
+
5. **Chemin de sortie pour le fichier audio traitรฉ** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\INPUTS_VOCAL\test.wav"`
|
83 |
+
6. **Chemin du modรจle** : `"C:\ YOUR PATH FOR THE ROOT (RVC0813Nvidia)\weights\HagridFR.pth"`
|
84 |
+
7. **Taux d'index** : `0.6` (dans cet exemple)
|
85 |
+
8. **Pรฉriphรฉrique pour l'exรฉcution (GPU/CPU)** : `cuda:0` pour une carte NVIDIA, par exemple.
|
86 |
+
9. **Protection des droits d'auteur (True/False)**.
|
87 |
+
10. **Rayon du filtre** : `5` (dans cet exemple)
|
88 |
+
11. **Taux d'รฉchantillonnage cible** : `44100` (dans cet exemple)
|
89 |
+
12. **Taux d'รฉchantillonnage pour le rรฉรฉchantillonnage** : `44100` (dans cet exemple)
|
90 |
+
13. **Taux de mixage RMS** : `1.0` (dans cet exemple)
|
91 |
+
14. **Version** : `1.0` (dans cet exemple)
|
92 |
+
15. **Protection** : `True` (dans cet exemple)
|
93 |
+
|
94 |
+
Assurez-vous de remplacer les chemins par ceux correspondant ร votre configuration et d'ajuster les autres paramรจtres selon vos besoins.
|
95 |
+
-->
|
96 |
+
|
97 |
+
## Q7: Erreur Cuda/Mรฉmoire Cuda รฉpuisรฉe.
|
98 |
+
Il y a une faible chance qu'il y ait un problรจme avec la configuration CUDA ou que le dispositif ne soit pas pris en charge ; plus probablement, il n'y a pas assez de mรฉmoire (manque de mรฉmoire).<br>
|
99 |
+
|
100 |
+
Pour l'entraรฎnement, rรฉduisez la taille du lot (si la rรฉduction ร 1 n'est toujours pas suffisante, vous devrez peut-รชtre changer la carte graphique) ; pour l'infรฉrence, ajustez les paramรจtres x_pad, x_query, x_center, et x_max dans le fichier config.py selon les besoins. Les cartes mรฉmoire de 4 Go ou moins (par exemple 1060(3G) et diverses cartes de 2 Go) peuvent รชtre abandonnรฉes, tandis que les cartes mรฉmoire de 4 Go ont encore une chance.<br>
|
101 |
+
|
102 |
+
## Q8: Combien de total_epoch sont optimaux ?
|
103 |
+
Si la qualitรฉ audio du jeu d'entraรฎnement est mรฉdiocre et que le niveau de bruit est รฉlevรฉ, 20-30 รฉpoques sont suffisantes. Le fixer trop haut n'amรฉliorera pas la qualitรฉ audio de votre jeu d'entraรฎnement de faible qualitรฉ.<br>
|
104 |
+
|
105 |
+
Si la qualitรฉ audio du jeu d'entraรฎnement est รฉlevรฉe, le niveau de bruit est faible, et la durรฉe est suffisante, vous pouvez l'augmenter. 200 est acceptable (puisque l'entraรฎnement est rapide, et si vous รชtes capable de prรฉparer un jeu d'entraรฎnement de haute qualitรฉ, votre GPU peut probablement gรฉrer une durรฉe d'entraรฎnement plus longue sans problรจme).<br>
|
106 |
+
|
107 |
+
## Q9: Quelle durรฉe de jeu d'entraรฎnement est nรฉcessaire ?
|
108 |
+
Un jeu d'environ 10 min ร 50 min est recommandรฉ.<br>
|
109 |
+
|
110 |
+
Avec une garantie de haute qualitรฉ sonore et de faible bruit de fond, plus peut รชtre ajoutรฉ si le timbre du jeu est uniforme.<br>
|
111 |
+
|
112 |
+
Pour un jeu d'entraรฎnement de haut niveau (ton maigre + ton distinctif), 5 min ร 10 min sont suffisantes.<br>
|
113 |
+
|
114 |
+
Il y a des personnes qui ont rรฉussi ร s'entraรฎner avec des donnรฉes de 1 min ร 2 min, mais le succรจs n'est pas reproductible par d'autres et n'est pas trรจs informatif. <br>Cela nรฉcessite que le jeu d'entraรฎnement ait un timbre trรจs distinctif (par exemple, un son de fille d'anime aรฉrien ร haute frรฉquence) et que la qualitรฉ de l'audio soit รฉlevรฉe ;
|
115 |
+
Aucune tentative rรฉussie n'a รฉtรฉ faite jusqu'ร prรฉsent avec des donnรฉes de moins de 1 min. Cela n'est pas recommandรฉ.<br>
|
116 |
+
|
117 |
+
## Q10: ร quoi sert le taux d'index et comment l'ajuster ?
|
118 |
+
Si la qualitรฉ tonale du modรจle prรฉ-entraรฎnรฉ et de la source d'infรฉrence est supรฉrieure ร celle du jeu d'entraรฎnement, ils peuvent amรฉliorer la qualitรฉ tonale du rรฉsultat d'infรฉrence, mais au prix d'un possible biais tonal vers le ton du modรจle sous-jacent/source d'infรฉrence plutรดt que le ton du jeu d'entraรฎnement, ce qui est gรฉnรฉralement appelรฉ "fuite de ton".<br>
|
119 |
+
|
120 |
+
Le taux d'index est utilisรฉ pour rรฉduire/rรฉsoudre le problรจme de la fuite de timbre. Si le taux d'index est fixรฉ ร 1, thรฉoriquement il n'y a pas de fuite de timbre de la source d'infรฉrence et la qualitรฉ du timbre est plus biaisรฉe vers le jeu d'entraรฎnement. Si le jeu d'entraรฎnement a une qualitรฉ sonore infรฉrieure ร celle de la source d'infรฉrence, alors un taux d'index plus รฉlevรฉ peut rรฉduire la qualitรฉ sonore. Le rรฉduire ร 0 n'a pas l'effet d'utiliser le mรฉlange de rรฉcupรฉration pour protรฉger les tons du jeu d'entraรฎnement.<br>
|
121 |
+
|
122 |
+
Si le jeu d'entraรฎnement a une bonne qualitรฉ audio et une longue durรฉe, augmentez le total_epoch, lorsque le modรจle lui-mรชme est moins susceptible de se rรฉfรฉrer ร la source dรฉduite et au modรจle sous-jacent prรฉ-entraรฎnรฉ, et qu'il y a peu de "fuite de ton", le taux d'index n'est pas important et vous pouvez mรชme ne pas crรฉer/partager le fichier index.<br>
|
123 |
+
|
124 |
+
## Q11: Comment choisir le gpu lors de l'infรฉrence ?
|
125 |
+
Dans le fichier config.py, sรฉlectionnez le numรฉro de carte aprรจs "device cuda:".<br>
|
126 |
+
|
127 |
+
La correspondance entre le numรฉro de carte et la carte graphique peut รชtre vue dans la section d'information de la carte graphique de l'onglet d'entraรฎnement.<br>
|
128 |
+
|
129 |
+
## Q12: Comment utiliser le modรจle sauvegardรฉ au milieu de l'entraรฎnement ?
|
130 |
+
Sauvegardez via l'extraction de modรจle en bas de l'onglet de traitement ckpt.
|
131 |
+
|
132 |
+
## Q13: Erreur de fichier/erreur de mรฉmoire (lors de l'entraรฎnement) ?
|
133 |
+
Il y a trop de processus et votre mรฉmoire n'est pas suffisante. Vous pouvez le corriger en :
|
134 |
+
|
135 |
+
1. Diminuer l'entrรฉe dans le champ "Threads of CPU".
|
136 |
+
|
137 |
+
2. Prรฉ-dรฉcouper le jeu d'entraรฎnement en fichiers audio plus courts.
|
138 |
+
|
139 |
+
## Q14: Comment poursuivre l'entraรฎnement avec plus de donnรฉes
|
140 |
+
|
141 |
+
รฉtape 1 : mettre toutes les donnรฉes wav dans path2.
|
142 |
+
|
143 |
+
รฉtape 2 : exp_name2+path2 -> traiter le jeu de donnรฉes et extraire la caractรฉristique.
|
144 |
+
|
145 |
+
รฉtape 3 : copier les derniers fichiers G et D de exp_name1 (votre expรฉrience prรฉcรฉdente) dans le dossier exp_name2.
|
146 |
+
|
147 |
+
รฉtape 4 : cliquez sur "entraรฎner le modรจle", et il continuera l'entraรฎnement depuis le dรฉbut de votre รฉpoque de modรจle exp prรฉcรฉdente.
|
148 |
+
|
149 |
+
## Q15: erreur ร propos de llvmlite.dll
|
150 |
+
|
151 |
+
OSError: Impossible de charger le fichier objet partagรฉ : llvmlite.dll
|
152 |
+
|
153 |
+
FileNotFoundError: Impossible de trouver le module lib\site-packages\llvmlite\binding\llvmlite.dll (ou l'une de ses dรฉpendances). Essayez d'utiliser la syntaxe complรจte du constructeur.
|
154 |
+
|
155 |
+
Le problรจme se produira sous Windows, installez https://aka.ms/vs/17/release/vc_redist.x64.exe et il sera corrigรฉ.
|
156 |
+
|
157 |
+
## Q16: RuntimeError: La taille รฉtendue du tensor (17280) doit correspondre ร la taille existante (0) ร la dimension non-singleton 1. Tailles cibles : [1, 17280]. Tailles des tensors : [0]
|
158 |
+
|
159 |
+
Supprimez les fichiers wav dont la taille est nettement infรฉrieure ร celle des autres, et cela ne se reproduira plus. Ensuite, cliquez sur "entraรฎner le modรจle" et "entraรฎner l'index".
|
160 |
+
|
161 |
+
## Q17: RuntimeError: La taille du tensor a (24) doit correspondre ร la taille du tensor b (16) ร la dimension non-singleton 2
|
162 |
+
|
163 |
+
Ne changez pas le taux d'รฉchantillonnage puis continuez l'entraรฎnement. S'il est nรฉcessaire de changer, le nom de l'expรฉrience doit รชtre modifiรฉ et le modรจle sera formรฉ ร partir de zรฉro. Vous pouvez รฉgalement copier les hauteurs et caractรฉristiques (dossiers 0/1/2/2b) extraites la derniรจre fois pour accรฉlรฉrer le processus d'entraรฎnement.
|
164 |
+
|
docs/fr/training_tips_fr.md
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Instructions et conseils pour la formation RVC
|
2 |
+
======================================
|
3 |
+
Ces conseils expliquent comment se dรฉroule la formation des donnรฉes.
|
4 |
+
|
5 |
+
# Flux de formation
|
6 |
+
Je vais expliquer selon les รฉtapes de l'onglet de formation de l'interface graphique.
|
7 |
+
|
8 |
+
## รฉtape 1
|
9 |
+
Dรฉfinissez ici le nom de l'expรฉrience.
|
10 |
+
|
11 |
+
Vous pouvez รฉgalement dรฉfinir ici si le modรจle doit prendre en compte le pitch.
|
12 |
+
Si le modรจle ne considรจre pas le pitch, le modรจle sera plus lรฉger, mais pas adaptรฉ au chant.
|
13 |
+
|
14 |
+
Les donnรฉes de chaque expรฉrience sont placรฉes dans `/logs/nom-de-votre-experience/`.
|
15 |
+
|
16 |
+
## รฉtape 2a
|
17 |
+
Charge et prรฉ-traite l'audio.
|
18 |
+
|
19 |
+
### charger l'audio
|
20 |
+
Si vous spรฉcifiez un dossier avec de l'audio, les fichiers audio de ce dossier seront lus automatiquement.
|
21 |
+
Par exemple, si vous spรฉcifiez `C:Users\hoge\voices`, `C:Users\hoge\voices\voice.mp3` sera chargรฉ, mais `C:Users\hoge\voices\dir\voice.mp3` ne sera pas chargรฉ.
|
22 |
+
|
23 |
+
Comme ffmpeg est utilisรฉ en interne pour lire l'audio, si l'extension est prise en charge par ffmpeg, elle sera lue automatiquement.
|
24 |
+
Aprรจs la conversion en int16 avec ffmpeg, convertir en float32 et normaliser entre -1 et 1.
|
25 |
+
|
26 |
+
### dรฉbruitage
|
27 |
+
L'audio est lissรฉ par filtfilt de scipy.
|
28 |
+
|
29 |
+
### Sรฉparation audio
|
30 |
+
Tout d'abord, l'audio d'entrรฉe est divisรฉ en dรฉtectant des parties de silence qui durent plus d'une certaine pรฉriode (max_sil_kept = 5 secondes ?). Aprรจs avoir sรฉparรฉ l'audio sur le silence, sรฉparez l'audio toutes les 4 secondes avec un chevauchement de 0,3 seconde. Pour l'audio sรฉparรฉ en 4 secondes, aprรจs normalisation du volume, convertir le fichier wav en `/logs/nom-de-votre-experience/0_gt_wavs` puis le convertir ร un taux d'รฉchantillonnage de 16k dans `/logs/nom-de-votre-experience/1_16k_wavs` sous forme de fichier wav.
|
31 |
+
|
32 |
+
## รฉtape 2b
|
33 |
+
### Extraire le pitch
|
34 |
+
Extrait les informations de pitch des fichiers wav. Extraire les informations de pitch (=f0) en utilisant la mรฉthode intรฉgrรฉe dans parselmouth ou pyworld et les sauvegarder dans `/logs/nom-de-votre-experience/2a_f0`. Convertissez ensuite logarithmiquement les informations de pitch en un entier entre 1 et 255 et sauvegardez-le dans `/logs/nom-de-votre-experience/2b-f0nsf`.
|
35 |
+
|
36 |
+
### Extraire l'empreinte de caractรฉristique
|
37 |
+
Convertissez le fichier wav en incorporation ร l'avance en utilisant HuBERT. Lisez le fichier wav sauvegardรฉ dans `/logs/nom-de-votre-experience/1_16k_wavs`, convertissez le fichier wav en caractรฉristiques de dimension 256 avec HuBERT, et sauvegardez au format npy dans `/logs/nom-de-votre-experience/3_feature256`.
|
38 |
+
|
39 |
+
## รฉtape 3
|
40 |
+
former le modรจle.
|
41 |
+
### Glossaire pour les dรฉbutants
|
42 |
+
Dans l'apprentissage profond, l'ensemble de donnรฉes est divisรฉ et l'apprentissage progresse petit ร petit. Dans une mise ร jour de modรจle (รฉtape), les donnรฉes de batch_size sont rรฉcupรฉrรฉes et des prรฉdictions et corrections d'erreur sont effectuรฉes. Faire cela une fois pour un ensemble de donnรฉes compte comme une รฉpoque.
|
43 |
+
|
44 |
+
Par consรฉquent, le temps d'apprentissage est le temps d'apprentissage par รฉtape x (le nombre de donnรฉes dans l'ensemble de donnรฉes / taille du lot) x le nombre d'รฉpoques. En gรฉnรฉral, plus la taille du lot est grande, plus l'apprentissage devient stable (temps d'apprentissage par รฉtape รท taille du lot) devient plus petit, mais il utilise plus de mรฉmoire GPU. La RAM GPU peut รชtre vรฉrifiรฉe avec la commande nvidia-smi. L'apprentissage peut รชtre effectuรฉ en peu de temps en augmentant la taille du lot autant que possible selon la machine de l'environnement d'exรฉcution.
|
45 |
+
|
46 |
+
### Spรฉcifier le modรจle prรฉ-entraรฎnรฉ
|
47 |
+
RVC commence ร former le modรจle ร partir de poids prรฉ-entraรฎnรฉs plutรดt que de zรฉro, il peut donc รชtre formรฉ avec un petit ensemble de donnรฉes.
|
48 |
+
|
49 |
+
Par dรฉfaut :
|
50 |
+
|
51 |
+
- Si vous considรฉrez le pitch, il charge `rvc-location/pretrained/f0G40k.pth` et `rvc-location/pretrained/f0D40k.pth`.
|
52 |
+
- Si vous ne considรฉrez pas le pitch, il charge `rvc-location/pretrained/f0G40k.pth` et `rvc-location/pretrained/f0D40k.pth`.
|
53 |
+
|
54 |
+
Lors de l'apprentissage, les paramรจtres du modรจle sont sauvegardรฉs dans `logs/nom-de-votre-experience/G_{}.pth` et `logs/nom-de-votre-experience/D_{}.pth` pour chaque save_every_epoch, mais en spรฉcifiant ce chemin, vous pouvez dรฉmarrer l'apprentissage. Vous pouvez redรฉmarrer ou commencer ร former ร partir de poids de modรจle appris lors d'une expรฉrience diffรฉrente.
|
55 |
+
|
56 |
+
### Index d'apprentissage
|
57 |
+
RVC sauvegarde les valeurs de caractรฉristique HuBERT utilisรฉes lors de la formation, et pendant l'infรฉrence, recherche les valeurs de caractรฉristique qui sont similaires aux valeurs de caractรฉristique utilisรฉes lors de l'apprentissage pour effectuer l'infรฉrence. Afin d'effectuer cette recherche ร haute vitesse, l'index est appris ร l'avance.
|
58 |
+
Pour l'apprentissage d'index, nous utilisons la bibliothรจque de recherche de voisinage approximatif faiss. Lisez la valeur de caractรฉristique de `logs/nom-de-votre-experience/3_feature256` et utilisez-la pour apprendre l'index, et sauvegardez-la sous `logs/nom-de-votre-experience/add_XXX.index`.
|
59 |
+
|
60 |
+
(ร partir de la version de mise ร jour 20230428, elle est lue ร partir de l'index, et la sauvegarde / spรฉcification n'est plus nรฉcessaire.)
|
61 |
+
|
62 |
+
### Description du bouton
|
63 |
+
- Former le modรจle : aprรจs avoir exรฉcutรฉ l'รฉtape 2b, appuyez sur ce bouton pour former le modรจle.
|
64 |
+
- Former l'index de caractรฉristique : aprรจs avoir formรฉ le modรจle, effectuez un apprentissage d'index.
|
65 |
+
- Formation en un clic : รฉtape 2b, formation du modรจle et formation de l'index de caractรฉristique tout d'un coup.```
|
docs/jp/README.ja.md
ADDED
@@ -0,0 +1,203 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div align="center">
|
2 |
+
|
3 |
+
# Retrieval-based-Voice-Conversion-WebUI
|
4 |
+
VITSใซๅบใฅใไฝฟใใใใ้ณๅฃฐๅคๆ๏ผvoice changer๏ผframework
|
5 |
+
|
6 |
+
|
7 |
+
|
8 |
+
[![madewithlove](https://img.shields.io/badge/made_with-%E2%9D%A4-red?style=for-the-badge&labelColor=orange)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI)
|
9 |
+
|
10 |
+
![moe](https://counter.seku.su/cmoe?name=rvc&theme=r34)
|
11 |
+
|
12 |
+
[![Licence](https://img.shields.io/github/license/fumiama/Retrieval-based-Voice-Conversion-WebUI?style=for-the-badge)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/blob/main/LICENSE)
|
13 |
+
[![Huggingface](https://img.shields.io/badge/๐ค%20-Spaces-yellow.svg?style=for-the-badge)](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
14 |
+
|
15 |
+
[![Discord](https://img.shields.io/badge/RVC%20Developers-Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/HcsmBBGyVk)
|
16 |
+
|
17 |
+
[**ใใใใ่ณชๅ**](./faq_ja.md) | [**AutoDLใงๆจ่ซ(ไธญๅฝ่ชใฎใฟ)**](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/wiki/Autodl%E8%AE%AD%E7%BB%83RVC%C2%B7AI%E6%AD%8C%E6%89%8B%E6%95%99%E7%A8%8B) | [**ๅฏพ็
งๅฎ้จ่จ้ฒ**](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/wiki/%E5%AF%B9%E7%85%A7%E5%AE%9E%E9%AA%8C%C2%B7%E5%AE%9E%E9%AA%8C%E8%AE%B0%E5%BD%95) | [**ใชใณใฉใคใณใใข(ไธญๅฝ่ชใฎใฟ)**](https://modelscope.cn/studios/FlowerCry/RVCv2demo)
|
18 |
+
|
19 |
+
[**English**](../en/README.en.md) | [**ไธญๆ็ฎไฝ**](../../README.md) | [**ๆฅๆฌ่ช**](../jp/README.ja.md) | [**ํ๊ตญ์ด**](../kr/README.ko.md) ([**้ๅ่ช**](../kr/README.ko.han.md)) | [**Franรงais**](../fr/README.fr.md) | [**Tรผrkรงe**](../tr/README.tr.md) | [**Portuguรชs**](../pt/README.pt.md)
|
20 |
+
|
21 |
+
</div>
|
22 |
+
|
23 |
+
> ่ไฝๆจฉไพตๅฎณใๅฟ้
ใใใใจใชใไฝฟ็จใงใใใใใ็ด 50 ๆ้ใฎ้ซๅ่ณชใชใชใผใใณใฝใผในใใผใฟใปใใใไฝฟ็จใใๅบๅบใขใใซใๅญฆ็ฟใๅบใใพใใใ
|
24 |
+
|
25 |
+
> RVCv3 ใฎๅบๅบใขใใซใใๆๅพ
ใใ ใใใใใๅคงใใชใใฉใกใผใฟใใใๅคงใใชใใผใฟใใใ่ฏใๅนๆใๆไพใใๅบๆฌ็ใซๅๆงใฎๆจ่ซ้ๅบฆใ็ถญๆใใชใใๅญฆ็ฟใซๅฟ
่ฆใชใใผใฟ้ใฏใใๅฐใชใใชใใพใใ
|
26 |
+
|
27 |
+
> ใขใใซใ็ตฑๅใใใฑใผใธใใใฆใณใญใผใใใใใ[RVC-Models-Downloader](https://github.com/fumiama/RVC-Models-Downloader)ใฎใๅฉ็จใใๅงใใงใใ
|
28 |
+
|
29 |
+
| ๅญฆ็ฟใปๆจ่ซ |
|
30 |
+
| :--------: |
|
31 |
+
| ![web](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/assets/41315874/17e48404-2627-4fad-a0ec-65f9065aeade) |
|
32 |
+
|
33 |
+
| ๅณๆ้ณๅฃฐๅคๆ |
|
34 |
+
| :---------: |
|
35 |
+
| ![realtime-gui](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/assets/41315874/95b36866-b92d-40c7-b5db-6a35ca5caeac) |
|
36 |
+
|
37 |
+
## ใฏใใใซ
|
38 |
+
|
39 |
+
ๆฌใชใใธใใชใซใฏไธ่จใฎ็นๅพดใใใใพใใ
|
40 |
+
|
41 |
+
- Top1 ๆค็ดขใ็จใใใใจใงใ็ใฎ็นๅพด้ใๅญฆ็ฟ็จใใผใฟใปใใ็นๅพด้ใซๅคๆใใใใผใณใชใผใฑใผใธใๅๆธใใพใใ
|
42 |
+
- ๆฏ่ผ็่ฒงๅผฑใช GPU ใงใใ้ซ้ใใค็ฐกๅใซๅญฆ็ฟใงใใพใใ
|
43 |
+
- ๅฐ้ใฎใใผใฟใปใใใใใงใใๆฏ่ผ็่ฏใ็ตๆใๅพใใใจใใงใใพใใ๏ผ10 ๅไปฅไธใฎใใคใบใฎๅฐใชใ้ณๅฃฐใๆจๅฅจใใพใใ๏ผ
|
44 |
+
- ใขใใซใ่ๅใใใใจใงใ้ณๅฃฐใๆททใใใใจใใงใใพใใ๏ผckpt processing ใฟใใฎใckpt merge ใไฝฟ็จใใพใใ๏ผ
|
45 |
+
- ไฝฟใใใใ WebUIใ
|
46 |
+
- UVR5 Model ใๅซใใงใใใใใไบบใฎๅฃฐใจ BGM ใ็ด ๆฉใๅ้ขใงใใพใใ
|
47 |
+
- ๆๅ
็ซฏใฎ[ไบบ้ใฎๅฃฐใฎใใใๆฝๅบใขใซใดใชใบใ InterSpeech2023-RMVPE](#ๅ็
งใใญใธใงใฏใ)ใไฝฟ็จใใฆ็กๅฃฐ้ณๅ้กใ่งฃๆฑบใใพใใๅนๆใฏๆ้ซ๏ผ่ใใ๏ผใงใcrepe_full ใใใ้ใใใชใฝใผในไฝฟ็จใๅฐใชใใงใใ
|
48 |
+
- AMD GPU ใจ Intel GPU ใฎๅ ้ใตใใผใ
|
49 |
+
|
50 |
+
ใใขๅ็ปใฏ[ใใกใ](https://www.bilibili.com/video/BV1pm4y1z7Gm/)ใงใ่ฆงใใ ใใใ
|
51 |
+
|
52 |
+
## ็ฐๅขๆง็ฏ
|
53 |
+
### Python ใใผใธใงใณๅถ้
|
54 |
+
> conda ใง Python ็ฐๅขใ็ฎก็ใใใใจใใๅงใใงใ
|
55 |
+
|
56 |
+
> ใใผใธใงใณๅถ้ใฎๅๅ ใฏใใฎ [bug](https://github.com/facebookresearch/fairseq/issues/5012) ใๅ็
งใใฆใใ ใใใ
|
57 |
+
|
58 |
+
```bash
|
59 |
+
python --version # 3.8 <= Python < 3.11
|
60 |
+
```
|
61 |
+
|
62 |
+
### Linux/MacOS ใฏใณใฏใชใใฏไพๅญ้ขไฟใคใณในใใผใซใป่ตทๅใใในใฏใชใใ
|
63 |
+
ใใญใธใงใฏใใฎใซใผใใใฃใฌใฏใใชใง`run.sh`ใๅฎ่กใใใ ใใงใ`venv`ไปฎๆณ็ฐๅขใไธๆฌ่จญๅฎใใๅฟ
่ฆใชไพๅญ้ขไฟใ่ชๅ็ใซใคใณในใใผใซใใใกใคใณใใญใฐใฉใ ใ่ตทๅใงใใพใใ
|
64 |
+
```bash
|
65 |
+
sh ./run.sh
|
66 |
+
```
|
67 |
+
|
68 |
+
### ไพๅญ้ขไฟใฎใใใฅใขใซใคใณในใใฌใผใทใงใณ
|
69 |
+
1. `pytorch`ใจใใฎใณใขไพๅญ้ขไฟใใคใณในใใผใซใใพใใใใงใซใคใณในใใผใซใใใฆใใๅ ดๅใฏ่ฆ้ใใงใใพใใๅ่: https://pytorch.org/get-started/locally/
|
70 |
+
```bash
|
71 |
+
pip install torch torchvision torchaudio
|
72 |
+
```
|
73 |
+
2. ใใใWindows + Nvidia Ampere (RTX30xx)ใฎๅ ดๅใ#21 ใฎ็ต้จใซๅบใฅใใpytorchใฎๅฏพๅฟใใ CUDA ใใผใธใงใณใๆๅฎใใๅฟ
่ฆใใใใพใใ
|
74 |
+
```bash
|
75 |
+
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
|
76 |
+
```
|
77 |
+
3. ่ชๅใฎ GPU ใซๅฏพๅฟใใไพๅญ้ขไฟใใคใณในใใผใซใใพใใ
|
78 |
+
- Nvidia GPU
|
79 |
+
```bash
|
80 |
+
pip install -r requirements/main.txt
|
81 |
+
```
|
82 |
+
- AMD/Intel GPU
|
83 |
+
```bash
|
84 |
+
pip install -r requirements/dml.txt
|
85 |
+
```
|
86 |
+
- AMD ROCM (Linux)
|
87 |
+
```bash
|
88 |
+
pip install -r requirements/amd.txt
|
89 |
+
```
|
90 |
+
- Intel IPEX (Linux)
|
91 |
+
```bash
|
92 |
+
pip install -r requirements/ipex.txt
|
93 |
+
```
|
94 |
+
|
95 |
+
## ใใฎไปใฎใใผใฟใๆบๅ
|
96 |
+
|
97 |
+
### 1. ใขใปใใ
|
98 |
+
> RVCใฏใ`assets`ใใฉใซใใซใใๅนพใคใใฎใขใใซใชใฝใผในใงๆจ่ซใปๅญฆ็ฟใใใใจใๅฟ
่ฆใงใใ
|
99 |
+
#### ใชใฝใผในใฎ่ชๅใใงใใฏ/ใใฆใณใญใผใ๏ผใใใฉใซใ๏ผ
|
100 |
+
> ใใใฉใซใใงใฏใRVC ใฏไธปใใญใฐใฉใ ใฎ่ตทๅๆใซๅฟ
่ฆใชใชใฝใผในใฎๅฎๅ
จๆงใ่ชๅ็ใซใใงใใฏใใงใใพใใ
|
101 |
+
|
102 |
+
> ใชใฝใผในใไธๅฎๅ
จใงใใใใญใฐใฉใ ใฏ่ตทๅใ็ถใใพใใ
|
103 |
+
|
104 |
+
- ใในใฆใฎใชใฝใผในใใใฆใณใญใผใใใใๅ ดๅใฏใ`--update`ใใฉใกใผใฟใ่ฟฝๅ ใใฆใใ ใใใ
|
105 |
+
- ่ตทๅๆใฎใชใฝใผในๅฎๅ
จๆงใใงใใฏใไธ่ฆใฎๅ ดๅใฏใ`--nocheck`ใใฉใกใผใฟใ่ฟฝๅ ใใฆใใ ใใใ
|
106 |
+
|
107 |
+
#### ใชใฝใผในใฎใใใฅใขใซใใฆใณใญใผใ
|
108 |
+
> ใในใฆใฎใชใฝใผในใใกใคใซใฏ[Hugging Face space](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)ใซใใใพใใ
|
109 |
+
|
110 |
+
> `tools`ใใฉใซใใงใใใใใใฆใณใญใผใใใในใฏใชใใใ่ฆใคใใใใจใใงใใพใใ
|
111 |
+
|
112 |
+
> ใขใใซ/็ตฑๅใใใฑใผใธ/ใใผใซใฎไธๆฌใใฆใณใญใผใใผใ[RVC-Models-Downloader](https://github.com/fumiama/RVC-Models-Downloader)ใไฝฟ็จใงใใพใใ
|
113 |
+
|
114 |
+
ไปฅไธใฏใRVCใๅฟ
่ฆใจใใใในใฆใฎไบๅใขใใซใใผใฟใใใฎไปใฎใใกใคใซใฎๅๅใๅซใใชในใใงใใ
|
115 |
+
|
116 |
+
- ./assets/hubert/hubert_base.pt
|
117 |
+
```bash
|
118 |
+
rvcmd assets/hubert # RVC-Models-Downloader command
|
119 |
+
```
|
120 |
+
- ./assets/pretrained
|
121 |
+
```bash
|
122 |
+
rvcmd assets/v1 # RVC-Models-Downloader command
|
123 |
+
```
|
124 |
+
- ./assets/uvr5_weights
|
125 |
+
```bash
|
126 |
+
rvcmd assets/uvr5 # RVC-Models-Downloader command
|
127 |
+
```
|
128 |
+
v2ใใผใธใงใณใฎใขใใซใไฝฟ็จใใใๅ ดๅใฏใ่ฟฝๅ ใใฆใณใญใผใใๅฟ
่ฆใงใใ
|
129 |
+
|
130 |
+
- ./assets/pretrained_v2
|
131 |
+
```bash
|
132 |
+
rvcmd assets/v2 # RVC-Models-Downloader command
|
133 |
+
```
|
134 |
+
|
135 |
+
### 2. RMVPEไบบๅฃฐ้ณ้ซๆฝๅบใขใซใดใชใบใ ใซๅฟ
่ฆใชใใกใคใซใฎใใฆใณใญใผใ
|
136 |
+
|
137 |
+
ๆๆฐใฎRMVPEไบบๅฃฐ้ณ้ซๆฝๅบใขใซใดใชใบใ ใไฝฟ็จใใใๅ ดๅใฏใ้ณ้ซๆฝๅบใขใใซใใใฆใณใญใผใใใ`assets/rmvpe`ใซ้
็ฝฎใใๅฟ
่ฆใใใใพใใ
|
138 |
+
|
139 |
+
- [rmvpe.pt](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.pt)
|
140 |
+
```bash
|
141 |
+
rvcmd assets/rmvpe # RVC-Models-Downloader command
|
142 |
+
```
|
143 |
+
|
144 |
+
#### RMVPE(dml็ฐๅข)ใฎใใฆใณใญใผใ๏ผใชใใทใงใณใAMD/Intel GPU ใฆใผใถใผ๏ผ
|
145 |
+
|
146 |
+
- [rmvpe.onnx](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.onnx)
|
147 |
+
```bash
|
148 |
+
rvcmd assets/rmvpe # RVC-Models-Downloader command
|
149 |
+
```
|
150 |
+
|
151 |
+
### 3. AMD ROCM๏ผใชใใทใงใณใLinuxใฎใฟ๏ผ
|
152 |
+
|
153 |
+
AMDใฎRocmๆ่กใๅบใซLinuxใทในใใ ใงRVCใๅฎ่กใใใๅ ดๅใฏใใพใ[ใใ](https://rocm.docs.amd.com/en/latest/deploy/linux/os-native/install.html)ใงๅฟ
่ฆใชใใฉใคใใใคใณในใใผใซใใฆใใ ใใใ
|
154 |
+
|
155 |
+
Arch Linuxใไฝฟ็จใใฆใใๅ ดๅใฏใpacmanใไฝฟ็จใใฆๅฟ
่ฆใชใใฉใคใใใคใณในใใผใซใงใใพใใ
|
156 |
+
````
|
157 |
+
pacman -S rocm-hip-sdk rocm-opencl-sdk
|
158 |
+
````
|
159 |
+
ไธ้จใฎใฐใฉใใฃใใฏใซใผใใขใใซใงใฏใไปฅไธใฎใใใช็ฐๅขๅคๆฐใ่ฟฝๅ ใง่จญๅฎใใๅฟ
่ฆใใใใใใใใพใใ๏ผไพ๏ผRX6700XT๏ผใ
|
160 |
+
````
|
161 |
+
export ROCM_PATH=/opt/rocm
|
162 |
+
export HSA_OVERRIDE_GFX_VERSION=10.3.0
|
163 |
+
````
|
164 |
+
ใพใใ็พๅจใฎใฆใผใถใผใ`render`ใใใณ`video`ใฆใผใถใผใฐใซใผใใซๆๅฑใใฆใใใใจใ็ขบ่ชใใฆใใ ใใใ
|
165 |
+
````
|
166 |
+
sudo usermod -aG render $USERNAME
|
167 |
+
sudo usermod -aG video $USERNAME
|
168 |
+
````
|
169 |
+
|
170 |
+
## ๅฉ็จ้ๅง
|
171 |
+
### ็ดๆฅ่ตทๅ
|
172 |
+
ไปฅไธใฎใณใใณใใง WebUI ใ่ตทๅใใพใ
|
173 |
+
```bash
|
174 |
+
python web.py
|
175 |
+
```
|
176 |
+
### Linux/MacOS
|
177 |
+
```bash
|
178 |
+
./run.sh
|
179 |
+
```
|
180 |
+
### IPEX ๆ่กใๅฟ
่ฆใช Intel GPU ใฆใผใถใผๅใ(Linux ใฎใฟ)
|
181 |
+
```bash
|
182 |
+
source /opt/intel/oneapi/setvars.sh
|
183 |
+
./run.sh
|
184 |
+
```
|
185 |
+
### ็ตฑๅใใใฑใผใธใฎไฝฟ็จ (Windowsใฎใฟ)
|
186 |
+
`RVC-beta.7z`ใใใฆใณใญใผใใใฆ่งฃๅใใ`go-web.bat`ใใใใซใฏใชใใฏใ
|
187 |
+
```bash
|
188 |
+
rvcmd packs/general/latest # RVC-Models-Downloader command
|
189 |
+
```
|
190 |
+
|
191 |
+
## ๅ่ใใญใธใงใฏใ
|
192 |
+
- [ContentVec](https://github.com/auspicious3000/contentvec/)
|
193 |
+
- [VITS](https://github.com/jaywalnut310/vits)
|
194 |
+
- [HIFIGAN](https://github.com/jik876/hifi-gan)
|
195 |
+
- [Gradio](https://github.com/gradio-app/gradio)
|
196 |
+
- [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)
|
197 |
+
- [audio-slicer](https://github.com/openvpi/audio-slicer)
|
198 |
+
- [Vocal pitch extraction:RMVPE](https://github.com/Dream-High/RMVPE)
|
199 |
+
- ไบๅๅญฆ็ฟใใใใขใใซใฏ[yxlllc](https://github.com/yxlllc/RMVPE)ใจ[RVC-Boss](https://github.com/RVC-Boss)ใซใใฃใฆๅญฆ็ฟใใใใในใใใใพใใใ
|
200 |
+
|
201 |
+
## ใในใฆใฎ่ฒข็ฎ่
ใฎๅชๅใซๆ่ฌใใพใ
|
202 |
+
|
203 |
+
[![contributors](https://contrib.rocks/image?repo=fumiama/Retrieval-based-Voice-Conversion-WebUI)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/graphs/contributors)
|
docs/jp/faiss_tips_ja.md
ADDED
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
faiss tuning TIPS
|
2 |
+
==================
|
3 |
+
# about faiss
|
4 |
+
faissใฏfacebook researchใฎ้็บใใใๅฏใชใใฏใใซใซๅฏพใใ่ฟๅๆข็ดขใใพใจใใใฉใคใใฉใชใงใๅคใใฎ่ฟไผผ่ฟๅๆข็ดขใฎๆๆณใๅน็็ใซๅฎ่ฃ
ใใฆใใพใใ
|
5 |
+
่ฟไผผ่ฟๅๆข็ดขใฏใใ็จๅบฆ็ฒพๅบฆใ็ ็ฒใซใใชใใ้ซ้ใซ้กไผผใใใใฏใใซใๆขใใพใใ
|
6 |
+
|
7 |
+
## faiss in RVC
|
8 |
+
RVCใงใฏHuBERTใงๅคๆใใ็นๅพด้ใฎEmbeddingใซๅฏพใใๅญฆ็ฟใใผใฟใใ็ๆใใใEmbeddingใจ้กไผผใใใใฎใๆค็ดขใใๆททใใใใจใงใใๅ
ใฎ้ณๅฃฐใซ่ฟใๅคๆใๅฎ็พใใฆใใพใใใใ ใใใฎๆค็ดขใฏๆ็ดใซ่กใใจๆ้ใใใใใใใ่ฟไผผ่ฟๅๆข็ดขใ็จใใใใจใง้ซ้ใชๅคๆใๅฎ็พใใฆใใพใใ
|
9 |
+
|
10 |
+
# ๅฎ่ฃ
ใฎoverview
|
11 |
+
ใขใใซใ้
็ฝฎใใใฆใใ '/logs/your-experiment/3_feature256'ใซใฏๅ้ณๅฃฐใใผใฟใใHuBERTใงๆฝๅบใใใ็นๅพด้ใ้
็ฝฎใใใฆใใพใใ
|
12 |
+
ใใใใnpyใใกใคใซใใใกใคใซๅใงใฝใผใใใ้ ็ชใง่ชญใฟ่พผใฟใใใฏใใซใ้ฃ็ตใใฆbig_npyใไฝๆใfaissใๅญฆ็ฟใใใพใใ(ใใฎใใฏใใซใฎshapeใฏ[N, 256]ใงใใ)
|
13 |
+
|
14 |
+
ๆฌTipsใงใฏใพใใใใใฎใใฉใกใผใฟใฎๆๅณใ่งฃ่ชฌใใพใใ
|
15 |
+
|
16 |
+
# ๆๆณใฎ่งฃ่ชฌ
|
17 |
+
## index factory
|
18 |
+
index factoryใฏ่คๆฐใฎ่ฟไผผ่ฟๅๆข็ดขใฎๆๆณใ็นใใใใคใใฉใคใณใstringใง่กจ่จใใfaiss็ฌ่ชใฎ่จๆณใงใใ
|
19 |
+
ใใใซใใใindex factoryใฎๆๅญๅใๅคๆดใใใ ใใงๆงใ
ใช่ฟไผผ่ฟๅๆข็ดขใฎๆๆณใ่ฉฆใใพใใ
|
20 |
+
RVCใงใฏไปฅไธใฎใใใซไฝฟใใใฆใใพใใ
|
21 |
+
|
22 |
+
```python
|
23 |
+
index = faiss.index_factory(256, "IVF%s,Flat" % n_ivf)
|
24 |
+
```
|
25 |
+
index_factoryใฎๅผๆฐใฎใใกใ1ใค็ฎใฏใใฏใใซใฎๆฌกๅ
ๆฐใ2ใค็ฎใฏindex factoryใฎๆๅญๅใงใ3ใค็ฎใซใฏ็จใใ่ท้ขใๆๅฎใใใใจใใงใใพใใ
|
26 |
+
|
27 |
+
ใใ่ฉณ็ดฐใช่จๆณใซใคใใฆใฏ
|
28 |
+
https://github.com/facebookresearch/faiss/wiki/The-index-factory
|
29 |
+
|
30 |
+
## ่ท้ขๆๆจ
|
31 |
+
embeddingใฎ้กไผผๅบฆใจใใฆ็จใใใใไปฃ่กจ็ใชๆๆจใจใใฆไปฅไธใฎไบใคใใใใพใใ
|
32 |
+
|
33 |
+
- ใฆใผใฏใชใใ่ท้ข(METRIC_L2)
|
34 |
+
- ๅ
็ฉ(METRIC_INNER_PRODUCT)
|
35 |
+
|
36 |
+
ใฆใผใฏใชใใ่ท้ขใงใฏๅๆฌกๅ
ใซใใใฆไบไนใฎๅทฎใใจใใๅ
จๆฌกๅ
ใฎๅทฎใ่ถณใใฆใใๅนณๆนๆ นใใจใใพใใใใใฏๆฅๅธธ็ใซ็จใใ2ๆฌกๅ
ใ3ๆฌกๅ
ใงใฎ่ท้ขใจๅใใงใใ
|
37 |
+
ๅ
็ฉใฏใใฎใพใพใงใฏ้กไผผๅบฆใฎๆๆจใจใใฆ็จใใใไธ่ฌ็ใซใฏL2ใใซใ ใงๆญฃ่ฆๅใใฆใใๅ
็ฉใใจใใณใตใคใณ้กไผผๅบฆใ็จใใพใใ
|
38 |
+
|
39 |
+
ใฉใกใใใใใใฏๅ ดๅใซใใใพใใใword2vec็ญใงๅพใใใembeddingใArcFace็ญใงๅญฆ็ฟใใ้กไผผ็ปๅๆค็ดขใฎใขใใซใงใฏใณใตใคใณ้กไผผๅบฆใ็จใใใใใใจใๅคใใงใใใใฏใใซXใซๅฏพใใฆl2ๆญฃ่ฆๅใnumpyใง่กใๅ ดๅใฏใ0 divisionใ้ฟใใใใใซๅๅใซๅฐใใชๅคใepsใจใใฆไปฅไธใฎใณใผใใงๅฏ่ฝใงใใ
|
40 |
+
|
41 |
+
```python
|
42 |
+
X_normed = X / np.maximum(eps, np.linalg.norm(X, ord=2, axis=-1, keepdims=True))
|
43 |
+
```
|
44 |
+
|
45 |
+
ใพใใindex factoryใซใฏ็ฌฌ3ๅผๆฐใซๆธกใๅคใ้ธใถใใจใง่จ็ฎใซ็จใใ่ท้ขๆๆจใๅคๆดใงใใพใใ
|
46 |
+
|
47 |
+
```python
|
48 |
+
index = faiss.index_factory(dimention, text, faiss.METRIC_INNER_PRODUCT)
|
49 |
+
```
|
50 |
+
|
51 |
+
## IVF
|
52 |
+
IVF(Inverted file indexes)ใฏๅ
จๆๆค็ดขใซใใใ่ปข็ฝฎใคใณใใใฏในใจไผผใใใใชใขใซใดใชใบใ ใงใใ
|
53 |
+
ๅญฆ็ฟๆใซใฏๆค็ดขๅฏพ่ฑกใซๅฏพใใฆkmeansใงใฏใฉในใฟใชใณใฐใ่กใใใฏใฉในใฟไธญๅฟใ็จใใฆใใญใใคๅๅฒใ่กใใพใใๅใใผใฟ็นใซใฏไธใคใใคใฏใฉในใฟใๅฒใๅฝใฆใใใใฎใงใใฏใฉในใฟใใใใผใฟ็นใ้ๅผใใใ่พๆธใไฝๆใใพใใ
|
54 |
+
|
55 |
+
ไพใใฐไปฅไธใฎใใใซใฏใฉในใฟใๅฒใๅฝใฆใใใๅ ดๅ
|
56 |
+
|index|ใฏใฉในใฟ|
|
57 |
+
|-----|-------|
|
58 |
+
|1|A|
|
59 |
+
|2|B|
|
60 |
+
|3|A|
|
61 |
+
|4|C|
|
62 |
+
|5|B|
|
63 |
+
|
64 |
+
ไฝๆใใใ่ปข็ฝฎใคใณใใใฏในใฏไปฅไธใฎใใใซใชใใพใใ
|
65 |
+
|
66 |
+
|ใฏใฉในใฟ|index|
|
67 |
+
|-------|-----|
|
68 |
+
|A|1, 3|
|
69 |
+
|B|2, 5|
|
70 |
+
|C|4|
|
71 |
+
|
72 |
+
ๆค็ดขๆใซใฏใพใใฏใฉในใฟใใn_probeๅใฎใฏใฉในใฟใๆค็ดขใใๆฌกใซใใใใใฎใฏใฉในใฟใซๅฑใใใใผใฟ็นใซใคใใฆ่ท้ขใ่จ็ฎใใพใใ
|
73 |
+
|
74 |
+
# ๆจๅฅจใใใใใฉใกใผใฟ
|
75 |
+
indexใฎ้ธใณๆนใซใคใใฆใฏๅ
ฌๅผใซใฌใคใใฉใคใณใใใใฎใงใใใใซๆบใใฆ่ชฌๆใใพใใ
|
76 |
+
https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index
|
77 |
+
|
78 |
+
1Mไปฅไธใฎใใผใฟใปใใใซใใใฆใฏ4bit-PQใ2023ๅนด4ๆๆ็นใงใฏfaissใงๅฉ็จใงใใๆใๅน็็ใชๆๆณใงใใ
|
79 |
+
ใใใIVFใจ็ตใฟๅใใใ4bit-PQใงๅ่ฃใ็ตใใๆๅพใซๆญฃ็ขบใชๆๆจใง่ท้ขใๅ่จ็ฎใใใซใฏไปฅไธใฎindex factoryใ็จใใใใจใง่จ่ผใงใใพใใ
|
80 |
+
|
81 |
+
```python
|
82 |
+
index = faiss.index_factory(256, "IVF1024,PQ128x4fs,RFlat")
|
83 |
+
```
|
84 |
+
|
85 |
+
## IVFใฎๆจๅฅจใใฉใกใผใฟ
|
86 |
+
IVFใฎๆฐใๅคใใใๅ ดๅใใใจใใฐใใผใฟๆฐใฎๆฐใ ใIVFใซใใ็ฒ้ๅญๅใ่กใใจใใใใฏๆ็ดใชๅ
จๆข็ดขใจๅใใซใชใๅน็ใๆชใใงใใ
|
87 |
+
1Mไปฅไธใฎๅ ดๅใงใฏIVFใฎๅคใฏใใผใฟ็นใฎๆฐNใซๅฏพใใฆ4*sqrt(N) ~ 16*sqrt(N)ใซๆจๅฅจใใฆใใพใใ
|
88 |
+
|
89 |
+
n_probeใฏn_probeใฎๆฐใซๆฏไพใใฆ่จ็ฎๆ้ใๅขใใใฎใงใ็ฒพๅบฆใจ็ธ่ซใใฆ้ฉๅใซ้ธใใงใใ ใใใๅไบบ็ใซใฏRVCใซใใใฆใใใพใง็ฒพๅบฆใฏๅฟ
่ฆใชใใจๆใใฎใงn_probe = 1ใง่ฏใใจๆใใพใใ
|
90 |
+
|
91 |
+
## FastScan
|
92 |
+
FastScanใฏ็ด็ฉ้ๅญๅใงๅคงใพใใซ่ท้ขใ่ฟไผผใใใฎใใใฌใธในใฟๅ
ใง่กใใใจใซใใ้ซ้ใซ่กใใใใซใใๆๆณใงใใ
|
93 |
+
็ด็ฉ้ๅญๅใฏๅญฆ็ฟๆใซdๆฌกๅ
ใใจ(้ๅธธใฏd=2)ใซ็ฌ็ซใใฆใฏใฉในใฟใชใณใฐใ่กใใใฏใฉในใฟๅๅฃซใฎ่ท้ขใไบๅ่จ็ฎใใฆlookup tableใไฝๆใใพใใไบๆธฌๆใฏlookup tableใ่ฆใใใจใงๅๆฌกๅ
ใฎ่ท้ขใO(1)ใง่จ็ฎใงใใพใใ
|
94 |
+
ใใฎใใใPQใฎๆฌกใซๆๅฎใใๆฐๅญใฏ้ๅธธใใฏใใซใฎๅๅใฎๆฌกๅ
ใๆๅฎใใพใใ
|
95 |
+
|
96 |
+
FastScanใซ้ขใใใใ่ฉณ็ดฐใช่ชฌๆใฏๅ
ฌๅผใฎใใญใฅใกใณใใๅ็
งใใฆใใ ใใใ
|
97 |
+
https://github.com/facebookresearch/faiss/wiki/Fast-accumulation-of-PQ-and-AQ-codes-(FastScan)
|
98 |
+
|
99 |
+
## RFlat
|
100 |
+
RFlatใฏFastScanใง่จ็ฎใใๅคงใพใใช่ท้ขใใindex factoryใฎ็ฌฌไธๅผๆฐใงๆๅฎใใๆญฃ็ขบใช่ท้ขใงๅ่จ็ฎใใๆ็คบใงใใ
|
101 |
+
kๅใฎ่ฟๅใๅๅพใใ้ใฏใk*k_factorๅใฎ็นใซใคใใฆๅ่จ็ฎใ่กใใใพใใ
|
docs/jp/faq_ja.md
ADDED
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
## Q1: ใฏใณใฏใชใใฏใใฌใผใใณใฐใ็ตใใฃใฆใใคใณใใใฏในใใชใ
|
2 |
+
|
3 |
+
"Training is done. The program is closed."ใจ่กจ็คบใใใๅ ดๅใใขใใซใใฌใผใใณใฐใฏๆๅใใฆใใพใใใใฎ็ดๅพใฎใจใฉใผใฏ่ชคใใงใใ<br>
|
4 |
+
|
5 |
+
ใฏใณใฏใชใใฏใใฌใผใใณใฐใ็ตไบใใฆใ added ใงๅงใพใใคใณใใใฏในใใกใคใซใใชใๅ ดๅใใใฌใผใใณใฐใปใใใๅคงใใใใฆใคใณใใใฏใน่ฟฝๅ ใฎในใใใใๅๆญขใใฆใใๅฏ่ฝๆงใใใใพใใใใใๅฆ็ add ใคใณใใใฏในใงใกใขใชใฎ่ฆๆฑใ้ซใใใๅ้กใ่งฃๆฑบใใพใใใไธๆ็ใซใใใฌใผใใณใฐใคใณใใใฏในใใใฟใณใใใไธๅบฆใฏใชใใฏใใฆใฟใฆใใ ใใใ<br>
|
6 |
+
|
7 |
+
## Q2: ใใฌใผใใณใฐใ็ตไบใใฆใใใฌใผใใณใฐใปใใใฎ้ณ่ฒใ่ฆใใชใ
|
8 |
+
|
9 |
+
้ณ่ฒใใชใใฌใใทใฅใใฆใใไธๅบฆ็ขบ่ชใใฆใใ ใใใใใใงใ่ฆใใชใๅ ดๅใฏใใใฌใผใใณใฐใซใจใฉใผใใชใใฃใใใใณใณใฝใผใซใจ WebUI ใฎในใฏใชใผใณใทใงใใใlogs/ๅฎ้จๅใฎไธใฎใญใฐใ้็บ่
ใซ้ใฃใฆ็ขบ่ชใใฆใฟใฆใใ ใใใ<br>
|
10 |
+
|
11 |
+
## Q3: ใขใใซใใฉใฎใใใซๅ
ฑๆใใใ
|
12 |
+
|
13 |
+
rvc_root/logs/ๅฎ้จๅใฎไธใซไฟๅญใใใฆใใ pth ใฏใๆจ่ซใซไฝฟ็จใใใใใซๅ
ฑๆใใใใใฎใใฎใงใฏใชใใๅฎ้จใฎ็ถๆ
ใไฟๅญใใฆๅ็พใใใณใใฌใผใใณใฐใ็ถใใใใใฎใใฎใงใใๅ
ฑๆใใใใใฎใขใใซใฏใweights ใใฉใซใใฎไธใซใใ 60MB ไปฅไธใฎ pth ใใกใคใซใงใใ<br>
|
14 |
+
โโ ไปๅพใweights/exp_name.pth ใจ logs/exp_name/added_xxx.index ใ็ตใฟๅใใใฆ weights/exp_name.zip ใซใใใฑใผใธๅใใใคใณใใใฏในใฎ่จๅ
ฅในใใใใ็็ฅใใพใใใใฎๅ ดๅใzip ใใกใคใซใๅ
ฑๆใใpth ใใกใคใซใฏๅ
ฑๆใใชใใงใใ ใใใๅฅใฎใใทใณใงใใฌใผใใณใฐใ็ถใใๅ ดๅใ้คใใพใใ<br>
|
15 |
+
โโlogs ใใฉใซใใฎๆฐ็พ MB ใฎ pth ใใกใคใซใ weights ใใฉใซใใซใณใใผ/ๅ
ฑๆใใฆๆจ่ซใซๅผทๅถ็ใซไฝฟ็จใใใจใf0ใtgt_sr ใชใฉใฎใใพใใพใชใญใผใๅญๅจใใชใใจใใใจใฉใผใ็บ็ใใๅฏ่ฝๆงใใใใพใใckpt ใฟใใฎไธ็ชไธใงใ้ณ้ซใ็ฎๆจใชใผใใฃใชใตใณใใชใณใฐใฌใผใใๆๅใพใใฏ่ชๅ๏ผใญใผใซใซใฎ logs ใซ้ข้ฃๆ
ๅ ฑใ่ฆใคใใๅ ดๅใฏ่ชๅ็ใซ๏ผใง้ธๆใใฆใใใckpt ใฎๅฐๅใขใใซใๆฝๅบใใๅฟ
่ฆใใใใพใ๏ผๅ
ฅๅใในใซ G ใงๅงใพใใใฎใ่จๅ
ฅ๏ผใๆฝๅบใๅฎไบใใใจใweights ใใฉใซใใซ 60MB ไปฅไธใฎ pth ใใกใคใซใ่กจ็คบใใใ้ณ่ฒใใชใใฌใใทใฅใใๅพใซไฝฟ็จใงใใพใใ<br>
|
16 |
+
|
17 |
+
## Q4: Connection Error
|
18 |
+
|
19 |
+
ใณใณใฝใผใซ๏ผ้ปใใฆใฃใณใใฆ๏ผใ้ใใๅฏ่ฝๆงใใใใพใใ<br>
|
20 |
+
|
21 |
+
## Q5: WebUI ใ Expecting value: line 1 column 1 (char 0)ใจ่กจ็คบใใ
|
22 |
+
|
23 |
+
ใทในใใ ใฎใญใผใซใซใใใใฏใผใฏใใญใญใท/ใฐใญใผใใซใใญใญใทใ้ใใฆใใ ใใใ<br>
|
24 |
+
|
25 |
+
ใใใฏใฏใฉใคใขใณใใฎใใญใญใทใ ใใงใชใใใตใผใใผๅดใฎใใญใญใทใๅซใพใใพใ๏ผไพใใฐ autodl ใง http_proxy ใจ https_proxy ใ่จญๅฎใใฆๅญฆ่ก็ใชๅ ้ใ่กใฃใฆใใๅ ดๅใไฝฟ็จใใ้ใซใฏ unset ใงใชใใซใใๅฟ
่ฆใใใใพใ๏ผใ<br>
|
26 |
+
|
27 |
+
## Q6: WebUI ใไฝฟใใใซใณใใณใใงใใฌใผใใณใฐใๆจ่ซใ่กใใซใฏ
|
28 |
+
|
29 |
+
ใใฌใผใใณใฐในใฏใชใใ๏ผ<br>
|
30 |
+
ใพใ WebUI ใๅฎ่กใใใกใใปใผใธใฆใฃใณใใฆใซใใผใฟใปใใๅฆ็ใจใใฌใผใใณใฐ็จใฎใณใใณใใฉใคใณใ่กจ็คบใใใพใใ<br>
|
31 |
+
|
32 |
+
ๆจ่ซในใฏใชใใ๏ผ<br>
|
33 |
+
https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/myinfer.py<br>
|
34 |
+
|
35 |
+
ไพ๏ผ<br>
|
36 |
+
|
37 |
+
runtime\python.exe myinfer.py 0 "E:\codes\py39\RVC-beta\todo-songs\1111.wav" "E:\codes\py39\logs\mi-test\added_IVF677_Flat_nprobe_7.index" harvest "test.wav" "weights/mi-test.pth" 0.6 cuda:0 True<br>
|
38 |
+
|
39 |
+
f0up_key=sys.argv[1]<br>
|
40 |
+
input_path=sys.argv[2]<br>
|
41 |
+
index_path=sys.argv[3]<br>
|
42 |
+
f0method=sys.argv[4]#harvest or pm<br>
|
43 |
+
opt_path=sys.argv[5]<br>
|
44 |
+
model_path=sys.argv[6]<br>
|
45 |
+
index_rate=float(sys.argv[7])<br>
|
46 |
+
device=sys.argv[8]<br>
|
47 |
+
is_half=bool(sys.argv[9])<br>
|
48 |
+
|
49 |
+
## Q7: Cuda error/Cuda out of memory
|
50 |
+
|
51 |
+
ใพใใซ cuda ใฎ่จญๅฎๅ้กใใใใคในใใตใใผใใใใฆใใชใๅฏ่ฝๆงใใใใพใใใๅคงๅใฏใกใขใชไธ่ถณ๏ผout of memory๏ผใๅๅ ใงใใ<br>
|
52 |
+
|
53 |
+
ใใฌใผใใณใฐใฎๅ ดๅใฏ batch size ใๅฐใใใใพใ๏ผ1 ใซใใฆใ่ถณใใชใๅ ดๅใฏใฐใฉใใฃใใฏใซใผใใๅคๆดใใใใใใใพใใ๏ผใๆจ่ซใฎๅ ดๅใฏใconfig.py ใฎๆซๅฐพใซใใ x_padใx_queryใx_centerใx_max ใ้ฉๅฎๅฐใใใใพใใ4GB ไปฅไธใฎใกใขใช๏ผไพใใฐ 1060๏ผ3G๏ผใๅ็จฎ 2GB ใฎใฐใฉใใฃใใฏใซใผใ๏ผใฏ่ซฆใใใใจใใๅงใใใพใใใ4GB ใฎใกใขใชใฎใฐใฉใใฃใใฏใซใผใใฏใพใ ๆใใใใใพใใ<br>
|
54 |
+
|
55 |
+
## Q8: total_epoch ใฏใฉใฎใใใใซ่จญๅฎใใใฎใ่ฏใใงใใ
|
56 |
+
|
57 |
+
ใใฌใผใใณใฐใปใใใฎ้ณ่ณชใๆชใใใใคใบใๅคใๅ ดๅใฏใ20ใ30 ใงๅๅ๏ฟฝ๏ฟฝใใ้ซใใใใจใใใผในใขใใซใฎ้ณ่ณชใไฝ้ณ่ณชใฎใใฌใผใใณใฐใปใใใ้ซใใใใจใใงใใพใใใ<br>
|
58 |
+
ใใฌใผใใณใฐใปใใใฎ้ณ่ณชใ้ซใใใใคใบใๅฐใชใใ้ทใๅ ดๅใฏใ้ซใ่จญๅฎใงใใพใใ200 ใฏๅ้กใใใพใใ๏ผใใฌใผใใณใฐ้ๅบฆใ้ใใฎใงใ้ซ้ณ่ณชใฎใใฌใผใใณใฐใปใใใๆบๅใงใใๆกไปถใใใๅ ดๅใใฐใฉใใฃใใฏใซใผใใๆกไปถใ่ฏใใฏใใชใฎใงใๅฐใใใฌใผใใณใฐๆ้ใ้ทใใชใใใจใๆฐใซใใใใจใฏใใใพใใ๏ผใ<br>
|
59 |
+
|
60 |
+
## Q9: ใใฌใผใใณใฐใปใใใฏใฉใใใใใฎ้ทใใๅฟ
่ฆใงใใ
|
61 |
+
|
62 |
+
10 ๅใใ 50 ๅใๆจๅฅจใใพใใ
|
63 |
+
โโ ้ณ่ณชใ่ฏใใใใใฏใฐใฉใฆใณใใใคใบใไฝใๅ ดๅใๅไบบ็ใช็นๅพดใฎใใ้ณ่ฒใงใใใฐใๅคใใใฐๅคใใปใฉ่ฏใใงใใ
|
64 |
+
โโ ้ซๅ่ณชใฎใใฌใผใใณใฐใปใใ๏ผ็ฒพๅทงใซๆบๅใใใ + ็นๅพด็ใช้ณ่ฒ๏ผใงใใใฐใ5 ๅใใ 10 ๅใงใๅคงไธๅคซใงใใใชใใธใใชใฎไฝ่
ใใใใใฎๆนๆณใง้ใณใพใใ
|
65 |
+
โโ1 ๅใใ 2 ๅใฎใใผใฟใงใใฌใผใใณใฐใซๆๅใใไบบใใใพใใใใใฎๆๅไฝ้จใฏไปไบบใซใฏๅ็พใงใใชใใใใใใพใๅ่ใซใชใใพใใใใใฌใผใใณใฐใปใใใฎ้ณ่ฒใ้ๅธธใซ็นๅพด็ใงใใๅฟ
่ฆใใใใพใ๏ผไพ๏ผ้ซใๅจๆณขๆฐใฎ้ๆใชๅฃฐใๅฐๅฅณใฎๅฃฐใชใฉ๏ผใใใใฆ้ณ่ณชใ่ฏใๅฟ
่ฆใใใใพใใ
|
66 |
+
โโ1 ๅๆชๆบใฎใใผใฟใงใใฌใผใใณใฐใ่ฉฆใฟใ๏ผๆๅใใ๏ผใฑใผในใฏใพใ ่ฆใใใจใใใใพใใใใใฎใใใช่ฉฆใฟใฏใๅงใใใพใใใ
|
67 |
+
|
68 |
+
## Q10: index rate ใฏไฝใซไฝฟใใใฎใงใใฉใฎใใใซ่ชฟๆดใใใฎใ๏ผๅ่๏ผ
|
69 |
+
|
70 |
+
ใใใใผในใขใใซใๆจ่ซใฝใผในใฎ้ณ่ณชใใใฌใผใใณใฐใปใใใใใ้ซใๅ ดๅใๆจ่ซ็ตๆใฎ้ณ่ณชใๅไธใใใใใจใใงใใพใใใ้ณ่ฒใใใผในใขใใซ/ๆจ่ซใฝใผในใฎ้ณ่ฒใซ่ฟใฅใใใจใใใใพใใใใใใ้ณ่ฒๆผใใใจ่จใใพใใ
|
71 |
+
โโindex rate ใฏ้ณ่ฒๆผใใฎๅ้กใๆธๅฐใใใใ่งฃๆฑบใใใใใซไฝฟ็จใใใพใใ1 ใซ่จญๅฎใใใจใ็่ซ็ใซใฏๆจ่ซใฝใผในใฎ้ณ่ฒๆผใใฎๅ้กใฏๅญๅจใใพใใใใ้ณ่ณชใฏใใฌใผใใณใฐใปใใใซ่ฟใฅใใพใใใใฌใผใใณใฐใปใใใฎ้ณ่ณชใๆจ่ซใฝใผในใใใไฝใๅ ดๅใindex rate ใ้ซใใใใจ้ณ่ณชใไฝไธใใๅฏ่ฝๆงใใใใพใใ0 ใซ่จญๅฎใใใจใๆค็ดขใใใฏในใๅฉ็จใใฆใใฌใผใใณใฐใปใใใฎ้ณ่ฒใไฟ่ญทใใๅนๆใฏใใใพใใใ
|
72 |
+
โโ ใใฌใผใใณใฐใปใใใ้ซๅ่ณชใง้ทใๅ ดๅใtotal_epoch ใ้ซใ่จญๅฎใใใใจใใงใใใใฎๅ ดๅใใขใใซ่ชไฝใฏๆจ่ซใฝใผในใใใผในใขใใซใฎ้ณ่ฒใใใพใๅ็
งใใชใใใใใ้ณ่ฒๆผใใใฎๅ้กใฏใปใจใใฉ็บ็ใใพใใใใใฎๆใindex rate ใฏ้่ฆใงใฏใชใใใคใณใใใฏในใใกใคใซใไฝๆใใใๅ
ฑๆใใใใใๅฟ
่ฆใใใใพใใใ
|
73 |
+
|
74 |
+
## Q11: ๆจ่ซๆใซ GPU ใใฉใฎใใใซ้ธๆใใใ
|
75 |
+
|
76 |
+
config.py ใใกใคใซใฎ device cuda:ใฎๅพใซใซใผใ็ชๅทใ้ธๆใใพใใ
|
77 |
+
ใซใผใ็ชๅทใจใฐใฉใใฃใใฏใซใผใใฎใใใใณใฐ้ขไฟใฏใใใฌใผใใณใฐใฟใใฎใฐใฉใใฃใใฏใซใผใๆ
ๅ ฑๆฌใง็ขบ่ชใงใใพใใ
|
78 |
+
|
79 |
+
## Q12: ใใฌใผใใณใฐไธญใซไฟๅญใใใ pth ใใกใคใซใใฉใฎใใใซๆจ่ซใใใ
|
80 |
+
|
81 |
+
ckpt ใฟใใฎไธ็ชไธใงๅฐๅใขใใซใๆฝๅบใใพใใ
|
82 |
+
|
83 |
+
## Q13: ใใฌใผใใณใฐใใฉใฎใใใซไธญๆญใใ็ถ่กใใใ
|
84 |
+
|
85 |
+
็พๅจใฎๆฎต้ใงใฏใWebUI ใณใณใฝใผใซใ้ใใฆ go-web.bat ใใใใซใฏใชใใฏใใฆใใญใฐใฉใ ใๅ่ตทๅใใใใใใใพใใใใฆใงใใใผใธใฎใใฉใกใผใฟใใชใใฌใใทใฅใใฆๅๅบฆๅ
ฅๅใใๅฟ
่ฆใใใใพใใ
|
86 |
+
ใใฌใผใใณใฐใ็ถใใใซใฏ๏ผๅใใฆใงใใใผใธใฎใใฉใกใผใฟใงใใฌใผใใณใฐใขใใซใใฏใชใใฏใใใจใๅๅใฎใใงใใฏใใคใณใใใใใฌใผใใณใฐใ็ถใใพใใ
|
87 |
+
|
88 |
+
## Q14: ใใฌใผใใณใฐไธญใซใใกใคใซใใผใธ/ใกใขใชใจใฉใผใ็บ็ใใๅ ดๅใฎๅฏพๅฆๆณ
|
89 |
+
|
90 |
+
ใใญใปในใๅคใใใฆใกใขใชใใชใผใใผใใญใผใใพใใใไปฅไธใฎๆนๆณใง่งฃๆฑบใงใใใใใใใพใใใ
|
91 |
+
|
92 |
+
1. ใ้ณ้ซๆฝๅบใจใใผใฟๅฆ็ใซไฝฟ็จใใ CPU ใใญใปในๆฐใใ้ฉๅฎไธใใพใใ
|
93 |
+
2. ใใฌใผใใณใฐใปใใใฎใชใผใใฃใชใๆๅใงใซใใใใฆใใใพใ้ทใใชใใชใใใใซใใพใใ
|
94 |
+
|
95 |
+
## Q15: ้ไธญใงใใผใฟใ่ฟฝๅ ใใฆใใฌใผใใณใฐใใๆนๆณ
|
96 |
+
|
97 |
+
1. ๅ
จใใผใฟใซๆฐใใๅฎ้จๅใไฝๆใใพใใ
|
98 |
+
2. ๅๅใฎๆๆฐใฎ G ใจ D ใใกใคใซ๏ผใใใใฏใฉใฎไธญ้ ckpt ใๅบใซใใฌใผใใณใฐใใใๅ ดๅใฏใใใฎไธญ้ใฎใใฎใใณใใผใใใใจใใงใใพใ๏ผใๆฐใใๅฎ้จๅใซใณใใผใใพใใ
|
99 |
+
3. ๆฐใใๅฎ้จๅใงใฏใณใฏใชใใฏใใฌใผใใณใฐใ้ๅงใใใจใๅๅใฎๆๆฐใฎ้ฒๆใใใใฌใผใใณใฐใ็ถใใพใใ
|
100 |
+
|
101 |
+
## Q16: llvmlite.dll ใซ้ขใใใจใฉใผ
|
102 |
+
|
103 |
+
```bash
|
104 |
+
OSError: Could not load shared object file: llvmlite.dll
|
105 |
+
|
106 |
+
FileNotFoundError: Could not find module lib\site-packages\llvmlite\binding\llvmlite.dll (or one of its dependencies). Try using the full path with constructor syntax.
|
107 |
+
```
|
108 |
+
|
109 |
+
Windows ใใฉใใใใฉใผใ ใงใฏใใฎใจใฉใผใ็บ็ใใพใใใhttps://aka.ms/vs/17/release/vc_redist.x64.exeใใคใณในใใผใซใใฆWebUIใๅ่ตทๅใใใฐ่งฃๆฑบใใพใใ
|
110 |
+
|
111 |
+
## Q17: RuntimeError: ใใณใฝใซใฎๆกๅผตใตใคใบ๏ผ17280๏ผใฏใ้ใทใณใฐใซใใณๆฌกๅ
1 ใงใฎๆขๅญใตใคใบ๏ผ0๏ผใจไธ่ดใใๅฟ
่ฆใใใใพใใ ใฟใผใฒใใใตใคใบ๏ผ[1, 17280]ใ ใใณใฝใซใตใคใบ๏ผ[0]
|
112 |
+
|
113 |
+
wavs16k ใใฉใซใใผใฎไธใงใไปใฎใใกใคใซใใใๆใใใซๅฐใใใใใคใใฎใชใผใใฃใชใใกใคใซใ่ฆใคใใฆๅ้คใใใใฌใผใใณใฐใขใใซใใฏใชใใฏใใใฐใจใฉใผใฏ็บ็ใใพใใใใใฏใณใฏใชใใฏใใญใปในใไธญๆญใใใใใใใขใใซใฎใใฌใผใใณใฐใๅฎไบใใใใคใณใใใฏในใฎใใฌใผใใณใฐใใฏใชใใฏใใๅฟ
่ฆใใใใพใใ
|
114 |
+
|
115 |
+
## Q18: RuntimeError: ใใณใฝใซ a ใฎใตใคใบ๏ผ24๏ผใฏใ้ใทใณใฐใซใใณๆฌกๅ
2 ใงใใณใฝใซ b๏ผ16๏ผใฎใตใคใบใจไธ่ดใใๅฟ
่ฆใใใใพใ
|
116 |
+
|
117 |
+
ใใฌใผใใณใฐไธญใซใตใณใใชใณใฐใฌใผใใๅคๆดใใฆใฏใใใพใใใๅคๆดใใๅฟ
่ฆใใใๅ ดๅใฏใๅฎ้จๅใๅคๆดใใฆๆๅใใใใฌใผใใณใฐใใๅฟ
่ฆใใใใพใใใใกใใใๅๅๆฝๅบใใ้ณ้ซใจ็นๅพด๏ผ0/1/2/2b ใใฉใซใ๏ผใใณใใผใใฆใใฌใผใใณใฐใใญใปในใๅ ้ใใใใจใใงใใพใใ
|
docs/jp/training_tips_ja.md
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
RVCใฎ่จ็ทดใซใใใ่ชฌๆใใใใณTIPS
|
2 |
+
===============================
|
3 |
+
ๆฌTIPSใงใฏใฉใฎใใใซใใผใฟใฎ่จ็ทดใ่กใใใฆใใใใ่ชฌๆใใพใใ
|
4 |
+
|
5 |
+
# ่จ็ทดใฎๆตใ
|
6 |
+
GUIใฎ่จ็ทดใฟใใฎstepใซๆฒฟใฃใฆ่ชฌๆใใพใใ
|
7 |
+
|
8 |
+
## step1
|
9 |
+
ๅฎ้จๅใฎ่จญๅฎใ่กใใพใใ
|
10 |
+
|
11 |
+
ใพใใใขใใซใซ้ณ้ซใฌใคใ(ใใใ)ใ่ๆ
ฎใใใใใใใใง่จญๅฎใงใใพใใ่ๆ
ฎใใใชใๅ ดๅใฏใขใใซใฏ่ปฝ้ใซใชใใพใใใๆญๅฑใซใฏๅใใชใใชใใพใใ
|
12 |
+
|
13 |
+
ๅๅฎ้จใฎใใผใฟใฏ`/logs/ๅฎ้จๅ/`ใซ้
็ฝฎใใใพใใ
|
14 |
+
|
15 |
+
## step2a
|
16 |
+
้ณๅฃฐใฎ่ชญใฟ่พผใฟใจๅๅฆ็ใ่กใใพใใ
|
17 |
+
|
18 |
+
### load audio
|
19 |
+
้ณๅฃฐใฎใใใใฉใซใใๆๅฎใใใจใใใฎใใฉใซใๅ
ใซใใ้ณๅฃฐใใกใคใซใ่ชๅใง่ชญใฟ่พผใฟใพใใ
|
20 |
+
ไพใใฐ`C:Users\hoge\voices`ใๆๅฎใใๅ ดๅใ`C:Users\hoge\voices\voice.mp3`ใฏ่ชญใฟ่พผใพใใพใใใ`C:Users\hoge\voices\dir\voice.mp3`ใฏ่ชญใฟ่พผใพใใพใใใ
|
21 |
+
|
22 |
+
้ณๅฃฐใฎ่ชญใฟ่พผใฟใซใฏๅ
้จใงffmpegใๅฉ็จใใฆใใใฎใงใffmpegใงๅฏพๅฟใใฆใใๆกๅผตๅญใงใใใฐ่ชๅ็ใซ่ชญใฟ่พผใพใใพใใ
|
23 |
+
ffmpegใงint16ใซๅคๆใใๅพใfloat32ใซๅคๆใใ-1 ~ 1ใฎ้ใซๆญฃ่ฆๅใใใพใใ
|
24 |
+
|
25 |
+
### denoising
|
26 |
+
้ณๅฃฐใซใคใใฆscipyใฎfiltfiltใซใใๅนณๆปๅใ่กใใพใใ
|
27 |
+
|
28 |
+
### ้ณๅฃฐใฎๅๅฒ
|
29 |
+
ๅ
ฅๅใใ้ณๅฃฐใฏใพใใไธๅฎๆ้(max_sil_kept=5็ง?)ใใ้ทใ็ก้ณใ็ถใ้จๅใๆค็ฅใใฆ้ณๅฃฐใๅๅฒใใพใใ็ก้ณใง้ณๅฃฐใๅๅฒใใๅพใฏใ0.3็งใฎoverlapใๅซใ4็งใใจใซ้ณๅฃฐใๅๅฒใใพใใ4็งไปฅๅ
ใซๅบๅใใใ้ณๅฃฐใฏใ้ณ้ใฎๆญฃ่ฆๅใ่กใฃใๅพwavใใกใคใซใ`/logs/ๅฎ้จๅ/0_gt_wavs`ใซใใใใใ16kใฎใตใณใใชใณใฐใฌใผใใซๅคๆใใฆ`/logs/ๅฎ้จๅ/1_16k_wavs`ใซwavใใกใคใซใงไฟๅญใใพใใ
|
30 |
+
|
31 |
+
## step2b
|
32 |
+
### ใใใใฎๆฝๅบ
|
33 |
+
wavใใกใคใซใใใใใ(้ณใฎ้ซไฝ)ใฎๆ
ๅ ฑใๆฝๅบใใพใใparselmouthใpyworldใซๅ
่ตใใใฆใใๆๆณใงใใใๆ
ๅ ฑ(=f0)ใๆฝๅบใใ`/logs/ๅฎ้จๅ/2a_f0`ใซไฟๅญใใพใใใใฎๅพใใใใๆ
ๅ ฑใๅฏพๆฐใงๅคๆใใฆ1~255ใฎๆดๆฐใซๅคๆใใ`/logs/ๅฎ้จๅ/2b-f0nsf`ใซไฟๅญใใพใใ
|
34 |
+
|
35 |
+
### feature_printใฎๆฝๅบ
|
36 |
+
HuBERTใ็จใใฆwavใใกใคใซใไบๅใซembeddingใซๅคๆใใพใใ`/logs/ๅฎ้จๅ/1_16k_wavs`ใซไฟๅญใใwavใใกใคใซใ่ชญใฟ่พผใฟใHuBERTใงwavใใกใคใซใ256ๆฌกๅ
ใฎ็นๅพด้ใซๅคๆใใnpyๅฝขๅผใง`/logs/ๅฎ้จๅ/3_feature256`ใซไฟๅญใใพใใ
|
37 |
+
|
38 |
+
## step3
|
39 |
+
ใขใใซใฎใใฌใผใใณใฐใ่กใใพใใ
|
40 |
+
### ๅๅฟ่
ๅใ็จ่ช่งฃ่ชฌ
|
41 |
+
ๆทฑๅฑคๅญฆ็ฟใงใฏใใผใฟใปใใใๅๅฒใใๅฐใใใคๅญฆ็ฟใ้ฒใใฆใใใพใใไธๅใฎใขใใซใฎๆดๆฐ(step)ใงใฏใbatch_sizeๅใฎใใผใฟใๅใๅบใไบๆธฌใจ่ชคๅทฎใฎไฟฎๆญฃใ่กใใพใใใใใใใผใฟใปใใใซๅฏพใใฆไธ้ใ่กใใจไธepochใจๆฐใใพใใ
|
42 |
+
|
43 |
+
ใใฎใใใๅญฆ็ฟๆ้ใฏ 1stepๅฝใใใฎๅญฆ็ฟๆ้ x (ใใผใฟใปใใๅ
ใฎใใผใฟๆฐ รท ใใใใตใคใบ) x epochๆฐ ใใใใพใใไธ่ฌใซใใใใตใคใบใๅคงใใใใใปใฉๅญฆ็ฟใฏๅฎๅฎใใ(1stepๅฝใใใฎๅญฆ็ฟๆ้รทใใใใตใคใบ)ใฏๅฐใใใชใใพใใใใใฎๅGPUใฎใกใขใชใๅคใไฝฟ็จใใพใใGPUใฎRAMใฏnvidia-smiใณใใณใ็ญใง็ขบ่ชใงใใพใใๅฎ่ก็ฐๅขใฎใใทใณใซๅใใใฆใใใใตใคใบใใงใใใ ใๅคงใใใใใจใใ็ญๆ้ใงๅญฆ็ฟใๅฏ่ฝใงใใ
|
44 |
+
|
45 |
+
### pretrained modelใฎๆๅฎ
|
46 |
+
RVCใงใฏใขใใซใฎ่จ็ทดใ0ใใใงใฏใชใใไบๅๅญฆ็ฟๆธใฟใฎ้ใฟใใ้ๅงใใใใใๅฐใชใใใผใฟใปใใใงๅญฆ็ฟใ่กใใพใใ
|
47 |
+
|
48 |
+
ใใใฉใซใใงใฏ
|
49 |
+
|
50 |
+
- ้ณ้ซใฌใคใใ่ๆ
ฎใใๅ ดๅใ`RVCใฎใใๅ ดๆ/pretrained/f0G40k.pth`ใจ`RVCใฎใใๅ ดๆ/pretrained/f0D40k.pth`ใ่ชญใฟ่พผใฟใพใใ
|
51 |
+
- ้ณ้ซใฌใคใใ่ๆ
ฎใใชใๅ ดๅใ`RVCใฎใใๅ ดๆ/pretrained/G40k.pth`ใจ`RVCใฎใใๅ ดๆ/pretrained/D40k.pth`ใ่ชญใฟ่พผใฟใพใใ
|
52 |
+
|
53 |
+
ๅญฆ็ฟๆใฏsave_every_epochใใจใซใขใใซใฎใใฉใกใผใฟใ`logs/ๅฎ้จๅ/G_{}.pth`ใจ`logs/ๅฎ้จๅ/D_{}.pth`ใซไฟๅญใใใพใใใใใฎใในใๆๅฎใใใใจใงๅญฆ็ฟใๅ้ใใใใใใใใฏ้ใๅฎ้จใงๅญฆ็ฟใใใขใใซใฎ้ใฟใใๅญฆ็ฟใ้ๅงใงใใพใใ
|
54 |
+
|
55 |
+
### indexใฎๅญฆ็ฟ
|
56 |
+
RVCใงใฏๅญฆ็ฟๆใซไฝฟใใใHuBERTใฎ็นๅพด้ใไฟๅญใใๆจ่ซๆใฏๅญฆ็ฟๆใฎ็นๅพด้ใใ่ฟใ็นๅพด้ใๆขใใฆใใฆๆจ่ซใ่กใใพใใใใฎๆค็ดขใ้ซ้ใซ่กใใใใซไบๅใซindexใฎๅญฆ็ฟใ่กใใพใใ
|
57 |
+
indexใฎๅญฆ็ฟใซใฏ่ฟไผผ่ฟๅๆข็ดขใฉใคใใฉใชใฎfaissใ็จใใพใใ`/logs/ๅฎ้จๅ/3_feature256`ใฎ็นๅพด้ใ่ชญใฟ่พผใฟใใใใ็จใใฆๅญฆ็ฟใใindexใ`/logs/ๅฎ้จๅ/add_XXX.index`ใจใใฆไฟๅญใใพใใ
|
58 |
+
(20230428updateใใtotal_fea.npyใฏindexใใ่ชญใฟ่พผใใฎใงไธ่ฆใซใชใใพใใใ)
|
59 |
+
|
60 |
+
### ใใฟใณใฎ่ชฌๆ
|
61 |
+
- ใขใใซใฎใใฌใผใใณใฐ: step2bใพใงใๅฎ่กใใๅพใใใฎใใฟใณใๆผใใจใขใใซใฎๅญฆ็ฟใ่กใใพใใ
|
62 |
+
- ็นๅพดใคใณใใใฏในใฎใใฌใผใใณใฐ: ใขใใซใฎใใฌใผใใณใฐๅพใindexใฎๅญฆ็ฟใ่กใใพใใ
|
63 |
+
- ใฏใณใฏใชใใฏใใฌใผใใณใฐ: step2bใพใงใจใขใใซใฎใใฌใผใใณใฐใ็นๅพดใคใณใใใฏในใฎใใฌใผใใณใฐใไธๆฌใง่กใใพใใ
|
64 |
+
|
docs/kr/README.ko.han.md
ADDED
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div align="center">
|
2 |
+
|
3 |
+
# Retrieval-based-Voice-Conversion-WebUI
|
4 |
+
VITSๅบ็ค์ ็ฐกๅฎํ๊ณ ไฝฟ็จํ๊ธฐ ์ฌ์ด้ณ่ฒ่ฎๆํ
|
5 |
+
|
6 |
+
|
7 |
+
|
8 |
+
[![madewithlove](https://img.shields.io/badge/made_with-%E2%9D%A4-red?style=for-the-badge&labelColor=orange
|
9 |
+
)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI)
|
10 |
+
|
11 |
+
![moe](https://counter.seku.su/cmoe?name=rvc&theme=r34)
|
12 |
+
|
13 |
+
[![Licence](https://img.shields.io/github/license/fumiama/Retrieval-based-Voice-Conversion-WebUI?style=for-the-badge)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/blob/main/LICENSE)
|
14 |
+
[![Huggingface](https://img.shields.io/badge/๐ค%20-Spaces-yellow.svg?style=for-the-badge)](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
15 |
+
|
16 |
+
[![Discord](https://img.shields.io/badge/RVC%20Developers-Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/HcsmBBGyVk)
|
17 |
+
|
18 |
+
</div>
|
19 |
+
|
20 |
+
------
|
21 |
+
|
22 |
+
[**English**](../en/README.en.md) | [**ไธญๆ็ฎไฝ**](../../README.md) | [**ๆฅๆฌ่ช**](../jp/README.ja.md) | [**ํ๊ตญ์ด**](../kr/README.ko.md) ([**้ๅ่ช**](../kr/README.ko.han.md)) | [**Franรงais**](../fr/README.fr.md) | [**Tรผrkรงe**](../tr/README.tr.md) | [**Portuguรชs**](../pt/README.pt.md)
|
23 |
+
|
24 |
+
> [็คบ็ฏๆ ๅ](https://www.bilibili.com/video/BV1pm4y1z7Gm/)์ ็ขบ่ชํด ๋ณด์ธ์!
|
25 |
+
|
26 |
+
> RVC๋ฅผๆดป็จํๅฏฆๆ้้ณ่ฒ่ฎๆ: [w-okada/voice-changer](https://github.com/w-okada/voice-changer)
|
27 |
+
|
28 |
+
> ๅบๆฌ๋ชจ๋ธ์ 50ๆ้ๅ้์ ้ซๅ่ณช ์คํ ์์ค VCTK ๋ฐ์ดํฐ์
์ ไฝฟ็จํ์์ผ๋ฏ๋ก, ่ไฝๆฌไธ์ ๅฟตๆ
ฎ๊ฐ ์์ผ๋ ๅฎๅฟํ๊ณ ไฝฟ็จํ์๊ธฐ ๋ฐ๋๋๋ค.
|
29 |
+
|
30 |
+
> ่ไฝๆฌๅ้ก๊ฐ ์๋ ้ซๅ่ณช์ ๋
ธ๋๋ฅผ ไปฅๅพ์๋ ็นผ็บํด์ ่จ็ทดํ ่ฑซๅฎ์
๋๋ค.
|
31 |
+
|
32 |
+
## ็ดนไป
|
33 |
+
ๆฌRepo๋ ๋ค์๊ณผ ๊ฐ์ ็นๅพต์ ๊ฐ์ง๊ณ ์์ต๋๋ค:
|
34 |
+
+ top1ๆชข็ดข์ๅฉ็จํ์ฌ ๅ
ฅๅ้ณ่ฒ็นๅพต์ ่จ็ทด์ธํธ้ณ่ฒ็นๅพต์ผ๋ก ไปฃๆฟํ์ฌ ้ณ่ฒ์ๆผๅบ์ ้ฒๆญข;
|
35 |
+
+ ็ธๅฐ็์ผ๋ก ๋ฎ์ๆง่ฝ์ GPU์์๋ ๋น ๋ฅธ่จ็ทดๅฏ่ฝ;
|
36 |
+
+ ์ ์้์ ๋ฐ์ดํฐ๋ก ่จ็ทดํด๋ ์ข์ ็ตๆ๋ฅผ ์ป์ ์ ์์ (ๆๅฐ10ๅไปฅไธ์ ไฝ้์้ณ่ฒ๋ฐ์ดํฐ๋ฅผ ไฝฟ็จํ๋ ๊ฒ์ ๅธ็);
|
37 |
+
+ ๋ชจ๋ธ่ๅ์้ํ ้ณ่ฒ์ ่ฎ่ชฟๅฏ่ฝ (ckpt่็ํญ->ckptๆททๅ้ธๆ);
|
38 |
+
+ ไฝฟ็จํ๊ธฐ ์ฌ์ด WebUI (์น ไฝฟ็จ่
์ธํฐํ์ด์ค);
|
39 |
+
+ UVR5 ๋ชจ๋ธ์ ๅฉ็จํ์ฌ ๋ชฉ์๋ฆฌ์ ่ๆฏ้ณๆจ์ ๋น ๋ฅธ ๅ้ข;
|
40 |
+
|
41 |
+
## ็ฐๅข์ๆบๅ
|
42 |
+
poetry๋ฅผ้ํด ไพๅญ๋ฅผ่จญ็ฝฎํ๋ ๊ฒ์ ๅธ็ํฉ๋๋ค.
|
43 |
+
|
44 |
+
๋ค์ๅฝไปค์ Python ๋ฒ์ 3.8ไปฅไธ์็ฐๅข์์ ๅฏฆ่ก๋์ด์ผ ํฉ๋๋ค:
|
45 |
+
```bash
|
46 |
+
# PyTorch ้่ฏไธป่ฆไพๅญ่จญ็ฝฎ, ์ด๋ฏธ่จญ็ฝฎ๋์ด ์๋ ๅข้ ๊ฑด๋๋ฐ๊ธฐ ๅฏ่ฝ
|
47 |
+
# ๅ็
ง: https://pytorch.org/get-started/locally/
|
48 |
+
pip install torch torchvision torchaudio
|
49 |
+
|
50 |
+
# Windows + Nvidia Ampere Architecture(RTX30xx)๋ฅผ ไฝฟ็จํ๊ณ ์๋ค้ข, #21 ์์ ๋ช
์๋ ๊ฒ๊ณผ ๊ฐ์ด PyTorch์ ๋ง๋ CUDA ๋ฒ์ ์ ๆๅฎํด์ผ ํฉ๋๋ค.
|
51 |
+
#pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
|
52 |
+
|
53 |
+
# Poetry ่จญ็ฝฎ, ์ด๋ฏธ่จญ็ฝฎ๋์ด ์๋ ๅข้ ๊ฑด๋๋ฐ๊ธฐ ๅฏ่ฝ
|
54 |
+
# Reference: https://python-poetry.org/docs/#installation
|
55 |
+
curl -sSL https://install.python-poetry.org | python3 -
|
56 |
+
|
57 |
+
# ไพๅญ่จญ็ฝฎ
|
58 |
+
poetry install
|
59 |
+
```
|
60 |
+
pip๋ฅผ ๆดป็จํ์ฌไพๅญ๋ฅผ ่จญ็ฝฎํ์ฌ๋ ็กๅฆจํฉ๋๋ค.
|
61 |
+
|
62 |
+
```bash
|
63 |
+
pip install -r requirements/main.txt
|
64 |
+
```
|
65 |
+
|
66 |
+
## ๅ
ถไป้ ๅ๋ชจ๋ธๆบๅ
|
67 |
+
RVC ๋ชจ๋ธ์ ๆจ่ซ๊ณผ่จ็ทด์ ไพํ์ฌ ๋ค๋ฅธ ้ ๅ๋ชจ๋ธ์ด ๅฟ
่ฆํฉ๋๋ค.
|
68 |
+
|
69 |
+
[Huggingface space](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)๋ฅผ ้ํด์ ๋ค์ด๋ก๋ ํ ์ ์์ต๋๋ค.
|
70 |
+
|
71 |
+
๋ค์์ RVC์ ๅฟ
่ฆํ ้ ๅ๋ชจ๋ธ ๋ฐ ๅ
ถไป ํ์ผ ็ฎ้์
๋๋ค:
|
72 |
+
```bash
|
73 |
+
./assets/hubert/hubert_base.pt
|
74 |
+
|
75 |
+
./assets/pretrained
|
76 |
+
|
77 |
+
./assets/uvr5_weights
|
78 |
+
|
79 |
+
V2 ๋ฒ์ ๋ชจ๋ธ์ ํ
์คํธํ๋ ค๋ฉด ์ถ๊ฐ ๋ค์ด๋ก๋๊ฐ ํ์ํฉ๋๋ค.
|
80 |
+
|
81 |
+
./assets/pretrained_v2
|
82 |
+
|
83 |
+
```
|
84 |
+
๊ทธๅพ ไปฅไธ์ ๅฝไปค์ ไฝฟ็จํ์ฌ WebUI๋ฅผ ๅงไฝํ ์ ์์ต๋๋ค:
|
85 |
+
```bash
|
86 |
+
python web.py
|
87 |
+
```
|
88 |
+
Windows๋ฅผ ไฝฟ็จํ๋ๅข้ `RVC-beta.7z`๋ฅผ ๋ค์ด๋ก๋ ๋ฐ ๅฃ็ธฎ่งฃ้คํ์ฌ RVC๋ฅผ ็ดๆฅไฝฟ็จํ๊ฑฐ๋ `go-web.bat`์ ไฝฟ็จํ์ฌ WebUi๋ฅผ ็ดๆฅํ ์ ์์ต๋๋ค.
|
89 |
+
|
90 |
+
## ๅ่
|
91 |
+
+ [ContentVec](https://github.com/auspicious3000/contentvec/)
|
92 |
+
+ [VITS](https://github.com/jaywalnut310/vits)
|
93 |
+
+ [HIFIGAN](https://github.com/jik876/hifi-gan)
|
94 |
+
+ [Gradio](https://github.com/gradio-app/gradio)
|
95 |
+
+ [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)
|
96 |
+
+ [audio-slicer](https://github.com/openvpi/audio-slicer)
|
97 |
+
## ๋ชจ๋ ๅฏ่่
๋ถ๋ค์ๅๅ์ๆ่ฌ๋๋ฆฝ๋๋ค
|
98 |
+
|
99 |
+
[![contributors](https://contrib.rocks/image?repo=fumiama/Retrieval-based-Voice-Conversion-WebUI)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/graphs/contributors)
|
100 |
+
|
docs/kr/README.ko.md
ADDED
@@ -0,0 +1,359 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div align="center">
|
2 |
+
|
3 |
+
# Retrieval-based-Voice-Conversion-WebUI
|
4 |
+
VITS ๊ธฐ๋ฐ์ ๊ฐ๋จํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ์์ฑ ๋ณํ ํ๋ ์์ํฌ.
|
5 |
+
|
6 |
+
[![madewithlove](https://img.shields.io/badge/made_with-%E2%9D%A4-red?style=for-the-badge&labelColor=orange)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI)
|
7 |
+
|
8 |
+
![moe](https://counter.seku.su/cmoe?name=rvc&theme=r34)
|
9 |
+
|
10 |
+
[![Licence](https://img.shields.io/github/license/fumiama/Retrieval-based-Voice-Conversion-WebUI?style=for-the-badge)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/blob/main/LICENSE)
|
11 |
+
[![Huggingface](https://img.shields.io/badge/๐ค%20-Spaces-yellow.svg?style=for-the-badge)](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
12 |
+
|
13 |
+
[![Discord](https://img.shields.io/badge/RVC%20Developers-Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/HcsmBBGyVk)
|
14 |
+
|
15 |
+
[**์์ฃผ ๋ฌป๋ ์ง๋ฌธ**](./faq_ko.md) | [**AutoDLยท5์์ผ๋ก AI ๊ฐ์ ํ๋ จ**](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/wiki/Autodl%E8%AE%AD%E7%BB%83RVC%C2%B7AI%E6%AD%8C%E6%89%8B%E6%95%99%E7%A8%8B) | [**๋์กฐ ์คํ ๊ธฐ๋ก**](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/wiki/%E5%AF%B9%E7%85%A7%E5%AE%9E%E9%AA%8C%C2%B7%E5%AE%9E%E9%AA%8C%E8%AE%B0%E5%BD%95) | [**์จ๋ผ์ธ ๋ฐ๋ชจ**](https://modelscope.cn/studios/FlowerCry/RVCv2demo)
|
16 |
+
|
17 |
+
[**English**](../en/README.en.md) | [**ไธญๆ็ฎไฝ**](../../README.md) | [**ๆฅๆฌ่ช**](../jp/README.ja.md) | [**ํ๊ตญ์ด**](../kr/README.ko.md) ([**้ๅ่ช**](../kr/README.ko.han.md)) | [**Franรงais**](../fr/README.fr.md) | [**Tรผrkรงe**](../tr/README.tr.md) | [**Portuguรชs**](../pt/README.pt.md)
|
18 |
+
|
19 |
+
</div>
|
20 |
+
|
21 |
+
> ๊ธฐ๋ณธ ๋ชจ๋ธ์ 50์๊ฐ ๊ฐ๋์ ๊ณ ํ๋ฆฌํฐ ์คํ ์์ค VCTK ๋ฐ์ดํฐ์
์ ์ฌ์ฉํ์์ผ๋ฏ๋ก, ์ ์๊ถ์์ ์ผ๋ ค๊ฐ ์์ผ๋ ์์ฌํ๊ณ ์ฌ์ฉํ์๊ธฐ ๋ฐ๋๋๋ค.
|
22 |
+
|
23 |
+
> ๋ ํฐ ๋งค๊ฐ๋ณ์, ๋ ํฐ ๋ฐ์ดํฐ, ๋ ๋์ ํจ๊ณผ, ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ผํ ์ถ๋ก ์๋, ๋ ์ ์ ์์ ํ๋ จ ๋ฐ์ดํฐ๊ฐ ํ์ํ RVCv3์ ๊ธฐ๋ณธ ๋ชจ๋ธ์ ๊ธฐ๋ํด ์ฃผ์ญ์์ค.
|
24 |
+
|
25 |
+
> ํน์ ์ง์ญ์์ Hugging Face์ ์ง์ ์ฐ๊ฒฐํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฉฐ, ์ฑ๊ณต์ ์ผ๋ก ์ฐ๊ฒฐํด๋ ์๋๊ฐ ๋งค์ฐ ๋๋ฆด ์ ์์ผ๋ฏ๋ก, ๋ชจ๋ธ/ํตํฉ ํจํค์ง/๋๊ตฌ์ ์ผ๊ด ๋ค์ด๋ก๋๋ฅผ ํน๋ณํ ์๊ฐํฉ๋๋ค. [RVC-Models-Downloader](https://github.com/fumiama/RVC-Models-Downloader)
|
26 |
+
|
27 |
+
| ํ๋ จ ๋ฐ ์ถ๋ก ์ธํฐํ์ด์ค |
|
28 |
+
| :--------: |
|
29 |
+
| ![web](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/assets/41315874/17e48404-2627-4fad-a0ec-65f9065aeade) |
|
30 |
+
|
31 |
+
| ์ค์๊ฐ ์์ฑ ๋ณํ ์ธํฐํ์ด์ค |
|
32 |
+
| :---------: |
|
33 |
+
| ![realtime-gui](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/assets/41315874/95b36866-b92d-40c7-b5db-6a35ca5caeac) |
|
34 |
+
|
35 |
+
## ์๊ฐ
|
36 |
+
|
37 |
+
๋ณธ ํ๋ก์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค:
|
38 |
+
|
39 |
+
- top1 ๊ฒ์์ ์ด์ฉํ์ฌ ์
๋ ฅ ์์ ํน์ง์ ํ๋ จ ์ธํธ ์์ ํน์ง์ผ๋ก ๋์ฒดํ์ฌ ์์์ ๋์ถ์ ๋ฐฉ์ง
|
40 |
+
- ์๋์ ์ผ๋ก ๋ฎ์ ์ฑ๋ฅ์ GPU์์๋ ๋น ๋ฅธ ํ๋ จ ๊ฐ๋ฅ
|
41 |
+
- ์ ์ ์์ ๋ฐ์ดํฐ๋ก ํ๋ จํด๋ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ (์ต์ 10๋ถ ์ด์์ ์ ์ก์ ์์ฑ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅ)
|
42 |
+
- ๋ชจ๋ธ ์ตํฉ์ ํตํ ์์์ ๋ณ์กฐ ๊ฐ๋ฅ (ckpt ์ฒ๋ฆฌ ํญ->ckpt ๋ณํฉ ์ ํ)
|
43 |
+
- ์ฌ์ฉํ๊ธฐ ์ฌ์ด WebUI (์น ์ธํฐํ์ด์ค)
|
44 |
+
- UVR5 ๋ชจ๋ธ์ ์ด์ฉํ์ฌ ๋ชฉ์๋ฆฌ์ ๋ฐฐ๊ฒฝ์์
์ ๋น ๋ฅธ ๋ถ๋ฆฌ;
|
45 |
+
- ์ต์ฒจ๋จ [์์ฑ ํผ์น ์ถ์ถ ์๊ณ ๋ฆฌ์ฆ InterSpeech2023-RMVPE](#ๅ่้กน็ฎ)์ ์ฌ์ฉํ์ฌ ๋ฌด์ฑ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ํจ๊ณผ๋ ์ต๊ณ (์๋์ )์ด๋ฉฐ crepe_full๋ณด๋ค ๋ ๋น ๋ฅด๊ณ ๋ฆฌ์์ค ์ฌ์ฉ์ด ์ ์
|
46 |
+
- A์นด๋์ I์นด๋ ๊ฐ์์ ์ง์
|
47 |
+
|
48 |
+
ํด๋น ํ๋ก์ ํธ์ [๋ฐ๋ชจ ๋น๋์ค](https://www.bilibili.com/video/BV1pm4y1z7Gm/)๋ฅผ ํ์ธํด๋ณด์ธ์!
|
49 |
+
|
50 |
+
## ํ๊ฒฝ ์ค์
|
51 |
+
|
52 |
+
๋ค์ ๋ช
๋ น์ Python ๋ฒ์ ์ด 3.8 ์ด์์ธ ํ๊ฒฝ์์ ์คํํด์ผ ํฉ๋๋ค.
|
53 |
+
|
54 |
+
### Windows/Linux/MacOS ๋ฑ ํ๋ซํผ ๊ณตํต ๋ฐฉ๋ฒ
|
55 |
+
|
56 |
+
์๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ์ ํํ์ธ์.
|
57 |
+
|
58 |
+
#### 1. pip๋ฅผ ํตํ ์์กด์ฑ ์ค์น
|
59 |
+
|
60 |
+
1. Pytorch ๋ฐ ์์กด์ฑ ๋ชจ๋ ์ค์น, ์ด๋ฏธ ์ค์น๋์ด ์์ผ๋ฉด ์๋ต. ์ฐธ์กฐ: https://pytorch.org/get-started/locally/
|
61 |
+
|
62 |
+
```bash
|
63 |
+
pip install torch torchvision torchaudio
|
64 |
+
```
|
65 |
+
|
66 |
+
2. win ์์คํ
+ Nvidia Ampere ์ํคํ
์ฒ(RTX30xx) ์ฌ์ฉ ์, #21์ ์ฌ๋ก์ ๋ฐ๋ผ pytorch์ ํด๋นํ๋ cuda ๋ฒ์ ์ ์ง์
|
67 |
+
|
68 |
+
```bash
|
69 |
+
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117
|
70 |
+
```
|
71 |
+
|
72 |
+
3. ์์ ์ ๊ทธ๋ํฝ ์นด๋์ ๋ง๋ ์์กด์ฑ ์ค์น
|
73 |
+
|
74 |
+
- N์นด๋
|
75 |
+
|
76 |
+
```bash
|
77 |
+
pip install -r requirements/main.txt
|
78 |
+
```
|
79 |
+
|
80 |
+
- A์นด๋/I์นด๋
|
81 |
+
|
82 |
+
```bash
|
83 |
+
pip install -r requirements/dml.txt
|
84 |
+
```
|
85 |
+
|
86 |
+
- A์นด๋ROCM(Linux)
|
87 |
+
|
88 |
+
```bash
|
89 |
+
pip install -r requirements/amd.txt
|
90 |
+
```
|
91 |
+
|
92 |
+
- I์นด๋IPEX(Linux)
|
93 |
+
|
94 |
+
```bash
|
95 |
+
pip install -r requirements/ipex.txt
|
96 |
+
```
|
97 |
+
|
98 |
+
#### 2. poetry๋ฅผ ํตํ ์์กด์ฑ ์ค์น
|
99 |
+
|
100 |
+
Poetry ์์กด์ฑ ๊ด๋ฆฌ ๋๊ตฌ ์ค์น, ์ด๋ฏธ ์ค์น๋ ๊ฒฝ์ฐ ์๋ต. ์ฐธ์กฐ: https://python-poetry.org/docs/#installation
|
101 |
+
|
102 |
+
```bash
|
103 |
+
curl -sSL https://install.python-poetry.org | python3 -
|
104 |
+
```
|
105 |
+
|
106 |
+
poetry๋ฅผ ํตํ ์์กด์ฑ ์ค์น
|
107 |
+
|
108 |
+
```bash
|
109 |
+
poetry install
|
110 |
+
```
|
111 |
+
|
112 |
+
### MacOS
|
113 |
+
|
114 |
+
`run.sh`๋ฅผ ํตํด ์์กด์ฑ ์ค์น ๊ฐ๋ฅ
|
115 |
+
|
116 |
+
```bash
|
117 |
+
sh ./run.sh
|
118 |
+
```
|
119 |
+
|
120 |
+
<!--
|
121 |
+
|
122 |
+
## ๅ
ถไป่ตๆบๅๅค
|
123 |
+
### 1. assets
|
124 |
+
> RVC้่ฆไฝไบ`assets`ๆไปถๅคนไธ็ไธไบๆจกๅ่ตๆบ่ฟ่กๆจ็ๅ่ฎญ็ปใ
|
125 |
+
#### ่ชๅจๆฃๆฅ/ไธ่ฝฝ่ตๆบ(้ป่ฎค)
|
126 |
+
> ้ป่ฎคๆ
ๅตไธ๏ผRVCๅฏๅจไธป็จๅบๅฏๅจๆถ่ชๅจๆฃๆฅๆ้่ตๆบ็ๅฎๆดๆงใ
|
127 |
+
|
128 |
+
> ๅณไฝฟ่ตๆบไธๅฎๆด๏ผ็จๅบไนๅฐ็ปง็ปญๅฏๅจใ
|
129 |
+
|
130 |
+
- ๅฆๆๆจๅธๆไธ่ฝฝๆๆ่ตๆบ๏ผ่ฏทๆทปๅ `--update`ๅๆฐ
|
131 |
+
- ๅฆๆๆจๅธๆ่ทณ่ฟๅฏๅจๆถ็่ตๆบๅฎๆดๆงๆฃๆฅ๏ผ่ฏทๆทปๅ `--nocheck`ๅๆฐ
|
132 |
+
|
133 |
+
#### ๆๅจไธ่ฝฝ่ตๆบ
|
134 |
+
> ๆๆ่ตๆบๆไปถๅไฝไบ[Hugging Face space](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)
|
135 |
+
|
136 |
+
> ไฝ ๅฏไปฅๅจ`tools`ๆไปถๅคนๆพๅฐไธ่ฝฝๅฎไปฌ็่ๆฌ
|
137 |
+
|
138 |
+
> ไฝ ไนๅฏไปฅไฝฟ็จๆจกๅ/ๆดๅๅ
/ๅทฅๅ
ท็ไธ้ฎไธ่ฝฝๅจ๏ผ[RVC-Models-Downloader](https://github.com/fumiama/RVC-Models-Downloader)
|
139 |
+
|
140 |
+
ไปฅไธๆฏไธไปฝๆธ
ๅ๏ผๅ
ๆฌไบๆๆRVCๆ้็้ขๆจกๅๅๅ
ถไปๆไปถ็ๅ็งฐใ
|
141 |
+
|
142 |
+
- ./assets/hubert/hubert_base.pt
|
143 |
+
```bash
|
144 |
+
rvcmd assets/hubert # RVC-Models-Downloader command
|
145 |
+
```
|
146 |
+
- ./assets/pretrained
|
147 |
+
```bash
|
148 |
+
rvcmd assets/v1 # RVC-Models-Downloader command
|
149 |
+
```
|
150 |
+
- ./assets/uvr5_weights
|
151 |
+
```bash
|
152 |
+
rvcmd assets/uvr5 # RVC-Models-Downloader command
|
153 |
+
```
|
154 |
+
ๆณไฝฟ็จv2็ๆฌๆจกๅ็่ฏ๏ผ้่ฆ้ขๅคไธ่ฝฝ
|
155 |
+
|
156 |
+
- ./assets/pretrained_v2
|
157 |
+
```bash
|
158 |
+
rvcmd assets/v2 # RVC-Models-Downloader command
|
159 |
+
```
|
160 |
+
|
161 |
+
### 3. ไธ่ฝฝ rmvpe ไบบๅฃฐ้ณ้ซๆๅ็ฎๆณๆ้ๆไปถ
|
162 |
+
|
163 |
+
ๅฆๆไฝ ๆณไฝฟ็จๆๆฐ็RMVPEไบบๅฃฐ้ณ้ซๆๅ็ฎๆณ๏ผๅไฝ ้่ฆไธ่ฝฝ้ณ้ซๆๅๆจกๅๅๆฐๅนถๆพ็ฝฎไบ`assets/rmvpe`ใ
|
164 |
+
|
165 |
+
- ไธ่ฝฝ[rmvpe.pt](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.pt)
|
166 |
+
```bash
|
167 |
+
rvcmd assets/rmvpe # RVC-Models-Downloader command
|
168 |
+
```
|
169 |
+
|
170 |
+
#### ไธ่ฝฝ rmvpe ็ dml ็ฏๅข(ๅฏ้, Aๅก/Iๅก็จๆท)
|
171 |
+
|
172 |
+
- ไธ่ฝฝ[rmvpe.onnx](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.onnx)
|
173 |
+
```bash
|
174 |
+
rvcmd assets/rmvpe # RVC-Models-Downloader command
|
175 |
+
```
|
176 |
+
|
177 |
+
### 4. AMDๆพๅกRocm(ๅฏ้, ไป
Linux)
|
178 |
+
|
179 |
+
ๅฆๆไฝ ๆณๅบไบAMD็RocmๆๆฏๅจLinux็ณป็ปไธ่ฟ่กRVC๏ผ่ฏทๅ
ๅจ[่ฟ้](https://rocm.docs.amd.com/en/latest/deploy/linux/os-native/install.html)ๅฎ่ฃ
ๆ้็้ฉฑๅจใ
|
180 |
+
|
181 |
+
่ฅไฝ ไฝฟ็จ็ๆฏArch Linux๏ผๅฏไปฅไฝฟ็จpacmanๆฅๅฎ่ฃ
ๆ้้ฉฑๅจ๏ผ
|
182 |
+
````
|
183 |
+
pacman -S rocm-hip-sdk rocm-opencl-sdk
|
184 |
+
````
|
185 |
+
ๅฏนไบๆไบๅๅท็ๆพๅก๏ผไฝ ๅฏ่ฝ้่ฆ้ขๅค้
็ฝฎๅฆไธ็็ฏๅขๅ้๏ผๅฆ๏ผRX6700XT๏ผ๏ผ
|
186 |
+
````
|
187 |
+
export ROCM_PATH=/opt/rocm
|
188 |
+
export HSA_OVERRIDE_GFX_VERSION=10.3.0
|
189 |
+
````
|
190 |
+
ๅๆถ็กฎไฟไฝ ็ๅฝๅ็จๆทๅคไบ`render`ไธ`video`็จๆท็ปๅ
๏ผ
|
191 |
+
````
|
192 |
+
sudo usermod -aG render $USERNAME
|
193 |
+
sudo usermod -aG video $USERNAME
|
194 |
+
````
|
195 |
+
|
196 |
+
## ๅผๅงไฝฟ็จ
|
197 |
+
### ็ดๆฅๅฏๅจ
|
198 |
+
ไฝฟ็จไปฅไธๆไปคๆฅๅฏๅจ WebUI
|
199 |
+
```bash
|
200 |
+
python web.py
|
201 |
+
```
|
202 |
+
### Linux/MacOS ็จๆท
|
203 |
+
```bash
|
204 |
+
./run.sh
|
205 |
+
```
|
206 |
+
### ๅฏนไบ้่ฆไฝฟ็จIPEXๆๆฏ็Iๅก็จๆท(ไป
Linux)
|
207 |
+
```bash
|
208 |
+
source /opt/intel/oneapi/setvars.sh
|
209 |
+
./run.sh
|
210 |
+
```
|
211 |
+
### ไฝฟ็จๆดๅๅ
(Windows ็จๆท)
|
212 |
+
ไธ่ฝฝๅนถ่งฃๅ`RVC-beta.7z`๏ผ่งฃๅๅๅๅป`go-web.bat`ๅณๅฏไธ้ฎๅฏๅจใ
|
213 |
+
```bash
|
214 |
+
rvcmd packs/general/latest # RVC-Models-Downloader command
|
215 |
+
```
|
216 |
+
|
217 |
+
## ๅ่้กน็ฎ
|
218 |
+
+ [ContentVec](https://github.com/auspicious3000/contentvec/)
|
219 |
+
+ [VITS](https://github.com/jaywalnut310/vits)
|
220 |
+
+ [HIFIGAN](https://github.com/jik876/hifi-gan)
|
221 |
+
+ [Gradio](https://github.com/gradio-app/gradio)
|
222 |
+
+ [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)
|
223 |
+
+ [audio-slicer](https://github.com/openvpi/audio-slicer)
|
224 |
+
+ [Vocal pitch extraction:RMVPE](https://github.com/Dream-High/RMVPE)
|
225 |
+
+ The pretrained model is trained and tested by [yxlllc](https://github.com/yxlllc/RMVPE) and [RVC-Boss](https://github.com/RVC-Boss).
|
226 |
+
|
227 |
+
## ๆ่ฐขๆๆ่ดก็ฎ่
ไฝๅบ็ๅชๅ
|
228 |
+
[![contributors](https://contrib.rocks/image?repo=fumiama/Retrieval-based-Voice-Conversion-WebUI)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/graphs/contributors)
|
229 |
+
|
230 |
+
translate to Korean
|
231 |
+
-->
|
232 |
+
|
233 |
+
## ๊ธฐํ ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ ์ค๋น
|
234 |
+
|
235 |
+
### assets
|
236 |
+
|
237 |
+
> RVC๋ ์ถ๋ก ๊ณผ ํ๋ จ์ ์ํด assets ํด๋ ํ์์ ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ์ด ํ์ํฉ๋๋ค.
|
238 |
+
|
239 |
+
#### ์๋ ๊ฒ์ฌ/๋ค์ด๋ก๋ ๋ฆฌ์์ค(๊ธฐ๋ณธ๊ฐ)
|
240 |
+
|
241 |
+
> ๊ธฐ๋ณธ์ ์ผ๋ก RVC๋ ์์ํ ๋ ํ์ํ ๋ฆฌ์์ค์ ๋ฌด๊ฒฐ์ฑ์ ์๋์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
|
242 |
+
|
243 |
+
> ๋ฆฌ์์ค๊ฐ ๋ถ์์ ํ๋๋ผ๋ ํ๋ก๊ทธ๋จ์ ๊ณ์ ์คํ๋ฉ๋๋ค.
|
244 |
+
|
245 |
+
- ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ๋ค์ด๋ก๋ํ๋ ค๋ฉด `--update` ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ์ธ์
|
246 |
+
- ์์ ์ ๋ฆฌ์์ค ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋ฐ๋ ค๋ฉด `--nocheck` ๋งค๊ฐ๋ณ์๋ฅผ ์ถ๊ฐํ์ธ์
|
247 |
+
|
248 |
+
#### ๋ฆฌ์์ค ์๋ ๋ค์ด๋ก๋
|
249 |
+
|
250 |
+
> ๋ชจ๋ ๋ฆฌ์์ค ํ์ผ์ [Hugging Face space](https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main/)์ ์์ต๋๋ค.
|
251 |
+
|
252 |
+
> ์ด๋ค์ ๋ค์ด๋ก๋ํ๋ ์คํฌ๋ฆฝํธ๋ `tools` ํด๋์์ ์ฐพ์ ์ ์์ต๋๋ค.
|
253 |
+
|
254 |
+
> ๋ชจ๋ธ/ํตํฉ ํจํค์ง/๋๊ตฌ์ ์ผ๊ด ๋ค์ด๋ก๋๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค: [RVC-Models-Downloader](https://github.com/fumiama/RVC-Models-Downloader)
|
255 |
+
|
256 |
+
๋ค์์ RVC์ ํ์ํ ๋ชจ๋ ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ๊ณผ ๊ธฐํ ํ์ผ์ ๋ชฉ๋ก์
๋๋ค.
|
257 |
+
|
258 |
+
- ./assets/hubert/hubert_base.pt
|
259 |
+
|
260 |
+
```bash
|
261 |
+
rvcmd assets/hubert # RVC-Models-Downloader command
|
262 |
+
```
|
263 |
+
|
264 |
+
- ./assets/pretrained
|
265 |
+
|
266 |
+
```bash
|
267 |
+
rvcmd assets/v1 # RVC-Models-Downloader command
|
268 |
+
```
|
269 |
+
|
270 |
+
- ./assets/uvr5_weights
|
271 |
+
```bash
|
272 |
+
rvcmd assets/uvr5 # RVC-Models-Downloader command
|
273 |
+
```
|
274 |
+
|
275 |
+
v2 ๋ฒ์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ค๋ฉด ์ถ๊ฐ๋ก ๋ค์์ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค.
|
276 |
+
|
277 |
+
- ./assets/pretrained_v2
|
278 |
+
```bash
|
279 |
+
rvcmd assets/v2 # RVC-Models-Downloader command
|
280 |
+
```
|
281 |
+
|
282 |
+
### 2. RMVPE ์ธ๊ฐ ์์ฑ ํผ์น ์ถ์ถ ์๊ณ ๋ฆฌ์ฆ์ ํ์ํ ํ์ผ ๋ค์ด๋ก๋
|
283 |
+
|
284 |
+
์ต์ RMVPE ์ธ๊ฐ ์์ฑ ํผ์น ์ถ์ถ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ค๋ฉด ์ํผ์น ์ถ์ถ ๋ชจ๋ธ ๋งค๊ฐ๋ณ์๋ฅผ ๋ค์ด๋ก๋ํ๊ณ RVC ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ๋ฐฐ์นํด์ผ ํฉ๋๋ค.
|
285 |
+
|
286 |
+
- [rmvpe.pt ๋ค์ด๋ก๋](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.pt)
|
287 |
+
|
288 |
+
#### dml ํ๊ฒฝ์ RMVPE ๋ค์ด๋ก๋(์ ํ์ฌํญ, A์นด๋/I์นด๋ ์ฌ์ฉ์)
|
289 |
+
|
290 |
+
- [rmvpe.onnx ๋ค์ด๋ก๋](https://huggingface.co/lj1995/VoiceConversionWebUI/blob/main/rmvpe.onnx)
|
291 |
+
|
292 |
+
### 3. AMD ๊ทธ๋ํฝ ์นด๋ Rocm(์ ํ์ฌํญ, Linux๋ง ํด๋น)
|
293 |
+
|
294 |
+
Linux ์์คํ
์์ AMD์ Rocm ๊ธฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก RVC๋ฅผ ์คํํ๋ ค๋ฉด [์ฌ๊ธฐ](https://rocm.docs.amd.com/en/latest/deploy/linux/os-native/install.html)์์ ํ์ํ ๋๋ผ์ด๋ฒ๋ฅผ ๋จผ์ ์ค์นํ์ธ์.
|
295 |
+
|
296 |
+
Arch Linux๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ pacman์ ์ฌ์ฉํ์ฌ ํ์ํ ๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
|
297 |
+
|
298 |
+
```
|
299 |
+
pacman -S rocm-hip-sdk rocm-opencl-sdk
|
300 |
+
```
|
301 |
+
|
302 |
+
์ผ๋ถ ๋ชจ๋ธ์ ๊ทธ๋ํฝ ์นด๋(์: RX6700XT)์ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ถ๊ฐ๋ก ์ค์ ํด์ผ ํ ์ ์์ต๋๋ค.
|
303 |
+
|
304 |
+
```
|
305 |
+
export ROCM_PATH=/opt/rocm
|
306 |
+
export HSA_OVERRIDE_GFX_VERSION=10.3.0
|
307 |
+
```
|
308 |
+
|
309 |
+
๋์์ ํ์ฌ ์ฌ์ฉ์๊ฐ `render` ๋ฐ `video` ์ฌ์ฉ์ ๊ทธ๋ฃน์ ์ํด ์๋์ง ํ์ธํ์ธ์.
|
310 |
+
|
311 |
+
```
|
312 |
+
sudo usermod -aG render $USERNAME
|
313 |
+
sudo usermod -aG video $USERNAME
|
314 |
+
```
|
315 |
+
|
316 |
+
## ์์ํ๊ธฐ
|
317 |
+
|
318 |
+
### ์ง์ ์์
|
319 |
+
|
320 |
+
๋ค์ ๋ช
๋ น์ด๋ก WebUI๋ฅผ ์์ํ์ธ์
|
321 |
+
|
322 |
+
```bash
|
323 |
+
python web.py
|
324 |
+
```
|
325 |
+
|
326 |
+
### ํตํฉ ํจํค์ง ์ฌ์ฉ
|
327 |
+
|
328 |
+
`RVC-beta.7z`๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์์ถ ํด์
|
329 |
+
|
330 |
+
#### Windows ์ฌ์ฉ์
|
331 |
+
|
332 |
+
`go-web.bat` ๋๋ธ ํด๋ฆญ
|
333 |
+
|
334 |
+
#### MacOS ์ฌ์ฉ์
|
335 |
+
|
336 |
+
```bash
|
337 |
+
sh ./run.sh
|
338 |
+
```
|
339 |
+
|
340 |
+
### IPEX ๊ธฐ์ ์ด ํ์ํ I์นด๋ ์ฌ์ฉ์๋ฅผ ์ํ ์ง์นจ(Linux๋ง ํด๋น)
|
341 |
+
|
342 |
+
```bash
|
343 |
+
source /opt/intel/oneapi/setvars.sh
|
344 |
+
```
|
345 |
+
|
346 |
+
## ์ฐธ์กฐ ํ๋ก์ ํธ
|
347 |
+
|
348 |
+
- [ContentVec](https://github.com/auspicious3000/contentvec/)
|
349 |
+
- [VITS](https://github.com/jaywalnut310/vits)
|
350 |
+
- [HIFIGAN](https://github.com/jik876/hifi-gan)
|
351 |
+
- [Gradio](https://github.com/gradio-app/gradio)
|
352 |
+
- [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)
|
353 |
+
- [audio-slicer](https://github.com/openvpi/audio-slicer)
|
354 |
+
- [Vocal pitch extraction:RMVPE](https://github.com/Dream-High/RMVPE)
|
355 |
+
- ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ์ [yxlllc](https://github.com/yxlllc/RMVPE)์ [RVC-Boss](https://github.com/RVC-Boss)์ ์ํด ํ๋ จ๋๊ณ ํ
์คํธ๋์์ต๋๋ค.
|
356 |
+
|
357 |
+
## ๋ชจ๋ ๊ธฐ์ฌ์๋ค์ ๋
ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค
|
358 |
+
|
359 |
+
[![contributors](https://contrib.rocks/image?repo=fumiama/Retrieval-based-Voice-Conversion-WebUI)](https://github.com/fumiama/Retrieval-based-Voice-Conversion-WebUI/graphs/contributors)
|