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

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

Набор данных:

Чтобы робот мог сортировать посуду и столовые приборы, он должен сначала их распознать. Чтобы решить эту проблему, я решил начать с программирования компьютера на классификацию трех типов изображений посуды — ножей, вилок или ложек. Я нашел набор изображений посуды, которые можно использовать для классификации каждой посуды по соответствующим корзинам. Вот ссылка на данные, которые я использовал.



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

Первая модель:

Когда я получил набор изображений, я предварительно обработал их, чтобы модель VGG16 могла научиться более легко классифицировать изображения. Я использовал оптимизатор «Адам» со скоростью обучения 0,0001 для обучения модели.

Оптимизатор Адама использует стохастический алгоритм приличного градиента, чтобы изучить наилучшую классификацию изображений. В стохастическом градиенте компьютер пытается оптимизировать производительность, находя все веса сети, которые дают наилучшие результаты. Мы можем думать об этом как о чаше с множеством кривых кратеров и краев. Если я начну с одного из краев и определяю, где самый крутой нисходящий уклон, вычислив наклон чаши в этом месте, я смогу двигаться в направлении самого крутого спуска, как показано на рисунке ниже. Когда я добираюсь до второго места, я снова получаю направление самого крутого спуска и снова двигаюсь в этом направлении. Процесс повторяется снова и снова, пока не будет достигнут минимум. Это показано на рисунке 1 ниже.

Я обучил все слои нейронной сети VGG16 идентифицировать изображения и классифицировать их. Я запускал модель только в течение 2 эпох, но смог получить результаты, которые вы видите ниже.

Первые результаты:

Как видите, на тренировочном наборе точность составила около 94%, а на проверочном наборе — около 87%. Для тестового набора модель достигла точности 69%.

Вторая модель:

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

Вторые результаты:

Здесь мы видим, что в этой модели мы не получили таких хороших результатов. Такая низкая производительность, вероятно, связана с тем, что мы обучили только самый последний слой сети на изображениях посуды. Сеть VGG16 уже предварительно обучена на изображениях животных, поэтому само собой разумеется, что если мы попытаемся классифицировать сеть, которая была обучена на совершенно других изображениях, она не будет работать. Чтобы сравнить наши результаты с первой моделью, эта модель получает точность обучения 98%, что выше, вероятно, из-за того, что мы обучали ее на 10 эпох. Оценки валидации и тестов несколько ухудшились, упав до 67% и 54% соответственно. Это указывает на то, что модель плохо обобщает, потому что она хорошо классифицирует обучающий набор, но не наборы проверки и тестирования.

Третья модель:

Затем я попробовал еще один набор параметров для анализа моих изображений посуды. На этот раз я попробовал скорость обучения 0,001 вместо 0,0001. Большая скорость обучения может дать лучшие результаты, потому что при такой малой скорости обучения оптимизатор Адама может застрять в локальном минимуме. Вы могли заметить на рис. 1, что шаги были настолько малы, что, хотя компьютер и достиг локального минимума, алгоритм градиентного спуска никогда не достигал глобального минимума. Но когда мы увеличиваем размер шагов, которые выполняет алгоритм, мы можем в конечном итоге получить гораздо лучший результат, как вы можете видеть на рисунке 2.

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

Для третьей модели я также сделал все слои снова обучаемыми, чтобы модель могла лучше учиться на данных.

Результаты третьей модели:

К сожалению, это не привело к созданию лучшей модели. Как вы можете видеть в приведенной ниже матрице путаницы, она все еще путается с правильной идентификацией посуды.

Очевидно, что эта модель плохо обобщает. Точность тестирования и проверки составляет всего 49% и 52% соответственно, а точность обучения составляет 75%. Возможно, это отсутствие точности связано с большим количеством шума в данных. Большинство изображений посуды имеют узор на заднем плане, который может затруднить распознавание посуды компьютером. Кроме того, возможно, настройки модели плохо обобщаются. Это лучше видно, если мы посмотрим на точность обучения и точность проверки модели.

Я также изобразил потери как для проверочного, так и для тренировочного наборов ниже.

Четвертая модель:

Наконец, в этой модели я вернулся к той же модели, которую пробовал в первой модели, со скоростью обучения 0,0001 и обучением всей модели VGG16, но вместо того, чтобы просто запускать ее в течение двух эпох, я запускал ее в течение десяти. Эта модель дает гораздо лучшие результаты, чем модели 2 и 3, но не сильно улучшилась по сравнению с моделью 1.

Результаты четвертой модели:

Вот матрица путаницы, которая была получена из классификации:

С этими настройками я добился точности обучения 97%, точности проверки 63% и точности тестирования 68%. Очевидно, что меньшая скорость обучения намного лучше для этой модели. Я также нарисовал график, как потери и точность менялись с течением времени.

Опять же, эта четвертая модель все еще плохо обобщает. Это очень хорошо работает на тренировочном наборе, но не так хорошо на тренировочном и проверочном наборах. Модель, кажется, стала лучше после 6 эпох, но в итоге она стала намного хуже. Как я упоминал выше, это, вероятно, связано с шумом в данных, так как многие изображения имеют сильный фоновый рисунок.

Следующие шаги:

Следующим шагом будет рассмотрение реализации другого типа сети вместо сети VGG16 для улучшения результатов. Я мог бы также рассмотреть некоторые другие типы алгоритмов классификации, такие как классификация дерева решений и классификация случайного леса. Кроме того, я хотел бы попробовать использовать другую библиотеку, такую ​​​​как Pytorch, или запустить свои данные, используя функции машинного обучения в R, такие как классификации в каретке или млр. Ясно одно: для того, чтобы наш робот правильно классифицировал ножи, вилки и ложки, нам нужна очень высокая точность, и я хочу попробовать все и вся, чтобы получить наилучшие возможные результаты.

Еще одним следующим шагом для этого проекта будет реализация алгоритма «You Only Look Once» (YOLO) для идентификации вилок, ножей и ложек в видео на лету. Возможно, вы видели демонстрации YOLO для самоуправляемых автомобилей и тому подобного. Это позволит роботу подобрать посуду, классифицировать ее, а затем поместить посуду в соответствующую корзину.

Заключение:

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

Спасибо, что прочитали эту статью.

БИБЛИОГРАФИЯ / ВЕБЛИОГРАФИЯ