Визуализация — это такая фантастическая вещь. Посмотрите на это изображение:

Как люди, мы врожденно узнаем что-то об этом изображении. Мы видим таблицу. Мы видим, что есть прозрачное блюдо, которое может содержать что-то. Честно говоря, вы, наверное, сразу поняли, что это тарелка с мороженым, стоящая на столе и налитая сверху каким-то соусом (вероятно, карамельным или шоколадным). И вы будете правы. Наш мозг — удивительная штука, которая может распознавать и понимать огромное количество информации из изображения. Если вы внимательно искали, вы, вероятно, также заметили ложку, тарелки и стаканы с водой на столе. Было проведено огромное количество исследований в области машинного обучения, пытающихся научить машину распознавать характеристики изображений, которые мы, люди, считаем само собой разумеющимися.

Для меня эта область увлекательна. Так что может быть лучше, чтобы попробовать вещи, чем прыгать с головой и надеяться, что мне удастся плавать? Я нашел набор данных food-101, состоящий из 101 000 изображений еды! Эти изображения разделены на 101 категорию по 1000 изображений в каждой, и эти категории довольно разнообразны: от яблочного пирога до пибимпапа и суши! Но что классифицировать? Я начал с использования данных о питании для классификации изображений, но разобраться в некоторых категориях стало довольно сложно. (Как узнать информацию о пищевой ценности изображений huevos rancheros или утки по-пекински?) Из-за этого и в интересах экономии времени я сам провел классификацию, разделив изображения на сладкие и не сладкие. " картинки.

Первоначальный проект с использованием базы данных food-101 был разработан для использования случайных лесов для классификации изображений, но почему бы не перейти непосредственно к технологии машинного обучения изображений: сверточные нейронные сети (CNN)? Справедливости ради, я пробовал множество других методов машинного обучения с изображениями разного размера, и лучший из найденных мной методов, отличных от CNN, дал мне только 65% точности предсказания, и я знал, что CNN справится лучше. Поэтому я провел выходные, пытаясь узнать, как они работают и как создавать слои. И в конце выходных все, что я узнал, это то, что запустить CNN с нуля до смешного сложно. Время сдаться?

Нет! Как оказалось, с нейронными сетями можно делать удивительную вещь, которая называется перенос обучения. Это означает, что вы можете начать с предварительно обученной нейронной сети и адаптировать ее, чтобы узнавать что-то об изображениях, которые вы ей передаете. Наиболее распространенные нейронные сети для начала — это те, которые обучаются на изображениях из ImageNet. (Я использовал ResNet50). Поскольку у вас есть все веса для предварительно обученной сети, вы можете затем дать ей изображения, которые вы хотите классифицировать, и провести дополнительное обучение, и, надеюсь, сеть начнет распознавать то, что вы ей даете! И за небольшой промежуток времени это сработало! В итоге я получил точность 85% в моем наборе для проверки, поэтому я решил написать небольшое приложение Flask, которое позволяет загружать изображения и предсказывать, сладкая еда или нет! (К сожалению, приложение было слишком большим, чтобы размещать его бесплатно, но если вы хорошо разбираетесь в Python, вы всегда можете скачать его с моего github и попробовать заставить его работать самостоятельно!) Или вы можете посмотреть видео ниже…

В целом, я был очень доволен изучением различных моделей и тем, как адаптировать CNN к моим собственным потребностям. Зачем изобретать велосипед? Но этот набор данных food-101 невероятно запутан (одна из фотографий хлебного пудинга оказалась фотографией Бэтмена!), и хотя было 23 категории сладкой еды, что дало мне 23 000 изображений, они принадлежали к очень конкретным категориям и некоторые мои собственные изображения, которые я пробовал, которые не были категорией в наборе данных, были предсказаны неправильно (например, слойки со сливками), поэтому предсказания начинают ухудшаться, когда вы расходитесь с типами продуктов, указанными в качестве входных данных. Так что, возможно, более разнообразный набор был бы полезен! (Возможно, мне просто нужно скормить это своей ленте в Instagram и посмотреть, что произойдет…) Это определенно то, чем я хотел бы заняться в какой-то момент в будущем!

(P.S. Я знаю, что мои знания в области глубокого обучения и обучения нейронных сетей не самые лучшие, поэтому, если вы действительно хотите узнать больше, здесь — место для начала!)