Конкурс Kaggle Competition - это хороший шаг для начинающих, чтобы начать интересный опыт, чтобы начать изучать науку о данных и машинное обучение в реальных приложениях. Это то, что мы сделали, когда начали работать в Konvergen.AI инженером по искусственному интеллекту. Kaggle - это платформа, на которой компании и исследователи публикуют данные и статистику, а майнеры данных соревнуются за создание лучших моделей для прогнозирования и описания данных.

Введение

Соревнование, за которым мы следим, называется iWildCam 2019 Competition, соревнование, направленное на классификацию животных из фотоловушек. Camera Traps (или Wild Cams) позволяют автоматически собирать большие объемы данных изображения. Биологи всего мира используют фотоловушки для наблюдения за биоразнообразием и плотностью населения видов животных. Обучающий набор содержит 196 157 изображений из 138 различных мест в Южной Калифорнии. Набор для тестирования содержит 153 730 изображений из 100 населенных пунктов штата Айдахо. Помимо данных изображения, для которых нет животных, класс животных, доступных в данных обучения, равен 13, а в данных тестирования - 22 животных. Поэтому задача в этом конкурсе состоит в том, чтобы добавить данные из других источников, чтобы количество классов животных было полным. В этом посте мы объясним шаги, которые мы использовали, чтобы добраться до 6-го места (верхние 2%) таблицы лидеров.

Набор данных

Наборы данных поступили из трех разных источников: California Camera Traps (CCT) для основного набора обучающих данных, соревнования iNaturalist 2017 и 2018, объединенные в iNat_Idaho для дополнения набора обучающих данных, и Idaho Fish and Game (IDFG) для набора тестовых данных. . Набор данных iNat_Idaho содержит 25667 изображений. Необработанные изображения наборов данных CCT и IDFG были более 2000 пикселей в ширину и более 1000 пикселей в высоту, в то время как размеры изображений iNat_Idaho находились в диапазоне сотен пикселей. Конкурсный комитет iWildCam 2019 предоставил командам изображения меньшего размера для наборов данных CCT и IDFG с шириной 1024 пикселей, а также исходные изображения.

Комитет iWildcam_2019 также предоставил данные ограничивающей рамки для большинства обучающих изображений (CCT и iNat_Idaho) и всех тестовых изображений. Они также предоставили исходный код обнаружения объектов. [1]

Предварительная обработка

Перед использованием для обучения основной набор обучающих данных был исследован для меток классов. Оказывается, в наборе данных из CCT всего 14 классов из 23 классов, включая пустой класс. Чтобы обеспечить недостающие классы, мы дополняем набор данных CCT набором данных iNat_Idaho. После объединения данных распределение классов было построено снова, и мы обнаружили, что наибольшая часть набора данных принадлежала пустому классу.

Этот дисбаланс классов был обработан с помощью метода stratify из функции разделения поезд-тест из библиотеки выбора модели sklearn.

Затем мы обрезаем изображения, которые имеют данные ограничивающей рамки. Мы развертываем код, написанный AbuduWeili [2], чтобы применить ограничивающую рамку к изображениям и обрезать изображение, оставляя на изображении только животное. На этом этапе возникли поучительные проблемы. Первая проблема заключалась в том, как понять код и применить его к нашему варианту использования. В частности, имена каталогов в их сценариях использования и в нашем случае были разными, поэтому нам нужно сопоставить их имена каталогов с нашими собственными. Другой проблемой было различие в названии набора данных. Группа Абудувейли использовала имена CCT и iNat для классификации основных и дополнительных наборов данных обучения, в то время как мы использовали is_supp = False для набора данных обучения и is_supp = True для дополнительного набора данных iNat_Idaho.

Как только мы выяснили соответствие этих имен нашему варианту использования, мы столкнулись со второй проблемой, когда, хотя мы успешно выполнили модифицированный код без каких-либо сообщений об ошибках, полученные изображения показывают, что ограничивающая рамка полностью пропустила животных и многие из обрезанных изображений имеют неопределенный размер файла. Оказывается, что данные ограничивающего прямоугольника были получены с помощью алгоритма обнаружения изображений, проходящего через изображения исходного размера. Мы решили эту проблему, получив исходные размеры из аннотаций JSON для обучающих и дополнительных изображений. Для тестовых изображений мы получаем данные об исходном размере из test_file.csv из WallEclipse GitHub. Имена столбцов ширины и высоты из этого файла поменялись местами, поэтому мы должны получить ширину изображения из столбца высоты и наоборот. После добавления исходных данных о высоте и ширине в наши фреймы данных ограничивающие прямоугольники теперь окружают животных в наборах данных для обучения и тестирования, но они по-прежнему не применялись к набору дополнительных данных для обучения. Причина заключалась в том, что, хотя идентификаторы изображений для дополнительного набора данных были чисто числовыми, идентификаторы, связанные с данными ограничивающего прямоугольника, имели строковый тип данных, а не целые числа. Итак, мы преобразовали тип в столбце id для дополнительного набора данных из целых чисел в строки. После этого шага все изображения, у которых есть данные ограничивающего прямоугольника, связанные с их идентификаторами, были правильно ограничены и обрезаны, хотя некоторые прямоугольники выходили за границу изображения, если животные не находились в центре изображения.

После того, как мы еще раз изучили код для обрезки изображения, мы обнаружили, что команда AbuduWeili применила отступы вокруг животных в ограничивающей рамке, поэтому при кадрировании будет включена небольшая область вокруг животных. Когда это дополнение было удалено, получившаяся ограничивающая рамка теперь плотно ограничивала животных, и общий размер обрезанных изображений теперь намного меньше, чем загруженных изображений, 6 ГБ по сравнению с 50 ГБ при загрузке с сайта Kaggle и iWildcam GitHub. Этот последний набор использовался для обучения и тестирования. Мы обнаружили, что точность тестирования и оценка f1 увеличивались, когда исходные изображения были обрезаны так, чтобы присутствовали только интересующие животные. Благодаря двухэтапной обрезке мы узнали, что жесткая ограничивающая рамка необходима для хорошей точности и показателя f1. Если область заполнения включена в кадрирование и ограничивающую рамку, на точность влияют отрицательные, не пренебрежимо малые стороны.

Наши выводы из этой части предварительной обработки:

  1. При классификации изображений с отсутствующими данными из нескольких классов мы должны сначала дополнить данные, чтобы включить отсутствующие классы, прежде чем выполнять какое-либо обучение.
  2. Чтобы протестировать код обработки, используйте по крайней мере одни данные из каждого дистрибутива, потому что между дистрибутивами могут быть различия, и тот факт, что код работает для одного дистрибутива, не означает, что он будет работать для всех дистрибутивов.
  3. В проектах, связанных с ограничивающими рамками и кадрированием, лучше не заполнять ограничительную рамку, поскольку это может отрицательно повлиять на точность.
  4. Если задан набор координат ограничивающего прямоугольника, выясните, к чему относятся эти координаты и каков исходный размер изображения, к которому изначально был применен ограничивающий прямоугольник.
  5. Чтобы помочь разобраться в чьем-то коде, выясните, какие результаты производит этот код, а также попытайтесь сопоставить сходства между вашим и их вариантами использования.

После того, как мы получили обрезанный набор данных, следующим шагом предварительной обработки будет улучшение изображения. Этот исходный набор данных из фотоловушки был для нас проблемой. У этих изображений были некоторые проблемы, такие как плохое освещение, область размытия, слишком маленькое животное, животное, покрытое растениями, обрезанное животное, неприятные погодные условия, одни и те же места с разными условиями и так далее. Мы предположили, что эти проблемы явились причиной того, что моя команда получила более низкий балл, чем базовый уровень (в этом соревновании базовый показатель составляет 0,115). Из-за этого мы начали пробовать некоторые улучшения в OpenCV.

Сначала мы попробовали CLAHE (адаптивное выравнивание гистограммы с ограничением контраста). CLAHE стремится уменьшить шум в относительно однородных областях изображения [3]. Затем мы использовали баланс белого (WB). Баланс белого (ББ) - это процесс воспроизведения нейтральных цветов, специализированные методы, которые мы использовали, - это простой баланс белого и баланс белого в сером мире [4]. Алгоритм простого баланса белого работает, независимо растягивая каждый из входных каналов изображения до указанного диапазона. Для повышения надежности он игнорирует верхний и нижний p% значений пикселей [5]. В то время как алгоритм баланса белого серого мира масштабирует значения пикселей на основе предположения серого мира, которое гласит, что среднее значение всех каналов должно приводить к серому изображению. Он добавляет модификацию, определяющую пороговые значения пикселей на основе их значения насыщенности, и использует только пиксели ниже предоставленного порога при нахождении средних значений пикселей [6].

Обучение

Основываясь на нашей лучшей частной оценке и общедоступной оценке (0,267, 0,224), мы изменили размер новейших обрезанных изображений до 128 x 128 (сильно обрезанные изображения без отступов), а затем дополнили набор обучающих данных случайным горизонтальным переворотом и случайным стиранием. Мы следовали документации Walleclipse, в которой использовалась регуляризация смешивания. Теоретически смешивание может улучшить обобщение современных архитектур нейронных сетей, уменьшить запоминание поврежденных меток, повысить устойчивость к примерам противоборства и стабилизировать обучение порождающих состязательных сетей. Mixup расширяет обучающее распределение, включая предварительные знания о том, что линейная интерполяция векторов признаков должна приводить к линейным интерполяциям связанных целей. Вкратце, mixup создает виртуальные обучающие примеры. Мы обучили набор данных использованию DenseNet-121 с дополнительным полностью подключенным слоем, Adam Optimizer (lr = 0,001), кросс-энтропийной потерей и планировщиком скорости обучения ReduceLROnPlateau (коэффициент = 0,5, терпение = 2). Мы тренировались до 10 эпох и использовали вес из шестой эпохи, потому что он прошел наивысшую проверку f1. Для получения дополнительной информации, когда мы использовали tqdm во время обучения, мой компьютер много раз падал. Так что не используйте tqdm во время обучения, если ваш компьютер все еще использует жесткий диск и память небольшого размера.

Тестирование

Мы вводим сильно обрезанные изображения для вывода с помощью того же оптимизатора, планировщика и размера изображений, что и в сеансе обучения. Мы занимаем 6-е место (первые 2%) в личном рейтинге на основе таблицы лидеров, но наша оценка не отражалась в ней, потому что мы подали заявку с опозданием. Вот результат нашего представления,

Заключение

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

Подтверждение

Мы хотели бы выразить нашу особую благодарность Konvergen.AI, который предоставил нам прекрасную возможность реализовать этот замечательный проект по глубокому обучению от Kaggle Competition. Мы надеемся, что это станет для нас хорошим началом вхождения в мир машинного обучения. Здесь мы представляем команду,

Мега Франсиска, студентка 2 курса математического факультета Индонезийского университета. Интересуется математическими вычислениями, наукой о данных и уделяет особое внимание глубокому обучению. Теперь начну развивать мои интересы в качестве стажера в Konvergen.AI в качестве ученого ИИ.

Дэниел К. Сухендро, окончил Университет Флиндерса в 2018 году со степенью доктора философии. степень по химии. Начал изучать науку о данных и глубокое обучение в 2018 году. Сейчас работаю стажером в Konvergen AI в качестве AI Scientist.

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

Ссылка

  1. Конкурс iWildcam 2019 Kaggle: https://www.kaggle.com/c/iwildcam-2019-fgvc6/overview, https://github.com/visipedia/iwildcam_comp, по состоянию на 8 июля 2019 г.
  2. Отчет AbuduWeili и репозиторий кода: https://github.com/Walleclipse/iWildCam_2019_FGVC6, доступ осуществлен 10 июля 2019 г.
  3. Чжао, Яо, Сянвэй Конг, Давид Тауман. 2017. Изображение и графика, в https://books.google.co.id/books?id=R9FEDwAAQBAJ, по состоянию на 6 августа 2019 г.
  4. Авраам, Чендлер. 2017. Какова цель баланса белого?, На странице https://medium.com/hipster-color-science/what-is-the-goal-of-white-balance-b0b1f2b18951, дата обращения 10 августа 2019 г. .
  5. Doxygen. 2019. cv :: xphoto :: SimpleWB Class Reference, в https://docs.opencv.org/master/d1/d8b/classcv_1_1xphoto_1_1SimpleWB.html#details по состоянию на 10 августа 2019 года.
  6. Doxygen. 2019. cv :: xphoto :: GrayworldWB Class Reference, в https://docs.opencv.org/3.4.4/d7/d71/classcv_1_1xphoto_1_1GrayworldWB.html#details по состоянию на 10 августа 2019 года.