8
8
- Adversarial Examples Improve Image Recognition - https://arxiv.org/abs/1911.09665
9
9
- Self-training with Noisy Student improves ImageNet classification - https://arxiv.org/abs/1911.04252
10
10
11
+ * EfficientNet-Lite
12
+
11
13
* MixNet (Small, Medium, and Large)
12
14
- MixConv: Mixed Depthwise Convolutional Kernels - https://arxiv.org/abs/1907.09595
13
15
36
38
'efficientnet_b4' , 'efficientnet_b5' , 'efficientnet_b6' , 'efficientnet_b7' , 'efficientnet_b8' ,
37
39
'efficientnet_l2' , 'efficientnet_es' , 'efficientnet_em' , 'efficientnet_el' ,
38
40
'efficientnet_cc_b0_4e' , 'efficientnet_cc_b0_8e' , 'efficientnet_cc_b1_8e' ,
41
+ 'efficientnet_lite0' , 'efficientnet_lite1' , 'efficientnet_lite2' , 'efficientnet_lite3' , 'efficientnet_lite4' ,
39
42
'tf_efficientnet_b0' , 'tf_efficientnet_b1' , 'tf_efficientnet_b2' , 'tf_efficientnet_b3' ,
40
43
'tf_efficientnet_b4' , 'tf_efficientnet_b5' , 'tf_efficientnet_b6' , 'tf_efficientnet_b7' , 'tf_efficientnet_b8' ,
41
44
'tf_efficientnet_b0_ap' , 'tf_efficientnet_b1_ap' , 'tf_efficientnet_b2_ap' , 'tf_efficientnet_b3_ap' ,
45
48
'tf_efficientnet_b7_ns' , 'tf_efficientnet_l2_ns' , 'tf_efficientnet_l2_ns_475' ,
46
49
'tf_efficientnet_es' , 'tf_efficientnet_em' , 'tf_efficientnet_el' ,
47
50
'tf_efficientnet_cc_b0_4e' , 'tf_efficientnet_cc_b0_8e' , 'tf_efficientnet_cc_b1_8e' ,
51
+ 'tf_efficientnet_lite0' , 'tf_efficientnet_lite1' , 'tf_efficientnet_lite2' , 'tf_efficientnet_lite3' ,
52
+ 'tf_efficientnet_lite4' ,
48
53
'mixnet_s' , 'mixnet_m' , 'mixnet_l' , 'mixnet_xl' , 'tf_mixnet_s' , 'tf_mixnet_m' , 'tf_mixnet_l' ]
49
54
50
55
54
59
'mnasnet_100' :
55
60
'https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_b1-74cb7081.pth' ,
56
61
'mnasnet_140' : None ,
62
+ 'mnasnet_small' : None ,
63
+
57
64
'semnasnet_050' : None ,
58
65
'semnasnet_075' : None ,
59
66
'semnasnet_100' :
60
67
'https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_a1-d9418771.pth' ,
61
68
'semnasnet_140' : None ,
62
- 'mnasnet_small' : None ,
69
+
63
70
'fbnetc_100' :
64
71
'https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/fbnetc_100-c345b898.pth' ,
65
72
'spnasnet_100' :
89
96
'efficientnet_cc_b0_8e' : None ,
90
97
'efficientnet_cc_b1_8e' : None ,
91
98
99
+ 'efficientnet_lite0' : None ,
100
+ 'efficientnet_lite1' : None ,
101
+ 'efficientnet_lite2' : None ,
102
+ 'efficientnet_lite3' : None ,
103
+ 'efficientnet_lite4' : None ,
104
+
92
105
'tf_efficientnet_b0' :
93
106
'https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b0_aa-827b6e33.pth' ,
94
107
'tf_efficientnet_b1' :
162
175
'tf_efficientnet_cc_b1_8e' :
163
176
'https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_cc_b1_8e-f7c79ae1.pth' ,
164
177
178
+ 'tf_efficientnet_lite0' :
179
+ 'https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite0-0aa007d2.pth' ,
180
+ 'tf_efficientnet_lite1' :
181
+ 'https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite1-bde8b488.pth' ,
182
+ 'tf_efficientnet_lite2' :
183
+ 'https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite2-dcccb7df.pth' ,
184
+ 'tf_efficientnet_lite3' :
185
+ 'https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite3-b733e338.pth' ,
186
+ 'tf_efficientnet_lite4' :
187
+ 'https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite4-741542c3.pth' ,
188
+
165
189
'mixnet_s' : 'https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_s-a907afbc.pth' ,
166
190
'mixnet_m' : 'https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_m-4647fc68.pth' ,
167
191
'mixnet_l' : 'https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_l-5a9a2ed8.pth' ,
@@ -187,15 +211,16 @@ class GenEfficientNet(nn.Module):
187
211
* Single-Path NAS Pixel1
188
212
"""
189
213
190
- def __init__ (self , block_args , num_classes = 1000 , in_chans = 3 , stem_size = 32 , num_features = 1280 ,
214
+ def __init__ (self , block_args , num_classes = 1000 , in_chans = 3 , num_features = 1280 , stem_size = 32 , fix_stem = False ,
191
215
channel_multiplier = 1.0 , channel_divisor = 8 , channel_min = None ,
192
216
pad_type = '' , act_layer = nn .ReLU , drop_rate = 0. , drop_connect_rate = 0. ,
193
217
se_kwargs = None , norm_layer = nn .BatchNorm2d , norm_kwargs = None ,
194
218
weight_init = 'goog' ):
195
219
super (GenEfficientNet , self ).__init__ ()
196
220
self .drop_rate = drop_rate
197
221
198
- stem_size = round_channels (stem_size , channel_multiplier , channel_divisor , channel_min )
222
+ if not fix_stem :
223
+ stem_size = round_channels (stem_size , channel_multiplier , channel_divisor , channel_min )
199
224
self .conv_stem = select_conv2d (in_chans , stem_size , 3 , stride = 2 , padding = pad_type )
200
225
self .bn1 = norm_layer (stem_size , ** norm_kwargs )
201
226
self .act1 = act_layer (inplace = True )
@@ -521,6 +546,47 @@ def _gen_efficientnet_condconv(
521
546
return model
522
547
523
548
549
+ def _gen_efficientnet_lite (variant , channel_multiplier = 1.0 , depth_multiplier = 1.0 , pretrained = False , ** kwargs ):
550
+ """Creates an EfficientNet-Lite model.
551
+
552
+ Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/lite
553
+ Paper: https://arxiv.org/abs/1905.11946
554
+
555
+ EfficientNet params
556
+ name: (channel_multiplier, depth_multiplier, resolution, dropout_rate)
557
+ 'efficientnet-lite0': (1.0, 1.0, 224, 0.2),
558
+ 'efficientnet-lite1': (1.0, 1.1, 240, 0.2),
559
+ 'efficientnet-lite2': (1.1, 1.2, 260, 0.3),
560
+ 'efficientnet-lite3': (1.2, 1.4, 280, 0.3),
561
+ 'efficientnet-lite4': (1.4, 1.8, 300, 0.3),
562
+
563
+ Args:
564
+ channel_multiplier: multiplier to number of channels per layer
565
+ depth_multiplier: multiplier to number of repeats per stage
566
+ """
567
+ arch_def = [
568
+ ['ds_r1_k3_s1_e1_c16' ],
569
+ ['ir_r2_k3_s2_e6_c24' ],
570
+ ['ir_r2_k5_s2_e6_c40' ],
571
+ ['ir_r3_k3_s2_e6_c80' ],
572
+ ['ir_r3_k5_s1_e6_c112' ],
573
+ ['ir_r4_k5_s2_e6_c192' ],
574
+ ['ir_r1_k3_s1_e6_c320' ],
575
+ ]
576
+ model_kwargs = dict (
577
+ block_args = decode_arch_def (arch_def , depth_multiplier , fix_first_last = True ),
578
+ num_features = 1280 ,
579
+ stem_size = 32 ,
580
+ fix_stem = True ,
581
+ channel_multiplier = channel_multiplier ,
582
+ act_layer = nn .ReLU6 ,
583
+ norm_kwargs = resolve_bn_args (kwargs ),
584
+ ** kwargs ,
585
+ )
586
+ model = _create_model (model_kwargs , variant , pretrained )
587
+ return model
588
+
589
+
524
590
def _gen_mixnet_s (variant , channel_multiplier = 1.0 , pretrained = False , ** kwargs ):
525
591
"""Creates a MixNet Small model.
526
592
@@ -795,6 +861,41 @@ def efficientnet_cc_b1_8e(pretrained=False, **kwargs):
795
861
return model
796
862
797
863
864
+ def efficientnet_lite0 (pretrained = False , ** kwargs ):
865
+ """ EfficientNet-Lite0 """
866
+ model = _gen_efficientnet_lite (
867
+ 'efficientnet_lite0' , channel_multiplier = 1.0 , depth_multiplier = 1.0 , pretrained = pretrained , ** kwargs )
868
+ return model
869
+
870
+
871
+ def efficientnet_lite1 (pretrained = False , ** kwargs ):
872
+ """ EfficientNet-Lite1 """
873
+ model = _gen_efficientnet_lite (
874
+ 'efficientnet_lite1' , channel_multiplier = 1.0 , depth_multiplier = 1.1 , pretrained = pretrained , ** kwargs )
875
+ return model
876
+
877
+
878
+ def efficientnet_lite2 (pretrained = False , ** kwargs ):
879
+ """ EfficientNet-Lite2 """
880
+ model = _gen_efficientnet_lite (
881
+ 'efficientnet_lite2' , channel_multiplier = 1.1 , depth_multiplier = 1.2 , pretrained = pretrained , ** kwargs )
882
+ return model
883
+
884
+
885
+ def efficientnet_lite3 (pretrained = False , ** kwargs ):
886
+ """ EfficientNet-Lite3 """
887
+ model = _gen_efficientnet_lite (
888
+ 'efficientnet_lite3' , channel_multiplier = 1.2 , depth_multiplier = 1.4 , pretrained = pretrained , ** kwargs )
889
+ return model
890
+
891
+
892
+ def efficientnet_lite4 (pretrained = False , ** kwargs ):
893
+ """ EfficientNet-Lite4 """
894
+ model = _gen_efficientnet_lite (
895
+ 'efficientnet_lite4' , channel_multiplier = 1.4 , depth_multiplier = 1.8 , pretrained = pretrained , ** kwargs )
896
+ return model
897
+
898
+
798
899
def tf_efficientnet_b0 (pretrained = False , ** kwargs ):
799
900
""" EfficientNet-B0 AutoAug. Tensorflow compatible variant """
800
901
kwargs ['bn_eps' ] = BN_EPS_TF_DEFAULT
@@ -1148,6 +1249,51 @@ def tf_efficientnet_cc_b1_8e(pretrained=False, **kwargs):
1148
1249
return model
1149
1250
1150
1251
1252
+ def tf_efficientnet_lite0 (pretrained = False , ** kwargs ):
1253
+ """ EfficientNet-Lite0. Tensorflow compatible variant """
1254
+ kwargs ['bn_eps' ] = BN_EPS_TF_DEFAULT
1255
+ kwargs ['pad_type' ] = 'same'
1256
+ model = _gen_efficientnet_lite (
1257
+ 'tf_efficientnet_lite0' , channel_multiplier = 1.0 , depth_multiplier = 1.0 , pretrained = pretrained , ** kwargs )
1258
+ return model
1259
+
1260
+
1261
+ def tf_efficientnet_lite1 (pretrained = False , ** kwargs ):
1262
+ """ EfficientNet-Lite1. Tensorflow compatible variant """
1263
+ kwargs ['bn_eps' ] = BN_EPS_TF_DEFAULT
1264
+ kwargs ['pad_type' ] = 'same'
1265
+ model = _gen_efficientnet_lite (
1266
+ 'tf_efficientnet_lite1' , channel_multiplier = 1.0 , depth_multiplier = 1.1 , pretrained = pretrained , ** kwargs )
1267
+ return model
1268
+
1269
+
1270
+ def tf_efficientnet_lite2 (pretrained = False , ** kwargs ):
1271
+ """ EfficientNet-Lite2. Tensorflow compatible variant """
1272
+ kwargs ['bn_eps' ] = BN_EPS_TF_DEFAULT
1273
+ kwargs ['pad_type' ] = 'same'
1274
+ model = _gen_efficientnet_lite (
1275
+ 'tf_efficientnet_lite2' , channel_multiplier = 1.1 , depth_multiplier = 1.2 , pretrained = pretrained , ** kwargs )
1276
+ return model
1277
+
1278
+
1279
+ def tf_efficientnet_lite3 (pretrained = False , ** kwargs ):
1280
+ """ EfficientNet-Lite3. Tensorflow compatible variant """
1281
+ kwargs ['bn_eps' ] = BN_EPS_TF_DEFAULT
1282
+ kwargs ['pad_type' ] = 'same'
1283
+ model = _gen_efficientnet_lite (
1284
+ 'tf_efficientnet_lite3' , channel_multiplier = 1.2 , depth_multiplier = 1.4 , pretrained = pretrained , ** kwargs )
1285
+ return model
1286
+
1287
+
1288
+ def tf_efficientnet_lite4 (pretrained = False , ** kwargs ):
1289
+ """ EfficientNet-Lite4. Tensorflow compatible variant """
1290
+ kwargs ['bn_eps' ] = BN_EPS_TF_DEFAULT
1291
+ kwargs ['pad_type' ] = 'same'
1292
+ model = _gen_efficientnet_lite (
1293
+ 'tf_efficientnet_lite4' , channel_multiplier = 1.4 , depth_multiplier = 1.8 , pretrained = pretrained , ** kwargs )
1294
+ return model
1295
+
1296
+
1151
1297
def mixnet_s (pretrained = False , ** kwargs ):
1152
1298
"""Creates a MixNet Small model.
1153
1299
"""
0 commit comments