Что такое автомобильный детектор?
Это наш проект на конец года: Детектор автомобилей. Это веб-приложение/бот/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/
Спасибо за чтение!