kmodels 0.2.0__tar.gz → 0.2.2__tar.gz

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.
Files changed (252) hide show
  1. {kmodels-0.2.0 → kmodels-0.2.2}/PKG-INFO +11 -2
  2. {kmodels-0.2.0 → kmodels-0.2.2}/README.md +6 -1
  3. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/__init__.py +1 -1
  4. kmodels-0.2.2/kmodels/_test_runner.py +171 -0
  5. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/__init__.py +3 -0
  6. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/cait/cait_layers.py +1 -1
  7. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/cait/cait_model.py +8 -3
  8. kmodels-0.2.2/kmodels/models/cait/convert_cait_torch_to_keras.py +205 -0
  9. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/convnext/config.py +24 -24
  10. kmodels-0.2.2/kmodels/models/convnext/convert_convnext_torch_to_keras.py +277 -0
  11. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/convnext/convnext_model.py +22 -10
  12. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/convnextv2/config.py +18 -18
  13. kmodels-0.2.2/kmodels/models/convnextv2/convert_convnextv2_torch_to_keras.py +145 -0
  14. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/detr/detr_layers.py +15 -2
  15. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/detr/detr_model.py +12 -18
  16. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientformer/convert_efficientformer_torch_to_keras.py +4 -2
  17. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientformer/efficientformer_layers.py +12 -7
  18. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientformer/efficientformer_model.py +51 -82
  19. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/eomt/eomt_layers.py +9 -3
  20. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/eomt/eomt_model.py +50 -45
  21. kmodels-0.2.2/kmodels/models/mit/convert_mit_torch_to_keras.py +182 -0
  22. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mit/mit_layers.py +12 -5
  23. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mit/mit_model.py +18 -9
  24. kmodels-0.2.2/kmodels/models/mlp_mixer/convert_mlpmixer_torch_to_keras.py +147 -0
  25. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mlp_mixer/mlp_mixer_model.py +3 -5
  26. kmodels-0.2.2/kmodels/models/nextvit/__init__.py +1 -0
  27. kmodels-0.2.2/kmodels/models/nextvit/config.py +71 -0
  28. kmodels-0.2.2/kmodels/models/nextvit/convert_nextvit_timm_to_keras.py +198 -0
  29. kmodels-0.2.2/kmodels/models/nextvit/nextvit_layers.py +120 -0
  30. kmodels-0.2.2/kmodels/models/nextvit/nextvit_model.py +735 -0
  31. kmodels-0.2.2/kmodels/models/pit/convert_pit_torch_to_keras.py +246 -0
  32. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/pit/pit_model.py +9 -8
  33. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/rf_detr/convert_rf_detr_torch_to_keras.py +4 -1
  34. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/rf_detr/rf_detr_layers.py +64 -21
  35. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/rf_detr/rf_detr_model.py +94 -52
  36. kmodels-0.2.2/kmodels/models/rt_detr/__init__.py +11 -0
  37. kmodels-0.2.2/kmodels/models/rt_detr/config.py +66 -0
  38. kmodels-0.2.2/kmodels/models/rt_detr/convert_rt_detr_hf_to_keras.py +403 -0
  39. kmodels-0.2.2/kmodels/models/rt_detr/rt_detr_image_processor.py +289 -0
  40. kmodels-0.2.2/kmodels/models/rt_detr/rt_detr_layers.py +560 -0
  41. kmodels-0.2.2/kmodels/models/rt_detr/rt_detr_model.py +1116 -0
  42. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/sam/sam_layers.py +329 -305
  43. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/sam/sam_model.py +63 -43
  44. kmodels-0.2.2/kmodels/models/sam2/__init__.py +6 -0
  45. kmodels-0.2.2/kmodels/models/sam2/config.py +62 -0
  46. kmodels-0.2.2/kmodels/models/sam2/convert_sam2_hf_to_keras.py +374 -0
  47. kmodels-0.2.2/kmodels/models/sam2/sam2_layers.py +1591 -0
  48. kmodels-0.2.2/kmodels/models/sam2/sam2_model.py +574 -0
  49. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/segformer/config.py +6 -6
  50. kmodels-0.2.2/kmodels/models/segformer/convert_segformer_torch_to_keras.py +329 -0
  51. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/segformer/segformer_model.py +40 -10
  52. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/swin/config.py +15 -15
  53. kmodels-0.2.2/kmodels/models/swin/convert_swin_torch_to_keras.py +196 -0
  54. kmodels-0.2.2/kmodels/models/swin/swin_layers.py +480 -0
  55. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/swin/swin_model.py +207 -247
  56. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/vit/config.py +27 -27
  57. kmodels-0.2.2/kmodels/models/vit/convert_vit_torch_to_keras.py +184 -0
  58. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/vit/vit_model.py +3 -5
  59. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/utils/weight_split_torch_and_keras.py +5 -4
  60. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/version.py +1 -1
  61. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels.egg-info/PKG-INFO +11 -2
  62. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels.egg-info/SOURCES.txt +18 -0
  63. kmodels-0.2.2/kmodels.egg-info/entry_points.txt +2 -0
  64. kmodels-0.2.2/kmodels.egg-info/requires.txt +6 -0
  65. {kmodels-0.2.0 → kmodels-0.2.2}/pyproject.toml +19 -0
  66. kmodels-0.2.0/kmodels/models/cait/convert_cait_torch_to_keras.py +0 -142
  67. kmodels-0.2.0/kmodels/models/convnext/convert_convnext_torch_to_keras.py +0 -117
  68. kmodels-0.2.0/kmodels/models/convnextv2/convert_convnextv2_torch_to_keras.py +0 -117
  69. kmodels-0.2.0/kmodels/models/mit/convert_mit_torch_to_keras.py +0 -127
  70. kmodels-0.2.0/kmodels/models/mlp_mixer/convert_mlpmixer_torch_to_keras.py +0 -110
  71. kmodels-0.2.0/kmodels/models/pit/convert_pit_torch_to_keras.py +0 -170
  72. kmodels-0.2.0/kmodels/models/segformer/convert_segformer_torch_to_keras.py +0 -166
  73. kmodels-0.2.0/kmodels/models/swin/convert_swin_torch_to_keras.py +0 -123
  74. kmodels-0.2.0/kmodels/models/swin/swin_layers.py +0 -498
  75. kmodels-0.2.0/kmodels/models/vit/convert_vit_torch_to_keras.py +0 -130
  76. kmodels-0.2.0/kmodels.egg-info/requires.txt +0 -1
  77. {kmodels-0.2.0 → kmodels-0.2.2}/LICENSE +0 -0
  78. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/layers/__init__.py +0 -0
  79. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/layers/image_normalization.py +0 -0
  80. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/layers/layer_scale.py +0 -0
  81. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/layers/stochastic_depth.py +0 -0
  82. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/model_registry.py +0 -0
  83. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/cait/__init__.py +0 -0
  84. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/cait/config.py +0 -0
  85. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/clip/__init__.py +0 -0
  86. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/clip/clip_image_processor.py +0 -0
  87. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/clip/clip_layers.py +0 -0
  88. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/clip/clip_model.py +0 -0
  89. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/clip/clip_processor.py +0 -0
  90. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/clip/clip_tokenizer.py +0 -0
  91. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/clip/config.py +0 -0
  92. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/clip/convert_clip_torch_to_keras.py +0 -0
  93. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/convmixer/__init__.py +0 -0
  94. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/convmixer/config.py +0 -0
  95. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/convmixer/convert_convmixer_torch_to_keras.py +0 -0
  96. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/convmixer/convmixer_model.py +0 -0
  97. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/convnext/__init__.py +0 -0
  98. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/convnext/convnext_layers.py +0 -0
  99. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/convnextv2/__init__.py +0 -0
  100. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/convnextv2/convnextv2_model.py +0 -0
  101. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/deeplabv3/__init__.py +0 -0
  102. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/deeplabv3/config.py +0 -0
  103. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/deeplabv3/convert_deeplabv3_torch_to_keras.py +0 -0
  104. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/deeplabv3/deeplabv3_model.py +0 -0
  105. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/deit/__init__.py +0 -0
  106. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/deit/config.py +0 -0
  107. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/deit/convert_deit_torch_to_keras.py +0 -0
  108. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/deit/deit_model.py +0 -0
  109. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/densenet/__init__.py +0 -0
  110. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/densenet/config.py +0 -0
  111. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/densenet/convert_densenet_torch_to_keras.py +0 -0
  112. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/densenet/densenet_model.py +0 -0
  113. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/detr/__init__.py +0 -0
  114. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/detr/config.py +0 -0
  115. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/detr/convert_detr_torch_to_keras.py +0 -0
  116. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/detr/detr_image_processor.py +0 -0
  117. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientformer/__init__.py +0 -0
  118. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientformer/config.py +0 -0
  119. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientnet/__init__.py +0 -0
  120. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientnet/config.py +0 -0
  121. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientnet/convert_efficientnet_torch_to_keras.py +0 -0
  122. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientnet/efficientnet_model.py +0 -0
  123. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientnet_lite/__init__.py +0 -0
  124. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientnet_lite/config.py +0 -0
  125. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientnet_lite/convert_efficientnet_lite_torch_to_keras.py +0 -0
  126. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientnet_lite/efficientnet_lite_model.py +0 -0
  127. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientnetv2/__init__.py +0 -0
  128. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientnetv2/config.py +0 -0
  129. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientnetv2/convert_efficientnetv2_torch_to_keras.py +0 -0
  130. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/efficientnetv2/efficientnetv2_model.py +0 -0
  131. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/eomt/__init__.py +0 -0
  132. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/eomt/config.py +0 -0
  133. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/eomt/convert_eomt_hf_to_keras.py +0 -0
  134. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/eomt/eomt_image_processor.py +0 -0
  135. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/flexivit/__init__.py +0 -0
  136. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/flexivit/config.py +0 -0
  137. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/flexivit/convert_flexivit_torch_to_keras.py +0 -0
  138. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/flexivit/flexivit_model.py +0 -0
  139. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inception_next/__init__.py +0 -0
  140. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inception_next/config.py +0 -0
  141. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inception_next/convert_inception_next_torch_to_keras.py +0 -0
  142. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inception_next/inception_next_model.py +0 -0
  143. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inception_resnetv2/__init__.py +0 -0
  144. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inception_resnetv2/config.py +0 -0
  145. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inception_resnetv2/convert_inceptionresnetv2_torch_to_keras.py +0 -0
  146. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inception_resnetv2/inceptionresnetv2_model.py +0 -0
  147. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inceptionv3/__init__.py +0 -0
  148. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inceptionv3/config.py +0 -0
  149. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inceptionv3/convert_inceptionv3_torch_to_keras.py +0 -0
  150. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inceptionv3/inceptionv3_model.py +0 -0
  151. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inceptionv4/__init__.py +0 -0
  152. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inceptionv4/config.py +0 -0
  153. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inceptionv4/convert_inceptionv4_torch_to_keras.py +0 -0
  154. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/inceptionv4/inceptionv4_model.py +0 -0
  155. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mit/__init__.py +0 -0
  156. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mit/config.py +0 -0
  157. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mlp_mixer/__init__.py +0 -0
  158. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mlp_mixer/config.py +0 -0
  159. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilenetv2/__init__.py +0 -0
  160. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilenetv2/config.py +0 -0
  161. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilenetv2/convert_mobilenetv2_torch_to_keras.py +0 -0
  162. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilenetv2/mobilenetv2_model.py +0 -0
  163. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilenetv3/__init__.py +0 -0
  164. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilenetv3/config.py +0 -0
  165. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilenetv3/convert_mobilenetv3_keras_to_keras.py +0 -0
  166. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilenetv3/mobilenetv3_model.py +0 -0
  167. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilevit/__init__.py +0 -0
  168. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilevit/config.py +0 -0
  169. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilevit/convert_mobilevit_torch_to_keras.py +0 -0
  170. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilevit/mobilevit_layers.py +0 -0
  171. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilevit/mobilevit_model.py +0 -0
  172. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilevitv2/__init__.py +0 -0
  173. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilevitv2/config.py +0 -0
  174. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilevitv2/convert_mobilevitv2_torch_to_keras.py +0 -0
  175. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/mobilevitv2/mobilevitv2_model.py +0 -0
  176. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/pit/__init__.py +0 -0
  177. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/pit/config.py +0 -0
  178. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/poolformer/__init__.py +0 -0
  179. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/poolformer/config.py +0 -0
  180. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/poolformer/convert_poolformer_torch_to_keras.py +0 -0
  181. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/poolformer/poolformer_model.py +0 -0
  182. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/res2net/__init__.py +0 -0
  183. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/res2net/config.py +0 -0
  184. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/res2net/convert_res2net_torch_to_keras.py +0 -0
  185. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/res2net/res2net_model.py +0 -0
  186. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resmlp/__init__.py +0 -0
  187. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resmlp/config.py +0 -0
  188. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resmlp/convert_resmlp_torch_to_keras.py +0 -0
  189. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resmlp/resmlp_layers.py +0 -0
  190. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resmlp/resmlp_model.py +0 -0
  191. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resnet/__init__.py +0 -0
  192. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resnet/config.py +0 -0
  193. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resnet/convert_resnet_torch_to_keras.py +0 -0
  194. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resnet/resnet_model.py +0 -0
  195. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resnetv2/__init__.py +0 -0
  196. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resnetv2/config.py +0 -0
  197. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resnetv2/convert_resnetv2_torch_to_keras.py +0 -0
  198. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resnetv2/resnetv2_layers.py +0 -0
  199. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resnetv2/resnetv2_model.py +0 -0
  200. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resnext/__init__.py +0 -0
  201. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resnext/config.py +0 -0
  202. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resnext/convert_resnext_torch_to_keras.py +0 -0
  203. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/resnext/resnext_model.py +0 -0
  204. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/rf_detr/__init__.py +0 -0
  205. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/rf_detr/config.py +0 -0
  206. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/rf_detr/rf_detr_image_processor.py +0 -0
  207. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/sam/__init__.py +0 -0
  208. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/sam/config.py +0 -0
  209. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/sam/convert_sam_hf_to_keras.py +0 -0
  210. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/sam/sam_image_processor.py +0 -0
  211. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/segformer/__init__.py +0 -0
  212. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/segformer/segformer_image_preprocessor.py +0 -0
  213. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/senet/__init__.py +0 -0
  214. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/senet/config.py +0 -0
  215. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/senet/convert_senet_torch_to_keras.py +0 -0
  216. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/senet/senet_model.py +0 -0
  217. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip/__init__.py +0 -0
  218. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip/config.py +0 -0
  219. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip/convert_siglip_torch_to_keras.py +0 -0
  220. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip/siglip_image_processor.py +0 -0
  221. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip/siglip_layers.py +0 -0
  222. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip/siglip_model.py +0 -0
  223. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip/siglip_processor.py +0 -0
  224. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip/siglip_tokenizer.py +0 -0
  225. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip2/__init__.py +0 -0
  226. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip2/config.py +0 -0
  227. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip2/convert_siglip2_torch_to_keras.py +0 -0
  228. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip2/siglip2_image_processor.py +0 -0
  229. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip2/siglip2_model.py +0 -0
  230. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip2/siglip2_processor.py +0 -0
  231. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/siglip2/siglip2_tokenizer.py +0 -0
  232. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/swin/__init__.py +0 -0
  233. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/vgg/__init__.py +0 -0
  234. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/vgg/config.py +0 -0
  235. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/vgg/convert_vgg_torch_to_keras.py +0 -0
  236. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/vgg/vgg_model.py +0 -0
  237. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/vit/__init__.py +0 -0
  238. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/vit/vit_layers.py +0 -0
  239. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/xception/__init__.py +0 -0
  240. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/xception/config.py +0 -0
  241. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/xception/convert_xception_org_keras_to_keras.py +0 -0
  242. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/models/xception/xception_model.py +0 -0
  243. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/utils/__init__.py +0 -0
  244. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/utils/custom_exception.py +0 -0
  245. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/utils/file_downloader.py +0 -0
  246. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/utils/model_equivalence_tester.py +0 -0
  247. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/utils/model_weights_util.py +0 -0
  248. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels/utils/weight_transfer_torch_to_keras.py +0 -0
  249. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels.egg-info/dependency_links.txt +0 -0
  250. {kmodels-0.2.0 → kmodels-0.2.2}/kmodels.egg-info/top_level.txt +0 -0
  251. {kmodels-0.2.0 → kmodels-0.2.2}/setup.cfg +0 -0
  252. {kmodels-0.2.0 → kmodels-0.2.2}/tests/test_modelling.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kmodels
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Pretrained keras 3 vision models
5
5
  Author-email: Gitesh Chawda <gitesh.ch.0912@gmail.com>
