Skip to content

Commit

Permalink
Merge pull request #342 from mrhan1993:dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
mrhan1993 authored May 28, 2024
2 parents d59fdc4 + 122f16c commit 4d4c863
Show file tree
Hide file tree
Showing 39 changed files with 1,113 additions and 249 deletions.
2 changes: 1 addition & 1 deletion fooocus_api_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
version = '0.4.0.7'
version = '0.4.1.0'
1 change: 1 addition & 0 deletions fooocusapi/models/common/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class PerformanceSelection(str, Enum):
quality = 'Quality'
extreme_speed = 'Extreme Speed'
lightning = 'Lightning'
hyper_sd = 'Hyper-SD'


class Lora(BaseModel):
Expand Down
2 changes: 2 additions & 0 deletions fooocusapi/models/common/image_meta.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class ImageMeta(BaseModel):
guidance_scale: float
sharpness: float
steps: int
vae_name: str

version: str = version

Expand Down Expand Up @@ -101,6 +102,7 @@ def image_parse(
guidance_scale=req_param.guidance_scale,
sharpness=req_param.sharpness,
steps=-1,
vae_name=req_param.advanced_params.vae_name,
version=version
)
if meta.metadata_scheme not in ["fooocus", "a111"]:
Expand Down
9 changes: 8 additions & 1 deletion fooocusapi/models/common/requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,13 @@
default_inpaint_engine_version,
default_overwrite_switch,
default_cfg_tsnr,
default_sample_sharpness
default_sample_sharpness,
default_vae,
default_clip_skip
)

from modules.flags import clip_skip_max

from fooocusapi.models.common.base import (
PerformanceSelection,
Lora,
Expand All @@ -50,6 +54,7 @@ class AdvancedParams(BaseModel):
adm_scaler_negative: float = Field(0.8, description="Negative ADM Guidance Scaler", ge=0.1, le=3.0)
adm_scaler_end: float = Field(0.3, description="ADM Guidance End At Step", ge=0.0, le=1.0)
adaptive_cfg: float = Field(default_cfg_tsnr, description="CFG Mimicking from TSNR", ge=1.0, le=30.0)
clip_skip: int = Field(default_clip_skip, description="Clip Skip", ge=1, le=clip_skip_max)
sampler_name: str = Field(default_sampler, description="Sampler")
scheduler_name: str = Field(default_scheduler, description="Scheduler")
overwrite_step: int = Field(default_overwrite_step, description="Forced Overwrite of Sampling Step", ge=-1, le=200)
Expand Down Expand Up @@ -79,6 +84,8 @@ class AdvancedParams(BaseModel):
inpaint_mask_upload_checkbox: bool = Field(False, description="Upload Mask")
invert_mask_checkbox: bool = Field(False, description="Invert Mask")
inpaint_erode_or_dilate: int = Field(0, description="Mask Erode or Dilate", ge=-64, le=64)
black_out_nsfw: bool = Field(False, description="Block out NSFW")
vae_name: str = Field(default_vae, description="VAE name")


class CommonRequest(BaseModel):
Expand Down
114 changes: 84 additions & 30 deletions fooocusapi/worker.py

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions repositories/Fooocus/args_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@
args_parser.parser.add_argument("--disable-preset-download", action='store_true',
help="Disables downloading models for presets", default=False)

args_parser.parser.add_argument("--enable-describe-uov-image", action='store_true',
help="Disables automatic description of uov images when prompt is empty", default=False)

args_parser.parser.add_argument("--always-download-new-model", action='store_true',
help="Always download newer models ", default=False)

Expand Down
60 changes: 60 additions & 0 deletions repositories/Fooocus/extras/censor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import os

import numpy as np
import torch
from transformers import CLIPConfig, CLIPImageProcessor

import ldm_patched.modules.model_management as model_management
import modules.config
from extras.safety_checker.models.safety_checker import StableDiffusionSafetyChecker
from ldm_patched.modules.model_patcher import ModelPatcher

safety_checker_repo_root = os.path.join(os.path.dirname(__file__), 'safety_checker')
config_path = os.path.join(safety_checker_repo_root, "configs", "config.json")
preprocessor_config_path = os.path.join(safety_checker_repo_root, "configs", "preprocessor_config.json")


class Censor:
def __init__(self):
self.safety_checker_model: ModelPatcher | None = None
self.clip_image_processor: CLIPImageProcessor | None = None
self.load_device = torch.device('cpu')
self.offload_device = torch.device('cpu')

def init(self):
if self.safety_checker_model is None and self.clip_image_processor is None:
safety_checker_model = modules.config.downloading_safety_checker_model()
self.clip_image_processor = CLIPImageProcessor.from_json_file(preprocessor_config_path)
clip_config = CLIPConfig.from_json_file(config_path)
model = StableDiffusionSafetyChecker.from_pretrained(safety_checker_model, config=clip_config)
model.eval()

self.load_device = model_management.text_encoder_device()
self.offload_device = model_management.text_encoder_offload_device()

model.to(self.offload_device)

self.safety_checker_model = ModelPatcher(model, load_device=self.load_device, offload_device=self.offload_device)

def censor(self, images: list | np.ndarray) -> list | np.ndarray:
self.init()
model_management.load_model_gpu(self.safety_checker_model)

single = False
if not isinstance(images, list) or isinstance(images, np.ndarray):
images = [images]
single = True

safety_checker_input = self.clip_image_processor(images, return_tensors="pt")
safety_checker_input.to(device=self.load_device)
checked_images, has_nsfw_concept = self.safety_checker_model.model(images=images,
clip_input=safety_checker_input.pixel_values)
checked_images = [image.astype(np.uint8) for image in checked_images]

if single:
checked_images = checked_images[0]

return checked_images


default_censor = Censor().censor
171 changes: 171 additions & 0 deletions repositories/Fooocus/extras/safety_checker/configs/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
{
"_name_or_path": "clip-vit-large-patch14/",
"architectures": [
"SafetyChecker"
],
"initializer_factor": 1.0,
"logit_scale_init_value": 2.6592,
"model_type": "clip",
"projection_dim": 768,
"text_config": {
"_name_or_path": "",
"add_cross_attention": false,
"architectures": null,
"attention_dropout": 0.0,
"bad_words_ids": null,
"bos_token_id": 0,
"chunk_size_feed_forward": 0,
"cross_attention_hidden_size": null,
"decoder_start_token_id": null,
"diversity_penalty": 0.0,
"do_sample": false,
"dropout": 0.0,
"early_stopping": false,
"encoder_no_repeat_ngram_size": 0,
"eos_token_id": 2,
"exponential_decay_length_penalty": null,
"finetuning_task": null,
"forced_bos_token_id": null,
"forced_eos_token_id": null,
"hidden_act": "quick_gelu",
"hidden_size": 768,
"id2label": {
"0": "LABEL_0",
"1": "LABEL_1"
},
"initializer_factor": 1.0,
"initializer_range": 0.02,
"intermediate_size": 3072,
"is_decoder": false,
"is_encoder_decoder": false,
"label2id": {
"LABEL_0": 0,
"LABEL_1": 1
},
"layer_norm_eps": 1e-05,
"length_penalty": 1.0,
"max_length": 20,
"max_position_embeddings": 77,
"min_length": 0,
"model_type": "clip_text_model",
"no_repeat_ngram_size": 0,
"num_attention_heads": 12,
"num_beam_groups": 1,
"num_beams": 1,
"num_hidden_layers": 12,
"num_return_sequences": 1,
"output_attentions": false,
"output_hidden_states": false,
"output_scores": false,
"pad_token_id": 1,
"prefix": null,
"problem_type": null,
"pruned_heads": {},
"remove_invalid_values": false,
"repetition_penalty": 1.0,
"return_dict": true,
"return_dict_in_generate": false,
"sep_token_id": null,
"task_specific_params": null,
"temperature": 1.0,
"tie_encoder_decoder": false,
"tie_word_embeddings": true,
"tokenizer_class": null,
"top_k": 50,
"top_p": 1.0,
"torch_dtype": null,
"torchscript": false,
"transformers_version": "4.21.0.dev0",
"typical_p": 1.0,
"use_bfloat16": false,
"vocab_size": 49408
},
"text_config_dict": {
"hidden_size": 768,
"intermediate_size": 3072,
"num_attention_heads": 12,
"num_hidden_layers": 12
},
"torch_dtype": "float32",
"transformers_version": null,
"vision_config": {
"_name_or_path": "",
"add_cross_attention": false,
"architectures": null,
"attention_dropout": 0.0,
"bad_words_ids": null,
"bos_token_id": null,
"chunk_size_feed_forward": 0,
"cross_attention_hidden_size": null,
"decoder_start_token_id": null,
"diversity_penalty": 0.0,
"do_sample": false,
"dropout": 0.0,
"early_stopping": false,
"encoder_no_repeat_ngram_size": 0,
"eos_token_id": null,
"exponential_decay_length_penalty": null,
"finetuning_task": null,
"forced_bos_token_id": null,
"forced_eos_token_id": null,
"hidden_act": "quick_gelu",
"hidden_size": 1024,
"id2label": {
"0": "LABEL_0",
"1": "LABEL_1"
},
"image_size": 224,
"initializer_factor": 1.0,
"initializer_range": 0.02,
"intermediate_size": 4096,
"is_decoder": false,
"is_encoder_decoder": false,
"label2id": {
"LABEL_0": 0,
"LABEL_1": 1
},
"layer_norm_eps": 1e-05,
"length_penalty": 1.0,
"max_length": 20,
"min_length": 0,
"model_type": "clip_vision_model",
"no_repeat_ngram_size": 0,
"num_attention_heads": 16,
"num_beam_groups": 1,
"num_beams": 1,
"num_hidden_layers": 24,
"num_return_sequences": 1,
"output_attentions": false,
"output_hidden_states": false,
"output_scores": false,
"pad_token_id": null,
"patch_size": 14,
"prefix": null,
"problem_type": null,
"pruned_heads": {},
"remove_invalid_values": false,
"repetition_penalty": 1.0,
"return_dict": true,
"return_dict_in_generate": false,
"sep_token_id": null,
"task_specific_params": null,
"temperature": 1.0,
"tie_encoder_decoder": false,
"tie_word_embeddings": true,
"tokenizer_class": null,
"top_k": 50,
"top_p": 1.0,
"torch_dtype": null,
"torchscript": false,
"transformers_version": "4.21.0.dev0",
"typical_p": 1.0,
"use_bfloat16": false
},
"vision_config_dict": {
"hidden_size": 1024,
"intermediate_size": 4096,
"num_attention_heads": 16,
"num_hidden_layers": 24,
"patch_size": 14
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"crop_size": 224,
"do_center_crop": true,
"do_convert_rgb": true,
"do_normalize": true,
"do_resize": true,
"feature_extractor_type": "CLIPFeatureExtractor",
"image_mean": [
0.48145466,
0.4578275,
0.40821073
],
"image_std": [
0.26862954,
0.26130258,
0.27577711
],
"resample": 3,
"size": 224
}
Loading

0 comments on commit 4d4c863

Please sign in to comment.