Разделение данных валидации поездов - метки доступны, но классов нет - PullRequest
1 голос
/ 05 апреля 2020

Мой учебный проект заключается в разработке нейронной сети для распознавания текста на номерных знаках. Поэтому я нашел набор данных ReId на https://medusa.fit.vutbr.cz/traffic/research-topics/general-traffic-analysis/holistic-recognition-of-low-quality-license-plates-by-cnn-using-track-annotated-data-iwt4s-avss-2017/. Этот набор данных содержит набор изображений номерных знаков, а также текст номерных знаков и использовался Spanhel et al. для аналогичного подхода, который я имею в виду.

Пример номера там:

License plate

В проекте I хочу распознать только текст номерного знака, то есть только «9B5 2145», а не аббревиатуру страны «CZ» и текст рекламы.

Я загрузил набор данных и csv-файл меток в свою локальную память. Итак, у меня есть следующая структура папок: один материнский каталог для всего моего проекта. Этот материнский каталог включает в себя мой каталог данных, в котором я хранил набор данных ReId. Этот набор данных включает в себя несколько подкаталогов, 4 каталога с обучающими данными и 4 с тестовыми данными, все эти подкаталоги содержат несколько изображений номерных знаков. Набор данных ReId также содержит CSV-файл trainVal, который структурирован следующим образом (фрагмент фактического листа):

trainVal Description

track_id равно подкаталогу набора данных ReID. image_path равно пути к изображению, в этом случае имя изображения равно 1_1. lp - это номерной знак, то есть фактический номерной знак. train - фиктивная переменная, равная единице, если изображение используется в учебных целях, и 0 для целей проверки.

Относительно этого набора данных я получил три основных вопроса:

  1. Как правильно читать на этих изображениях? Я пытался использовать что-то вроде этого

    from keras.preprocessing.image import ImageDataGenerator
    
    # create generator
    datagen = ImageDataGenerator()
    
    # prepare an iterators for each dataset
    train_it = datagen.flow_from_directory('data/train/', class_mode='binary')
    val_it = datagen.flow_from_directory('data/validation/', class_mode='binary')
    test_it = datagen.flow_from_directory('data/test/', class_mode='binary')
    
    # confirm the iterator works
    batchX, batchy = train_it.next()
    print('Batch shape=%s, min=%.3f, max=%.3f' % (batchX.shape, batchX.min(), batchX.max()))
    

Но, очевидно, Python не нашел изображения, принадлежащие к каким-либо классам (примечание: я использовал правильные пути). Это ясно для меня, потому что я еще не назначил класс своим данным. Итак, мой первый вопрос: должен ли я это сделать? Я так не думаю.

Как мне тогда правильно прочитать эти изображения? Я думаю, мне нужно получить numpy массивы для правильной работы с этими данными.

Как мне объединить мои изображения и метки? По моему мнению, я думаю, что мне нужно объединить два набора данных, не так ли?

Большое спасибо!

1 Ответ

2 голосов
/ 05 апреля 2020

Вопросы 1 и 2:

Для чтения изображений можно использовать imread из matplotlib.pyplot, как показано в примере, для этого не нужно устанавливать какие-либо классы.

Вопрос 3:

Метки и изображения можно объединить, сохранив соответствующий номерной знак в выходном массиве (в данном примере - y) для каждого изображения (сохраненного в этом примере в массиве xs) в массиве данных. , Вам не обязательно объединять их.

Надеюсь, я помог!

import os
import matplotlib.pyplot as plt
import numpy as np 
import pandas as pd

xs, y = [], []
main_dir = './sample/dataset' # the main directory 
label_data = pd.read_csv('labels.csv')

for folder in os.listdir(main_dir):
    for img in os.listdir(os.path.join(main, folder)):
        arr = plt.imread(os.path.join(main, folder) + img)
        xs.append(arr)
        y.append(label_data[label_data['image_path'] == os.path.join(folder, img)]['lp'])
                #^ this part can be changed depending on the exact format of your label data file.

# then you can convert them into numpy arrays and reshape them as you need.
xs = np.array(xs)
y = np.array(y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...