6
6
  License: Apache License 2.0
@@ -25,6 +25,10 @@ Requires-Python: >=3.11
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
27
  Requires-Dist: keras
28
+ Provides-Extra: test
29
+ Requires-Dist: pytest; extra == "test"
30
+ Requires-Dist: pytest-cov; extra == "test"
31
+ Requires-Dist: requests; extra == "test"
28
32
  Dynamic: license-file
29
33
 
30
34
  # Keras Models 🚀
@@ -35,7 +39,7 @@ Dynamic: license-file
35
39
 
36
40
  ## 📖 Introduction
37
41
 
38
- Keras Models (kmodels) is a collection of models with pretrained weights, built entirely with Keras 3. It supports a range of tasks, including classification, object detection (DETR), segmentation (SAM, SegFormer, DeepLabV3, EoMT), vision-language modeling (CLIP, SigLIP, SigLIP2), and more. kmodels includes custom layers and backbone support, providing flexibility and efficiency across various applications. For backbones, there are various weight variants like `in1k`, `in21k`, `fb_dist_in1k`, `ms_in22k`, `fb_in22k_ft_in1k`, `ns_jft_in1k`, `aa_in1k`, `cvnets_in1k`, `augreg_in21k_ft_in1k`, `augreg_in21k`, and many more.
42
+ Keras Models (kmodels) is a collection of models with pretrained weights, built entirely with Keras 3. It supports a range of tasks, including classification, object detection (DETR, RT-DETR, RF-DETR), segmentation (SAM, SAM2, SegFormer, DeepLabV3, EoMT), vision-language modeling (CLIP, SigLIP, SigLIP2), and more. kmodels includes custom layers and backbone support, providing flexibility and efficiency across various applications. For backbones, there are various weight variants like `in1k`, `in21k`, `fb_dist_in1k`, `ms_in22k`, `fb_in22k_ft_in1k`, `ns_jft_in1k`, `aa_in1k`, `cvnets_in1k`, `augreg_in21k_ft_in1k`, `augreg_in21k`, and many more.
39
43
 
