advaitsave / Multiclass-Semantic-Segmentation-CamVid

Tensorflow 2 implementation of complete pipeline for multiclass image semantic segmentation using UNet, SegNet and FCN32 architectures on Cambridge-driving Labeled Video Database (CamVid) dataset.
82 stars 41 forks source link

Error when reducing the number of classes from 32 to 8 #2

Open YasarL opened 4 years ago

YasarL commented 4 years ago

Hey there, did someone try to reduce the number of classes? In my case it's about reducing from 32 to 8. Is that possible at all with this implementation?

When I adjust the label_codes, label_names dictionary to 8 entries and also change from "model = get_small_unet(n_filters = 32)" to model = get_small_unet(n_filters = 8)

I hope you understand my problem. If more information is required from my side please tell me so I can give it to you! I'm new to posting questions on GitHub ;)

The error I get when training the network:

Epoch 1/2 Found 3312 images belonging to 1 classes. Found 3312 images belonging to 1 classes.

ValueError Traceback (most recent call last)

in () 6 #result = model.fit_generator(TrainAugmentGenerator(), steps_per_epoch=18 , 7 validation_data = ValAugmentGenerator(), ----> 8 validation_steps = validation_steps, epochs=num_epochs, callbacks=callbacks) 9 model.save_weights("camvid_model_150_epochs.h5", overwrite=True) /net/store/nbp/projects/affordance_prediction/alimberg/tf2/local/lib/python2.7/site-packages/tensorflow_core/python/keras/engine/training.pyc in fit_generator(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, validation_freq, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch) 1295 shuffle=shuffle, 1296 initial_epoch=initial_epoch, -> 1297 steps_name='steps_per_epoch') 1298 1299 def evaluate_generator(self, /net/store/nbp/projects/affordance_prediction/alimberg/tf2/local/lib/python2.7/site-packages/tensorflow_core/python/keras/engine/training_generator.pyc in model_iteration(model, data, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, validation_freq, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch, mode, batch_size, steps_name, **kwargs) 263 264 is_deferred = not model._is_compiled --> 265 batch_outs = batch_function(*batch_data) 266 if not isinstance(batch_outs, list): 267 batch_outs = [batch_outs] /net/store/nbp/projects/affordance_prediction/alimberg/tf2/local/lib/python2.7/site-packages/tensorflow_core/python/keras/engine/training.pyc in train_on_batch(self, x, y, sample_weight, class_weight, reset_metrics) 971 outputs = training_v2_utils.train_on_batch( 972 self, x, y=y, sample_weight=sample_weight, --> 973 class_weight=class_weight, reset_metrics=reset_metrics) 974 outputs = (outputs['total_loss'] + outputs['output_losses'] + 975 outputs['metrics']) /net/store/nbp/projects/affordance_prediction/alimberg/tf2/local/lib/python2.7/site-packages/tensorflow_core/python/keras/engine/training_v2_utils.pyc in train_on_batch(model, x, y, sample_weight, class_weight, reset_metrics) 251 x, y, sample_weights = model._standardize_user_data( 252 x, y, sample_weight=sample_weight, class_weight=class_weight, --> 253 extract_tensors_from_dataset=True) 254 batch_size = array_ops.shape(nest.flatten(x, expand_composites=True)[0])[0] 255 # If `model._distribution_strategy` is True, then we are in a replica context /net/store/nbp/projects/affordance_prediction/alimberg/tf2/local/lib/python2.7/site-packages/tensorflow_core/python/keras/engine/training.pyc in _standardize_user_data(self, x, y, sample_weight, class_weight, batch_size, check_steps, steps_name, steps, validation_split, shuffle, extract_tensors_from_dataset) 2536 # Additional checks to avoid users mistakenly using improper loss fns. 2537 training_utils.check_loss_and_target_compatibility( -> 2538 y, self._feed_loss_fns, feed_output_shapes) 2539 2540 # If sample weight mode has not been set and weights are None for all the /net/store/nbp/projects/affordance_prediction/alimberg/tf2/local/lib/python2.7/site-packages/tensorflow_core/python/keras/engine/training_utils.pyc in check_loss_and_target_compatibility(targets, loss_fns, output_shapes) 741 raise ValueError('A target array with shape ' + str(y.shape) + 742 ' was passed for an output of shape ' + str(shape) + --> 743 ' while using as loss `' + loss_name + '`. ' 744 'This loss expects targets to have the same shape ' 745 'as the output.') ValueError: A target array with shape (5, 256, 256, 8) was passed for an output of shape (5, 256, 256, 32) while using as loss `categorical_crossentropy`. This loss expects targets to have the same shape as the output._
YasarL commented 4 years ago

Solved.