Repository files navigation

Semantic Occupancy Field

This repository contains the code for training/generating SOF (semantic occupancy field) as part of the TOG submission: SofGAN: A Portrait Image Generator with Dynamic Styling.

Installation

Clone the main SofGAN repo by git clone --recursive https://github.com/apchenstu/softgan_test.git. This repo will be automatically included in softgan_test/modules.

Data preparation

Create a root directory (e.g. data), and for each instance (e.g. 00000) create a folder with seg images and calibrated camera poses. The folder structure looks like:

└── data # instance id
└── 00000
│ ├── cam2world.npy # camera extrinsics
│ ├── cameras.npy │ ├── intrinsic.npy # camera intrinsics
│ ├── zRange.npy # optional only when use depth for training
│ ├── 00000.png
│ ...
│ └── 00029.png
├── 00001
│ └── ...
...
└── xxxxx
└── ...

Download the example data from here. We provide a notebook for data preprocessing.

Ideally, SOF could be trained with your own datasets with multi-view face segmentation maps. Similar to SRNs we uses an "OpenCV" style camera coordinate system, where the Y-axis points downwards (the up-vector points in the negative Y-direction), the X-axis points right, and the Z-axis points into the image plane. Camera poses are assumed to be in a "camera2world" format, i.e., they denote the matrix transform that transforms camera coordinates to world coordinates. Please specify --orthogonal during training if you're using orthogonal projection for your own data. Please also notice that you might need to change the sample_instances_* and sample_observations_* parameter according to the number of instances and views of your own dataset.

As the accuracy of camera parameters might largly affect the training, you can specify --opt_cam during training to automatically optimize the camera parameters.

Training

STEP 1: Training network parameters

The training is done following two phrases. Firstly, please train the network parameters with multiview segmaps:

python train.py --config_filepath=./configs/face_seg_real.yml 

Training might take 1 to 3 days depends on the dataset size and quality.

STEP 2 (optional): Inverse rendering

We use inverse rendering to expand the trained geometric sampling space with single view segmaps collected from CelebAMaskHQ. The example config file is provided in ./configs/face_seg_single_view.yml, notice that we set --overwrite_embeddings and --freeze_networks to True, and specify --checkpoint_path as the trained checkpoint in STEP 1. After training, you can access the corresponding latent code for each portrait by loading the checkpoint.

python train.py --config_filepath=./configs/face_seg_single_view.yml 

Similar process could be used to back project in-the-wild portrait images into a latent vector in SOF geometric sampling space, and used for mutiview portrait generation.

Pretrained Checkpoints

Please download the pre-trained checkpoint from either GoogleDrive or BaiduDisk (password: k0b8) and save to ./checkpoints.

Inference

Please follow renderer.ipynb in the SofGAN repo for free-view portrait generation.

Once trained, SOF could be used for generating free-view segmentation maps for arbitrary instances in the geometric space. The inference codes are provided in notebooks in scripts:

  • Most testing codes are included in scripts/TestAll.ipynb, e.g. generating multiview images, modify attributes, visualize depth layers and build depth prior with marching cube.
  • To generate sampling free-view portrait segmentations from the geometry space, please refer to scripts/Test_MV_Inference.ipynb.
  • To visulalize a trained SOF volume as in Fig.5, please use scripts/Test_Slicing.ipynb.
  • To calculat mIOU during SOF training (Fig.9), please modify the model checkpoint directory and run scripts/Test_mIoU.ipynb.
  • We also provide scripts/Test_GMM.ipynb for miscs like fitting GMM model to the geometric space.

Acknowledgment

Thanks vsitzmann for sharing the awesome idea of SRNs, which has greatly inspired our design of SOF.

About

Training and testing scripts for Semantic Occupancy Field.

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Semantic Occupancy Field

This repository contains the code for training/generating SOF (semantic occupancy field) as part of the TOG submission: SofGAN: A Portrait Image Generator with Dynamic Styling.

Installation

Clone the main SofGAN repo by git clone --recursive https://github.com/apchenstu/softgan_test.git. This repo will be automatically included in softgan_test/modules.

Data preparation

Create a root directory (e.g. data), and for each instance (e.g. 00000) create a folder with seg images and calibrated camera poses. The folder structure looks like:

