Image Regression using .mat Files and a datastore

54 visualizaciones (últimos 30 días)
Matthew Fall
Matthew Fall el 29 de Abr. de 2019
Comentada: luisa di monaco el 6 de En. de 2022
I would like to train a CNN for image regression using a datastore. My images are stored in .mat files (not png or jpeg). This is not image-to-image regression, rather an image to single regression label problem. Is it possible to do this using a datastore, or at least some other out-of-memory approach?

Respuesta aceptada

luisa di monaco
luisa di monaco el 7 de Dic. de 2019
Editada: luisa di monaco el 2 de En. de 2020
I have solved something similar.
I'm trying to train a CNN for regression. My inputs are numeric matrices of size 32x32x2 (each input includes 2 grayscale images as two channels). My outputs are numeric vectors of length 6.
500 000 is the total amount of data.
I created 500 000 .mat file for inputs in folder 'inputData' and 500 000 .mat file for target in folder 'targetData'. Each .mat file contains only 1 variable of type double called 'C'.
The size of C is 32x32x2 (if input) or 1x6 (if target).
inputData=fileDatastore(fullfile('inputData'),'ReadFcn',@load,'FileExtensions','.mat');
targetData=fileDatastore(fullfile('targetData'),'ReadFcn',@load,'FileExtensions','.mat');
inputDatat = transform(inputData,@(data) rearrange_datastore(data));
targetDatat = transform(targetData,@(data) rearrange_datastore(data));
trainData=combine(inputDatat,targetDatat);
% here I defined my network architecture
% here I defined my training options
net=trainNetwork(trainData, Layers, options);
function image = rearrange_datastore(data)
image=data.C;
image= {image};
end
  18 comentarios
Fadhurrahman
Fadhurrahman el 6 de En. de 2022
Editada: Fadhurrahman el 6 de En. de 2022
hello @luisa di mona how did you create all 50000 mat files with 32x32? is there any refrence to do it?
luisa di monaco
luisa di monaco el 6 de En. de 2022
Hi,
the creation process was part of my thesis work. Here you can download my thesis:
http://webthesis.biblio.polito.it/id/eprint/14716 . Dataset creation is described in chapter 4 (4.2, 4.3 and 4.5) .
Here you can find some Matlab code: https://github.com/lu-p/standard-PIV-image-generator
I hope this can help.

Iniciar sesión para comentar.

Más respuestas (2)

Johanna Pingel
Johanna Pingel el 29 de Abr. de 2019
Editada: Johanna Pingel el 29 de Abr. de 2019
I've used a .mat to imagedatastore conversion here:
imds = imageDatastore(ImagesDir,'FileExtensions','.mat','ReadFcn',@matRead);
function data = matRead(filename)
inp = load(filename);
f = fields(inp);
data = inp.(f{1});
  2 comentarios
Matthew Fall
Matthew Fall el 29 de Abr. de 2019
Thank you for your swift reply.
Unfortunately, the matlab regression example requires loading all of the training and validation data in memory, which I want to avoid by using the datastore.
I've tried using the imageDatastore with regression labels before, but then trainNetwork gives me the error:
Error using trainNetwork (line 150)
Invalid training data. The labels of the ImageDatastore must be a categorical vector.
tianliang wang
tianliang wang el 28 de Abr. de 2021
Is it more convenient to use mat files as the training set for the images to vectors regression ?

Iniciar sesión para comentar.


Lykke Kempfner
Lykke Kempfner el 16 de Ag. de 2019
I have same problem.
I have many *.mat files with data that can not fit in memory. You may consider the files as not standard images. I have the ReadFunction for the files. I wish to create a datastore (?) where each sample are associated with two single values and not a class.
Are there any solution to this issue ?
  2 comentarios
Tomer Nahshon
Tomer Nahshon el 22 de En. de 2020
Same here
tanfeng
tanfeng el 12 de Oct. de 2020
You could try this
tblTrain=table(X,Y)
net = trainNetwork(tblTrain,layers,options);

Iniciar sesión para comentar.

Productos


Versión

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by