Anthony Chen 1,2 · Jianjin Xu 3 · Wenzhao Zheng 4 · Gaole Dai 1 · Yida Wang 5 · Renrui Zhang 6 · Haofan Wang 2 · Shanghang Zhang 1*
1 북경 대학교 · 2 InstantX 팀 · 3 카네기 멜론 대학교 · 4 UC Berkeley · 5 Li Auto Inc. · 6 CUHK
확산 변환기를 위한 교육이 필요 없는 지역 프롬프트(Regional-Prompting-FLUX)를 사용하면 교육이 필요 없는 방식으로 구조화된 구성 텍스트-이미지 생성 기능을 갖춘 확산 변환기(예: FLUX)를 사용할 수 있습니다. 경험적으로 우리는 우리의 방법이 매우 효과적이며 LoRA 및 ControlNet과 호환된다는 것을 보여줍니다.
RPG 기반 구현보다 훨씬 빠른 속도로 추론하면서도 GPU 메모리를 덜 차지합니다.
[2024/11/05] 코드를 공개합니다. 마음껏 사용해 보세요!
[2024/11/05] 기술보고서를 공개합니다!
지역 마스크 | 구성 | 생성된 결과 |
---|---|---|
빨간색: 칵테일 지역(xyxy: [450, 560, 960, 900]) 녹색: 테이블 영역(xyxy: [320, 900, 1280, 1280]) 파란색: 배경 | 기본 프롬프트: "해가 질 때 해변의 나무 테이블 위에 놓인 열대 칵테일입니다." 배경 프롬프트: "사진" 지역 프롬프트:
| |
빨간색: 무지개 영역(xyxy: [0, 0, 1280, 256]) 녹색: 선박 지역(xyxy: [0, 256, 1280, 520]) 노란색: 물고기 지역(xyxy: [0, 520, 640, 768]) 파란색: 보물 지역(xyxy: [640, 520, 1280, 768]) | 기본 프롬프트: "장엄한 배는 무지개 아래로 항해하고, 생기 넘치는 해양 생물은 수정같은 바다 아래를 미끄러져 자연의 경이로움을 구현하며, 고대의 녹슨 보물 상자는 해저에 숨겨져 있습니다." 지역 프롬프트:
| |
빨간색: 횃불 영역을 가진 여성(xyxy: [128, 128, 640, 768]) 녹색: 배경 | 기본 프롬프트: "고대 여인이 타오르는 횃불을 들고 엄숙하게 서 있고, 그 배경에는 치열한 전투가 벌어지고 있으며, 역사적 전쟁 장면의 힘과 비극을 모두 포착합니다." 배경 프롬프트: "사진." 지역 프롬프트:
| |
빨간색: 개 영역(assets/demo_custom_0_mask_0.png) 녹색: 고양이 영역(assets/demo_custom_0_mask_1.png) 파란색: 배경 | 기본 프롬프트: "개와 고양이가 햇볕이 잘 드는 야외 환경에서 푸른 풀밭에 앉아 있습니다." 배경 프롬프트: "사진" 지역 프롬프트:
| 참고: 분할 마스크를 사용한 생성은 실험적 기능입니다. 생성된 이미지는 영역에 의해 완벽하게 제한되지 않습니다. 이는 다운샘플링 프로세스 중에 마스크가 저하되기 때문이라고 가정합니다. |
지역 마스크 | 구성 | 생성된 결과 |
---|---|---|
빨간색: 공룡 지역(xyxy: [0, 0, 640, 1280]) 파란색: 도시 지역(xyxy: [640, 0, 1280, 1280]) | 기본 프롬프트: "스케치 스타일: 쾌활한 장면에서 만화 도시 위로 작은 불 퍼프를 장난스럽게 불고 있는 귀여운 공룡." 지역 프롬프트:
| |
빨간색: UFO 영역(xyxy: [320, 320, 640, 640]) | 기본 프롬프트: "화창한 도시 거리 위에 떠 있는 귀여운 만화 스타일의 UFO, 예술적인 스타일이 현실과 일러스트레이션 요소를 혼합합니다." 배경 프롬프트: "사진" 지역 프롬프트:
|
지역 마스크 | 구성 | 생성된 결과 |
---|---|---|
빨간색: 첫 번째 자동차 지역(xyxy: [0, 0, 426, 968]) 녹색: 2차 자동차 영역(xyxy: [426, 0, 853, 968]) 파란색: 세 번째 자동차 지역(xyxy: [853, 0, 1280, 968]) | 기본 프롬프트: "빨강, 파랑, 노랑 세 대의 고성능 스포츠카가 도시의 거리를 나란히 질주하고 있습니다." 지역 프롬프트:
| |
빨간색: 여성 영역(xyxy: [0, 0, 640, 968]) 녹색: 해변 지역(xyxy: [640, 0, 1280, 968]) | 기본 프롬프트: "풍경이 아름다운 해안 풍경을 감상하며 아름다운 해변을 걷고 있는 여자." 지역 프롬프트:
|
새로운 디퓨저 버전에서는 다른 결과가 나타날 수 있으므로 재현성을 보장하기 위해 디퓨저 저장소의 이전 커밋을 사용합니다.
# install diffusers locally git clone https://github.com/huggingface/diffusers.git cd diffusers # reset diffusers version to 0.31.dev, where we developed Regional-Prompting-FLUX on, different version may experience different results git reset --hard d13b0d63c0208f2c4c078c4261caf8bf587beb3b pip install -e ".[torch]" cd .. # install other dependencies pip install -U transformers sentencepiece protobuf PEFT # clone this repo git clone https://github.com/antonioo-c/Regional-Prompting-FLUX.git # replace file in diffusers cd Regional-Prompting-FLUX cp transformer_flux.py ../diffusers/src/diffusers/models/transformers/transformer_flux.py
infer_flux_regional.py에서 자세한 예제(LoRA 및 ControlNet 포함)를 참조하세요. 다음은 빠른 시작 예시입니다.
import torchfrom Pipeline_flux_regional import RegionalFluxPipeline, RegionalFluxAttnProcessor2_0pipeline = RegionalFluxPipeline.from_pretrained("black-forest-labs/FLUX.1-dev", torch_dtype=torch.bfloat16).to("cuda")attn_procs = {}pipeline.transformer의 이름입니다. attn_processors.keys():if 이름 및 이름의 'transformer_blocks'.endswith("attn.processor"):attn_procs[name] = RegionalFluxAttnProcessor2_0()else:attn_procs[name] = Pipeline.transformer.attn_processors[name]pipeline.transformer.set_attn_processor(attn_procs)## 일반 설정image_width = 1280image_height = 768num_inference_steps = 24seed = 124base_prompt = "고대 여인이 타오르는 횃불을 들고 장엄하게 서 있고, 그 배경에는 치열한 전투가 벌어지고 있어 역사적 전쟁 장면의 강인함과 비극을 동시에 포착합니다." background_prompt = "사진" # 기본으로 설정되어 있지만, 배경을 풍부하게 하고 싶다면 좀 더 설명적인 프롬프트로 설정할 수 있습니다.regional_prompt_mask_pairs = {"0": {"description": "고대 예복을 입은 위엄 있는 여성이 전경에 서 있고, 그녀의 얼굴은 그녀가 높이 들고 있는 횃불에 의해 조명됩니다. 그녀의 표정은 결단력과 슬픔의 표정이며, 그녀의 옷과 외모는 역사적 시대를 반영합니다. 횃불은 그녀의 얼굴에 극적인 그림자를 드리우고, 그 불꽃은 어둠에 맞서 활기차게 춤을 추고 있습니다.","mask": [128, 128, 640, 768] } }## 지역 제어 요소 settingsmask_inject_steps = 10 # 클수록 더 강력한 제어를 의미하며, 5-10 사이 권장 double_inject_blocks_interval = 1 # 1은 가장 강력한 제어를 의미합니다.single_inject_blocks_interval = 1 # 1은 가장 강력함을 의미합니다. torch.ones((image_height, image_width))for Region_idx, 지역_prompt_mask_pairs.items()의 지역:description = 지역['description']mask = 지역['mask']x1, y1, x2, y2 = 마스크마스크 = torch.zeros ((이미지 높이, 이미지 너비))마스크[y1:y2, x1:x2] = 1.0배경_마스크 -= 마스크regional_prompts.append(description)regional_masks.append(mask)# 지역 마스크가 전체 이미지를 덮지 않는 경우 배경 프롬프트 및 마스크를 추가합니다.if background_mask.sum() > 0:regional_prompts.append(Background_prompt)regional_masks.append (배경_마스크)이미지 = 파이프라인(프롬프트=베이스_프롬프트,폭=이미지_폭, height=image_height,mask_inject_steps=mask_inject_steps,num_inference_steps=num_inference_steps,generator=torch.Generator("cuda").manual_seed(seed),joint_attention_kwargs={"regional_prompts": Regional_prompts,"regional_masks": Regional_masks,"double_inject_blocks_interval": double_inject_blocks_interval,"single_inject_blocks_interval": Single_inject_blocks_interval,"base_ratio": base_ratio}, ).images[0]image.save(f"output.jpg")
우리 작업은 HuggingFace와 fal.ai의 후원을 받습니다. 감사해요!
Regional-Prompting-FLUX가 귀하의 연구 및 응용에 유용하다고 생각되면 다음 BibTeX를 사용하여 우리를 인용해 주십시오:
@article{chen2024training, title={확산 변압기를 위한 훈련이 필요 없는 지역 프롬프트}, 저자={Chen, Anthony 및 Xu, Jianjin 및 Zheng, Wenzhao 및 Dai, Gaole 및 Wang, Yida 및 Zhang, Renrui 및 Wang, Haofan 및 Zhang , Shanghang}, 저널={arXiv preprint arXiv:2411.02395}, 연도={2024}}
질문이 있으시면 [email protected]을 통해 언제든지 문의해 주세요.