└── data # instance id
└── 00000
│ ├── cam2world.npy # camera extrinsics
│ ├── cameras.npy │ ├── intrinsic.npy # camera intrinsics
│ ├── zRange.npy # optional only when use depth for training
│ ├── 00000.png
│ ...
│ └── 00029.png
├── 00001
│ └── ...
...
└── xxxxx
└── ...

Download the example data from here. We provide a notebook for data preprocessing.

Ideally, SOF could be trained with your own datasets with multi-view face segmentation maps. Similar to SRNs we uses an "OpenCV" style camera coordinate system, where the Y-axis points downwards (the up-vector points in the negative Y-direction), the X-axis points right, and the Z-axis points into the image plane. Camera poses are assumed to be in a "camera2world" format, i.e., they denote the matrix transform that transforms camera coordinates to world coordinates. Please specify --orthogonal during training if you're using orthogonal projection for your own data. Please also notice that you might need to change the sample_instances_* and sample_observations_* parameter according to the number of instances and views of your own dataset.

As the accuracy of camera parameters might largly affect the training, you can specify --opt_cam during training to automatically optimize the camera parameters.

Training

STEP 1: Training network parameters

The training is done following two phrases. Firstly, please train the network parameters with multiview segmaps:

python train.py --config_filepath=./configs/face_seg_real.yml 

Training might take 1 to 3 days depends on the dataset size and quality.

STEP 2 (optional): Inverse rendering

We use inverse rendering to expand the trained geometric sampling space with single view segmaps collected from CelebAMaskHQ. The example config file is provided in ./configs/face_seg_single_view.yml, notice that we set --overwrite_embeddings and --freeze_networks to True, and specify --checkpoint_path as the trained checkpoint in STEP 1. After training, you can access the corresponding latent code for each portrait by loading the checkpoint.

python train.py --config_filepath=./configs/face_seg_single_view.yml 

Similar process could be used to back project in-the-wild portrait images into a latent vector in SOF geometric sampling space, and used for mutiview portrait generation.

Pretrained Checkpoints

Please download the pre-trained checkpoint from either GoogleDrive or BaiduDisk (password: k0b8) and save to ./checkpoints.

Inference

Please follow renderer.ipynb in the SofGAN repo for free-view portrait generation.

Once trained, SOF could be used for generating free-view segmentation maps for arbitrary instances in the geometric space. The inference codes are provided in notebooks in scripts:

  • Most testing codes are included in scripts/TestAll.ipynb, e.g. generating multiview images, modify attributes, visualize depth layers and build depth prior with marching cube.
  • To generate sampling free-view portrait segmentations from the geometry space, please refer to scripts/Test_MV_Inference.ipynb.
  • To visulalize a trained SOF volume as in Fig.5, please use scripts/Test_Slicing.ipynb.
  • To calculat mIOU during SOF training (Fig.9), please modify the model checkpoint directory and run scripts/Test_mIoU.ipynb.
  • We also provide scripts/Test_GMM.ipynb for miscs like fitting GMM model to the geometric space.

Acknowledgment

Thanks vsitzmann for sharing the awesome idea of SRNs, which has greatly inspired our design of SOF.

About

Training and testing scripts for Semantic Occupancy Field.

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Semantic Occupancy Field

This repository contains the code for training/generating SOF (semantic occupancy field) as part of the TOG submission: SofGAN: A Portrait Image Generator with Dynamic Styling.

Installation

Clone the main SofGAN repo by git clone --recursive https://github.com/apchenstu/softgan_test.git. This repo will be automatically included in softgan_test/modules.

Data preparation

Create a root directory (e.g. data), and for each instance (e.g. 00000) create a folder with seg images and calibrated camera poses. The folder structure looks like:

└── data # instance id
└── 00000
│ ├── cam2world.npy # camera extrinsics
│ ├── cameras.npy │ ├── intrinsic.npy # camera intrinsics
│ ├── zRange.npy # optional only when use depth for training
│ ├── 00000.png
│ ...
│ └── 00029.png
├── 00001
│ └── ...
...
└── xxxxx
└── ...

Download the example data from here. We provide a notebook for data preprocessing.

