keras-hub-nightly 0.15.0.dev20240823171555__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- keras_hub/__init__.py +52 -0
- keras_hub/api/__init__.py +27 -0
- keras_hub/api/layers/__init__.py +47 -0
- keras_hub/api/metrics/__init__.py +24 -0
- keras_hub/api/models/__init__.py +249 -0
- keras_hub/api/samplers/__init__.py +29 -0
- keras_hub/api/tokenizers/__init__.py +35 -0
- keras_hub/src/__init__.py +13 -0
- keras_hub/src/api_export.py +53 -0
- keras_hub/src/layers/__init__.py +13 -0
- keras_hub/src/layers/modeling/__init__.py +13 -0
- keras_hub/src/layers/modeling/alibi_bias.py +143 -0
- keras_hub/src/layers/modeling/cached_multi_head_attention.py +137 -0
- keras_hub/src/layers/modeling/f_net_encoder.py +200 -0
- keras_hub/src/layers/modeling/masked_lm_head.py +239 -0
- keras_hub/src/layers/modeling/position_embedding.py +123 -0
- keras_hub/src/layers/modeling/reversible_embedding.py +311 -0
- keras_hub/src/layers/modeling/rotary_embedding.py +169 -0
- keras_hub/src/layers/modeling/sine_position_encoding.py +108 -0
- keras_hub/src/layers/modeling/token_and_position_embedding.py +150 -0
- keras_hub/src/layers/modeling/transformer_decoder.py +496 -0
- keras_hub/src/layers/modeling/transformer_encoder.py +262 -0
- keras_hub/src/layers/modeling/transformer_layer_utils.py +106 -0
- keras_hub/src/layers/preprocessing/__init__.py +13 -0
- keras_hub/src/layers/preprocessing/masked_lm_mask_generator.py +220 -0
- keras_hub/src/layers/preprocessing/multi_segment_packer.py +319 -0
- keras_hub/src/layers/preprocessing/preprocessing_layer.py +62 -0
- keras_hub/src/layers/preprocessing/random_deletion.py +271 -0
- keras_hub/src/layers/preprocessing/random_swap.py +267 -0
- keras_hub/src/layers/preprocessing/start_end_packer.py +219 -0
- keras_hub/src/metrics/__init__.py +13 -0
- keras_hub/src/metrics/bleu.py +394 -0
- keras_hub/src/metrics/edit_distance.py +197 -0
- keras_hub/src/metrics/perplexity.py +181 -0
- keras_hub/src/metrics/rouge_base.py +204 -0
- keras_hub/src/metrics/rouge_l.py +97 -0
- keras_hub/src/metrics/rouge_n.py +125 -0
- keras_hub/src/models/__init__.py +13 -0
- keras_hub/src/models/albert/__init__.py +20 -0
- keras_hub/src/models/albert/albert_backbone.py +267 -0
- keras_hub/src/models/albert/albert_classifier.py +202 -0
- keras_hub/src/models/albert/albert_masked_lm.py +129 -0
- keras_hub/src/models/albert/albert_masked_lm_preprocessor.py +194 -0
- keras_hub/src/models/albert/albert_preprocessor.py +206 -0
- keras_hub/src/models/albert/albert_presets.py +70 -0
- keras_hub/src/models/albert/albert_tokenizer.py +119 -0
- keras_hub/src/models/backbone.py +311 -0
- keras_hub/src/models/bart/__init__.py +20 -0
- keras_hub/src/models/bart/bart_backbone.py +261 -0
- keras_hub/src/models/bart/bart_preprocessor.py +276 -0
- keras_hub/src/models/bart/bart_presets.py +74 -0
- keras_hub/src/models/bart/bart_seq_2_seq_lm.py +490 -0
- keras_hub/src/models/bart/bart_seq_2_seq_lm_preprocessor.py +262 -0
- keras_hub/src/models/bart/bart_tokenizer.py +124 -0
- keras_hub/src/models/bert/__init__.py +23 -0
- keras_hub/src/models/bert/bert_backbone.py +227 -0
- keras_hub/src/models/bert/bert_classifier.py +183 -0
- keras_hub/src/models/bert/bert_masked_lm.py +131 -0
- keras_hub/src/models/bert/bert_masked_lm_preprocessor.py +198 -0
- keras_hub/src/models/bert/bert_preprocessor.py +184 -0
- keras_hub/src/models/bert/bert_presets.py +147 -0
- keras_hub/src/models/bert/bert_tokenizer.py +112 -0
- keras_hub/src/models/bloom/__init__.py +20 -0
- keras_hub/src/models/bloom/bloom_attention.py +186 -0
- keras_hub/src/models/bloom/bloom_backbone.py +173 -0
- keras_hub/src/models/bloom/bloom_causal_lm.py +298 -0
- keras_hub/src/models/bloom/bloom_causal_lm_preprocessor.py +176 -0
- keras_hub/src/models/bloom/bloom_decoder.py +206 -0
- keras_hub/src/models/bloom/bloom_preprocessor.py +185 -0
- keras_hub/src/models/bloom/bloom_presets.py +121 -0
- keras_hub/src/models/bloom/bloom_tokenizer.py +116 -0
- keras_hub/src/models/causal_lm.py +383 -0
- keras_hub/src/models/classifier.py +109 -0
- keras_hub/src/models/csp_darknet/__init__.py +13 -0
- keras_hub/src/models/csp_darknet/csp_darknet_backbone.py +410 -0
- keras_hub/src/models/csp_darknet/csp_darknet_image_classifier.py +133 -0
- keras_hub/src/models/deberta_v3/__init__.py +24 -0
- keras_hub/src/models/deberta_v3/deberta_v3_backbone.py +210 -0
- keras_hub/src/models/deberta_v3/deberta_v3_classifier.py +228 -0
- keras_hub/src/models/deberta_v3/deberta_v3_masked_lm.py +135 -0
- keras_hub/src/models/deberta_v3/deberta_v3_masked_lm_preprocessor.py +191 -0
- keras_hub/src/models/deberta_v3/deberta_v3_preprocessor.py +206 -0
- keras_hub/src/models/deberta_v3/deberta_v3_presets.py +82 -0
- keras_hub/src/models/deberta_v3/deberta_v3_tokenizer.py +155 -0
- keras_hub/src/models/deberta_v3/disentangled_attention_encoder.py +227 -0
- keras_hub/src/models/deberta_v3/disentangled_self_attention.py +412 -0
- keras_hub/src/models/deberta_v3/relative_embedding.py +94 -0
- keras_hub/src/models/densenet/__init__.py +13 -0
- keras_hub/src/models/densenet/densenet_backbone.py +210 -0
- keras_hub/src/models/densenet/densenet_image_classifier.py +131 -0
- keras_hub/src/models/distil_bert/__init__.py +26 -0
- keras_hub/src/models/distil_bert/distil_bert_backbone.py +187 -0
- keras_hub/src/models/distil_bert/distil_bert_classifier.py +208 -0
- keras_hub/src/models/distil_bert/distil_bert_masked_lm.py +137 -0
- keras_hub/src/models/distil_bert/distil_bert_masked_lm_preprocessor.py +194 -0
- keras_hub/src/models/distil_bert/distil_bert_preprocessor.py +175 -0
- keras_hub/src/models/distil_bert/distil_bert_presets.py +57 -0
- keras_hub/src/models/distil_bert/distil_bert_tokenizer.py +114 -0
- keras_hub/src/models/electra/__init__.py +20 -0
- keras_hub/src/models/electra/electra_backbone.py +247 -0
- keras_hub/src/models/electra/electra_preprocessor.py +154 -0
- keras_hub/src/models/electra/electra_presets.py +95 -0
- keras_hub/src/models/electra/electra_tokenizer.py +104 -0
- keras_hub/src/models/f_net/__init__.py +20 -0
- keras_hub/src/models/f_net/f_net_backbone.py +236 -0
- keras_hub/src/models/f_net/f_net_classifier.py +154 -0
- keras_hub/src/models/f_net/f_net_masked_lm.py +132 -0
- keras_hub/src/models/f_net/f_net_masked_lm_preprocessor.py +196 -0
- keras_hub/src/models/f_net/f_net_preprocessor.py +177 -0
- keras_hub/src/models/f_net/f_net_presets.py +43 -0
- keras_hub/src/models/f_net/f_net_tokenizer.py +95 -0
- keras_hub/src/models/falcon/__init__.py +20 -0
- keras_hub/src/models/falcon/falcon_attention.py +156 -0
- keras_hub/src/models/falcon/falcon_backbone.py +164 -0
- keras_hub/src/models/falcon/falcon_causal_lm.py +291 -0
- keras_hub/src/models/falcon/falcon_causal_lm_preprocessor.py +173 -0
- keras_hub/src/models/falcon/falcon_preprocessor.py +187 -0
- keras_hub/src/models/falcon/falcon_presets.py +30 -0
- keras_hub/src/models/falcon/falcon_tokenizer.py +110 -0
- keras_hub/src/models/falcon/falcon_transformer_decoder.py +255 -0
- keras_hub/src/models/feature_pyramid_backbone.py +73 -0
- keras_hub/src/models/gemma/__init__.py +20 -0
- keras_hub/src/models/gemma/gemma_attention.py +250 -0
- keras_hub/src/models/gemma/gemma_backbone.py +316 -0
- keras_hub/src/models/gemma/gemma_causal_lm.py +448 -0
- keras_hub/src/models/gemma/gemma_causal_lm_preprocessor.py +167 -0
- keras_hub/src/models/gemma/gemma_decoder_block.py +241 -0
- keras_hub/src/models/gemma/gemma_preprocessor.py +191 -0
- keras_hub/src/models/gemma/gemma_presets.py +248 -0
- keras_hub/src/models/gemma/gemma_tokenizer.py +103 -0
- keras_hub/src/models/gemma/rms_normalization.py +40 -0
- keras_hub/src/models/gpt2/__init__.py +20 -0
- keras_hub/src/models/gpt2/gpt2_backbone.py +199 -0
- keras_hub/src/models/gpt2/gpt2_causal_lm.py +437 -0
- keras_hub/src/models/gpt2/gpt2_causal_lm_preprocessor.py +173 -0
- keras_hub/src/models/gpt2/gpt2_preprocessor.py +187 -0
- keras_hub/src/models/gpt2/gpt2_presets.py +82 -0
- keras_hub/src/models/gpt2/gpt2_tokenizer.py +110 -0
- keras_hub/src/models/gpt_neo_x/__init__.py +13 -0
- keras_hub/src/models/gpt_neo_x/gpt_neo_x_attention.py +251 -0
- keras_hub/src/models/gpt_neo_x/gpt_neo_x_backbone.py +175 -0
- keras_hub/src/models/gpt_neo_x/gpt_neo_x_causal_lm.py +201 -0
- keras_hub/src/models/gpt_neo_x/gpt_neo_x_causal_lm_preprocessor.py +141 -0
- keras_hub/src/models/gpt_neo_x/gpt_neo_x_decoder.py +258 -0
- keras_hub/src/models/gpt_neo_x/gpt_neo_x_preprocessor.py +145 -0
- keras_hub/src/models/gpt_neo_x/gpt_neo_x_tokenizer.py +88 -0
- keras_hub/src/models/image_classifier.py +90 -0
- keras_hub/src/models/llama/__init__.py +20 -0
- keras_hub/src/models/llama/llama_attention.py +225 -0
- keras_hub/src/models/llama/llama_backbone.py +188 -0
- keras_hub/src/models/llama/llama_causal_lm.py +327 -0
- keras_hub/src/models/llama/llama_causal_lm_preprocessor.py +170 -0
- keras_hub/src/models/llama/llama_decoder.py +246 -0
- keras_hub/src/models/llama/llama_layernorm.py +48 -0
- keras_hub/src/models/llama/llama_preprocessor.py +189 -0
- keras_hub/src/models/llama/llama_presets.py +80 -0
- keras_hub/src/models/llama/llama_tokenizer.py +84 -0
- keras_hub/src/models/llama3/__init__.py +20 -0
- keras_hub/src/models/llama3/llama3_backbone.py +84 -0
- keras_hub/src/models/llama3/llama3_causal_lm.py +46 -0
- keras_hub/src/models/llama3/llama3_causal_lm_preprocessor.py +173 -0
- keras_hub/src/models/llama3/llama3_preprocessor.py +21 -0
- keras_hub/src/models/llama3/llama3_presets.py +69 -0
- keras_hub/src/models/llama3/llama3_tokenizer.py +63 -0
- keras_hub/src/models/masked_lm.py +101 -0
- keras_hub/src/models/mistral/__init__.py +20 -0
- keras_hub/src/models/mistral/mistral_attention.py +238 -0
- keras_hub/src/models/mistral/mistral_backbone.py +203 -0
- keras_hub/src/models/mistral/mistral_causal_lm.py +328 -0
- keras_hub/src/models/mistral/mistral_causal_lm_preprocessor.py +175 -0
- keras_hub/src/models/mistral/mistral_layer_norm.py +48 -0
- keras_hub/src/models/mistral/mistral_preprocessor.py +190 -0
- keras_hub/src/models/mistral/mistral_presets.py +48 -0
- keras_hub/src/models/mistral/mistral_tokenizer.py +82 -0
- keras_hub/src/models/mistral/mistral_transformer_decoder.py +265 -0
- keras_hub/src/models/mix_transformer/__init__.py +13 -0
- keras_hub/src/models/mix_transformer/mix_transformer_backbone.py +181 -0
- keras_hub/src/models/mix_transformer/mix_transformer_classifier.py +133 -0
- keras_hub/src/models/mix_transformer/mix_transformer_layers.py +300 -0
- keras_hub/src/models/opt/__init__.py +20 -0
- keras_hub/src/models/opt/opt_backbone.py +173 -0
- keras_hub/src/models/opt/opt_causal_lm.py +301 -0
- keras_hub/src/models/opt/opt_causal_lm_preprocessor.py +177 -0
- keras_hub/src/models/opt/opt_preprocessor.py +188 -0
- keras_hub/src/models/opt/opt_presets.py +72 -0
- keras_hub/src/models/opt/opt_tokenizer.py +116 -0
- keras_hub/src/models/pali_gemma/__init__.py +23 -0
- keras_hub/src/models/pali_gemma/pali_gemma_backbone.py +277 -0
- keras_hub/src/models/pali_gemma/pali_gemma_causal_lm.py +313 -0
- keras_hub/src/models/pali_gemma/pali_gemma_causal_lm_preprocessor.py +147 -0
- keras_hub/src/models/pali_gemma/pali_gemma_decoder_block.py +160 -0
- keras_hub/src/models/pali_gemma/pali_gemma_presets.py +78 -0
- keras_hub/src/models/pali_gemma/pali_gemma_tokenizer.py +79 -0
- keras_hub/src/models/pali_gemma/pali_gemma_vit.py +566 -0
- keras_hub/src/models/phi3/__init__.py +20 -0
- keras_hub/src/models/phi3/phi3_attention.py +260 -0
- keras_hub/src/models/phi3/phi3_backbone.py +224 -0
- keras_hub/src/models/phi3/phi3_causal_lm.py +218 -0
- keras_hub/src/models/phi3/phi3_causal_lm_preprocessor.py +173 -0
- keras_hub/src/models/phi3/phi3_decoder.py +260 -0
- keras_hub/src/models/phi3/phi3_layernorm.py +48 -0
- keras_hub/src/models/phi3/phi3_preprocessor.py +190 -0
- keras_hub/src/models/phi3/phi3_presets.py +50 -0
- keras_hub/src/models/phi3/phi3_rotary_embedding.py +137 -0
- keras_hub/src/models/phi3/phi3_tokenizer.py +94 -0
- keras_hub/src/models/preprocessor.py +207 -0
- keras_hub/src/models/resnet/__init__.py +13 -0
- keras_hub/src/models/resnet/resnet_backbone.py +612 -0
- keras_hub/src/models/resnet/resnet_image_classifier.py +136 -0
- keras_hub/src/models/roberta/__init__.py +20 -0
- keras_hub/src/models/roberta/roberta_backbone.py +184 -0
- keras_hub/src/models/roberta/roberta_classifier.py +209 -0
- keras_hub/src/models/roberta/roberta_masked_lm.py +136 -0
- keras_hub/src/models/roberta/roberta_masked_lm_preprocessor.py +198 -0
- keras_hub/src/models/roberta/roberta_preprocessor.py +192 -0
- keras_hub/src/models/roberta/roberta_presets.py +43 -0
- keras_hub/src/models/roberta/roberta_tokenizer.py +132 -0
- keras_hub/src/models/seq_2_seq_lm.py +54 -0
- keras_hub/src/models/t5/__init__.py +20 -0
- keras_hub/src/models/t5/t5_backbone.py +261 -0
- keras_hub/src/models/t5/t5_layer_norm.py +35 -0
- keras_hub/src/models/t5/t5_multi_head_attention.py +324 -0
- keras_hub/src/models/t5/t5_presets.py +95 -0
- keras_hub/src/models/t5/t5_tokenizer.py +100 -0
- keras_hub/src/models/t5/t5_transformer_layer.py +178 -0
- keras_hub/src/models/task.py +419 -0
- keras_hub/src/models/vgg/__init__.py +13 -0
- keras_hub/src/models/vgg/vgg_backbone.py +158 -0
- keras_hub/src/models/vgg/vgg_image_classifier.py +124 -0
- keras_hub/src/models/vit_det/__init__.py +13 -0
- keras_hub/src/models/vit_det/vit_det_backbone.py +204 -0
- keras_hub/src/models/vit_det/vit_layers.py +565 -0
- keras_hub/src/models/whisper/__init__.py +20 -0
- keras_hub/src/models/whisper/whisper_audio_feature_extractor.py +260 -0
- keras_hub/src/models/whisper/whisper_backbone.py +305 -0
- keras_hub/src/models/whisper/whisper_cached_multi_head_attention.py +153 -0
- keras_hub/src/models/whisper/whisper_decoder.py +141 -0
- keras_hub/src/models/whisper/whisper_encoder.py +106 -0
- keras_hub/src/models/whisper/whisper_preprocessor.py +326 -0
- keras_hub/src/models/whisper/whisper_presets.py +148 -0
- keras_hub/src/models/whisper/whisper_tokenizer.py +163 -0
- keras_hub/src/models/xlm_roberta/__init__.py +26 -0
- keras_hub/src/models/xlm_roberta/xlm_roberta_backbone.py +81 -0
- keras_hub/src/models/xlm_roberta/xlm_roberta_classifier.py +225 -0
- keras_hub/src/models/xlm_roberta/xlm_roberta_masked_lm.py +141 -0
- keras_hub/src/models/xlm_roberta/xlm_roberta_masked_lm_preprocessor.py +195 -0
- keras_hub/src/models/xlm_roberta/xlm_roberta_preprocessor.py +205 -0
- keras_hub/src/models/xlm_roberta/xlm_roberta_presets.py +43 -0
- keras_hub/src/models/xlm_roberta/xlm_roberta_tokenizer.py +191 -0
- keras_hub/src/models/xlnet/__init__.py +13 -0
- keras_hub/src/models/xlnet/relative_attention.py +459 -0
- keras_hub/src/models/xlnet/xlnet_backbone.py +222 -0
- keras_hub/src/models/xlnet/xlnet_content_and_query_embedding.py +133 -0
- keras_hub/src/models/xlnet/xlnet_encoder.py +378 -0
- keras_hub/src/samplers/__init__.py +13 -0
- keras_hub/src/samplers/beam_sampler.py +207 -0
- keras_hub/src/samplers/contrastive_sampler.py +231 -0
- keras_hub/src/samplers/greedy_sampler.py +50 -0
- keras_hub/src/samplers/random_sampler.py +77 -0
- keras_hub/src/samplers/sampler.py +237 -0
- keras_hub/src/samplers/serialization.py +97 -0
- keras_hub/src/samplers/top_k_sampler.py +92 -0
- keras_hub/src/samplers/top_p_sampler.py +113 -0
- keras_hub/src/tests/__init__.py +13 -0
- keras_hub/src/tests/test_case.py +608 -0
- keras_hub/src/tokenizers/__init__.py +13 -0
- keras_hub/src/tokenizers/byte_pair_tokenizer.py +638 -0
- keras_hub/src/tokenizers/byte_tokenizer.py +299 -0
- keras_hub/src/tokenizers/sentence_piece_tokenizer.py +267 -0
- keras_hub/src/tokenizers/sentence_piece_tokenizer_trainer.py +150 -0
- keras_hub/src/tokenizers/tokenizer.py +235 -0
- keras_hub/src/tokenizers/unicode_codepoint_tokenizer.py +355 -0
- keras_hub/src/tokenizers/word_piece_tokenizer.py +544 -0
- keras_hub/src/tokenizers/word_piece_tokenizer_trainer.py +176 -0
- keras_hub/src/utils/__init__.py +13 -0
- keras_hub/src/utils/keras_utils.py +130 -0
- keras_hub/src/utils/pipeline_model.py +293 -0
- keras_hub/src/utils/preset_utils.py +621 -0
- keras_hub/src/utils/python_utils.py +21 -0
- keras_hub/src/utils/tensor_utils.py +206 -0
- keras_hub/src/utils/timm/__init__.py +13 -0
- keras_hub/src/utils/timm/convert.py +37 -0
- keras_hub/src/utils/timm/convert_resnet.py +171 -0
- keras_hub/src/utils/transformers/__init__.py +13 -0
- keras_hub/src/utils/transformers/convert.py +101 -0
- keras_hub/src/utils/transformers/convert_bert.py +173 -0
- keras_hub/src/utils/transformers/convert_distilbert.py +184 -0
- keras_hub/src/utils/transformers/convert_gemma.py +187 -0
- keras_hub/src/utils/transformers/convert_gpt2.py +186 -0
- keras_hub/src/utils/transformers/convert_llama3.py +136 -0
- keras_hub/src/utils/transformers/convert_pali_gemma.py +303 -0
- keras_hub/src/utils/transformers/safetensor_utils.py +97 -0
- keras_hub/src/version_utils.py +23 -0
- keras_hub_nightly-0.15.0.dev20240823171555.dist-info/METADATA +34 -0
- keras_hub_nightly-0.15.0.dev20240823171555.dist-info/RECORD +297 -0
- keras_hub_nightly-0.15.0.dev20240823171555.dist-info/WHEEL +5 -0
- keras_hub_nightly-0.15.0.dev20240823171555.dist-info/top_level.txt +1 -0
@@ -0,0 +1,410 @@
|
|
1
|
+
# Copyright 2024 The KerasHub Authors
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
import keras
|
15
|
+
from keras import layers
|
16
|
+
|
17
|
+
from keras_hub.src.api_export import keras_hub_export
|
18
|
+
from keras_hub.src.models.backbone import Backbone
|
19
|
+
|
20
|
+
|
21
|
+
@keras_hub_export("keras_hub.models.CSPDarkNetBackbone")
|
22
|
+
class CSPDarkNetBackbone(Backbone):
|
23
|
+
"""This class represents Keras Backbone of CSPDarkNet model.
|
24
|
+
|
25
|
+
This class implements a CSPDarkNet backbone as described in
|
26
|
+
[CSPNet: A New Backbone that can Enhance Learning Capability of CNN](
|
27
|
+
https://arxiv.org/abs/1911.11929).
|
28
|
+
|
29
|
+
Args:
|
30
|
+
stackwise_num_filters: A list of ints, filter size for each dark
|
31
|
+
level in the model.
|
32
|
+
stackwise_depth: A list of ints, the depth for each dark level in the
|
33
|
+
model.
|
34
|
+
include_rescaling: boolean. If `True`, rescale the input using
|
35
|
+
`Rescaling(1 / 255.0)` layer. If `False`, do nothing. Defaults to
|
36
|
+
`True`.
|
37
|
+
block_type: str. One of `"basic_block"` or `"depthwise_block"`.
|
38
|
+
Use `"depthwise_block"` for depthwise conv block
|
39
|
+
`"basic_block"` for basic conv block.
|
40
|
+
Defaults to "basic_block".
|
41
|
+
image_shape: tuple. The input shape without the batch size.
|
42
|
+
Defaults to `(None, None, 3)`.
|
43
|
+
|
44
|
+
Examples:
|
45
|
+
```python
|
46
|
+
input_data = np.ones(shape=(8, 224, 224, 3))
|
47
|
+
|
48
|
+
# Pretrained backbone
|
49
|
+
model = keras_hub.models.CSPDarkNetBackbone.from_preset(
|
50
|
+
"csp_darknet_tiny_imagenet"
|
51
|
+
)
|
52
|
+
model(input_data)
|
53
|
+
|
54
|
+
# Randomly initialized backbone with a custom config
|
55
|
+
model = keras_hub.models.CSPDarkNetBackbone(
|
56
|
+
stackwise_num_filters=[128, 256, 512, 1024],
|
57
|
+
stackwise_depth=[3, 9, 9, 3],
|
58
|
+
include_rescaling=False,
|
59
|
+
)
|
60
|
+
model(input_data)
|
61
|
+
```
|
62
|
+
"""
|
63
|
+
|
64
|
+
def __init__(
|
65
|
+
self,
|
66
|
+
stackwise_num_filters,
|
67
|
+
stackwise_depth,
|
68
|
+
include_rescaling,
|
69
|
+
block_type="basic_block",
|
70
|
+
image_shape=(224, 224, 3),
|
71
|
+
**kwargs,
|
72
|
+
):
|
73
|
+
# === Functional Model ===
|
74
|
+
apply_ConvBlock = (
|
75
|
+
apply_darknet_conv_block_depthwise
|
76
|
+
if block_type == "depthwise_block"
|
77
|
+
else apply_darknet_conv_block
|
78
|
+
)
|
79
|
+
base_channels = stackwise_num_filters[0] // 2
|
80
|
+
|
81
|
+
image_input = layers.Input(shape=image_shape)
|
82
|
+
x = image_input
|
83
|
+
if include_rescaling:
|
84
|
+
x = layers.Rescaling(scale=1 / 255.0)(x)
|
85
|
+
|
86
|
+
x = apply_focus(name="stem_focus")(x)
|
87
|
+
x = apply_darknet_conv_block(
|
88
|
+
base_channels, kernel_size=3, strides=1, name="stem_conv"
|
89
|
+
)(x)
|
90
|
+
for index, (channels, depth) in enumerate(
|
91
|
+
zip(stackwise_num_filters, stackwise_depth)
|
92
|
+
):
|
93
|
+
x = apply_ConvBlock(
|
94
|
+
channels,
|
95
|
+
kernel_size=3,
|
96
|
+
strides=2,
|
97
|
+
name=f"dark{index + 2}_conv",
|
98
|
+
)(x)
|
99
|
+
|
100
|
+
if index == len(stackwise_depth) - 1:
|
101
|
+
x = apply_spatial_pyramid_pooling_bottleneck(
|
102
|
+
channels,
|
103
|
+
hidden_filters=channels // 2,
|
104
|
+
name=f"dark{index + 2}_spp",
|
105
|
+
)(x)
|
106
|
+
|
107
|
+
x = apply_cross_stage_partial(
|
108
|
+
channels,
|
109
|
+
num_bottlenecks=depth,
|
110
|
+
block_type="basic_block",
|
111
|
+
residual=(index != len(stackwise_depth) - 1),
|
112
|
+
name=f"dark{index + 2}_csp",
|
113
|
+
)(x)
|
114
|
+
|
115
|
+
super().__init__(inputs=image_input, outputs=x, **kwargs)
|
116
|
+
|
117
|
+
# === Config ===
|
118
|
+
self.stackwise_num_filters = stackwise_num_filters
|
119
|
+
self.stackwise_depth = stackwise_depth
|
120
|
+
self.include_rescaling = include_rescaling
|
121
|
+
self.block_type = block_type
|
122
|
+
self.image_shape = image_shape
|
123
|
+
|
124
|
+
def get_config(self):
|
125
|
+
config = super().get_config()
|
126
|
+
config.update(
|
127
|
+
{
|
128
|
+
"stackwise_num_filters": self.stackwise_num_filters,
|
129
|
+
"stackwise_depth": self.stackwise_depth,
|
130
|
+
"include_rescaling": self.include_rescaling,
|
131
|
+
"block_type": self.block_type,
|
132
|
+
"image_shape": self.image_shape,
|
133
|
+
}
|
134
|
+
)
|
135
|
+
return config
|
136
|
+
|
137
|
+
|
138
|
+
def apply_focus(name=None):
|
139
|
+
"""A block used in CSPDarknet to focus information into channels of the
|
140
|
+
image.
|
141
|
+
|
142
|
+
If the dimensions of a batch input is (batch_size, width, height, channels),
|
143
|
+
this layer converts the image into size (batch_size, width/2, height/2,
|
144
|
+
4*channels). See [the original discussion on YoloV5 Focus Layer](https://github.com/ultralytics/yolov5/discussions/3181).
|
145
|
+
|
146
|
+
Args:
|
147
|
+
name: the name for the lambda layer used in the block.
|
148
|
+
|
149
|
+
Returns:
|
150
|
+
a function that takes an input Tensor representing a Focus layer.
|
151
|
+
"""
|
152
|
+
|
153
|
+
def apply(x):
|
154
|
+
return layers.Concatenate(name=name)(
|
155
|
+
[
|
156
|
+
x[..., ::2, ::2, :],
|
157
|
+
x[..., 1::2, ::2, :],
|
158
|
+
x[..., ::2, 1::2, :],
|
159
|
+
x[..., 1::2, 1::2, :],
|
160
|
+
],
|
161
|
+
)
|
162
|
+
|
163
|
+
return apply
|
164
|
+
|
165
|
+
|
166
|
+
def apply_darknet_conv_block(
|
167
|
+
filters, kernel_size, strides, use_bias=False, activation="silu", name=None
|
168
|
+
):
|
169
|
+
"""
|
170
|
+
The basic conv block used in Darknet. Applies Conv2D followed by a
|
171
|
+
BatchNorm.
|
172
|
+
|
173
|
+
Args:
|
174
|
+
filters: Integer, the dimensionality of the output space (i.e. the
|
175
|
+
number of output filters in the convolution).
|
176
|
+
kernel_size: An integer or tuple/list of 2 integers, specifying the
|
177
|
+
height and width of the 2D convolution window. Can be a single
|
178
|
+
integer to specify the same value both dimensions.
|
179
|
+
strides: An integer or tuple/list of 2 integers, specifying the strides
|
180
|
+
of the convolution along the height and width. Can be a single
|
181
|
+
integer to the same value both dimensions.
|
182
|
+
use_bias: Boolean, whether the layer uses a bias vector.
|
183
|
+
activation: the activation applied after the BatchNorm layer. One of
|
184
|
+
"silu", "relu" or "leaky_relu", defaults to "silu".
|
185
|
+
name: the prefix for the layer names used in the block.
|
186
|
+
"""
|
187
|
+
if name is None:
|
188
|
+
name = f"conv_block{keras.backend.get_uid('conv_block')}"
|
189
|
+
|
190
|
+
def apply(inputs):
|
191
|
+
x = layers.Conv2D(
|
192
|
+
filters,
|
193
|
+
kernel_size,
|
194
|
+
strides,
|
195
|
+
padding="same",
|
196
|
+
use_bias=use_bias,
|
197
|
+
name=name + "_conv",
|
198
|
+
)(inputs)
|
199
|
+
|
200
|
+
x = layers.BatchNormalization(name=name + "_bn")(x)
|
201
|
+
|
202
|
+
if activation == "silu":
|
203
|
+
x = layers.Lambda(lambda x: keras.activations.silu(x))(x)
|
204
|
+
elif activation == "relu":
|
205
|
+
x = layers.ReLU()(x)
|
206
|
+
elif activation == "leaky_relu":
|
207
|
+
x = layers.LeakyReLU(0.1)(x)
|
208
|
+
|
209
|
+
return x
|
210
|
+
|
211
|
+
return apply
|
212
|
+
|
213
|
+
|
214
|
+
def apply_darknet_conv_block_depthwise(
|
215
|
+
filters, kernel_size, strides, activation="silu", name=None
|
216
|
+
):
|
217
|
+
"""
|
218
|
+
The depthwise conv block used in CSPDarknet.
|
219
|
+
|
220
|
+
Args:
|
221
|
+
filters: Integer, the dimensionality of the output space (i.e. the
|
222
|
+
number of output filters in the final convolution).
|
223
|
+
kernel_size: An integer or tuple/list of 2 integers, specifying the
|
224
|
+
height and width of the 2D convolution window. Can be a single
|
225
|
+
integer to specify the same value both dimensions.
|
226
|
+
strides: An integer or tuple/list of 2 integers, specifying the strides
|
227
|
+
of the convolution along the height and width. Can be a single
|
228
|
+
integer to the same value both dimensions.
|
229
|
+
activation: the activation applied after the final layer. One of "silu",
|
230
|
+
"relu" or "leaky_relu", defaults to "silu".
|
231
|
+
name: the prefix for the layer names used in the block.
|
232
|
+
|
233
|
+
"""
|
234
|
+
if name is None:
|
235
|
+
name = f"conv_block{keras.backend.get_uid('conv_block')}"
|
236
|
+
|
237
|
+
def apply(inputs):
|
238
|
+
x = layers.DepthwiseConv2D(
|
239
|
+
kernel_size, strides, padding="same", use_bias=False
|
240
|
+
)(inputs)
|
241
|
+
x = layers.BatchNormalization()(x)
|
242
|
+
|
243
|
+
if activation == "silu":
|
244
|
+
x = layers.Lambda(lambda x: keras.activations.swish(x))(x)
|
245
|
+
elif activation == "relu":
|
246
|
+
x = layers.ReLU()(x)
|
247
|
+
elif activation == "leaky_relu":
|
248
|
+
x = layers.LeakyReLU(0.1)(x)
|
249
|
+
|
250
|
+
x = apply_darknet_conv_block(
|
251
|
+
filters, kernel_size=1, strides=1, activation=activation
|
252
|
+
)(x)
|
253
|
+
|
254
|
+
return x
|
255
|
+
|
256
|
+
return apply
|
257
|
+
|
258
|
+
|
259
|
+
def apply_spatial_pyramid_pooling_bottleneck(
|
260
|
+
filters,
|
261
|
+
hidden_filters=None,
|
262
|
+
kernel_sizes=(5, 9, 13),
|
263
|
+
activation="silu",
|
264
|
+
name=None,
|
265
|
+
):
|
266
|
+
"""
|
267
|
+
Spatial pyramid pooling layer used in YOLOv3-SPP
|
268
|
+
|
269
|
+
Args:
|
270
|
+
filters: Integer, the dimensionality of the output spaces (i.e. the
|
271
|
+
number of output filters in used the blocks).
|
272
|
+
hidden_filters: Integer, the dimensionality of the intermediate
|
273
|
+
bottleneck space (i.e. the number of output filters in the
|
274
|
+
bottleneck convolution). If None, it will be equal to filters.
|
275
|
+
Defaults to None.
|
276
|
+
kernel_sizes: A list or tuple representing all the pool sizes used for
|
277
|
+
the pooling layers, defaults to (5, 9, 13).
|
278
|
+
activation: Activation for the conv layers, defaults to "silu".
|
279
|
+
name: the prefix for the layer names used in the block.
|
280
|
+
|
281
|
+
Returns:
|
282
|
+
a function that takes an input Tensor representing an
|
283
|
+
SpatialPyramidPoolingBottleneck.
|
284
|
+
"""
|
285
|
+
if name is None:
|
286
|
+
name = f"spp{keras.backend.get_uid('spp')}"
|
287
|
+
|
288
|
+
if hidden_filters is None:
|
289
|
+
hidden_filters = filters
|
290
|
+
|
291
|
+
def apply(x):
|
292
|
+
x = apply_darknet_conv_block(
|
293
|
+
hidden_filters,
|
294
|
+
kernel_size=1,
|
295
|
+
strides=1,
|
296
|
+
activation=activation,
|
297
|
+
name=f"{name}_conv1",
|
298
|
+
)(x)
|
299
|
+
x = [x]
|
300
|
+
|
301
|
+
for kernel_size in kernel_sizes:
|
302
|
+
x.append(
|
303
|
+
layers.MaxPooling2D(
|
304
|
+
kernel_size,
|
305
|
+
strides=1,
|
306
|
+
padding="same",
|
307
|
+
name=f"{name}_maxpool_{kernel_size}",
|
308
|
+
)(x[0])
|
309
|
+
)
|
310
|
+
|
311
|
+
x = layers.Concatenate(name=f"{name}_concat")(x)
|
312
|
+
x = apply_darknet_conv_block(
|
313
|
+
filters,
|
314
|
+
kernel_size=1,
|
315
|
+
strides=1,
|
316
|
+
activation=activation,
|
317
|
+
name=f"{name}_conv2",
|
318
|
+
)(x)
|
319
|
+
|
320
|
+
return x
|
321
|
+
|
322
|
+
return apply
|
323
|
+
|
324
|
+
|
325
|
+
def apply_cross_stage_partial(
|
326
|
+
filters,
|
327
|
+
num_bottlenecks,
|
328
|
+
residual=True,
|
329
|
+
block_type="basic_block",
|
330
|
+
activation="silu",
|
331
|
+
name=None,
|
332
|
+
):
|
333
|
+
"""A block used in Cross Stage Partial Darknet.
|
334
|
+
|
335
|
+
Args:
|
336
|
+
filters: Integer, the dimensionality of the output space (i.e. the
|
337
|
+
number of output filters in the final convolution).
|
338
|
+
num_bottlenecks: an integer representing the number of blocks added in
|
339
|
+
the layer bottleneck.
|
340
|
+
residual: a boolean representing whether the value tensor before the
|
341
|
+
bottleneck should be added to the output of the bottleneck as a
|
342
|
+
residual, defaults to True.
|
343
|
+
block_type: str. One of `"basic_block"` or `"depthwise_block"`.
|
344
|
+
Use `"depthwise_block"` for depthwise conv block
|
345
|
+
`"basic_block"` for basic conv block.
|
346
|
+
Defaults to "basic_block".
|
347
|
+
activation: the activation applied after the final layer. One of "silu",
|
348
|
+
"relu" or "leaky_relu", defaults to "silu".
|
349
|
+
"""
|
350
|
+
|
351
|
+
if name is None:
|
352
|
+
name = f"cross_stage_partial_{keras.backend.get_uid('cross_stage_partial')}"
|
353
|
+
|
354
|
+
def apply(inputs):
|
355
|
+
hidden_channels = filters // 2
|
356
|
+
ConvBlock = (
|
357
|
+
apply_darknet_conv_block_depthwise
|
358
|
+
if block_type == "basic_block"
|
359
|
+
else apply_darknet_conv_block
|
360
|
+
)
|
361
|
+
|
362
|
+
x1 = apply_darknet_conv_block(
|
363
|
+
hidden_channels,
|
364
|
+
kernel_size=1,
|
365
|
+
strides=1,
|
366
|
+
activation=activation,
|
367
|
+
name=f"{name}_conv1",
|
368
|
+
)(inputs)
|
369
|
+
|
370
|
+
x2 = apply_darknet_conv_block(
|
371
|
+
hidden_channels,
|
372
|
+
kernel_size=1,
|
373
|
+
strides=1,
|
374
|
+
activation=activation,
|
375
|
+
name=f"{name}_conv2",
|
376
|
+
)(inputs)
|
377
|
+
|
378
|
+
for i in range(num_bottlenecks):
|
379
|
+
residual_x = x1
|
380
|
+
x1 = apply_darknet_conv_block(
|
381
|
+
hidden_channels,
|
382
|
+
kernel_size=1,
|
383
|
+
strides=1,
|
384
|
+
activation=activation,
|
385
|
+
name=f"{name}_bottleneck_{i}_conv1",
|
386
|
+
)(x1)
|
387
|
+
x1 = ConvBlock(
|
388
|
+
hidden_channels,
|
389
|
+
kernel_size=3,
|
390
|
+
strides=1,
|
391
|
+
activation=activation,
|
392
|
+
name=f"{name}_bottleneck_{i}_conv2",
|
393
|
+
)(x1)
|
394
|
+
if residual:
|
395
|
+
x1 = layers.Add(name=f"{name}_bottleneck_{i}_add")(
|
396
|
+
[residual_x, x1]
|
397
|
+
)
|
398
|
+
|
399
|
+
x = layers.Concatenate(name=f"{name}_concat")([x1, x2])
|
400
|
+
x = apply_darknet_conv_block(
|
401
|
+
filters,
|
402
|
+
kernel_size=1,
|
403
|
+
strides=1,
|
404
|
+
activation=activation,
|
405
|
+
name=f"{name}_conv3",
|
406
|
+
)(x)
|
407
|
+
|
408
|
+
return x
|
409
|
+
|
410
|
+
return apply
|
@@ -0,0 +1,133 @@
|
|
1
|
+
# Copyright 2024 The KerasHub Authors
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
import keras
|
15
|
+
|
16
|
+
from keras_hub.src.api_export import keras_hub_export
|
17
|
+
from keras_hub.src.models.csp_darknet.csp_darknet_backbone import (
|
18
|
+
CSPDarkNetBackbone,
|
19
|
+
)
|
20
|
+
from keras_hub.src.models.image_classifier import ImageClassifier
|
21
|
+
|
22
|
+
|
23
|
+
@keras_hub_export("keras_hub.models.CSPDarkNetImageClassifier")
|
24
|
+
class CSPDarkNetImageClassifier(ImageClassifier):
|
25
|
+
"""CSPDarkNet image classifier task model.
|
26
|
+
|
27
|
+
Args:
|
28
|
+
backbone: A `keras_hub.models.CSPDarkNetBackbone` instance.
|
29
|
+
num_classes: int. The number of classes to predict.
|
30
|
+
activation: `None`, str or callable. The activation function to use on
|
31
|
+
the `Dense` layer. Set `activation=None` to return the output
|
32
|
+
logits. Defaults to `"softmax"`.
|
33
|
+
|
34
|
+
To fine-tune with `fit()`, pass a dataset containing tuples of `(x, y)`
|
35
|
+
where `x` is a tensor and `y` is a integer from `[0, num_classes)`.
|
36
|
+
All `ImageClassifier` tasks include a `from_preset()` constructor which can
|
37
|
+
be used to load a pre-trained config and weights.
|
38
|
+
|
39
|
+
Examples:
|
40
|
+
|
41
|
+
Call `predict()` to run inference.
|
42
|
+
```python
|
43
|
+
# Load preset and train
|
44
|
+
images = np.ones((2, 224, 224, 3), dtype="float32")
|
45
|
+
classifier = keras_hub.models.CSPDarkNetImageClassifier.from_preset(
|
46
|
+
"csp_darknet_tiny_imagenet")
|
47
|
+
classifier.predict(images)
|
48
|
+
```
|
49
|
+
|
50
|
+
Call `fit()` on a single batch.
|
51
|
+
```python
|
52
|
+
# Load preset and train
|
53
|
+
images = np.ones((2, 224, 224, 3), dtype="float32")
|
54
|
+
labels = [0, 3]
|
55
|
+
classifier = keras_hub.models.CSPDarkNetImageClassifier.from_preset(
|
56
|
+
"csp_darknet_tiny_imagenet")
|
57
|
+
classifier.fit(x=images, y=labels, batch_size=2)
|
58
|
+
```
|
59
|
+
|
60
|
+
Call `fit()` with custom loss, optimizer and backbone.
|
61
|
+
```python
|
62
|
+
classifier = keras_hub.models.CSPDarkNetImageClassifier.from_preset(
|
63
|
+
"csp_darknet_tiny_imagenet")
|
64
|
+
classifier.compile(
|
65
|
+
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
|
66
|
+
optimizer=keras.optimizers.Adam(5e-5),
|
67
|
+
)
|
68
|
+
classifier.backbone.trainable = False
|
69
|
+
classifier.fit(x=images, y=labels, batch_size=2)
|
70
|
+
```
|
71
|
+
|
72
|
+
Custom backbone.
|
73
|
+
```python
|
74
|
+
images = np.ones((2, 224, 224, 3), dtype="float32")
|
75
|
+
labels = [0, 3]
|
76
|
+
backbone = keras_hub.models.CSPDarkNetBackbone(
|
77
|
+
stackwise_num_filters=[128, 256, 512, 1024],
|
78
|
+
stackwise_depth=[3, 9, 9, 3],
|
79
|
+
include_rescaling=False,
|
80
|
+
block_type="basic_block",
|
81
|
+
image_shape = (224, 224, 3),
|
82
|
+
)
|
83
|
+
classifier = keras_hub.models.CSPDarkNetImageClassifier(
|
84
|
+
backbone=backbone,
|
85
|
+
num_classes=4,
|
86
|
+
)
|
87
|
+
classifier.fit(x=images, y=labels, batch_size=2)
|
88
|
+
```
|
89
|
+
"""
|
90
|
+
|
91
|
+
backbone_cls = CSPDarkNetBackbone
|
92
|
+
|
93
|
+
def __init__(
|
94
|
+
self,
|
95
|
+
backbone,
|
96
|
+
num_classes,
|
97
|
+
activation="softmax",
|
98
|
+
preprocessor=None, # adding this dummy arg for saved model test
|
99
|
+
# TODO: once preprocessor flow is figured out, this needs to be updated
|
100
|
+
**kwargs,
|
101
|
+
):
|
102
|
+
# === Layers ===
|
103
|
+
self.backbone = backbone
|
104
|
+
self.output_dense = keras.layers.Dense(
|
105
|
+
num_classes,
|
106
|
+
activation=activation,
|
107
|
+
name="predictions",
|
108
|
+
)
|
109
|
+
|
110
|
+
# === Functional Model ===
|
111
|
+
inputs = self.backbone.input
|
112
|
+
x = self.backbone(inputs)
|
113
|
+
outputs = self.output_dense(x)
|
114
|
+
super().__init__(
|
115
|
+
inputs=inputs,
|
116
|
+
outputs=outputs,
|
117
|
+
**kwargs,
|
118
|
+
)
|
119
|
+
|
120
|
+
# === Config ===
|
121
|
+
self.num_classes = num_classes
|
122
|
+
self.activation = activation
|
123
|
+
|
124
|
+
def get_config(self):
|
125
|
+
# Backbone serialized in `super`
|
126
|
+
config = super().get_config()
|
127
|
+
config.update(
|
128
|
+
{
|
129
|
+
"num_classes": self.num_classes,
|
130
|
+
"activation": self.activation,
|
131
|
+
}
|
132
|
+
)
|
133
|
+
return config
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Copyright 2024 The KerasHub Authors
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
from keras_hub.src.models.deberta_v3.deberta_v3_backbone import (
|
16
|
+
DebertaV3Backbone,
|
17
|
+
)
|
18
|
+
from keras_hub.src.models.deberta_v3.deberta_v3_presets import backbone_presets
|
19
|
+
from keras_hub.src.models.deberta_v3.deberta_v3_tokenizer import (
|
20
|
+
DebertaV3Tokenizer,
|
21
|
+
)
|
22
|
+
from keras_hub.src.utils.preset_utils import register_presets
|
23
|
+
|
24
|
+
register_presets(backbone_presets, (DebertaV3Backbone, DebertaV3Tokenizer))
|