Обнаружение края изображения с помощью Keras — оригинал Jinkey

TensorFlow глубокое обучение Keras
Обнаружение края изображения с помощью Keras — оригинал Jinkey

Оригинальная ссылкастолько, сколько сможешь.
Автор этой статьи Jinkey (паблик WeChat jinkey-love, официальный сайтjinkey.ai)
Статья разрешает перепечатку, удаление или изменение информации об авторских правах в этом абзаце без подделки, это считается нарушением прав интеллектуальной собственности, мы оставляем за собой право преследовать вашу юридическую ответственность, настоящим заявляем!

Библиотека зависимостей

Содержимое файла requirements.txt выглядит следующим образом.

keras
numpy
pillow

Структура каталогов проекта


1.6.py — это обучающий скрипт. Пример изображения для обработки:


test.png

предварительная обработка изображений

# 打开图片(图片放在工程目录 img 文件夹下)
img = Image.open('img/test.png')

# 转换成灰度图是 "L",转换成RGB是"RGB"
img_gray = img.convert("L")

# 因为 keras 要求 2D 卷积层的输入的形状是 (宽, 高, 通道数),这里只有灰度值一个通道,所以对维度进行扩展
img_gray_array = np.expand_dims(np.array(img_gray), axis=2)
# img_gray_array.shape = (64, 64, 1)

Создайте сверточный слой

# 创建模型
model = kr.Sequential()

# 定义卷积核
def jk_kernel(shape):
    return np.expand_dims(np.expand_dims(kernel, axis=2), axis=2)

# 添加卷积层
model.add(kr.layers.Conv2D(filters=1, kernel_size=3, kernel_initializer=jk_kernel, strides=1, padding='same', name='conv2d', input_shape=img_gray_array.shape))

# 编译模型
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

Вывести результат среднего слоя

conv2d_layer_model = kr.Model(inputs=model.input,
                                     outputs=model.get_layer('conv2d').output)
conv2d_output = conv2d_layer_model.predict(np.expand_dims(img_gray_array, axis=0))
# conv2d_output.shape = (1, 64, 64, 1)

показывать

# 缩减维度
img_gray_array_squeeze = np.squeeze(conv2d_output)
# 保存结果,也可以用 show() 方法来显示图片
Image.fromarray(img_gray_array_squeeze).convert('RGB').save(fp='img/edge.png')

Результат обнаружения выходного фронта:


edge.png