Ideally, SOF could be trained with your own datasets with multi-view face segmentation maps. Similar to SRNs we uses an "OpenCV" style camera coordinate system, where the Y-axis points downwards (the up-vector points in the negative Y-direction), the X-axis points right, and the Z-axis points into the image plane. Camera poses are assumed to be in a "camera2world" format, i.e., they denote the matrix transform that transforms camera coordinates to world coordinates. Please specify --orthogonal during training if you're using orthogonal projection for your own data. Please also notice that you might need to change the sample_instances_* and sample_observations_* parameter according to the number of instances and views of your own dataset.

As the accuracy of camera parameters might largly affect the training, you can specify --opt_cam during training to automatically optimize the camera parameters.

Training

STEP 1: Training network parameters

The training is done following two phrases. Firstly, please train the network parameters with multiview segmaps:

python train.py --config_filepath=./configs/face_seg_real.yml 

Training might take 1 to 3 days depends on the dataset size and quality.

STEP 2 (optional): Inverse rendering

We use inverse rendering to expand the trained geometric sampling space with single view segmaps collected from CelebAMaskHQ. The example config file is provided in ./configs/face_seg_single_view.yml, notice that we set --overwrite_embeddings and --freeze_networks to True, and specify --checkpoint_path as the trained checkpoint in STEP 1. After training, you can access the corresponding latent code for each portrait by loading the checkpoint.

python train.py --config_filepath=./configs/face_seg_single_view.yml 

Similar process could be used to back project in-the-wild portrait images into a latent vector in SOF geometric sampling space, and used for mutiview portrait generation.

Pretrained Checkpoints

Please download the pre-trained checkpoint from either GoogleDrive or BaiduDisk (password: k0b8) and save to ./checkpoints.

Inference

Please follow renderer.ipynb in the SofGAN repo for free-view portrait generation.

Once trained, SOF could be used for generating free-view segmentation maps for arbitrary instances in the geometric space. The inference codes are provided in notebooks in scripts:

  • Most testing codes are included in scripts/TestAll.ipynb, e.g. generating multiview images, modify attributes, visualize depth layers and build depth prior with marching cube.
  • To generate sampling free-view portrait segmentations from the geometry space, please refer to scripts/Test_MV_Inference.ipynb.
  • To visulalize a trained SOF volume as in Fig.5, please use scripts/Test_Slicing.ipynb.
  • To calculat mIOU during SOF training (Fig.9), please modify the model checkpoint directory and run scripts/Test_mIoU.ipynb.
  • We also provide scripts/Test_GMM.ipynb for miscs like fitting GMM model to the geometric space.

Acknowledgment

Thanks vsitzmann for sharing the awesome idea of SRNs, which has greatly inspired our design of SOF.

About

Training and testing scripts for Semantic Occupancy Field.

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Semantic Occupancy Field

This repository contains the code for training/generating SOF (semantic occupancy field) as part of the TOG submission: SofGAN: A Portrait Image Generator with Dynamic Styling.

Installation

Clone the main SofGAN repo by git clone --recursive https://github.com/apchenstu/softgan_test.git. This repo will be automatically included in softgan_test/modules.

Data preparation

Create a root directory (e.g. data), and for each instance (e.g. 00000) create a folder with seg images and calibrated camera poses. The folder structure looks like:

└── data # instance id
└── 00000
│ ├── cam2world.npy # camera extrinsics
│ ├── cameras.npy │ ├── intrinsic.npy # camera intrinsics
│ ├── zRange.npy # optional only when use depth for training
│ ├── 00000.png
│ ...
│ └── 00029.png
├── 00001
│ └── ...
...
└── xxxxx
└── ...

Download the example data from here. We provide a notebook for data preprocessing.

Ideally, SOF could be trained with your own datasets with multi-view face segmentation maps. Similar to SRNs we uses an "OpenCV" style camera coordinate system, where the Y-axis points downwards (the up-vector points in the negative Y-direction), the X-axis points right, and the Z-axis points into the image plane. Camera poses are assumed to be in a "camera2world" format, i.e., they denote the matrix transform that transforms camera coordinates to world coordinates. Please specify --orthogonal during training if you're using orthogonal projection for your own data. Please also notice that you might need to change the sample_instances_* and sample_observations_* parameter according to the number of instances and views of your own dataset.

As the accuracy of camera parameters might largly affect the training, you can specify --opt_cam during training to automatically optimize the camera parameters.

