Документирование моего пути к fast.ai:ПРОЕКТ КЛАССИФИКАТОРА САМОЛЕТОВ.

Для проекта Урок 1 я решил сделать классификатор изображений, достаточно хороший, чтобы различать коммерческие самолеты, военные самолеты и военные беспилотные самолеты ( БПЛА). Код доступен здесь.

1. Сбор данных.

Поскольку быть фанатом авиации не всегда означает иметь множество изображений авиалайнеров или истребителей на вашем жестком диске, мне нужно было собрать несколько изображений. На помощь пришли Google Images и руководство по загрузке изображений Fastai.

Во-первых, простой поиск по военным/гражданским самолетам не поможет, поскольку в руководстве очень полезно указано, что Google Images предоставляет максимум 700 изображений.
Чтобы иметь возможность получить больше изображений, я решил искать конкретные самолеты, которые представляют современные поколения авиалайнеров, истребителей, авиалайнеров и БПЛА. Избранными стали:

  1. Авиалайнеры: Airbus A380-800, Airbus A340-600, Airbus A333-300, Boeing 777-300, Boeing 747-8.
  2. 2) Истребители: F-22 Raptor, Еврофайтер Тайфун, F-35 Lightning II, Dassault Rafale, Сухой СУ-35.
  3. 3) БПЛА: Dassault nEUROn, General Atomics MQ-1C Grey Eagle, General Atomics MQ-9 Reaper, General Atomics Avenger (Predator C), Northrop Grumman RQ-4 Global Hawk, Elbit Гермес 900.

2. Загрузите и просмотрите изображения.

После загрузки URL-адресов для каждого самолета в файлы CSV я объединил их для каждой соответствующей категории и загрузил файлы на сервер. Всего у нас есть 2500 URL для каждой из категорий.

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

3. Обучение модели: resnet34.

Все идет нормально. Собрав фотографии, я приступил к обучению классификатора с помощью resnet34.

Первые результаты были многообещающими, мы получили 8% ошибок. Небольшое предостережение: мы должны учитывать, что в течение 4-й эпохи наши потери при проверке были близки к потерям при обучении. Хотя это не совсем переоснащение, мы должны быть осторожны.

Затем мы разморозили слои, воспользовались поиском скорости обучения и построили график, чтобы получить более точное представление о том, какие скорости обучения использовать.

Судя по сюжету, ставки от 1e-6 до 1e-4 являются наиболее оптимальными, прежде чем он начнет полностью выходить из-под контроля.

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

4. Обучение модели: resnet50.

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

Мы видим, что на 4-й эпохе наши результаты уже лучше, чем у resnet34. Мы продолжаем улучшать до 6-й эпохи, прежде чем мы начнем переоснащение.

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

Как мы видим, он сразу же начинает переоснащаться. Определенно наша ранее обученная модель resnet50 была лучше.