lllyasviel / lllyasviel/ControlNet

adding more "hint" to training process

Open
#271 15 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
34.1k
Forks
3k
PR merge metrics
No merged PRs in 30d

Description

Hi,
i was focusing with the human posture task (getting posture from openpose image + prompt and than generating the charter under the right pose - control_sd15_openpose.pth)

However, i wanted to add one more hint to force the controlnet to generate **specific** human:
so if in the original code the hint be an posture image like that :

![v2-c5e272899550ac318ed4732336fd7c82_720w](https://user-images.githubusercontent.com/64726228/224955430-f02ffbaa-6dd9-4515-850a-88bf3847cee9.png)

i would like to add more image of the specific human:

![MEN_Denim_id_00000080_0_01_7_additional](https://user-images.githubusercontent.com/64726228/224957975-d812c8ab-5d61-44e5-bcf6-02061d288ebd.jpg)

the target should be that image of that person, under the new posture

so what i did is:
1. in the dataset file: reading that extra image too, concatenate in the channel dimension, that image with the posture image so now the
source variable is 6 channels not 3

# concate source and source image
source = np.concatenate([source,source_image],axis=2)

return dict(jpg=target, txt=prompt, hint=source)

2. changing the yaml config file to support 6 channels - NOT SURE I REALLY UNDERSTATED THE MEANING OF THESE VALUES

model:
target: cldm.cldm.ControlLDM
params:
linear_start: 0.00085
linear_end: 0.0120
num_timesteps_cond: 1
log_every_t: 200
timesteps: 1000
first_stage_key: "jpg"
cond_stage_key: "txt"
control_key: "hint"
image_size: 64
**channels: was 4 i changed to 7**
cond_stage_trainable: false
conditioning_key: crossattn
monitor: val/loss_simple_ema
scale_factor: 0.18215
use_ema: False
only_mid_control: False

control_stage_config:
target: cldm.cldm.ControlNet
params:
image_size: 32 # unused
**in_channels: was 4 i changed to 7**
**hint_channels: was 3 i changed to 6**
model_channels: 320
attention_resolutions: [ 4, 2, 1 ]
num_res_blocks: 2
channel_mult: [ 1, 2, 4, 4 ]
num_heads: 8
use_spatial_transformer: True
transformer_depth: 1
context_dim: 768
use_checkpoint: True
legacy: False

unet_config:
target: cldm.cldm.ControlledUnetModel
params:
image_size: 32 # unused
**in_channels: was 4 i changed to 7**
**out_channels: was 4 i changed to 7**
model_channels: 320
attention_resolutions: [ 4, 2, 1 ]
num_res_blocks: 2
channel_mult: [ 1, 2, 4, 4 ]
num_heads: 8
use_spatial_transformer: True
transformer_depth: 1
context_dim: 768
use_checkpoint: True
legacy: False

first_stage_config:
target: ldm.models.autoencoder.AutoencoderKL
params:
**embed_dim: was 4 i changed to 7**
monitor: val/rec_loss
ddconfig:
double_z: true
**z_channels: was 4 i changed to 7**
resolution: 256
in_channels: 3
out_ch: 3
ch: 128
ch_mult:
- 1
- 2
- 4
- 4
num_res_blocks: 2
attn_resolutions: []
dropout: 0.0
lossconfig:
target: torch.nn.Identity

cond_stage_config:
target: ldm.modules.encoders.modules.FrozenCLIPEmbedder

the problem is when i trained the model from scratch - running tutorial_train.py with resume_path = None
the model predictions, the reconstruction and the samples that locate under image_log->train folder are just a noise

does anyone have any idea how to solve that ?
thanks

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with tutorial_train.py and the dataset code that builds the 6-channel hint, then compare the YAML values for ControlLDM, ControlNet, the UNet, and the autoencoder. Use the image_log-train reconstruction and sample outputs to determine whether the channel configuration is internally consistent and whether training produces non-noisy results.

Written by the indexing model from the issue text.

Assessment

Tech stack
python, pytorch
Domain
ai, machine-learning
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.