Training

STEP 1: Training network parameters

The training is done following two phrases. Firstly, please train the network parameters with multiview segmaps:

python train.py --config_filepath=./configs/face_seg_real.yml 

Training might take 1 to 3 days depends on the dataset size and quality.

STEP 2 (optional): Inverse rendering

We use inverse rendering to expand the trained geometric sampling space with single view segmaps collected from CelebAMaskHQ. The example config file is provided in ./configs/face_seg_single_view.yml, notice that we set --overwrite_embeddings and --freeze_networks to True, and specify --checkpoint_path as the trained checkpoint in STEP 1. After training, you can access the corresponding latent code for each portrait by loading the checkpoint.

python train.py --config_filepath=./configs/face_seg_single_view.yml 

Similar process could be used to back project in-the-wild portrait images into a latent vector in SOF geometric sampling space, and used for mutiview portrait generation.

Pretrained Checkpoints

Please download the pre-trained checkpoint from either GoogleDrive or BaiduDisk (password: k0b8) and save to ./checkpoints.

Inference

Please follow renderer.ipynb in the SofGAN repo for free-view portrait generation.

Once trained, SOF could be used for generating free-view segmentation maps for arbitrary instances in the geometric space. The inference codes are provided in notebooks in scripts:

  • Most testing codes are included in scripts/TestAll.ipynb, e.g. generating multiview images, modify attributes, visualize depth layers and build depth prior with marching cube.
  • To generate sampling free-view portrait segmentations from the geometry space, please refer to scripts/Test_MV_Inference.ipynb.
  • To visulalize a trained SOF volume as in Fig.5, please use scripts/Test_Slicing.ipynb.
  • To calculat mIOU during SOF training (Fig.9), please modify the model checkpoint directory and run scripts/Test_mIoU.ipynb.
  • We also provide scripts/Test_GMM.ipynb for miscs like fitting GMM model to the geometric space.

Acknowledgment

Thanks vsitzmann for sharing the awesome idea of SRNs, which has greatly inspired our design of SOF.

About

Training and testing scripts for Semantic Occupancy Field.

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Semantic Occupancy Field

This repository contains the code for training/generating SOF (semantic occupancy field) as part of the TOG submission: SofGAN: A Portrait Image Generator with Dynamic Styling.

Installation

Clone the main SofGAN repo by git clone --recursive https://github.com/apchenstu/softgan_test.git. This repo will be automatically included in softgan_test/modules.

Data preparation

Create a root directory (e.g. data), and for each instance (e.g. 00000) create a folder with seg images and calibrated camera poses. The folder structure looks like:

└── data # instance id
└── 00000
│ ├── cam2world.npy # camera extrinsics
│ ├── cameras.npy │ ├── intrinsic.npy # camera intrinsics
│ ├── zRange.npy # optional only when use depth for training
│ ├── 00000.png
│ ...
│ └── 00029.png
├── 00001
│ └── ...
...
└── xxxxx
└── ...

Download the example data from here. We provide a notebook for data preprocessing.

Ideally, SOF could be trained with your own datasets with multi-view face segmentation maps. Similar to SRNs we uses an "OpenCV" style camera coordinate system, where the Y-axis points downwards (the up-vector points in the negative Y-direction), the X-axis points right, and the Z-axis points into the image plane. Camera poses are assumed to be in a "camera2world" format, i.e., they denote the matrix transform that transforms camera coordinates to world coordinates. Please specify --orthogonal during training if you're using orthogonal projection for your own data. Please also notice that you might need to change the sample_instances_* and sample_observations_* parameter according to the number of instances and views of your own dataset.

As the accuracy of camera parameters might largly affect the training, you can specify --opt_cam during training to automatically optimize the camera parameters.

Training

STEP 1: Training network parameters

The training is done following two phrases. Firstly, please train the network parameters with multiview segmaps:

python train.py --config_filepath=./configs/face_seg_real.yml 

Training might take 1 to 3 days depends on the dataset size and quality.

STEP 2 (optional): Inverse rendering

We use inverse rendering to expand the trained geometric sampling space with single view segmaps collected from CelebAMaskHQ. The example config file is provided in ./configs/face_seg_single_view.yml, notice that we set --overwrite_embeddings and --freeze_networks to True, and specify --checkpoint_path as the trained checkpoint in STEP 1. After training, you can access the corresponding latent code for each portrait by loading the checkpoint.

python train.py --config_filepath=./configs/face_seg_single_view.yml 

Similar process could be used to back project in-the-wild portrait images into a latent vector in SOF geometric sampling space, and used for mutiview portrait generation.

Pretrained Checkpoints

Please download the pre-trained checkpoint from either GoogleDrive or BaiduDisk (password: k0b8) and save to ./checkpoints.

Inference

Please follow renderer.ipynb in the SofGAN repo for free-view portrait generation.

Once trained, SOF could be used for generating free-view segmentation maps for arbitrary instances in the geometric space. The inference codes are provided in notebooks in scripts:

  • Most testing codes are included in scripts/TestAll.ipynb, e.g. generating multiview images, modify attributes, visualize depth layers and build depth prior with marching cube.
  • To generate sampling free-view portrait segmentations from the geometry space, please refer to scripts/Test_MV_Inference.ipynb.
  • To visulalize a trained SOF volume as in Fig.5, please use scripts/Test_Slicing.ipynb.
  • To calculat mIOU during SOF training (Fig.9), please modify the model checkpoint directory and run scripts/Test_mIoU.ipynb.
  • We also provide scripts/Test_GMM.ipynb for miscs like fitting GMM model to the geometric space.

Acknowledgment

Thanks vsitzmann for sharing the awesome idea of SRNs, which has greatly inspired our design of SOF.

About

Training and testing scripts for Semantic Occupancy Field.

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Semantic Occupancy Field

This repository contains the code for training/generating SOF (semantic occupancy field) as part of the TOG submission: SofGAN: A Portrait Image Generator with Dynamic Styling.

Installation

Clone the main SofGAN repo by git clone --recursive https://github.com/apchenstu/softgan_test.git. This repo will be automatically included in softgan_test/modules.

Data preparation

Create a root directory (e.g. data), and for each instance (e.g. 00000) create a folder with seg images and calibrated camera poses. The folder structure looks like:

└── data # instance id
└── 00000
│ ├── cam2world.npy # camera extrinsics
│ ├── cameras.npy │ ├── intrinsic.npy # camera intrinsics
│ ├── zRange.npy # optional only when use depth for training
│ ├── 00000.png
│ ...
│ └── 00029.png
├── 00001
│ └── ...
...
└── xxxxx
└── ...

Download the example data from here. We provide a notebook for data preprocessing.

Ideally, SOF could be trained with your own datasets with multi-view face segmentation maps. Similar to SRNs we uses an "OpenCV" style camera coordinate system, where the Y-axis points downwards (the up-vector points in the negative Y-direction), the X-axis points right, and the Z-axis points into the image plane. Camera poses are assumed to be in a "camera2world" format, i.e., they denote the matrix transform that transforms camera coordinates to world coordinates. Please specify --orthogonal during training if you're using orthogonal projection for your own data. Please also notice that you might need to change the sample_instances_* and sample_observations_* parameter according to the number of instances and views of your own dataset.

As the accuracy of camera parameters might largly affect the training, you can specify --opt_cam during training to automatically optimize the camera parameters.

Training

STEP 1: Training network parameters

The training is done following two phrases. Firstly, please train the network parameters with multiview segmaps:

python train.py --config_filepath=./configs/face_seg_real.yml 

Training might take 1 to 3 days depends on the dataset size and quality.

STEP 2 (optional): Inverse rendering

We use inverse rendering to expand the trained geometric sampling space with single view segmaps collected from CelebAMaskHQ. The example config file is provided in ./configs/face_seg_single_view.yml, notice that we set --overwrite_embeddings and --freeze_networks to True, and specify --checkpoint_path as the trained checkpoint in STEP 1. After training, you can access the corresponding latent code for each portrait by loading the checkpoint.

python train.py --config_filepath=./configs/face_seg_single_view.yml 

Similar process could be used to back project in-the-wild portrait images into a latent vector in SOF geometric sampling space, and used for mutiview portrait generation.

Pretrained Checkpoints

Please download the pre-trained checkpoint from either GoogleDrive or BaiduDisk (password: k0b8) and save to ./checkpoints.

