พื้นที่เก็บข้อมูลนี้มีการใช้งานอย่างเป็นทางการสำหรับรายงาน "InsertDiffusion: Identity Preserving Visualization of Objects via a Training-Free Training Diffusion Architecture"
การใช้งานรองรับโหมดการทำงานที่แตกต่างกันสองโหมด:
นอกจากนี้ การใช้งานยังเสนอตัวเลือกในการปรับสีของรูปภาพที่มีอยู่แล้วหรือที่สร้างขึ้น เมื่อไม่ได้ใช้ภาพที่มีสีอยู่แล้ว จะเพิ่มความสมจริงได้อย่างมาก
นอกจากนี้ คุณสามารถสร้างสภาพแวดล้อมใหม่ตั้งแต่เริ่มต้น (โหมดการแทนที่พื้นหลัง) หรือสามารถใช้และปรับเปลี่ยนรูปภาพที่มีอยู่แล้วได้
คุณสมบัติทั้งหมดมีให้ใช้งานจาก main.py
CLI และยังสามารถรวมเข้ากับโปรเจ็กต์ของคุณเองได้อีกด้วย หากต้องการใช้ CLI หรือโค้ด จำเป็นต้องมีสภาพแวดล้อมที่มีไฟฉาย หมอน หมีแพนด้า หม้อแปลง และเครื่องกระจายอากาศ
หากต้องการแทรกรูปภาพลงในพื้นหลังที่สร้างขึ้นใหม่ ให้ดำเนินการ:
python main.py --image " <path to your image> " --background_prompt " <your prompt> "
ตัวอย่างเช่น:
python main.py --image " ./test_images/bikes/166.png " --background_prompt " a bicycle centered in frame in munich, 8k, red gemini, 50mm, f2.8, cinematic "
แทนที่จะแสดงพร้อมท์โดยตรง คุณสามารถใช้ฟีเจอร์แสดงพร้อมท์อัตโนมัติได้โดยการให้ข้อมูลที่จำเป็น สำหรับจักรยานยนต์ คุณต้องระบุตำแหน่งที่ต้องการ ดัชนีของจักรยานยนต์ และเส้นทางไปยังเอกสารข้อมูล สำหรับรถยนต์ คุณจะต้องระบุสถานที่ใหม่ ผู้ผลิตรถยนต์ และประเภทรถยนต์ที่ต้องการ สำหรับผลิตภัณฑ์จำเป็นต้องมีสถานที่ตั้งใหม่และประเภทผลิตภัณฑ์เท่านั้น
สำหรับตัวเลือกเพิ่มเติมและการแทรกลงในพื้นหลังที่กำหนด โปรดดูเอกสาร CLI ฉบับเต็มด้านล่าง
แทนที่จะใช้ CLI คุณอาจรวมขั้นตอนไว้ในโค้ดของคุณกับฟังก์ชันหลามนี้ (ตรวจสอบให้แน่ใจอีกครั้งว่าได้ติดตั้งการอ้างอิงทั้งหมดแล้วและคัดลอกโมดูล utils ไปยังโปรเจ็กต์ของคุณ):
from utils import get_mask_from_image , sd_inpainting , sd_img2img , paste_image
def insert_diffusion ( image : Image , mask_threshold : int , prompt : str , negative_prompt : str , img2img_model : str , inpainting_model : str , img2img_strength : float , inpainting_steps : int , inpainting_guidance : float , img2img_guidance : float , background_image : Image = None , composition_strength : float = 1 ) -> Image :
mask = get_mask_from_image ( image , mask_threshold )
if background_image is not None :
image = paste_image ( image , background_image )
inpainted = sd_inpainting ( inpainting_model , image , mask , prompt , negative_prompt , inpainting_guidance , inpainting_steps , inpainting_strength = composition_strength )
result = sd_img2img ( img2img_model , inpainted , prompt , negative_prompt , img2img_strength , img2img_guidance )
return result
เราใช้วิธีการเพิ่มเติมเพื่อสร้างภาพ Biked จาก point cloud แล้วแทรกภาพเหล่านั้นลงในพื้นหลัง อย่างไรก็ตาม วิธีการนี้ใช้ได้ผลไม่ดีนัก และดังนั้นจึง ไม่ได้เป็นศูนย์กลางในการวิจัยของเรา การสร้างจากพอยต์คลาวด์ดำเนินการโดย Ioan-Daniel Craciun และอิงตาม DDPM/DDIM ที่ใช้งานและฝึกอบรมโดย Jiajae Fan
หากต้องการสร้างภาพจากพอยต์คลาวด์ ให้ลบอาร์กิวเมนต์ --image
ออกจากการโทร CLI ของคุณ ในโหมดจุดคุณจะต้องระบุเส้นทางแผ่นข้อมูลผ่าน --datasheet_path
ดังนั้นคำสั่ง CLI ขั้นต่ำจึงกลายเป็น:
python main.py --point --datasheet_path " <path to datasheet> " --background_prompt " <your prompt> "
คุณอาจใช้การแจ้งอัตโนมัติในโหมดจุด
หากต้องการรวมการสร้างจักรยานจากพอยต์คลาวด์เข้ากับโปรเจ็กต์ของคุณ ให้คัดลอกโฟลเดอร์ utils และใช้ฟังก์ชันต่อไปนี้:
from utils import get_mask_and_background
from utils import inpaint as bike_inpainting
def bike_diffusion ( parameter_csv_path : str , device : torch . device , ckpt_id : str = '29000' , mask_dilation : int = 5 , mask_fill_holes : bool = True , bike_idx : int = 0 , wheel_design_type : int = 0 , width : int = 256 , height : int = 256 ):
assert wheel_design_type == 0 or wheel_design_type == 1
mask , background = get_mask_and_background ( parameter_csv_path , bike_idx , wheel_design_type , width , height )
bike_img = bike_inpainting ( background , mask , device , 50 , ckpt_id , mask_dilation , mask_fill_holes )
return bike_img . convert ( 'RGB' )
ภาพที่ส่งคืนโดยฟังก์ชันนี้พร้อมที่จะใช้สำหรับการปรับสีหรือการแทรก
หากคุณใช้รูปภาพที่ไม่มีสี ให้เพิ่ม --colorize
ให้กับการเรียก CLI ก่อนหน้านี้ นอกจากนี้ คุณต้องระบุการแจ้งการปรับสีผ่าน --colorization_prompt
หรือใช้การแจ้งอัตโนมัติโดยระบุสีผ่าน --color
ตัวอย่างการเรียก CLI อาจเป็น:
python main.py --image " ./test_images/bike_outline/168.png " --colorize --datasheet_path " ./csv/df_parameters_final.csv " --place " beach at sunset " --color " purple " --bike_idx 5 "
อีกทางหนึ่ง หากต้องการรวมการปรับสีเข้ากับโปรเจ็กต์ของคุณ ให้คัดลอกโมดูล utils และใช้:
from utils import sd_colorization
def colorization ( image : Image , colorization_model : str , upscaling_model : str , colorization_prompt : str , colorization_negative_prompt : str , fill_holes : bool , dilation : int , strength : float , prompt_guidance : float ):
colorized = sd_colorization ( colorization_model , upscaling_model , image , colorization_prompt , negative_prompt = colorization_negative_prompt , fill_holes = fill_holes , dilation_iterations = dilation , colorization_strength = strength , prompt_guidance = prompt_guidance )
return colorized
หมายเหตุ : CLI ยังอยู่ระหว่างการก่อสร้างและอาจมีการเปลี่ยนแปลงได้
หมายเหตุ : ในกรณีที่ค่าเริ่มต้นที่เกี่ยวข้องแสดงถึงพารามิเตอร์ที่กำหนดในการทดลองของเรา แต่ค่าที่แตกต่างกันอาจเหมาะสมที่สุด ขึ้นอยู่กับกรณีการใช้งานเฉพาะ
การโต้แย้ง | พิมพ์ | คำอธิบาย |
---|---|---|
--ภาพ | เชือก | เส้นทางไปยังรูปภาพที่จะเริ่มต้น ไม่รวมกันด้วย --points |
--คะแนน | เมื่อใช้พอยต์ อัลกอริธึมจะทำงานในโหมดพอยต์คลาวด์ และสร้างโครงร่างจักรยานจากพอยต์คลาวด์ก่อน โดยจะไม่เกิดร่วมกันกับ --image | |
--mask_threshold | ภายใน | สำหรับการวาดภาพ เกณฑ์ในการแยกแยะพื้นหลังสีขาวจากพื้นหน้าที่มีสี |
--พื้นหลัง_พร้อมท์ | เชือก | พรอมต์สำหรับการสร้างพื้นหลัง |
--negative_prompt | เชือก | พรอมต์เชิงลบสำหรับการสร้างพื้นหลัง |
--พื้นหลัง_รูปภาพ | เชือก | สตริงเป็นภาพพื้นหลังที่จะใช้เป็นจุดเริ่มต้น จะเกี่ยวข้องเฉพาะในกรณีที่ --composition ความแรงขององค์ประกอบตั้งค่าเป็นค่าที่น้อยกว่า 1 |
--composition_strength | ลอย | กำหนดว่าจะต้องเปลี่ยนภาพพื้นหลังจุดเริ่มต้นมากน้อยเพียงใด ใช้เฉพาะ --ground_image เท่านั้นที่ตั้งไว้ ช่วง 0-1 |
--auto_bike_prompt | หากการตั้งค่าพรอมต์จะถูกสร้างขึ้นโดยอัตโนมัติโดยใช้เทมเพลตสำหรับจักรยาน ต้องมีการตั้งค่า --place, --datasheet_path และ --bike_idx | |
--auto_car_prompt | หากการตั้งค่าพรอมต์จะถูกสร้างขึ้นโดยอัตโนมัติโดยใช้เทมเพลตสำหรับรถยนต์ จะต้องตั้งค่า --place, --car_manufacturer และ --car_type | |
--auto_product | หากพรอมต์การตั้งค่าจะถูกสร้างขึ้นโดยอัตโนมัติโดยใช้เทมเพลตสำหรับผลิตภัณฑ์ กำหนดให้ตั้งค่า --place และ --product_type | |
--สถานที่ | เชือก | คำอธิบายตำแหน่งที่จะแทรกออบเจ็กต์ ใช้เฉพาะในกรณีที่ใช้เทมเพลตพร้อมท์อัตโนมัติรายการใดรายการหนึ่ง |
--สี | เชือก | ถ้าใช้ระบบ autoprompting จักรยานจะมีสีอะไร |
--datasheet_path | เชือก | หากใช้การแจ้งอัตโนมัติสำหรับจักรยาน ให้พาธไปยังเอกสารข้อมูลเพื่อค้นหาประเภทจักรยาน |
--bike_idx | ภายใน | หากใช้การแจ้งอัตโนมัติสำหรับจักรยาน ให้จัดทำดัชนีในเอกสารข้อมูลเพื่อค้นหาประเภทจักรยาน |
--car_manufacturer | เชือก | หากใช้การแจ้งอัตโนมัติสำหรับรถยนต์ ผู้ผลิตรถยนต์ เช่น BMW |
--car_type | เชือก | หากใช้การแจ้งอัตโนมัติสำหรับรถยนต์ ให้พิมพ์ประเภทของรถ เช่น SUV หรือ X5 |
--product_type | เชือก | หากใช้การแจ้งอัตโนมัติสำหรับผลิตภัณฑ์ ให้ระบุประเภทของผลิตภัณฑ์ เช่น หลอดไฟ |
--inpainting_model | เชือก | รุ่นใดที่จะใช้สำหรับการสร้างพื้นหลัง (huggingface id) |
--img2img_model.--img2img_model | เชือก | รุ่นใดที่จะใช้สำหรับขั้นตอนการทำซ้ำ (huggingface id) |
--img2img_strength | ลอย | ภาพต้นฉบับมีสัญญาณรบกวนในการกระจายซ้ำมากน้อยเพียงใด |
--inpainting_steps | ภายใน | ต้องกระจายขั้นตอนในการลงสีกี่ขั้นตอน |
--inpainting_guidance | ลอย | ต้องใช้คำแนะนำแบบไม่มีตัวแยกประเภทเท่าใดในการวาดภาพ |
--img2img_guidance | ลอย | ต้องใช้คำแนะนำแบบไม่มีตัวแยกประเภทเท่าใดในการกระจายซ้ำ |
--output_folder | เชือก | เส้นทางไปยังโฟลเดอร์ที่ควรบันทึกภาพที่ส่งออก |
--สี | ว่าจะปรับสีภาพก่อนลงสีหรือไม่ | |
--colorization_model | เชือก | ว่าจะใช้รุ่นไหนลงสี (huggingface id) |
--upscaling_model | เชือก | ว่าจะใช้รุ่นไหนในการอัปสเกล จำเป็นสำหรับการปรับสี (huggingface id) |
--colorization_prompt | เชือก | พร้อมท์สำหรับการปรับสี ไม่จำเป็นคือ datasheet_path และสีที่ให้มา |
--colorization_negative_prompt | เชือก | พรอมต์เชิงลบสำหรับการเปลี่ยนสี |
--do_not_fill_holes | สลับการเติมรูสำหรับมาสก์การระบายสี ซึ่งเกี่ยวข้องเฉพาะเมื่อทำการระบายสีเท่านั้น | |
--การขยาย | ภายใน | ต้องขยายมาสก์สำหรับการปรับสีมากน้อยเพียงใด เกี่ยวข้องเฉพาะเมื่อทำการระบายสีเท่านั้น |
--colorization_strength | ลอย | ต้องใช้การแพร่กระจายเท่าใดในการทำให้สี เกี่ยวข้องเฉพาะเมื่อทำสีเท่านั้น |
--colorization_prompt_guidance | ลอย | จำนวนคำแนะนำที่ไม่มีตัวแยกประเภทที่จะใช้ในระหว่างการใส่สี จะเกี่ยวข้องเฉพาะเมื่อให้สีเท่านั้น |
--มาตราส่วน | ลอย | จะต้องลดหรือเพิ่มขนาดจักรยานเท่าใด ค่าที่สูงขึ้นส่งผลให้จักรยานใช้พื้นที่ในเฟรมมากขึ้น ค่าเริ่มต้นคือ 1 |
--fraction_down | ลอย | ตำแหน่ง y สัมพัทธ์ของจักรยาน (ศูนย์กลางของ) ค่าที่สูงกว่าจะทำให้จักรยานอยู่ใกล้กับขอบล่างของภาพ ค่าเริ่มต้นคือ 0.5 (กึ่งกลาง) |
--fraction_right | ลอย | ตำแหน่ง x สัมพัทธ์ของจักรยาน (ศูนย์กลางของ) ค่าที่สูงกว่าจะทำให้จักรยานใกล้กับขอบด้านขวาของภาพมากขึ้น ค่าเริ่มต้นคือ 0.5 (กึ่งกลาง) |
--ckpt_id | เชือก | id ของจุดตรวจที่จะใช้สำหรับการสร้างโครงร่างจักรยานจาก point cloud ซึ่งเกี่ยวข้องเฉพาะในโหมด point เท่านั้น |
--bike_mask_dilator | ภายใน | จะต้องขยายมาสก์ที่สร้างจากพอยต์คลาวด์มากน้อยเพียงใด ซึ่งเกี่ยวข้องเฉพาะในโหมดพอยต์เท่านั้น |
--do_not_fill_bike_holes | ไม่ว่าจะใช้การเติมรูกับหน้ากากจักรยานหรือไม่ จะเกี่ยวข้องเฉพาะในโหมดจุดเท่านั้น | |
--wheel_design | ภายใน | การออกแบบล้อใดที่จะใช้สำหรับการสร้างโครงร่างจักรยาน ปัจจุบันใช้เพียง 0 และ 1 เท่านั้น เกี่ยวข้องเฉพาะในโหมดจุดเท่านั้น |
สคริปต์เพิ่มเติม interactive.py
จัดให้มีการใช้งานเพื่อสร้างภาพเชิงโต้ตอบในรูปแบบ Human-in-the-Loop ซึ่งหมายความว่าในแต่ละขั้นตอนจะมีการสร้างตัวเลือก 5 รายการพร้อมกัน และผู้ใช้จะถูกขอให้เลือกตัวเลือกที่ดีที่สุด จากนั้นจะใช้เฉพาะรูปภาพที่เลือกสำหรับขั้นตอนต่อไป
สคริปต์ไม่ยอมรับอาร์กิวเมนต์ CLI เพิ่มเติม ผู้ใช้จะได้รับแจ้งให้ตัดสินใจทั้งหมด
หากต้องการทำงานในโหมดโต้ตอบให้ดำเนินการ:
python interactive.py
รหัสการประเมินที่ใช้หรือเอกสารของเราสามารถพบได้ภายใต้ . ./evaluation
ประเมิน โปรดทราบว่าการวัดเชิงปริมาณคำนวณโดยใช้คำสั่ง CLI ต่อไปนี้:
python evaluate.py --exp_name " <experiment name> " --gen_file_path " <path to generated images> " --ref_file_path " <path to reference files> " --masks_path " <only used for composition, path to masks> "
หน่วยเมตริกการประเมินโดยมนุษย์และสถิติเชิงอนุมานถูกคำนวณโดยใช้สมุดบันทึกที่ให้มา
หากพบว่างานของเรามีประโยชน์และต้องการใช้สำหรับการวิจัยหรือโครงการของคุณ โปรดอ้างอิงบทความดังต่อไปนี้:
@misc { 2407.10592 ,
Author = { Phillip Mueller and Jannik Wiese and Ioan Craciun and Lars Mikelsons } ,
Title = { InsertDiffusion: Identity Preserving Visualization of Objects through a Training-Free Diffusion Architecture } ,
Year = { 2024 } ,
Eprint = { arXiv:2407.10592 } ,
}