В настоящее время я использую VGG16 + Keras + Theano считал методологию передачи обучения распознаванием классов растений. Он отлично работает и дает мне хорошую точность. Но следующая проблема, которую я пытаюсь решить, - найти способ идентификации, если входное изображение содержит растение вообще. Я не хочу иметь еще один классификатор, который сделает это, потому что это не очень эффективно.Эффективный способ узнать, связано ли изображение с набором данных, который использовался для обучения сверточной нейронной сети.
Итак, я сделал поиск и обнаружил, что мы можем получить активацию с последнего слоя модели (до уровня активации) и проанализировать его.
from keras import backend as K
model = util.load_model() # VGG16 model
model.load_weights(path_to_weights)
def get_activations(m, layer, X_batch):
x = [m.layers[0].input, K.learning_phase()]
y = [m.get_layer(layer).output]
get_activations = K.function(x, y)
activations = get_activations([X_batch, 0])
# trying to get some features from activations
# to understand how can we identify if an image is relevant
for l in activations[0]:
not_nulls = [x for x in l if x > 0]
# shows percentage of activated neurons
c1 = float(len(not_nulls))/len(l)
n_activated = len(not_nulls)
print 'c1:{}, n_activated:{}'.format(c1, n_activated)
return activations
get_activations(model, 'the_latest_layer_name', inputs)
Из приведенной выше коды я заметил, что, когда мы имеем очень ненужное изображение, количество активированных нейронов больше, чем для изображений, которые содержат растения:
- Для изображений, который с помощи для обучения модели, количество активированных нейронов 19% -23%
- для изображений, содержащих неизвестные виды 20% -26%
- для нерелевантных изображений 24% -28% растений
Это не очень хорошая функция, чтобы понять, пересекается ли изображение, соответствующее процентным значениям.
Итак, есть ли хороший способ решить эту проблему?
Я думаю, лучший способ - проверить, какие нуэлоны активированы для соответствующих изображений, а не процент нейронов. Много ли перекрывается? –
, поскольку Кришан сказал, что лучший способ - рассмотреть их как функции и проверить, есть ли какая-либо корреляция между кластерами двух классов. другой классификатор может быть добавлен также к определенному уровню, чтобы принять решение о да или нет. – Feras