Что такое автомобильный детектор?

Это наш проект на конец года: Детектор автомобилей. Это веб-приложение/бот/API для определения и классификации марки, модели, года выпуска и цвета автомобиля с использованием ИИ и машинного обучения.

Мы команда из 4 учеников Holberton School. Мы были друзьями с первого дня, и теперь мы сделали проект своей мечты:

Дхиа Хак Бен Дамени: руководитель группы, машинное обучение, DevOps

Райен Хедри: сбор/очистка данных

Муна Бен Али: Бэкенд/БД

Монтассар Барбуши: интерфейс

Теперь о нашей временной шкале. Мы начали с определения технологий, которые собираемся использовать.

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

Узнав, что мы начали итерацию, сначала у нас была бета-версия с шаблонами фляг и модель с данными, которые я нашел в kaggle, которая использует только автомобили с 2012 года. Затем мы реализовали простой интерфейс и спокойный API-интерфейс, наконец, мы реализовали все, включая базу данных, полная модель с более чем 4000 моделей автомобилей и красивым интерфейсом.

Как это все началось

Как и вся тунисская молодежь, у меня был интерес к автомобилям, Это всегда было частой темой в моих разговорах с друзьями, обсуждении нового BMW, Если бы у вас было X денег, какую машину вы бы купили и т. д.

Однажды мы ехали домой, Райен всегда был за рулем (он единственный с правами), и мы говорили об одной из машин на улице, затем он упомянул об игре, в которую он играл: он угадывал машину на улице, прежде чем увидел их брендинг, Тут же над моей головой загорелась лампочка «Почему бы нам не сделать это нашим проектом в конце года?», Все наши лица просветлели.

Видите ли, в то время мы боролись за идею того, что нам действительно нравится делать. На следующий день мы были в Холбертоне. Я поговорил об этом с Мауной, и она согласилась присоединиться, И наша команда сформирована!

Давайте копнем глубже

Это архитектура нашего приложения в процессе развертывания, и вот разбивка нашего технического стека:

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

Nginx: мы использовали nginx в качестве нашего веб-сервера и прокси, он очень надежен и имеет много ресурсов.

Flask: Flask предлагает низкую планку входа, и ее очень легко согнуть, как вам нравится. Этому мы также научились в Holberton.

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

React: Reactjs предлагает отличную документацию, а также обработку состояния и компонентов, позволяющую быстро изменять и добавлять функции.

pytorch: поскольку fastai использует pytorch, я изучил основы нейронной сети и узнал больше о pytorch, я также использовал предварительно обученную модель resnet, которая дала отличные результаты при тестировании.

Для обзора функций, которые я разработал:

  • Библиотека ИИ, которая подключается к модели, инициирует ее с помощью файла изображения и возвращает результаты прогнозирования в виде словаря Python.
  • Сайт адаптивный и удобный для мобильных устройств.
  • Модель обнаружения, которая имеет более 4000 классов с точностью до 93% для некоторых из них.

Что сделало это сложным?

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

Итак, я собрал кучу изображений автомобилей, поместил их в папку, затем еще одну папку с изображениями салона автомобиля и обучил реснет-модель с помощью fastai, точность была оптимальной, а затем я перенес модель туда, где находятся наши данные. я сделал script, чтобы просмотреть все изображения, вставить их в новую модель и удалить любое изображение, указывающее на интерьер.

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

Даже со всем этим у нас все еще есть два шага, которые нужно выполнить: сначала мы удаляем любую модель, которая очень неясна, а также малоизвестные бренды. Мы сделали это, удалив любую модель автомобиля, у которой нет или очень мало изображений в нашем источнике данных (авто данные).

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

Со всем этим у нас была чистая база данных для работы и обучения модели, что, в свою очередь, дало нам точность 60% для всех автомобилей с моделью и годом и 93% только для марки.

Это был, прежде всего, опыт обучения

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

Теперь я могу сказать, что у меня есть вещи, которые хотелось бы изменить, например, я хотел бы использовать fastapi вместо flask или большую нейронную сеть с самого начала и, самое главное, внедрить извлечение автомобилей из изображений, что, в свою очередь, позволит обнаруживать несколько автомобилей на изображении. + проверка, есть ли на картинке автомобиль.

От машинного обучения до flask и mongodb, от beautifulsoup до css и javascript, до докера и nginx.

Этот проект очень уникален из-за всех связанных между собой уровней, но он работает благодаря разработке стандартов, которые были предложены для использования, таких как http, сокеты posix, ядро ​​​​linux: это то, что представляет собой SWE, создавая стандарты, которые являются не просто тенденцией. но строительный блок для проектов.

Я понимаю, что программирование — это не просто работа или хобби, это ремесло, очень похожее на плотника или кузнеца. Программист — это человек с инструментами и ресурсами, из которых он знает, как что-то сделать… Это требует и логики, и творчества.

примечание: neovim ››› emacs

Заканчивать

Меня зовут Дхия Хак Бен Дамени, мне 19 лет, и это моя команда. До Холбертона я только что окончил среднюю школу, а теперь я полный разработчик стека в Lokafy, и теперь в течение года моей специализации я планирую заниматься машинами. обучение!

Это проект на гитхабе: https://github.com/pfadrm/car_detector

Наш развернутый сайт: https://car-detect.systems

И, наконец, мой LinkedIn: https://www.linkedin.com/in/dhia-dahmeni-577a42216/

Спасибо за чтение!