Inference

Please follow renderer.ipynb in the SofGAN repo for free-view portrait generation.

Once trained, SOF could be used for generating free-view segmentation maps for arbitrary instances in the geometric space. The inference codes are provided in notebooks in scripts:

  • Most testing codes are included in scripts/TestAll.ipynb, e.g. generating multiview images, modify attributes, visualize depth layers and build depth prior with marching cube.
  • To generate sampling free-view portrait segmentations from the geometry space, please refer to scripts/Test_MV_Inference.ipynb.
  • To visulalize a trained SOF volume as in Fig.5, please use scripts/Test_Slicing.ipynb.
  • To calculat mIOU during SOF training (Fig.9), please modify the model checkpoint directory and run scripts/Test_mIoU.ipynb.
  • We also provide scripts/Test_GMM.ipynb for miscs like fitting GMM model to the geometric space.

Acknowledgment

Thanks vsitzmann for sharing the awesome idea of SRNs, which has greatly inspired our design of SOF.

About

Training and testing scripts for Semantic Occupancy Field.

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Semantic Occupancy Field

This repository contains the code for training/generating SOF (semantic occupancy field) as part of the TOG submission: SofGAN: A Portrait Image Generator with Dynamic Styling.

Installation

Clone the main SofGAN repo by git clone --recursive https://github.com/apchenstu/softgan_test.git. This repo will be automatically included in softgan_test/modules.

Data preparation

Create a root directory (e.g. data), and for each instance (e.g. 00000) create a folder with seg images and calibrated camera poses. The folder structure looks like:

└── data # instance id
└── 00000
│ ├── cam2world.npy # camera extrinsics
│ ├── cameras.npy │ ├── intrinsic.npy # camera intrinsics
│ ├── zRange.npy # optional only when use depth for training
│ ├── 00000.png
│ ...
│ └── 00029.png
├── 00001
│ └── ...
...
└── xxxxx
└── ...

Download the example data from here. We provide a notebook for data preprocessing.

Ideally, SOF could be trained with your own datasets with multi-view face segmentation maps. Similar to SRNs we uses an "OpenCV" style camera coordinate system, where the Y-axis points downwards (the up-vector points in the negative Y-direction), the X-axis points right, and the Z-axis points into the image plane. Camera poses are assumed to be in a "camera2world" format, i.e., they denote the matrix transform that transforms camera coordinates to world coordinates. Please specify --orthogonal during training if you're using orthogonal projection for your own data. Please also notice that you might need to change the sample_instances_* and sample_observations_* parameter according to the number of instances and views of your own dataset.

As the accuracy of camera parameters might largly affect the training, you can specify --opt_cam during training to automatically optimize the camera parameters.

Training

STEP 1: Training network parameters

The training is done following two phrases. Firstly, please train the network parameters with multiview segmaps:

python train.py --config_filepath=./configs/face_seg_real.yml 

Training might take 1 to 3 days depends on the dataset size and quality.

STEP 2 (optional): Inverse rendering

We use inverse rendering to expand the trained geometric sampling space with single view segmaps collected from CelebAMaskHQ. The example config file is provided in ./configs/face_seg_single_view.yml, notice that we set --overwrite_embeddings and --freeze_networks to True, and specify --checkpoint_path as the trained checkpoint in STEP 1. After training, you can access the corresponding latent code for each portrait by loading the checkpoint.

python train.py --config_filepath=./configs/face_seg_single_view.yml 

Similar process could be used to back project in-the-wild portrait images into a latent vector in SOF geometric sampling space, and used for mutiview portrait generation.

Pretrained Checkpoints

Please download the pre-trained checkpoint from either GoogleDrive or BaiduDisk (password: k0b8) and save to ./checkpoints.

Inference

Please follow renderer.ipynb in the SofGAN repo for free-view portrait generation.

Once trained, SOF could be used for generating free-view segmentation maps for arbitrary instances in the geometric space. The inference codes are provided in notebooks in scripts:

  • Most testing codes are included in scripts/TestAll.ipynb, e.g. generating multiview images, modify attributes, visualize depth layers and build depth prior with marching cube.
  • To generate sampling free-view portrait segmentations from the geometry space, please refer to scripts/Test_MV_Inference.ipynb.
  • To visulalize a trained SOF volume as in Fig.5, please use scripts/Test_Slicing.ipynb.
  • To calculat mIOU during SOF training (Fig.9), please modify the model checkpoint directory and run scripts/Test_mIoU.ipynb.
  • We also provide scripts/Test_GMM.ipynb for miscs like fitting GMM model to the geometric space.

