Форум программистов, компьютерный форум, киберфорум
Python: ИИ, нейросети, ML, агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465

Загрузка изображений и масок для обучения CNN

21.05.2021, 20:43. Показов 3063. Ответов 8

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Есть две директории:

- 1-ая содержит изображения - images_train_128_patches_stone. В ней находятся файлы с именами вида "images_as_128x128_patches%d.tif"

- 2-ая содержит маски данных изображений - masks_train_128_patches_stone. В ней находятся файлы с именами вида "masks_as_128x128_patches%d.tif"

Если сравнивать по номерам (%d) файлы в данных папках, то они совпадают.

Подключаю диск в Google Colab, считываю данные изображения в массивы numpy:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
train_images = []
for directory_path in glob.glob('/content/gdrive/My Drive/Image_dataset/sandstone/images_train_128_patches_stone'):
    for img_path in glob.glob(os.path.join(directory_path, "*.tif")):
        #Считывание изображения в (RGB-1)
        img = cv2.imread(img_path, 1)       
        #img = cv2.resize(img, (SIZE_Y, SIZE_X))
        #img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
        train_images.append(img)
 
train_images = np.array(train_images)
 
train_masks = [] 
for directory_path in glob.glob('/content/gdrive/My Drive/Image_dataset/sandstone/masks_train_128_patches_stone'):
    for mask_path in glob.glob(os.path.join(directory_path, "*.tif")):
        #Считывание изображения в оттенках серого
        mask = cv2.imread(mask_path, 0)       
        #mask = cv2.resize(mask, (SIZE_Y, SIZE_X), interpolation = cv2.INTER_NEAREST)  #Otherwise ground truth changes due to interpolation
        #img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
        train_masks.append(mask)
Кодирую метки для масок:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from sklearn.preprocessing import LabelEncoder
labelencoder = LabelEncoder()
# Возвращает размерности массивов (уровней массивов)
number_images, height, width = train_masks.shape
print("Размерности массивов: ", train_masks.shape)
print("Class values in the dataset are ... ", np.unique(train_masks))
# Изменение представления массива (перестройка уровней)
train_masks_reshaped = train_masks.reshape(-1,1)
print("Размерности массивов: ", train_masks_reshaped.shape)
#Преобразования категориальных или текстовых данных в числа.
#Нормализует метки таким образом, чтобы они содержали только значения от 0 до n_classes-1
#Tакже можно использовать для преобразования нечисловых меток (если они хешируемы и сопоставимы) в числовые метки
train_masks_reshaped_encoded = labelencoder.fit_transform(train_masks_reshaped)
train_masks_encoded_original_shape = train_masks_reshaped_encoded.reshape(number_images, height, width)
print("Class values in the dataset are ... ", np.unique(train_masks_encoded_original_shape))
Добавляю метки классов в массив с масками:
Python
1
train_masks_input = np.expand_dims(train_masks_encoded_original_shape, axis=3)
Разбиваю данные:
Python
1
2
3
from sklearn.model_selection import train_test_split
X1, X_test, y1, y_test = train_test_split(train_images, train_masks_input, test_size = 0.10, random_state = 0)
X_train, X_do_not_use, y_train, y_do_not_use = train_test_split(X1, y1, test_size = 0.5, random_state = 0)
Далее пытаюсь проверить соответствие маски изображению:
Python
1
2
3
4
5
6
7
8
9
10
11
import random
import numpy as np
image_number = random.randint(0, len(X_train))
plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.imshow(np.reshape(X_train[image_number], (128, 128,3)))
#plt.imshow(X_train[image_number])
plt.subplot(122)
plt.imshow(np.reshape(y_train[image_number], (128, 128)), cmap='gray')
#plt.imshow(y_train[image_number])
plt.show()
И видно, что маска не соответствует изображению, произошло нарушение порядка следования изображений и масок.

