[GitHub, Open source, Python, Машинное обучение, Программирование] Делаем нейронную сеть, которая сможет отличить борщ от пельмешек
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Как то раз смотря видос про достижения Поднебесной, я увидел прикольную штуку. Столовую будущего, точнее для Китая настоящего, а для нас будущего. Суть заключалась в полном самообслуживание клиента. Он брал блюда на поднос и подносил поднос к видео камере где нейросетка детектировала и распознавала еду, выставляла ему счет и он через еще одну нейронную сеть, которая распознавала его лицо, оплачивал свою покупку. Мне тоже захотелось сделать что то подобное. Размечать датасет под YOLO, что бы можно было детектировать блюда мне было совсем не охото. Готово размеченного с борщами и пельмешками я не нашел, поэтому решил сделать только классификацию.
Картинки борща, пельменей и кофе я спарсил из гугла и яндекса. Далее разложил их по папкам train и data. Засада оказалась в керасе, а именно в модуле image generator. Я не хотел что бы датасет занимал всю оперативку, но почему то когда программа доходила до этого модуля, то она зависала. Ну тогда я решил идти простым пу тем и просто забил весь датасет в оперативку.
def data_load_image(folder, y, z):
imagePath = folder + '/'
jpg1 = ".jpg"
y = int(y)
global number
global dataset_X
global dataset_Y
global dataval_X
global dataval_Y
for file in glob.glob(folder +"/*"):
identify = os.path.splitext(os.path.basename(file))[0]
#print (identify)
cv = imagePath + identify + jpg1
#print (cv)
img = (cv2.imread(cv))
img = cv2.resize(img,(224,224))
#img = np.reshape(img,(3,224,224))
if z == 1:
dataset_X[number, :, : , :] = img/255.0
dataset_Y[number, y] = 1
else:
dataval_X[number, :, :, :] = img/255.0
dataval_Y[number, y] = 1
number = number + 1
Далее скачиваем библиотеку Resnet-50 без подключенных верхних слоев и замораживаем их. Обучение наиважнейшей задаче по рапознованию пельмешек было опробованно так же на VGG-19 и MobileNet, но они с задачей не справлялись от слова совсем.
model = applications.ResNet50(
weights = 'imagenet',include_top = False,
input_tensor = img, input_shape = None, pooling = 'avg')
for layer in model.layers:
layer.trainable = False
Добавляем слои для transfer learning
#Adding custom Layers
x = model.layers[-1].output
#x = Flatten()(x)
#x = Dense(128, activation="relu")(x)
x = Dropout(0.1)(x)
x = Dense(256, activation="relu")(x)
predictions = Dense(4, activation="sigmoid")(x)
# creating the final model
model_final = Model(input = model.input, output = predictions)
Функция для перемешивания наших картинок, что бы нейросети было сложнее обучаться. Хочу заметить что я не задавал конкретного значения для функции рандома. Модель обучалась несколько раз с разным значением рандома и каждый раз результат был более 90 процентов. Похоже правило счастливого билета действует только для больших нейронных сетей.
def unison_shuffled_copies(a, b):
assert len(a) == len(b)
z = np.arange(a.shape[0])
np.random.shuffle(z)
print(z.shape)
return a[z,:], b[z,:]
Для обучения я использовал категориальную кросэнтропию, а оптимизатор — адам.
model_final.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
Ну и сам процесс обучения. Здесь я перемешивал картинки каждую эпоху
for i in range(30):
print('STEP ' + str(i))
model_final.fit(dataset_X, dataset_Y, epochs=1, batch_size=15)
dataset_X, dataset_Y = unison_shuffled_copies(dataset_X,dataset_Y)
Результат на видео.
Извините, данный ресурс не поддреживается. :(
Ссылка на исходники.
Для запуски нейронки запустите файл opencv-camera.py
===========
Источник:
habr.com
===========
Похожие новости:
- [Машинное обучение, Искусственный интеллект, Natural Language Processing] Искусственный интеллект в области юриспруденции. Часть 4
- [Python, Django] Как поставить Django на сервер heroku в 2020 году. 10 шагов
- [Программирование, PDF] Почему так сложно извлекать текст из PDF? (перевод)
- [Управление проектами, Удалённая работа, Программирование, Лайфхаки для гиков] Один день удаленного тимлида на бэкенде
- [Информационная безопасность, Open source, GitHub, Законодательство в IT] Microsoft понадобилось 10 дней, чтобы удалить исходники Windows XP с принадлежащего им GitHub
- [Алгоритмы, Машинное обучение] Компьютерное зрение. Свой алгоритм или решение из «коробки»?
- [Информационная безопасность, Искусственный интеллект, Машинное обучение, Финансы в IT] Банки Казахстана начали работать с биометрической системой VisionLabs
- [Программирование, Управление разработкой, Управление персоналом, Читальный зал] Посадите программиста в поток и защищайте. От самих себя
- [Open source, Программирование, C, Разработка под Linux] Linux kernel development для самых маленьких
- [Программирование, Алгоритмы, Компиляторы] Про LL-парсинг: Предложение по расширению грамматик для генераторов парсеров
Теги для поиска: #_github, #_open_source, #_python, #_mashinnoe_obuchenie (Машинное обучение), #_programmirovanie (Программирование), #_python3, #_nejronnye_seti (нейронные сети), #_transfer_learning, #_resnet50, #_keras, #_github, #_open_source, #_python, #_mashinnoe_obuchenie (
Машинное обучение
), #_programmirovanie (
Программирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 15:40
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Как то раз смотря видос про достижения Поднебесной, я увидел прикольную штуку. Столовую будущего, точнее для Китая настоящего, а для нас будущего. Суть заключалась в полном самообслуживание клиента. Он брал блюда на поднос и подносил поднос к видео камере где нейросетка детектировала и распознавала еду, выставляла ему счет и он через еще одну нейронную сеть, которая распознавала его лицо, оплачивал свою покупку. Мне тоже захотелось сделать что то подобное. Размечать датасет под YOLO, что бы можно было детектировать блюда мне было совсем не охото. Готово размеченного с борщами и пельмешками я не нашел, поэтому решил сделать только классификацию. Картинки борща, пельменей и кофе я спарсил из гугла и яндекса. Далее разложил их по папкам train и data. Засада оказалась в керасе, а именно в модуле image generator. Я не хотел что бы датасет занимал всю оперативку, но почему то когда программа доходила до этого модуля, то она зависала. Ну тогда я решил идти простым пу тем и просто забил весь датасет в оперативку. def data_load_image(folder, y, z):
imagePath = folder + '/' jpg1 = ".jpg" y = int(y) global number global dataset_X global dataset_Y global dataval_X global dataval_Y for file in glob.glob(folder +"/*"): identify = os.path.splitext(os.path.basename(file))[0] #print (identify) cv = imagePath + identify + jpg1 #print (cv) img = (cv2.imread(cv)) img = cv2.resize(img,(224,224)) #img = np.reshape(img,(3,224,224)) if z == 1: dataset_X[number, :, : , :] = img/255.0 dataset_Y[number, y] = 1 else: dataval_X[number, :, :, :] = img/255.0 dataval_Y[number, y] = 1 number = number + 1 Далее скачиваем библиотеку Resnet-50 без подключенных верхних слоев и замораживаем их. Обучение наиважнейшей задаче по рапознованию пельмешек было опробованно так же на VGG-19 и MobileNet, но они с задачей не справлялись от слова совсем. model = applications.ResNet50(
weights = 'imagenet',include_top = False, input_tensor = img, input_shape = None, pooling = 'avg') for layer in model.layers: layer.trainable = False Добавляем слои для transfer learning #Adding custom Layers
x = model.layers[-1].output #x = Flatten()(x) #x = Dense(128, activation="relu")(x) x = Dropout(0.1)(x) x = Dense(256, activation="relu")(x) predictions = Dense(4, activation="sigmoid")(x) # creating the final model model_final = Model(input = model.input, output = predictions) Функция для перемешивания наших картинок, что бы нейросети было сложнее обучаться. Хочу заметить что я не задавал конкретного значения для функции рандома. Модель обучалась несколько раз с разным значением рандома и каждый раз результат был более 90 процентов. Похоже правило счастливого билета действует только для больших нейронных сетей. def unison_shuffled_copies(a, b):
assert len(a) == len(b) z = np.arange(a.shape[0]) np.random.shuffle(z) print(z.shape) return a[z,:], b[z,:] Для обучения я использовал категориальную кросэнтропию, а оптимизатор — адам. model_final.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary() Ну и сам процесс обучения. Здесь я перемешивал картинки каждую эпоху for i in range(30):
print('STEP ' + str(i)) model_final.fit(dataset_X, dataset_Y, epochs=1, batch_size=15) dataset_X, dataset_Y = unison_shuffled_copies(dataset_X,dataset_Y) Результат на видео. Извините, данный ресурс не поддреживается. :( Ссылка на исходники. Для запуски нейронки запустите файл opencv-camera.py =========== Источник: habr.com =========== Похожие новости:
Машинное обучение ), #_programmirovanie ( Программирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 15:40
Часовой пояс: UTC + 5