Acknowledgment

Thanks vsitzmann for sharing the awesome idea of SRNs, which has greatly inspired our design of SOF.

About

Training and testing scripts for Semantic Occupancy Field.

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Semantic Occupancy Field

This repository contains the code for training/generating SOF (semantic occupancy field) as part of the TOG submission: SofGAN: A Portrait Image Generator with Dynamic Styling.

Installation

Clone the main SofGAN repo by git clone --recursive https://github.com/apchenstu/softgan_test.git. This repo will be automatically included in softgan_test/modules.

Data preparation

Create a root directory (e.g. data), and for each instance (e.g. 00000) create a folder with seg images and calibrated camera poses. The folder structure looks like:

└── data # instance id
└── 00000
│ ├── cam2world.npy # camera extrinsics
│ ├── cameras.npy │ ├── intrinsic.npy # camera intrinsics
│ ├── zRange.npy # optional only when use depth for training
│ ├── 00000.png
│ ...
│ └── 00029.png
├── 00001
│ └── ...
...
└── xxxxx
└── ...

Download the example data from here. We provide a notebook for data preprocessing.

Ideally, SOF could be trained with your own datasets with multi-view face segmentation maps. Similar to SRNs we uses an "OpenCV" style camera coordinate system, where the Y-axis points downwards (the up-vector points in the negative Y-direction), the X-axis points right, and the Z-axis points into the image plane. Camera poses are assumed to be in a "camera2world" format, i.e., they denote the matrix transform that transforms camera coordinates to world coordinates. Please specify --orthogonal during training if you're using orthogonal projection for your own data. Please also notice that you might need to change the sample_instances_* and sample_observations_* parameter according to the number of instances and views of your own dataset.

As the accuracy of camera parameters might largly affect the training, you can specify --opt_cam during training to automatically optimize the camera parameters.

Training

STEP 1: Training network parameters

The training is done following two phrases. Firstly, please train the network parameters with multiview segmaps:

python train.py --config_filepath=./configs/face_seg_real.yml 

Training might take 1 to 3 days depends on the dataset size and quality.

STEP 2 (optional): Inverse rendering

We use inverse rendering to expand the trained geometric sampling space with single view segmaps collected from CelebAMaskHQ. The example config file is provided in ./configs/face_seg_single_view.yml, notice that we set --overwrite_embeddings and --freeze_networks to True, and specify --checkpoint_path as the trained checkpoint in STEP 1. After training, you can access the corresponding latent code for each portrait by loading the checkpoint.

python train.py --config_filepath=./configs/face_seg_single_view.yml 

Similar process could be used to back project in-the-wild portrait images into a latent vector in SOF geometric sampling space, and used for mutiview portrait generation.

Pretrained Checkpoints

Please download the pre-trained checkpoint from either GoogleDrive or BaiduDisk (password: k0b8) and save to ./checkpoints.

Inference

Please follow renderer.ipynb in the SofGAN repo for free-view portrait generation.

Once trained, SOF could be used for generating free-view segmentation maps for arbitrary instances in the geometric space. The inference codes are provided in notebooks in scripts:

  • Most testing codes are included in scripts/TestAll.ipynb, e.g. generating multiview images, modify attributes, visualize depth layers and build depth prior with marching cube.
  • To generate sampling free-view portrait segmentations from the geometry space, please refer to scripts/Test_MV_Inference.ipynb.
  • To visulalize a trained SOF volume as in Fig.5, please use scripts/Test_Slicing.ipynb.
  • To calculat mIOU during SOF training (Fig.9), please modify the model checkpoint directory and run scripts/Test_mIoU.ipynb.
  • We also provide scripts/Test_GMM.ipynb for miscs like fitting GMM model to the geometric space.

Acknowledgment

Thanks vsitzmann for sharing the awesome idea of SRNs, which has greatly inspired our design of SOF.

About

Training and testing scripts for Semantic Occupancy Field.

Resources

Stars

19 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages