Как подготовить набор данных для сети обучения с несколькими задачами с выходным слоем yolo? - PullRequest
1 голос
/ 15 января 2020

У меня есть сверточная нейронная сеть с выходным слоем Yolo и выходными слоями с множественной регрессией (я только что сопоставил дополнительные выходные слои с типичным CNN Yolo), используя график вычислений. У меня проблема с набором данных, для выходных данных Yolo у меня есть файлы pascal -vo c .xml и для выходных данных регрессии .csv файлы, т.е.

ДАННЫЕ ОБНАРУЖЕНИЯ ОБЪЕКТА

            InputSplit[] data = new FileSplit(image_dir, NativeImageLoader.ALLOWED_FORMATS, random).sample(path_filter, split_weight0,split_weight1);
            InputSplit trainData = data[0];
            InputSplit testData = data[1];

            ObjectDetectionRecordReader recordReaderTrain = new ObjectDetectionRecordReader(height, width, nChannels,gridH, gridW, new VocLabelProvider(DIR));
            ObjectDetectionRecordReader recordReaderTest = new ObjectDetectionRecordReader(height, width, nChannels,gridH, gridW, new VocLabelProvider(DIR));
            recordReaderTrain.initialize(trainData);
            recordReaderTest.initialize(testData);

            //commented out since MultiDataSetIterator is meant to be used instead  
            //RecordReaderDataSetIterator train = new RecordReaderDataSetIterator(recordReaderTrain, batchSize, 1, 1, true);
            //RecordReaderDataSetIterator test = new RecordReaderDataSetIterator(recordReaderTest, 1, 1, 1, true);
            //train.setPreProcessor(new ImagePreProcessingScaler(0, 1));
            //test.setPreProcessor(new ImagePreProcessingScaler(0, 1)); 

РЕГРЕССИОННЫЕ ДАННЫЕ

 RecordReader r0= new CSVRecordReader(',');
 r0.initialize(new FileSplit(new File( DIR+"/r0.csv")));

 RecordReader r1=...
 ...

Я пытался реализовать пример многозадачного обучения из RecordReaderMultiDataSetIterator Пример 2

MultiDataSetIterator train = new RecordReaderMultiDataSetIterator.Builder(batchSize)
                .addReader("rr", recordReaderTrain)
                .addReader("r0", r0)
                .addInput("???")//recordReaderTrain.getInputImagesData() ?
                .addOutput("rr")//recordReaderTrain.getVocLabelData() ?
                .addOutput("r0")
                .addOutput("r1")
                ... //addOutput -> r2,r3,...
                .build();

Как правильно настроить вход из считывателя записей, который передает данные из VocLabelProvider, с предварительной обработкой данных или можно обернуть MultiDataSetIterator вокруг другого итератора набора данных, то есть итератора множества данных из двух наборов данных итераторы из .xml файлов обнаружения объектов и .csv файлов регрессии

...