Ho lavorato su un problema di regressione in cui l'input è un'immagine e l'etichetta ha un valore continuo tra 80 e 350. Le immagini sono di alcuni prodotti chimici dopo una reazione. Il colore che risulta indica la concentrazione di un'altra sostanza chimica rimasta, ed è quello che il modello deve produrre: la concentrazione di quella sostanza chimica. Le immagini possono essere ruotate, capovolte, specchiate e l'output previsto dovrebbe essere sempre lo stesso. Questo tipo di analisi viene eseguita in veri e propri laboratori (macchine molto specializzate generano la concentrazione delle sostanze chimiche usando l'analisi del colore proprio come sto addestrando questo modello a fare).
Finora ho sperimentato solo modelli basati approssimativamente su VGG (sequenze multiple di blocchi conv-conv-conv-pool). Prima di sperimentare architetture più recenti (Inception, ResNets, ecc.), Ho pensato di ricercare se ci sono altre architetture più comunemente usate per la regressione usando le immagini.
Il set di dati è simile al seguente:
Il set di dati contiene circa 5.000 campioni 250x250, che ho ridimensionato a 64x64, quindi l'addestramento è più semplice. Una volta trovata un'architettura promettente, sperimenterò immagini con risoluzione maggiore.
Finora, i miei migliori modelli hanno un errore quadratico medio su entrambi i set di addestramento e di validazione di circa 0,3, che è tutt'altro che accettabile nel mio caso d'uso.
Finora il mio miglior modello è simile al seguente:
// pseudo code
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])
x = dropout()->conv2d(x, filters=128, kernel=[1, 1])->batch_norm()->relu()
x = dropout()->conv2d(x, filters=32, kernel=[1, 1])->batch_norm()->relu()
y = dense(x, units=1)
// loss = mean_squared_error(y, labels)
Domanda
Qual è un'architettura appropriata per l'output di regressione da un input di immagine?
modificare
Ho riformulato la mia spiegazione e rimosso le menzioni di accuratezza.
Modifica 2
Ho ristrutturato la mia domanda, quindi spero sia chiaro cosa sto cercando