Почему произошло нарушение порядка следования изображений и масок и как это можно исправить?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2021, 20:43
Ответы с готовыми решениями:

Реализация наложений изображений, масок на другие изображения.
Всем привет:) Суть: изменение графики наложением изображений друг на друга; это можно сделать, отобразив полупрозрачный TImage поверх...

set cnn = Server.CreateObject('ADODB.Connection') cnn.open '<conn string>'
set cnn = Server.CreateObject('ADODB.Connection') cnn.open '&lt;conn string&gt;' скажите есть разница между таким способом: set rst =...

Загрузка обучения нейросети для дальнейшей работы
Всем привет. У меня есть обученная нейросеть, которая обучалась на определенном количестве изображений и распознает их. Подскажите...

8
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
21.05.2021, 20:58
Лучший ответ Сообщение было отмечено Vlad__i__mir как решение

Решение

попробуйте обернуть glob.glob.. в sorted()
1
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
21.05.2021, 21:10  [ТС]
Цитата Сообщение от u235 Посмотреть сообщение
попробуйте обернуть glob.glob.. в sorted()
Это помогло, спасибо!

А почему
Цитата Сообщение от u235 Посмотреть сообщение
glob.glob.. в sorted()
, а не сам numpy массив сортировать?
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
21.05.2021, 21:18
Vlad__i__mir, потому что идет сортировка по названиям файла, а в массиве numpy названий нет..
Еще вариант: сохранять имена файлов по мере чтения в список или массив numpy, а потом сопоставлять.
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
21.05.2021, 21:23  [ТС]
Цитата Сообщение от u235 Посмотреть сообщение
Еще вариант: сохранять имена файлов по мере чтения в список или массив numpy, а потом сопоставлять.
Не совсем понял или не правильно вас понял, какая разница когда сохранять их в массив?

Можете на примере моего кода привести пример вашего варианта?
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
21.05.2021, 21:43
Vlad__i__mir, разница в том, что glob.glob не гарантирует один и тот же порядок имен файлов для images_train и masks_train. Что сделать что бы порядок стал одинаковый? Отсортировать.
Еще вариант - сохранить имена файлов по мере чтения и сопоставить маску и картинку познее.
Третий вариант: оставить один цикл, например по img_path, а mask_path генерировать из него, например, регулярными выражениями.
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
21.05.2021, 22:06  [ТС]
Цитата Сообщение от u235 Посмотреть сообщение
Еще вариант - сохранить имена файлов по мере чтения и сопоставить маску и картинку познее.
Можно пример?
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
21.05.2021, 23:05
Vlad__i__mir, нет, нельзя, для корректного примера мне нужна такая же структура папок и картинок.
Тем более sorted у вас работает, пользуйтесь им.
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
22.05.2021, 09:52
Цитата Сообщение от Vlad__i__mir Посмотреть сообщение
train_test_split
Может тут shuffle отключить, который по умолчанию включен?

Пардон, не стирается это сообщение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2021, 09:52
Помогаю со студенческими работами здесь

Загрузка изображений для постраничного отображения
Привет всем, подскажите как можно подключить картинки чтобы также в ряд были и постраничные

Асинхронная загрузка изображений\файлов для одного объекта
Приветствую всех. Вопрос касаемо интернет-магазина. Предположим, я зашёл на страницу, где необходимо добавить товар. На странице...

Комбинация обучения с учителем и обучения без учителя для извлечения знаний
Здравствуйте! :) Хотелось бы обратиться к знающим людям в области применения машинного обучения для решения прикладных задач в надежде...

Ищу людей для совместного обучения в области машинного обучения
Пишу на питоне посредством библиотеки keras. Было бы неплохо, например, работать над одним проектом, благо идей полно.

Загрузка нескольких изображений с созданием миниатюр для каждой на Codeigniter
Здравствуйте, люди добрые столкнулся с проблемой как загрузить несколько изображений на Codeigniter с созданием миниатюр для каждой. Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru