Некоторое время назад я написал статью, в которой анализировал масштабы кризиса водоснабжения и санитарии во всем мире в разгар глобальной пандемии. Результаты были шокирующими. Такие страны, как Либерия, изо всех сил стараются обеспечить надлежащими санитарными станциями даже 1% своего населения, в то время как такие страны, как Туркменистан, имеют привилегию предоставить всем своим гражданам доступ к надлежащим средствам для мытья рук. В качестве попытки показать, что даже привилегированные люди должны быть благодарны за те ресурсы, которыми они обладают, я подумал, что было бы неплохо создать модель машинного обучения, которая обнаруживает, когда кто-то в моем доме забывает выключить кран. Это может показаться странным, поскольку люди обычно отключают смесители для раковины после использования, но есть большая вероятность ошибки. Вы, вероятно, сейчас действительно сбиты с толку, поскольку речь идет о том, чтобы просто закрыть кран после мытья рук. Но подумайте об этом на секунду. Сколько раз вы заходили в ванную комнату или на кухню и видели, что из крана капает, даже если капает очень медленно? Следующее замечание может быть таким: «Да ладно, капля из крана ночью не может быть такой уж плохой. Мы теряем около 60 капель в минуту. Подумаешь?" Прежде чем перейти к моему домашнему решению, давайте рассмотрим ситуацию более подробно с помощью математики.

Предисловие. Давайте взглянем на вещи немного более аналитически. Вот что EPA должно сказать о протекающих кранах:

«Протекающий кран, из которого капает одна капля в секунду, может тратить более 3000 галлонов в год. Такого количества воды нужно, чтобы принять более 180 душей! "

Давайте сделаем щедрое предположение, что 1% американских семей становятся жертвами одного негерметичного крана. Другими словами, мы предполагаем, что из 128,58 миллиона домохозяйств в США в 2019 году (https://www.statistica.com) 1,29 миллиона из них имеют одну утечку крана. Сколько галлонов воды тратят США в год? 3,9 миллиарда галлонов воды. Чтобы помочь с этим числом (хотя и минимальным), я создал ИИ, который подходит для моего дома, который может уведомлять меня, когда какой-либо из кранов либо не полностью отключен, либо протекает.

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

  1. Создание набора данных: Для создания набора данных я использовал iPhone XR, чтобы сделать снимки всех моих кранов под углом, под которым датчик предположительно будет размещен. Небольшая изменчивость положения датчика объяснялась получением около 60 изображений, когда кран не протекал, и 60 изображений, когда кран протекал. Учитывая все смесители в моем доме (все ванные комнаты и кухню), я повторил этот процесс, предоставив мне несколько сотен необработанных изображений, которые я мог обучить и протестировать.
  2. Построение модели: Для построения модели я использовал Tensorflow и Keras. Я использовал предварительно обученные веса из сети VGG-16 и просто обучил последний слой, чтобы он соответствовал моей конкретной задаче. Это сработало очень хорошо, и тренировка прошла довольно быстро.
  3. Анализ моих результатов: После обучения сверточной нейронной сети (CNN) я просто посмотрел на несколько показателей, чтобы увидеть, работает она или нет. Я проанализировал потери при обучении и точность обучения (помните, что для этой конкретной модели точность проверки и потеря проверки не имели для меня особого значения ... если бы я хотел расширить этот алгоритм, чтобы лучше обобщить его для ВСЕХ кранов, то я бы определенно взял эти метрики во внимание) и был рад увидеть, что мне удалось достичь точности 98%, что не очень удивительно, поскольку метод обучения передачи, который я использовал, имеет тенденцию хорошо масштабироваться с меньшими наборами данных (тем более, что я даже не глядя на проверку). Все, что нужно было сделать алгоритму, - это минимизировать потери кросс-энтропии для обучающей выборки.

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