40
44
  ## ⚡ Installation
41
45
 
@@ -62,6 +66,7 @@ pip install -U git+https://github.com/IMvision12/keras-models
62
66
  | Model | Description |
63
67
  |-------|-------------|
64
68
  | [SAM](docs/sam.md) | Segment Anything Model — promptable segmentation with points, boxes, or masks (ViT-B/L/H) |
69
+ | [SAM2](docs/sam2.md) | Segment Anything Model 2 — next generation of promptable visual segmentation (Hiera Tiny/Small/Base+/Large) |
65
70
  | [SegFormer](docs/segformer.md) | Transformer-based semantic segmentation with MLP decoder, Cityscapes & ADE20K weights |
66
71
  | [DeepLabV3](docs/deeplabv3.md) | Atrous convolution-based semantic segmentation |
67
72
  | [EoMT](docs/eomt.md) | Encoder-only Mask Transformer for panoptic segmentation |
@@ -71,6 +76,7 @@ pip install -U git+https://github.com/IMvision12/keras-models
71
76
  | Model | Description |
72
77
  |-------|-------------|
73
78
  | [DETR](docs/detr.md) | End-to-end object detection with Transformers (ResNet-50/101 backbones) |
79
+ | [RT-DETR](docs/rt_detr.md) | Real-time DETR with ResNet-vd backbone and hybrid encoder (ResNet-18/34/50/101 variants) |
74
80
  | [RF-DETR](docs/rf_detr.md) | Real-time detection transformer (Nano, Small, Medium, Base, Large variants) |
