Skip to content

Commit a6b4691

Browse files
authored
[NEW Features] feature_extraction and processor support from_pretrained (#3453)
* update * add import
1 parent a3e92bb commit a6b4691

File tree

8 files changed

+463
-42
lines changed

8 files changed

+463
-42
lines changed

paddlenlp/transformers/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
from .model_utils import PretrainedModel, register_base_model
1616
from .tokenizer_utils import PretrainedTokenizer, BPETokenizer, tokenize_chinese_chars, is_chinese_char, AddedToken, normalize_chars, tokenize_special_chars, convert_to_unicode
17+
from .processing_utils import ProcessorMixin
18+
from .feature_extraction_utils import BatchFeature, FeatureExtractionMixin
1719
from .attention_utils import create_bigbird_rand_mask_idx_list
1820
from .export import export_model
1921

@@ -104,7 +106,7 @@
104106
from .unified_transformer.modeling import *
105107
from .unified_transformer.tokenizer import *
106108
from .ernie_vil.modeling import *
107-
from .ernie_vil.procesing import *
109+
from .ernie_vil.feature_extraction import *
108110
from .ernie_vil.tokenizer import *
109111
from .ernie_vil.procesing import *
110112
from .unimo.modeling import *

paddlenlp/transformers/clip/feature_extraction.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
import numpy as np
2121
import PIL.Image
2222
from PIL import Image
23-
from ..feature_extraction_utils import BatchFeature
23+
24+
from ..feature_extraction_utils import BatchFeature, FeatureExtractionMixin
25+
2426
from ..tokenizer_utils_base import TensorType
2527
from ..image_utils import ImageFeatureExtractionMixin
2628

@@ -34,7 +36,10 @@
3436
__all__ = ["CLIPFeatureExtractor"]
3537

3638

37-
class CLIPFeatureExtractor(ImageFeatureExtractionMixin):
39+
class CLIPFeatureExtractor(
40+
FeatureExtractionMixin,
41+
ImageFeatureExtractionMixin,
42+
):
3843
r"""
3944
Constructs a CLIP feature extractor.
4045
This feature extractor inherits from [`ImageFeatureExtractionMixin`] which contains most of the main methods. Users

paddlenlp/transformers/clip/modeling.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,6 +1119,12 @@ def __init__(self,
11191119
normalize_before=True)
11201120
self.apply(self._init_weights)
11211121

1122+
def get_input_embeddings(self) -> nn.Layer:
1123+
return self.text_model.token_embedding
1124+
1125+
def set_input_embeddings(self, value):
1126+
self.text_model.token_embedding = value
1127+
11221128
def forward(
11231129
self,
11241130
input_ids=None,
@@ -1262,6 +1268,9 @@ def __init__(self,
12621268

12631269
self.apply(self._init_weights)
12641270

1271+
def get_input_embeddings(self) -> nn.Layer:
1272+
return self.vision_model.conv1
1273+
12651274
def forward(
12661275
self,
12671276
pixel_values=None,

paddlenlp/transformers/clip/procesing.py

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,12 @@
1717
"""
1818

1919
from ..tokenizer_utils_base import BatchEncoding
20-
from .tokenizer import CLIPTokenizer
21-
from .feature_extraction import CLIPFeatureExtractor
20+
from ..processing_utils import ProcessorMixin
2221

2322
__all__ = ["CLIPProcessor"]
2423

2524

26-
class CLIPProcessor(object):
25+
class CLIPProcessor(ProcessorMixin):
2726
r"""
2827
Constructs a CLIP processor which wraps a CLIP feature extractor and a CLIP tokenizer into a single processor.
2928
[`CLIPProcessor`] offers all the functionalities of [`CLIPFeatureExtractor`] and [`CLIPTokenizer`]. See the
@@ -34,11 +33,12 @@ class CLIPProcessor(object):
3433
tokenizer ([`CLIPTokenizer`]):
3534
The tokenizer is a required input.
3635
"""
36+
feature_extractor_class = "CLIPFeatureExtractor"
37+
tokenizer_class = "CLIPTokenizer"
3738

3839
def __init__(self, feature_extractor, tokenizer):
39-
super().__init__()
40-
self.tokenizer = tokenizer
41-
self.feature_extractor = feature_extractor
40+
super().__init__(feature_extractor, tokenizer)
41+
self.current_processor = self.feature_extractor
4242

4343
def __call__(self, text=None, images=None, return_tensors=None, **kwargs):
4444
"""
@@ -105,15 +105,3 @@ def decode(self, *args, **kwargs):
105105
the docstring of this method for more information.
106106
"""
107107
return self.tokenizer.decode(*args, **kwargs)
108-
109-
# TODO junnyu find a better way from_pretrained and save_pretrained
110-
@classmethod
111-
def from_pretrained(cls, pretrained_model_name_or_path, *args, **kwargs):
112-
tokenizer = CLIPTokenizer.from_pretrained(pretrained_model_name_or_path,
113-
*args, **kwargs)
114-
feature_extractor = CLIPFeatureExtractor()
115-
return cls(feature_extractor, tokenizer)
116-
117-
def save_pretrained(self, save_directory, filename_prefix=None, **kwargs):
118-
return self.tokenizer.save_pretrained(save_directory, filename_prefix,
119-
**kwargs)

paddlenlp/transformers/ernie_vil/feature_extraction.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import PIL.Image
2323
from PIL import Image
2424

25-
from ..feature_extraction_utils import BatchFeature
25+
from ..feature_extraction_utils import BatchFeature, FeatureExtractionMixin
2626
from ..tokenizer_utils_base import TensorType
2727
from ..image_utils import ImageFeatureExtractionMixin
2828

@@ -36,7 +36,8 @@
3636
__all__ = ["ErnieViLFeatureExtractor"]
3737

3838

39-
class ErnieViLFeatureExtractor(ImageFeatureExtractionMixin):
39+
class ErnieViLFeatureExtractor(FeatureExtractionMixin,
40+
ImageFeatureExtractionMixin):
4041
r"""
4142
Constructs a ErnieViL feature extractor.
4243
This feature extractor inherits from [`ImageFeatureExtractionMixin`] which contains most of the main methods. Users
@@ -66,6 +67,12 @@ class ErnieViLFeatureExtractor(ImageFeatureExtractionMixin):
6667
"""
6768

6869
model_input_names = ["pixel_values"]
70+
pretrained_feature_extractor_file = {
71+
"ernie_vil-2.0-base-zh":
72+
"https://bj.bcebos.com/paddlenlp/models/transformers/ernie_vil/ernie_vil-2.0-base-zh/preprocessor_config.json",
73+
"disco_diffusion_ernie_vil-2.0-base-zh":
74+
"https://bj.bcebos.com/paddlenlp/models/transformers/ernie_vil/disco_diffusion_ernie_vil-2.0-base-zh/preprocessor_config.json",
75+
}
6976

7077
def __init__(self,
7178
do_resize=True,

paddlenlp/transformers/ernie_vil/procesing.py

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,12 @@
1717
"""
1818

1919
from ..tokenizer_utils_base import BatchEncoding
20-
from .tokenizer import ErnieViLTokenizer
21-
from .feature_extraction import ErnieViLFeatureExtractor
20+
from ..processing_utils import ProcessorMixin
2221

2322
__all__ = ["ErnieViLProcessor"]
2423

2524

26-
class ErnieViLProcessor(object):
25+
class ErnieViLProcessor(ProcessorMixin):
2726
r"""
2827
Constructs a ErnieViL processor which wraps a ErnieViL feature extractor and a ErnieViL tokenizer into a single processor.
2928
[`ErnieViLProcessor`] offers all the functionalities of [`ErnieViLFeatureExtractor`] and [`ErnieViLTokenizer`]. See the
@@ -34,11 +33,12 @@ class ErnieViLProcessor(object):
3433
tokenizer ([`ErnieViLTokenizer`]):
3534
The tokenizer is a required input.
3635
"""
36+
feature_extractor_class = "ErnieViLFeatureExtractor"
37+
tokenizer_class = "ErnieViLTokenizer"
3738

3839
def __init__(self, feature_extractor, tokenizer):
39-
super().__init__()
40-
self.tokenizer = tokenizer
41-
self.feature_extractor = feature_extractor
40+
super().__init__(feature_extractor, tokenizer)
41+
self.current_processor = self.feature_extractor
4242

4343
def __call__(self, text=None, images=None, return_tensors=None, **kwargs):
4444
"""
@@ -105,15 +105,3 @@ def decode(self, *args, **kwargs):
105105
the docstring of this method for more information.
106106
"""
107107
return self.tokenizer.decode(*args, **kwargs)
108-
109-
# TODO junnyu find a better way from_pretrained and save_pretrained
110-
@classmethod
111-
def from_pretrained(cls, pretrained_model_name_or_path, *args, **kwargs):
112-
tokenizer = ErnieViLTokenizer.from_pretrained(
113-
pretrained_model_name_or_path, *args, **kwargs)
114-
feature_extractor = ErnieViLFeatureExtractor()
115-
return cls(feature_extractor, tokenizer)
116-
117-
def save_pretrained(self, save_directory, filename_prefix=None, **kwargs):
118-
return self.tokenizer.save_pretrained(save_directory, filename_prefix,
119-
**kwargs)

0 commit comments

Comments
 (0)