Every pipeline has a __call__
method which keeps them can call themselves as a function. But I can’t find __call__
method in class DiffusionPipeline
.
I read DiffusionPipeline code and find nothing about __call__
method in this link:
DiffusionPipeline
Why?
In this link train_dreambooth.py
you can see that DiffusionPipeline do used call function, so that it can make a inference.
May someone can teach me about this, thanks a lot.
PS:sorry for my poor English
If you use the from_pretrained
method of the DiffusionPipeline
like this:
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0")
The resulting pipe
is not only an instance of the DiffusionPipeline
class but also, in this case, an instance of the StableDiffusionXLPipeline
class. You can verify this as follows:
from diffusers import StableDiffusionXLPipeline
isinstance(pipe, DiffusionPipeline) and isinstance(pipe, StableDiffusionXLPipeline)
Output:
True
This method internally instantiates an object of the StableDiffusionXLPipeline
class, and similar to other pipelines, this class defines a __call__
method.
Please be aware that the DiffusionPipeline
lacks also an __init__
method. Therefore, you cannot perform the following action to instantiate and use an object of only the DiffusionPipeline
class:
pipe = DiffusionPipeline(...)
Instead, you are required to use the from_pretrained
method, which returns an object from a class that defines a __call__
method.
I hope this was helpful, and fingers crossed I didn’t write any inaccuracies!
OK,thanks a lot! That’s really helpful!