75
81
 
76
82
  **Vision-Language Models**
@@ -107,6 +113,7 @@ pip install -U git+https://github.com/IMvision12/keras-models
107
113
  | MobileNetV3 | [Searching for MobileNetV3](https://arxiv.org/abs/1905.02244) | `keras` |
108
114
  | MobileViT | [MobileViT: Light-weight, General-purpose, and Mobile-friendly Vision Transformer](https://arxiv.org/abs/2110.02178) | `timm` |
109
115
  | MobileViTV2 | [Separable Self-attention for Mobile Vision Transformers](https://arxiv.org/abs/2206.02680) | `timm` |
116
+ | NextViT | [Next-ViT: Next Generation Vision Transformer for Efficient Deployment in Realistic Industrial Scenarios](https://arxiv.org/abs/2207.05501) | `timm` |
110
117
  | PiT | [Rethinking Spatial Dimensions of Vision Transformers](https://arxiv.org/abs/2103.16302) | `timm` |
111
118
  | PoolFormer | [MetaFormer is Actually What You Need for Vision](https://arxiv.org/abs/2111.11418) | `timm` |
112
119
  | Res2Net | [Res2Net: A New Multi-scale Backbone Architecture](https://arxiv.org/abs/1904.01169) | `timm` |
@@ -127,6 +134,7 @@ pip install -U git+https://github.com/IMvision12/keras-models
127
134
  | 🏷️ Model Name | 📜 Reference Paper | 📦 Source of Weights |
128
135
  |---------------|-------------------|---------------------|
129
136
  | DETR | [End-to-End Object Detection with Transformers](https://arxiv.org/abs/2005.12872) | `transformers`|
137
+ | RT-DETR | [DETRs Beat YOLOs on Real-time Object Detection](https://arxiv.org/abs/2304.08069) | `transformers` |
130
138
  | RF-DETR | [RF-DETR: Real-Time Detection Transformer](https://arxiv.org/abs/2502.18860) | `rfdetr` |
131
139
 
132
140
  <br>
@@ -138,6 +146,7 @@ pip install -U git+https://github.com/IMvision12/keras-models
138
146
  | DeepLabV3 | [Rethinking Atrous Convolution for Semantic Image Segmentation](https://arxiv.org/abs/1706.05587) | `torchvision` |
139
147
  | EoMT | [Encoder-only Mask Transformer for Panoptic Segmentation](https://arxiv.org/abs/2504.07957) | `transformers` |
140
148
  | SAM | [Segment Anything](https://arxiv.org/abs/2304.02643) | `transformers` |
149
+ | SAM2 | [SAM 2: Segment Anything in Images and Videos](https://arxiv.org/abs/2408.00714) | `transformers` |
141
150
  | SegFormer | [SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers](https://arxiv.org/abs/2105.15203) | `transformers`|
142
151
 
143
152
  <br>
@@ -6,7 +6,7 @@
6
6
 
7
7
  ## 📖 Introduction
8
8
 
9
- Keras Models (kmodels) is a collection of models with pretrained weights, built entirely with Keras 3. It supports a range of tasks, including classification, object detection (DETR), segmentation (SAM, SegFormer, DeepLabV3, EoMT), vision-language modeling (CLIP, SigLIP, SigLIP2), and more. kmodels includes custom layers and backbone support, providing flexibility and efficiency across various applications. For backbones, there are various weight variants like `in1k`, `in21k`, `fb_dist_in1k`, `ms_in22k`, `fb_in22k_ft_in1k`, `ns_jft_in1k`, `aa_in1k`, `cvnets_in1k`, `augreg_in21k_ft_in1k`, `augreg_in21k`, and many more.
9
+ Keras Models (kmodels) is a collection of models with pretrained weights, built entirely with Keras 3. It supports a range of tasks, including classification, object detection (DETR, RT-DETR, RF-DETR), segmentation (SAM, SAM2, SegFormer, DeepLabV3, EoMT), vision-language modeling (CLIP, SigLIP, SigLIP2), and more. kmodels includes custom layers and backbone support, providing flexibility and efficiency across various applications. For backbones, there are various weight variants like `in1k`, `in21k`, `fb_dist_in1k`, `ms_in22k`, `fb_in22k_ft_in1k`, `ns_jft_in1k`, `aa_in1k`, `cvnets_in1k`, `augreg_in21k_ft_in1k`, `augreg_in21k`, and many more.
10
10
 
11
11
  ## ⚡ Installation
12
12
 
@@ -33,6 +33,7 @@ pip install -U git+https://github.com/IMvision12/keras-models
33
33
  | Model | Description |
34
34
  |-------|-------------|
35
35
  | [SAM](docs/sam.md) | Segment Anything Model — promptable segmentation with points, boxes, or masks (ViT-B/L/H) |
36
+ | [SAM2](docs/sam2.md) | Segment Anything Model 2 — next generation of promptable visual segmentation (Hiera Tiny/Small/Base+/Large) |
36
37
  | [SegFormer](docs/segformer.md) | Transformer-based semantic segmentation with MLP decoder, Cityscapes & ADE20K weights |
37
38
  | [DeepLabV3](docs/deeplabv3.md) | Atrous convolution-based semantic segmentation |
38
39
  | [EoMT](docs/eomt.md) | Encoder-only Mask Transformer for panoptic segmentation |
@@ -42,6 +43,7 @@ pip install -U git+https://github.com/IMvision12/keras-models
42
43
  | Model | Description |
43
44
  |-------|-------------|
44
45
  | [DETR](docs/detr.md) | End-to-end object detection with Transformers (ResNet-50/101 backbones) |
46
+ | [RT-DETR](docs/rt_detr.md) | Real-time DETR with ResNet-vd backbone and hybrid encoder (ResNet-18/34/50/101 variants) |
45
47
  | [RF-DETR](docs/rf_detr.md) | Real-time detection transformer (Nano, Small, Medium, Base, Large variants) |
46
48
 
47
49
  **Vision-Language Models**
@@ -78,6 +80,7 @@ pip install -U git+https://github.com/IMvision12/keras-models
78
80
  | MobileNetV3 | [Searching for MobileNetV3](https://arxiv.org/abs/1905.02244) | `keras` |
79
81
  | MobileViT | [MobileViT: Light-weight, General-purpose, and Mobile-friendly Vision Transformer](https://arxiv.org/abs/2110.02178) | `timm` |
80
82
  | MobileViTV2 | [Separable Self-attention for Mobile Vision Transformers](https://arxiv.org/abs/2206.02680) | `timm` |
83
+ | NextViT | [Next-ViT: Next Generation Vision Transformer for Efficient Deployment in Realistic Industrial Scenarios](https://arxiv.org/abs/2207.05501) | `timm` |
81
84
  | PiT | [Rethinking Spatial Dimensions of Vision Transformers](https://arxiv.org/abs/2103.16302) | `timm` |
82
85
  | PoolFormer | [MetaFormer is Actually What You Need for Vision](https://arxiv.org/abs/2111.11418) | `timm` |
83
86
  | Res2Net | [Res2Net: A New Multi-scale Backbone Architecture](https://arxiv.org/abs/1904.01169) | `timm` |
@@ -98,6 +101,7 @@ pip install -U git+https://github.com/IMvision12/keras-models
98
101
  | 🏷️ Model Name | 📜 Reference Paper | 📦 Source of Weights |
99
102
  |---------------|-------------------|---------------------|
100
103
  | DETR | [End-to-End Object Detection with Transformers](https://arxiv.org/abs/2005.12872) | `transformers`|
104
+ | RT-DETR | [DETRs Beat YOLOs on Real-time Object Detection](https://arxiv.org/abs/2304.08069) | `transformers` |
101
105
  | RF-DETR | [RF-DETR: Real-Time Detection Transformer](https://arxiv.org/abs/2502.18860) | `rfdetr` |
102
106
 
103
107
  <br>
@@ -109,6 +113,7 @@ pip install -U git+https://github.com/IMvision12/keras-models
109
113
  | DeepLabV3 | [Rethinking Atrous Convolution for Semantic Image Segmentation](https://arxiv.org/abs/1706.05587) | `torchvision` |
110
114
  | EoMT | [Encoder-only Mask Transformer for Panoptic Segmentation](https://arxiv.org/abs/2504.07957) | `transformers` |
111
115
  | SAM | [Segment Anything](https://arxiv.org/abs/2304.02643) | `transformers` |
116
+ | SAM2 | [SAM 2: Segment Anything in Images and Videos](https://arxiv.org/abs/2408.00714) | `transformers` |
112
117
  | SegFormer | [SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers](https://arxiv.org/abs/2105.15203) | `transformers`|
113
118
 
114
119
  <br>
@@ -2,4 +2,4 @@ from kmodels import layers, models, utils
2
2
  from kmodels.model_registry import list_models, register_model
3
3
  from kmodels.version import version
4
4
 
5
- __version__ = "0.2.0"
5
+ __version__ = "0.2.2"
@@ -0,0 +1,171 @@
1
+ """Cross-platform test runner for keras-models.
2
+
3
+ Usage:
4
+ kmodels-test <command>
5
+
6
+ Commands:
7
+ all Full test suite (torch, excludes slow/link tests)
8
+ backend-torch Backend tests on torch
9
+ backend-jax Backend tests on jax
10
+ backend-tf Backend tests on tensorflow
11
+ sas-torch Serialization + saving on torch
12
+ sas-tf Serialization + saving on tensorflow
13
+ sas-jax Serialization + saving on jax
14
+ df-torch Data format tests on torch
15
+ df-tf Data format tests on tensorflow (GPU auto-skip)
16
+ df-jax Data format tests on jax
17
+ gpu GPU-marked tests only
18
+ gpu-all Full test suite on GPU (torch + tf)
19
+ help Show this message
20
+ """
21
+
22
+ import os
23
+ import subprocess
24
+ import sys
25
+
26
+ PYTEST = [sys.executable, "-m", "pytest"]
27
+
28
+
29
+ def _run(backend, *pytest_args):
30
+ """Run pytest with the given backend and arguments."""
31
+ env = os.environ.copy()
32
+ if backend:
33
+ env["KERAS_BACKEND"] = backend
34
+ cmd = PYTEST + list(pytest_args)
35
+ print(f"\n{'=' * 60}")
36
+ print(f" KERAS_BACKEND={backend or '(default)'} {' '.join(pytest_args)}")
37
+ print(f"{'=' * 60}\n")
38
+ result = subprocess.run(cmd, env=env)
39
+ return result.returncode
40
+
41
+
42
+ COMMANDS = {}
43
+
44
+
45
+ def command(name):
46
+ def decorator(fn):
47
+ COMMANDS[name] = fn
48
+ return fn
49
+
50
+ return decorator
51
+
52
+
53
+ @command("all")
54
+ def test_all():
55
+ return _run(
56
+ "torch",
57
+ "tests/",
58
+ "-v",
59
+ "--durations=20",
60
+ "-m",
61
+ "not slow and not gpu",
62
+ )
63
+
64
+
65
+ @command("backend-torch")
66
+ def test_backend_torch():
67
+ return _run("torch", "tests/integration/test_backend_compatibility.py", "-v")
68
+
69
+
70
+ @command("backend-jax")
71
+ def test_backend_jax():
72
+ return _run("jax", "tests/integration/test_backend_compatibility.py", "-v")
73
+
74
+
75
+ @command("backend-tf")
76
+ def test_backend_tf():
77
+ return _run("tensorflow", "tests/integration/test_backend_compatibility.py", "-v")
78
+
79
+
80
+ SAS_FILES = [
81
+ "tests/integration/test_serialization.py",
82
+ "tests/integration/test_model_saving.py",
83
+ ]
84
+
85
+
86
+ @command("sas-torch")
87
+ def test_sas_torch():
88
+ return _run("torch", *SAS_FILES, "-v")
89
+
90
+
91
+ @command("sas-tf")
92
+ def test_sas_tf():
93
+ return _run("tensorflow", *SAS_FILES, "-v")
94
+
95
+
96
+ @command("sas-jax")
97
+ def test_sas_jax():
98
+ return _run("jax", *SAS_FILES, "-v")
99
+
100
+
101
+ DF_FILE = "tests/integration/test_data_formats.py"
102
+
103
+
104
+ @command("df-torch")
105
+ def test_df_torch():
106
+ return _run("torch", DF_FILE, "-v")
107
+
108
+
109
+ @command("df-tf")
110
+ def test_df_tf():
111
+ return _run("tensorflow", DF_FILE, "-v")
112
+
113
+
114
+ @command("df-jax")
115
+ def test_df_jax():
116
+ return _run("jax", DF_FILE, "-v")
117
+
118
+
119
+ @command("gpu")
120
+ def test_gpu():
121
+ rc1 = _run("torch", "tests/", "-v", "-m", "gpu")
122
+ rc2 = _run(
123
+ "tensorflow",
124
+ "tests/integration/test_data_formats.py",
125
+ "-v",
126
+ "-k",
127
+ "channels_first",
128
+ )
129
+ return rc1 or rc2
130
+
131
+
132
+ @command("gpu-all")
133
+ def test_gpu_all():
134
+ rc1 = _run(
135
+ "torch",
136
+ "tests/",
137
+ "-v",
138
+ "--durations=20",
139
+ "-m",
140
+ "not slow and not link_validation",
141
+ )
142
+ rc2 = _run(
143
+ "tensorflow",
144
+ "tests/",
145
+ "-v",
146
+ "--durations=20",
147
+ "-m",
148
+ "not slow and not link_validation",
149
+ )
150
+ return rc1 or rc2
151
+
152
+
153
+ @command("help")
154
+ def show_help():
155
+ print(__doc__)
156
+ return 0
157
+
158
+
159
+ def main():
160
+ if len(sys.argv) < 2 or sys.argv[1] not in COMMANDS:
161
+ show_help()
162
+ if len(sys.argv) >= 2 and sys.argv[1] not in COMMANDS:
163
+ print(f"\nError: Unknown command '{sys.argv[1]}'")
164
+ return 1
165
+ return 0
166
+
167
+ return COMMANDS[sys.argv[1]]()
168
+
169
+
170
+ if __name__ == "__main__":
171
+ sys.exit(main())
@@ -24,6 +24,7 @@ from kmodels.models import (
24
24
  mobilenetv3,
25
25
  mobilevit,
26
26
  mobilevitv2,
27
+ nextvit,
27
28
  pit,
28
29
  poolformer,
29
30
  res2net,
@@ -32,7 +33,9 @@ from kmodels.models import (
32
33
  resnetv2,
33
34
  resnext,
34
35
  rf_detr,
36
+ rt_detr,
35
37
  sam,
38
+ sam2,
36
39
  segformer,
37
40
  senet,
38
41
  siglip,
@@ -81,7 +81,7 @@ class ClassDistToken(layers.Layer):
81
81
  [cls_broadcasted, dist_broadcasted, inputs], axis=1
82
82
  )
83
83
  else:
84
- return ops.concatenate([cls_broadcasted, inputs], axis=1)
84
+ return cls_broadcasted
85
85
 
86
86
  def get_config(self):
87
87
  config = super().get_config()
@@ -313,8 +313,12 @@ class CaiT(keras.Model):
313
313
  name="stem_conv",
314
314
  )(x)
315
315
 
316
- grid_h = input_shape[0] // patch_size
317
- grid_w = input_shape[1] // patch_size
316
+ if data_format == "channels_first":
317
+ grid_h = input_shape[1] // patch_size
318
+ grid_w = input_shape[2] // patch_size
319
+ else:
320
+ grid_h = input_shape[0] // patch_size
321
+ grid_w = input_shape[1] // patch_size
318
322
 
319
323
  x = layers.Reshape((-1, embed_dim))(x)
320
324
 
@@ -351,7 +355,8 @@ class CaiT(keras.Model):
351
355
  if i == depth_token_only - 1:
352
356
  features.append(cls_token)
353
357
 
354
- x = layers.LayerNormalization(epsilon=1e-6, name="final_layernorm")(cls_token)
358
+ x = layers.Concatenate(axis=1, name="cat_cls_patch")([cls_token, x])
359
+ x = layers.LayerNormalization(epsilon=1e-6, name="final_layernorm")(x)
355
360
 
356
361
  if include_top:
357
362
  x = layers.Dense(
@@ -0,0 +1,205 @@
1
+ import re
2
+ from typing import Dict, List, Union
3
+
4
+ import keras
5
+ import timm
6
+ import torch
7
+ from tqdm import tqdm
8
+
9
+ from kmodels.models import cait
10
+ from kmodels.utils.custom_exception import WeightMappingError, WeightShapeMismatchError
11
+ from kmodels.utils.model_equivalence_tester import verify_cls_model_equivalence
12
+ from kmodels.utils.weight_split_torch_and_keras import split_model_weights
13
+ from kmodels.utils.weight_transfer_torch_to_keras import (
14
+ compare_keras_torch_names,
15
+ transfer_attention_weights,
16
+ transfer_weights,
17
+ )
18
+
19
+ weight_name_mapping = {
20
+ "_": ".",
21
+ "stem.conv": "patch_embed.proj",
22
+ "cls.token.cls.token": "cls_token",
23
+ "pos.embed.pos.embed": "pos_embed",
24
+ "layernorm.": "norm",
25
+ "dense.1": "fc1",
26
+ "dense.2": "fc2",
27
+ "blocks.token.only": "blocks_token_only",
28
+ "kernel": "weight",
29
+ "gamma": "weight",
30
+ "beta": "bias",
31
+ "moving_mean": "running_mean",
32
+ "moving_variance": "running_var",
33
+ "final.norm": "norm.",
34
+ "predictions": "head",
35
+ }
36
+
37
+ attn_weight_replacement: Dict[str, str] = {
38
+ "proj.l": "proj_l",
39
+ "proj.w": "proj_w",
40
+ "blocks.token.only": "blocks_token_only",
41
+ }
42
+
43
+ model_configs: List[Dict[str, Union[str, type]]] = [
44
+ {
45
+ "keras_cls": cait.CaiTXXS24,
46
+ "torch_name": "cait_xxs24_224.fb_dist_in1k",
47
+ "input_shape": [224, 224, 3],
48
+ "num_classes": 1000,
49
+ },
50
+ {
51
+ "keras_cls": cait.CaiTXXS24,
52
+ "torch_name": "cait_xxs24_384.fb_dist_in1k",
53
+ "input_shape": [384, 384, 3],
54
+ "num_classes": 1000,
55
+ },
56
+ {
57
+ "keras_cls": cait.CaiTXXS36,
58
+ "torch_name": "cait_xxs36_224.fb_dist_in1k",
59
+ "input_shape": [224, 224, 3],
60
+ "num_classes": 1000,
61
+ },
62
+ {
63
+ "keras_cls": cait.CaiTXXS36,
64
+ "torch_name": "cait_xxs36_384.fb_dist_in1k",
65
+ "input_shape": [384, 384, 3],
66
+ "num_classes": 1000,
67
+ },
68
+ {
69
+ "keras_cls": cait.CaiTXS24,
70
+ "torch_name": "cait_xs24_384.fb_dist_in1k",
71
+ "input_shape": [384, 384, 3],
72
+ "num_classes": 1000,
73
+ },
74
+ {
75
+ "keras_cls": cait.CaiTS24,
76
+ "torch_name": "cait_s24_224.fb_dist_in1k",
77
+ "input_shape": [224, 224, 3],
78
+ "num_classes": 1000,
79
+ },
80
+ {
81
+ "keras_cls": cait.CaiTS24,
82
+ "torch_name": "cait_s24_384.fb_dist_in1k",
83
+ "input_shape": [384, 384, 3],
84
+ "num_classes": 1000,
85
+ },
86
+ {
87
+ "keras_cls": cait.CaiTS36,
88
+ "torch_name": "cait_s36_384.fb_dist_in1k",
89
+ "input_shape": [384, 384, 3],
90
+ "num_classes": 1000,
91
+ },
92
+ {
93
+ "keras_cls": cait.CaiTM36,
94
+ "torch_name": "cait_m36_384.fb_dist_in1k",
95
+ "input_shape": [384, 384, 3],
96
+ "num_classes": 1000,
97
+ },
98
+ {
99
+ "keras_cls": cait.CaiTM48,
100
+ "torch_name": "cait_m48_448.fb_dist_in1k",
101
+ "input_shape": [448, 448, 3],
102
+ "num_classes": 1000,
103
+ },
104
+ ]
105
+
106
+ for model_config in model_configs:
107
+ torch_model_name: str = model_config["torch_name"]
108
+ print(f"\n{'=' * 60}")
109
+ print(f"Converting {torch_model_name}...")
110
+ print(f"{'=' * 60}")
111
+
112
+ keras_model: keras.Model = model_config["keras_cls"](
113
+ include_top=True,
114
+ input_shape=model_config["input_shape"],
115
+ classifier_activation="linear",
116
+ num_classes=model_config["num_classes"],
117
+ include_normalization=False,
118
+ weights=None,
119
+ )
120
+
121
+ torch_model: torch.nn.Module = timm.create_model(
122
+ torch_model_name, pretrained=True
123
+ ).eval()
124
+
125
+ trainable_torch_weights, non_trainable_torch_weights, _ = split_model_weights(
126
+ torch_model
127
+ )
128
+ trainable_keras_weights, non_trainable_keras_weights = split_model_weights(
129
+ keras_model
130
+ )
131
+
132
+ torch_weights_dict: Dict[str, torch.Tensor] = {
133
+ **trainable_torch_weights,
134
+ **non_trainable_torch_weights,
135
+ }
136
+
137
+ for keras_weight, keras_weight_name in tqdm(
138
+ trainable_keras_weights + non_trainable_keras_weights,
139
+ total=len(trainable_keras_weights + non_trainable_keras_weights),
140
+ desc="Transferring weights",
141
+ ):
142
+ torch_weight_name: str = keras_weight_name
143
+ for keras_name_part, torch_name_part in weight_name_mapping.items():
144
+ torch_weight_name = torch_weight_name.replace(
145
+ keras_name_part, torch_name_part
146
+ )
147
+ torch_weight_name = re.sub(
148
+ r"layerscale\.(\d+)\.variable(?:\.\d+)?", r"gamma_\1", torch_weight_name
149
+ )
150
+
151
+ if "attention" in torch_weight_name:
152
+ transfer_attention_weights(
153
+ keras_weight_name,
154
+ keras_weight,
155
+ torch_weights_dict,
156
+ attn_weight_replacement,
157
+ )
158
+ continue
159
+
160
+ if torch_weight_name not in torch_weights_dict:
161
+ raise WeightMappingError(keras_weight_name, torch_weight_name)
162
+
163
+ torch_weight: torch.Tensor = torch_weights_dict[torch_weight_name]
164
+
165
+ if torch_weight_name == "cls_token":
166
+ keras_weight.assign(torch_weight)
167
+ continue
168
+
169
+ if torch_weight_name == "pos_embed":
170
+ keras_weight.assign(torch_weight)
171
+ continue
172
+
173
+ if not compare_keras_torch_names(
174
+ keras_weight_name, keras_weight, torch_weight_name, torch_weight
175
+ ):
176
+ raise WeightShapeMismatchError(
177
+ keras_weight_name,
178
+ keras_weight.shape,
179
+ torch_weight_name,
180
+ torch_weight.shape,
181
+ )
182
+
183
+ transfer_weights(keras_weight_name, keras_weight, torch_weight)
184
+
185
+ results = verify_cls_model_equivalence(
186
+ model_a=torch_model,
187
+ model_b=keras_model,
188
+ input_shape=tuple(model_config["input_shape"]),
189
+ output_specs={"num_classes": model_config["num_classes"]},
190
+ run_performance=False,
191
+ atol=1e-4,
192
+ rtol=1e-4,
193
+ )
194
+
195
+ if not results["standard_input"]:
196
+ raise ValueError(
197
+ "Model equivalence test failed - model outputs do not match for standard input"
198
+ )
199
+
200
+ model_filename: str = f"{torch_model_name.replace('.', '_')}.weights.h5"
201
+ keras_model.save_weights(model_filename)
202
+ print(f"Model saved successfully as {model_filename}")
203
+
204
+ del keras_model, torch_model
205
+ torch.cuda.empty_cache() if torch.cuda.is_available() else None