web-dev-qa-db-fra.com

Reconnaissance d'image CNN avec sortie de régression sur Tensorflow

Je veux prédire le temps d'attente estimé sur la base d'images à l'aide d'un CNN. J'imagine donc que cela utiliserait un CNN pour produire une sortie de type régression en utilisant une fonction de perte de RMSE, ce que j'utilise actuellement, mais cela ne fonctionne pas correctement.

Quelqu'un peut-il signaler des exemples qui utilisent la reconnaissance d'image CNN pour produire une sortie scalaire/de régression (au lieu d'une sortie de classe) similaire au temps d'attente afin que je puisse utiliser leurs techniques pour que cela fonctionne parce que je n'ai pas pu trouver un exemple approprié.

Tous les exemples CNN que j'ai trouvés concernent les données MSINT et distinguent les chats et les chiens qui produisent une sortie de classe, pas une sortie numérique/scalaire de temps d'attente.

Quelqu'un peut-il me donner un exemple en utilisant le tensorflow d'un CNN donnant une sortie scalaire ou de régression basée sur la reconnaissance d'image.

Merci beaucoup! Honnêtement, je suis super coincé et je n'obtiens aucun progrès et cela fait plus de deux semaines que je travaille sur ce même problème.

12
Ic3MaN911

Découvrez les modèles de voitures autonomes Udacity qui prennent une image d'entrée à partir d'une caméra de tableau de bord et prédisent un angle de direction (c.-à-d. Scalaire continu) pour rester sur la route ... en utilisant généralement une sortie de régression après une ou plusieurs couches entièrement connectées sur en haut des couches CNN.

https://github.com/udacity/self-driving-car/tree/master/steering-models/community-models

Voici un modèle typique:

https://github.com/udacity/self-driving-car/tree/master/steering-models/community-models/autumn

... il utilise tf.atan() ou vous pouvez utiliser tf.tanh() ou simplement linéaire pour obtenir votre sortie finale y.

Utilisez MSE pour votre fonction de perte.

Voici n autre exemple en keras ...

model = models.Sequential()
model.add(convolutional.Convolution2D(16, 3, 3, input_shape=(32, 128, 3), activation='relu'))
model.add(pooling.MaxPooling2D(pool_size=(2, 2)))
model.add(convolutional.Convolution2D(32, 3, 3, activation='relu'))
model.add(pooling.MaxPooling2D(pool_size=(2, 2)))
model.add(convolutional.Convolution2D(64, 3, 3, activation='relu'))
model.add(pooling.MaxPooling2D(pool_size=(2, 2)))
model.add(core.Flatten())
model.add(core.Dense(500, activation='relu'))
model.add(core.Dropout(.5))
model.add(core.Dense(100, activation='relu'))
model.add(core.Dropout(.25))
model.add(core.Dense(20, activation='relu'))
model.add(core.Dense(1))
model.compile(optimizer=optimizers.Adam(lr=1e-04), loss='mean_squared_error')

Leur principale différence par rapport aux exemples MNIST est qu'au lieu de se diriger vers un vecteur N-dim de logits en softmax avec perte d'entropie croisée, le ramener à un vecteur 1 dim avec perte MSE.

11
j314erre

La clé est de n'avoir AUCUNE fonction d'activation dans votre dernière couche entièrement connectée (sortie). Notez que vous devez avoir au moins 1 couche FC au préalable.

1
Edd