Введение-

Ссылка GitHub на код проекта: https://github.com/Debadri3/cnn-electric-guitar-classification

Электрогитара была одним из самых любимых инструментов с тех пор, как ее широко популяризировали такие музыканты, как Hendrix, Van Halen и другие.

Точно так же два гиганта по производству гитар, а именно Fender и Gibson, выпустили несколько вариантов электрогитары с модификациями на протяжении многих лет. Этот проект представляет собой проблему классификации нескольких классов с использованием предварительно обученной модели сверточной нейронной сети от TensorFlow Hub, где я пытаюсь классифицировать 7 различных твердотельных моделей электрогитары.

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

Для получения информации о типах электрогитар перейдите по этой ссылке: https://ledgernote.com/columns/guitar-guru/types-of-electric-guitars/

Создание набора данных-

Программное обеспечение «Bulk Image Downloader» использовалось для загрузки изображений наборов данных. Использовались только изображения с расширением .jpg, а изображения .png, .webp игнорировались.

Эта ссылка использовалась для создания файла меток .csv: https://www.datacamp.com/community/tutorials/datasets-for-images

Однако расположение папки не нужно добавлять перед именем изображения, поскольку изображения были загружены и импортированы с моего диска для проекта. В файл .csv также был добавлен отдельный столбец «метка».

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

Обработка ярлыков-

Столбец «метка» файла csv был преобразован в массив numpy для обработки.

Был создан массив, содержащий только уникальные метки. Затем мы сравниваем каждую метку данных с уникальной меткой и сохраняем соответствующий логический массив.

Для преобразования набора данных в наборы обучающих и достоверных данных было применено «разделение обучающего теста».

Предварительная обработка изображений-

Изображения в настоящее время были в виде путей к файлам. И метки в виде массивов numpy. Мы конвертируем их в тензор, который похож на n-мерный массив, но может быть легко вычислен графическими процессорами.

Для этого создается функция, которая считывает изображение в пути к файлу, преобразует его в тензор с 3 цветовыми каналами (RGB), нормализует значение шкалы серого (от 0–255 до 0–1), а затем преобразует его в наш желаемый размер (в нашем случае 224 * 224, так как это входная форма, ожидаемая нашей будущей моделью) и возвращает его.

Создание пакетных наборов данных-

Функция, созданная для этого, может обрабатывать данные тестирования, проверки или обучения. Если это обучающие данные, пакет перемешивается каждый раз, когда мы вызываем функцию, а затем превращает их в пакеты по 32 за раз для обработки. По словам Яна Лекуна, французского пионера машинного обучения, это число идеально подходит для размера партии. [https://twitter.com/ylecan/status/989610208497360896?s=20]

Построение модели-

Трансферное обучение использовалось путем компиляции предварительно обученной модели из TensorFlow Hub. Модель подпадает под архитектуру ImageNet/MobileNet V2 и использует множитель глубины 1,40 для классификации изображений. Для этого требуется входная форма 224 * 224, в которую наши изображения уже были преобразованы. Высокий множитель глубины предполагал возможность переобучения; следовательно, был необходим слой Dropout.

Используемая функция активации — «softmax», которая назначает вероятность принадлежности точки данных к каждому классу. Это многоклассовая версия «сигмовидной». Функция потерь, которую я использовал, — это «категориальная кросс-энтропия». Не вникая в математику, понизьте кросс-энтропию лучше модели. Метрика, используемая для оценки, — это точность проверки.

Создание обратных вызовов-

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

Обратный вызов «Ранняя остановка» предотвращает переобучение модели, когда желаемый параметр перестает улучшаться или начинает уменьшаться в течение указанного («терпения») количества раундов. В нашем случае это было 3.

Обучение модели-

Модель обучалась не более 100 эпох. Ранняя остановка остановит тренировки задолго до этого.

Оценка модели-

Был достигнут средний показатель точности около 70-75 процентов, в зависимости от каждого «перезапуска и запуска» на проверочном наборе. Он может незначительно отличаться в зависимости от графического процессора и т. д.

Проверяем наши прогнозы-

Сначала мы проверяем наш журнал TensorBoard. Потери уменьшаются и затем становятся постоянными, а точность увеличивается и достигает постоянного значения. Массив «предсказания» состоит из вероятности каждой точки данных, принадлежащей каждой из меток. Построена функция, возвращающая метку с максимальной вероятностью.

Представляя наши прогнозы-

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

Вывод:

Наша модель лучше, чем ожидалось, классифицирует гитары. Изучив несколько изображений, я вижу, что, как и другие гитаристы, он путался в основном между Super Strat и Strat. Большинство других прогнозов были точными.