Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
K
keras-retinanet
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Seyfullah Tıkıç
keras-retinanet
Commits
2c444aa0
Kaydet (Commit)
2c444aa0
authored
Eki 30, 2019
tarafından
ZFTurbo
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
1
üst
104c8be9
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
124 additions
and
1 deletion
+124
-1
__init__.py
keras_retinanet/models/__init__.py
+3
-1
senet.py
keras_retinanet/models/senet.py
+121
-0
No files found.
keras_retinanet/models/__init__.py
Dosyayı görüntüle @
2c444aa0
...
...
@@ -49,7 +49,9 @@ class Backbone(object):
def
backbone
(
backbone_name
):
""" Returns a backbone object for the given backbone.
"""
if
'resnet'
in
backbone_name
:
if
'seresnext'
in
backbone_name
or
'seresnet'
in
backbone_name
or
'senet'
in
backbone_name
:
from
.senet
import
SeBackbone
as
b
elif
'resnet'
in
backbone_name
:
from
.resnet
import
ResNetBackbone
as
b
elif
'mobilenet'
in
backbone_name
:
from
.mobilenet
import
MobileNetBackbone
as
b
...
...
keras_retinanet/models/senet.py
0 → 100644
Dosyayı görüntüle @
2c444aa0
"""
Copyright 2017-2018 Fizyr (https://fizyr.com)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""
import
keras
from
keras.utils
import
get_file
import
keras_resnet
import
keras_resnet.models
from
.
import
retinanet
from
.
import
Backbone
from
classification_models.keras
import
Classifiers
class
SeBackbone
(
Backbone
):
""" Describes backbone information and provides utility functions.
"""
def
__init__
(
self
,
backbone
):
super
(
SeBackbone
,
self
)
.
__init__
(
backbone
)
self
.
custom_objects
.
update
(
keras_resnet
.
custom_objects
)
self
.
preprocess_image_func
=
None
def
retinanet
(
self
,
*
args
,
**
kwargs
):
""" Returns a retinanet model using the correct backbone.
"""
_
,
self
.
preprocess_image_func
=
Classifiers
.
get
(
self
.
backbone
)
return
senet_retinanet
(
*
args
,
backbone
=
self
.
backbone
,
**
kwargs
)
def
download_imagenet
(
self
):
""" Downloads ImageNet weights and returns path to weights file.
"""
return
def
validate
(
self
):
""" Checks whether the backbone string is correct.
"""
allowed_backbones
=
[
'seresnet18'
,
'seresnet34'
,
'seresnet50'
,
'seresnet101'
,
'seresnet152'
,
'seresnext50'
,
'seresnext101'
,
'senet154'
]
backbone
=
self
.
backbone
.
split
(
'_'
)[
0
]
if
backbone
not
in
allowed_backbones
:
raise
ValueError
(
'Backbone (
\'
{}
\'
) not in allowed backbones ({}).'
.
format
(
backbone
,
allowed_backbones
))
def
preprocess_image
(
self
,
inputs
):
""" Takes as input an image and prepares it for being passed through the network.
"""
return
self
.
preprocess_image_func
(
inputs
)
def
senet_retinanet
(
num_classes
,
backbone
=
'seresnext50'
,
inputs
=
None
,
modifier
=
None
,
**
kwargs
):
""" Constructs a retinanet model using a resnet backbone.
Args
num_classes: Number of classes to predict.
backbone: Which backbone to use (one of ('resnet50', 'resnet101', 'resnet152')).
inputs: The inputs to the network (defaults to a Tensor of shape (None, None, 3)).
modifier: A function handler which can modify the backbone before using it in retinanet (this can be used to freeze backbone layers for example).
Returns
RetinaNet model with a ResNet backbone.
"""
# choose default input
if
inputs
is
None
:
if
keras
.
backend
.
image_data_format
()
==
'channels_first'
:
inputs
=
keras
.
layers
.
Input
(
shape
=
(
3
,
None
,
None
))
else
:
# inputs = keras.layers.Input(shape=(224, 224, 3))
inputs
=
keras
.
layers
.
Input
(
shape
=
(
None
,
None
,
3
))
classifier
,
_
=
Classifiers
.
get
(
backbone
)
model
=
classifier
(
input_tensor
=
inputs
,
include_top
=
False
,
weights
=
'imagenet'
)
# get last conv layer from the end of each block [28x28, 14x14, 7x7]
if
backbone
==
'seresnet18'
or
backbone
==
'seresnet34'
:
layer_outputs
=
[
'stage3_unit1_relu1'
,
'stage4_unit1_relu1'
,
'relu1'
]
elif
backbone
==
'seresnet50'
:
layer_outputs
=
[
'activation_36'
,
'activation_66'
,
'activation_81'
]
elif
backbone
==
'seresnet101'
:
layer_outputs
=
[
'activation_36'
,
'activation_151'
,
'activation_166'
]
elif
backbone
==
'seresnet152'
:
layer_outputs
=
[
'activation_56'
,
'activation_236'
,
'activation_251'
]
elif
backbone
==
'seresnext50'
:
layer_outputs
=
[
'activation_37'
,
'activation_67'
,
'activation_81'
]
elif
backbone
==
'seresnext101'
:
layer_outputs
=
[
'activation_37'
,
'activation_152'
,
'activation_166'
]
elif
backbone
==
'senet154'
:
layer_outputs
=
[
'activation_59'
,
'activation_239'
,
'activation_253'
]
else
:
raise
ValueError
(
'Backbone (
\'
{}
\'
) is invalid.'
.
format
(
backbone
))
layer_outputs
=
[
model
.
get_layer
(
name
=
layer_outputs
[
0
])
.
output
,
# 28x28
model
.
get_layer
(
name
=
layer_outputs
[
1
])
.
output
,
# 14x14
model
.
get_layer
(
name
=
layer_outputs
[
2
])
.
output
,
# 7x7
]
# create the densenet backbone
model
=
keras
.
models
.
Model
(
inputs
=
inputs
,
outputs
=
layer_outputs
,
name
=
model
.
name
)
# invoke modifier if given
if
modifier
:
model
=
modifier
(
model
)
# create the full model
return
retinanet
.
retinanet
(
inputs
=
inputs
,
num_classes
=
num_classes
,
backbone_layers
=
model
.
outputs
,
**
kwargs
)
def
seresnext50_retinanet
(
num_classes
,
inputs
=
None
,
**
kwargs
):
return
senet_retinanet
(
num_classes
=
num_classes
,
backbone
=
'seresnext50'
,
inputs
=
inputs
,
**
kwargs
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment