Задать вопрос
@alan31

Распознование изображений только с помощью NumPy?

Хочу сделать нейросеть которая распознает объекты на изображениях , но везде говорится что нужно использовать библиотеки opencv и другие , то есть которые уже подготовлены для этого .
Но я именно хочу сделать такую нейросеть только с помощью numpy , то есть с полного нуля, возможно ли это?
  • Вопрос задан
  • 55 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@WhiteApfel
Сам numpy не умеет обрабатывать изображения, строить связи между "нейронами" и вообще он больше для управления данными в массивах.

Но чисто теоретически возможно ли? Возможно. Как? Ну...

Для начала тебе нужно как-то получить массив пикселей. Тут зависит от контекста. Если картинку из файла брать, то есть старая добрая библиотека PIL для чтения изображений. Нет, конечно, можно и декодер написать, но не уверен, что оно тебе надо настолько "своё".
from PIL import Image
import numpy

img = Image.open('image.png')
pixel_map = np.array(img)


Это будет массив элементов строк, где каждый элемент строки представлен массивом [r, g, b] или [r, g, b, a] при наличии прозрачности.

# Например, изображение с такими пикселями

# [красный][зелёный]
#  [синий]  [белый]

# будет представлено массивом
[[[255, 0, 0], [0, 255, 0]], [[0, 0, 255], [255, 255, 255]]]


Стоит признать, что такой формат слабо подходит для обучения. Обычно изображения приводят к Ч/Б, сжимают по размерам и вот это вот всё. Сжатие, как и чтение, лучше делать через библиотеку PIL, она быстрее работает, чем чистый python (вроде, оно на С написано, но это не точно).

Для обучения обычно распаковывают двумерный массив пикселей (пиксель у нас был тоже массивом, но считаем это за единый объект, потому что могли его во что-то другое превратить) в одномерный. Например, пиксели последовательно положить из строк:

pixel_sequence = [pixel for row in pixel_map for pixel in row]


Важно. Если брать куски кода, у нас получится list[list[r, g, b (, a)]]. Это не то что бы подходит для сетей прямого распространения (могу напутать с терминологией, поправьте), можно ещё раз распаковать вложенный массив, конечно, но сложность из-за увеличения количества входных данных вырастет многократно


А дальше уже можно на чистом python'е писать логику для обработки значений из массива numpy. Есть хорошая статья на proglib. Как результат, будет нейросеть "на numpy", хотя хватило бы и обычных питоновских листов
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы