Добавление внимания к простому CNN для плотности толпы - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь привлечь внимание к модели, созданной на основе бумаги http://openaccess.thecvf.com/content_cvpr_2018/html/Li_CSRNet_Dilated_Convolutional_CVPR_2018_paper.html У меня истек срок действия с несколькими решениями, но я нашел для своей цели привлечь очень простое внимание, которое я лучше всего добавляю уровни внимания в модели vgg16. Я не очень хорошо осведомлен в этой области, но большинство моделей внимания слишком усложняют дизайн. Проблема даже в том, что добавление одного плотного слоя приводит к очень плохим результатам. MAE инструмента изначально составляет 65, а мой твик заставляет его становиться больше 500.

if(batch_norm):
                model.add(Conv2D(64, kernel_size = kernel, input_shape = (rows,cols,3),activation = 'relu', padding='same'))
                model.add(BatchNormalization())
                model.add(Conv2D(64, kernel_size = kernel,activation = 'relu', padding='same'))
                model.add(BatchNormalization())
                #model.add(Dense(64, activation = 'softmax', kernel_initializer = init))
                model.add(MaxPooling2D(strides=2))
                model.add(Conv2D(128,kernel_size = kernel, activation = 'relu', padding='same'))
                model.add(BatchNormalization())
                model.add(Conv2D(128,kernel_size = kernel, activation = 'relu', padding='same'))
                model.add(BatchNormalization())
                model.add(Dense(256, activation = 'softmax', kernel_initializer = init))
                model.add(BatchNormalization())
                model.add(MaxPooling2D(strides=2))
                model.add(Conv2D(256,kernel_size = kernel, activation = 'relu', padding='same'))
                model.add(BatchNormalization())
                model.add(Conv2D(256,kernel_size = kernel, activation = 'relu', padding='same'))
                model.add(BatchNormalization())
                model.add(Conv2D(256,kernel_size = kernel, activation = 'relu', padding='same'))
                model.add(BatchNormalization())
                model.add(MaxPooling2D(strides=2))            
                model.add(Conv2D(512, kernel_size = kernel,activation = 'relu', padding='same'))
                model.add(Dense(256, activation = 'softmax', kernel_initializer = init))
                model.add(BatchNormalization())
                model.add(Conv2D(512, kernel_size = kernel,activation = 'relu', padding='same'))
                model.add(BatchNormalization())
                #model.add(Dense(512, activation = 'softmax', kernel_initializer = init))    # Eq. 9
                model.add(Conv2D(512, kernel_size = kernel,activation = 'relu', padding='same'))
                model.add(BatchNormalization())

            else:
                model.add(Conv2D(64, kernel_size = kernel,activation = 'relu', padding='same',input_shape = (rows, cols, 3), kernel_initializer = init))
                #model.add(Dense(64, activation = 'softmax', kernel_initializer = init))  
                model.add(Conv2D(64, kernel_size = kernel,activation = 'relu', padding='same', kernel_initializer = init))
                model.add(MaxPooling2D(strides=2))
                model.add(Conv2D(128,kernel_size = kernel, activation = 'relu', padding='same', kernel_initializer = init))
                #model.add(Dense(128, activation = 'softmax', kernel_initializer = init))
                model.add(Conv2D(128,kernel_size = kernel, activation = 'relu', padding='same', kernel_initializer = init))
                model.add(MaxPooling2D(strides=2))
                model.add(Conv2D(256,kernel_size = kernel, activation = 'relu', padding='same', kernel_initializer = init))
                model.add(Conv2D(256,kernel_size = kernel, activation = 'relu', padding='same', kernel_initializer = init))
                model.add(Conv2D(256,kernel_size = kernel, activation = 'relu', padding='same', kernel_initializer = init))
                model.add(Dense(256, activation = 'softmax', kernel_initializer = init))
                model.add(MaxPooling2D(strides=2))            
                model.add(Conv2D(512, kernel_size = kernel,activation = 'relu', padding='same', kernel_initializer = init))
                model.add(Conv2D(512, kernel_size = kernel,activation = 'relu', padding='same', kernel_initializer = init))
                #model.add(Dense(512, activation = 'softmax', kernel_initializer = init))
                model.add(Conv2D(512, kernel_size = kernel,activation = 'relu', padding='same', kernel_initializer = init))

Я знаю, что добавление слоя равно единице. из причин, но я также должен исключить, если причиной является оптимизатор, так как оригинальная модель использовала sgd, но не работала, или я изменил оптимизатор на adam следующим образом

 adam= adam(lr = 1e-8, decay = (5*1e-4))
            model.compile(loss='mean_squared_error',optimizer=adam,metrics=['mse'])

Я просто хотел бы знать что именно портит результаты, так это в основном мое добавление плотного слоя или изменение оптимизатора

...