За последние несколько месяцев я работал над несколькими проектами по науке о данных, в основном для улучшения текущих алгоритмов, которые мы используем для прогнозирования результатов для Performance Genetics и BreezeupIQ. Одним из наиболее интересных аспектов, который близок к завершению, надеюсь, в течение следующей недели, является подход, который, я считаю, является первым в мире, по крайней мере, с точки зрения лошадиной области.

Когда я выполняю ультразвуковое исследование сердца скаковой лошади в рамках своей методики отбора для продажи, будь то годовалая, двухлетняя или старая лошадь, в дополнение к измерениям сердца я записываю 10-секундную видеопетлю сердца как это бьет. Я собираю эти видеоданные уже более 7 лет, поэтому у меня есть много образцов как быстрых, так и медленных скаковых лошадей, но использование видео было ограничено моим собственным восприятием того, как выглядит «хорошее кардио», и это не было чем-то, что я использовал в качестве ввода данных в свою базу данных для моего алгоритма машинного обучения, чтобы учиться.

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

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

Прочитав статью, я немного покопался на GitHub и наткнулся на этот репозиторий по классификации видео с использованием Keras и Tensorflow (среда машинного обучения Google с открытым исходным кодом).

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

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

На сегодняшний день я измерял кардио «традиционным способом» и был максимально объективен в отношении собранных данных. То есть, используя ультразвук, я делаю 10-секундный видеоклип в м-режиме левого желудочка сердечно-сосудистой камеры, а затем измеряю кардио, чтобы собрать следующие измерения камеры.

  • Частота сердцебиения
  • IVSd — межжелудочковая перегородка в конце диастолы
  • LVIDd — внутренний диаметр левого желудочка в конечной диастоле
  • LVFWd — диаметр свободной стенки левого желудочка во время диастолы
  • МЖП — концевая систола межжелудочковой перегородки
  • LVIDs — внутренний диаметр левого желудочка в конечной систоле
  • LVFWs — диаметр свободной стенки левого желудочка во время систолы

В основном это измерения стенок камеры и внутреннего диаметра камеры при максимальном наполнении и максимальном сжатии. На основе этих измерений я также могу рассчитать функциональные показатели, такие как масса левого желудочка (LVMass), фракционное укорочение (FS), фракция выброса (EF), ударный объем (SV) и сердечный выброс (CO).

Кроме того, я измеряю тело лошади с помощью рулетки и использую эти измерения для определения роста, веса, длины тела и площади поверхности тела лошади. Эти последние измерения можно затем использовать для масштабирования кардио по полу, поэтому что-то вроде LVMassbyWeight (масса левого желудочка, деленная на расчетную массу тела) становится переменной для рассмотрения. В течение последних семи лет все эти данные вводятся в мою базу данных SQL, а затем я использую алгоритм машинного обучения, в частности XGBoost, чтобы определить, какие переменные важны, и создать алгоритм, который обучен предсказывать вероятность того, что лошадь будет элитной. бегун.

Итак, собрав много данных и используя наилучший из возможных алгоритм машинного обучения (XGBoost — это алгоритм машинного обучения, который используют большинство специалистов по данным), чтобы предсказать результаты, какова «наилучшая возможная точность» любого алгоритма, использующего этот алгоритм. техника?

Если мы используем сбалансированный набор данных — то есть быстрых лошадей столько же, сколько и медленных — точность этого алгоритма неплохая, но открыта для значительного улучшения. Если вы понимаете, что вероятность подбрасывания монеты составляет 0,5 или 50%, то если бы я разработал модель с Точностью 0,5, это было бы не лучше, чем смотреть на годовалого и подбрасывать монету на распродаже, чтобы сказать «да» или «нет», так что бесполезно. Если бы точность модели была равна 1,00, она идеально предсказывала бы всех элитных лошадей как элитных, а неэлитных как неэлитных, что невыполнимо, учитывая, что лошади должны побеждать только тех, кто появляется в данный день, и в зависимости от того, что которую вы определяете как «элитную», может оказать значительное влияние на способность модели точно описать элитную скаковую лошадь.

Моя текущая модель Cardio+Biometrics имеет точность 0,702. Это твердое число, так как в этом случае у нас есть много внешних эффектов и переменных, которые мы не измеряем (например, ДНК), которые могут повлиять на результат (прогноз гоночного класса), который отсутствует в сердечно-сосудистых параметрах. и биомеханические характеристики, которые измеряются. Точность также представляет собой значительное «преимущество» с точки зрения возможности дисквалифицировать лошадей, которые «все одеты и некуда идти».

Построение модели классификации видео

Использование видео — непростая задача. По сути, вам нужно разбить каждое видео на отдельные кадры, поэтому, если мое 10-секундное видео снимается со скоростью 30 кадров в секунду, я просматриваю 300 кадров (или изображений), а затем вам нужно обучить одну модель, сверточная нейронная сеть, чтобы научиться на 300 изображениях смотреть на разницу между быстрыми и медленными лошадьми, а затем другая модель, рекуррентная нейронная сеть, чтобы смотреть на разницу в изображениях, которая возникает между каждым изображением (сравните первое изображение с второе, первое изображение к третьему, первое изображение к последнему и т. д.).

Этот подход с двумя потоками лучше всего отражает пространственно-временную природу видео, или, другими словами, он не только фиксирует форму кардио, но и то, как кардио движется, когда оно бьется. При разработке проекта я остановился на индивидуальном подходе CNN + RNN, так как сейчас такие продукты, как Clarifai, Custom Vision от Microsoft и самое последнее добавление AutoML от Google, не совсем подходят для того, чтобы позволить мне использовать пользовательский помеченный набор данных как У меня есть быстрые и медленные скаковые лошади.

Первоначальный анализ видео был выполнен с использованием модели нейронной сети на основе RNN/Long Short Term Memory. Эта первоначальная модель дала базовые результаты с точностью 0,620, что меньше, чем моя текущая модель Cardio+Biometrics с точностью 0,702, но она дала мне основу для улучшения. Выяснилось, что наилучший подход к совершенствованию модели в первую очередь основывался на улучшении качества самих видеороликов, так как они достаточно шумные, а иногда и малоинформативные из-за специфики видео эхокардиограмм лошадей в целом (лошади двигаются, имеют вариативность). жира между датчиком и сердцем и т. д.). Для улучшения самого видео к каждому из изображений были применены следующие преобразования:

  1. Медианный фильтр
  2. Преобразование Габора
  3. Адаптивное выравнивание гистограммы с ограниченным контрастом
  4. Изменил размер видео до 100x100 пикселей
  5. Разделил каждый элемент на 255,0 и сохранил кадры в виде массива.

После того, как все это было сделано, я попробовал различные модели нейронных сетей, включая VGG, InceptionV3 и современную NASNet, которая является производной от Google AutoML, а также пользовательскую модель CNN. Вот точность различных моделей нейронных сетей, которые были опробованы.

Модель/точность

  • TDCNN+LSTM+оптический поток — 0,558
  • ВГГ16+ЛСТМ — 0,669
  • NASnet+медиана — 0,681
  • Начало_v3+LSTM — 0,687
  • NASnet+габор — 0,693
  • NASnet+LSTM — 0,718
  • NASnet+препроцесс — 0,724
  • TDCNN+LSTM — 0,730
  • TDCNN+LSTM+preproc — 0,742

Лучшей моделью, которая была создана, была пользовательская модель CNN и RNN (LSTM), в которой были преобразования предварительной обработки, перечисленные выше. Важно отметить, что только с помощью видео и ничего больше я смог получить точность 0,742, что на самом деле лучше, чем моя текущая модель Cardio+Biometrics с 0,702.

Набор данных кардио+биометрии

Хотя нейронная сеть видео лучше, чем модель Кардио+Биометрия, которую я разработал ранее, это не означает, что лучше всего просто заменить модель, скорее мне нужно использовать данные, которые традиционная Кардио+Биометрия Тест генерируется для того, чтобы помочь видеомодели связать пол и размер лошади. Когда мы углубимся в данные, собранные в модели «Кардио+биометрия», и выясним, что на самом деле имеет отношение к производительности, вот наиболее важные особенности:

  • Пол — пол лошади.
  • Длина спины — измерение от вершины холки до точки бедра.
  • Длина тела — измерение от точки плеча до седалищной кости на спине лошади (возле хвоста).
  • Обхват окружности — измерение обхвата по холке и под обхватом.
  • Длина ноги — измерение от локтя до проксимальной сесамовидной кости.
  • Тазовый индекс LV — измерение от бедра до седалищной кости, деленное на измерение от земли до холки.
  • От плеча до бедра — расстояние от точки плеча до бедра.
  • Вес Z-оценки — стандартная оценка расчетной массы тела лошади. Я использую формулу, разработанную Станиаром и др., которую я считаю наиболее точным измерением веса, которое можно применять в полевых условиях. Затем вес преобразуется в стандарт/Z-оценку на основе лошадей того же возраста и пола, что позволяет нормализовать данные.
  • LVIDd — внутренний диаметр левого желудочка в конечной диастоле
  • LVIDs — внутренний диаметр левого желудочка в конечной систоле
  • SV — Расчет ударного объема сердечно-сосудистых параметров.
  • СО — расчет сердечного выброса сердечно-сосудистых параметров.
  • FS — Расчет фракционного укорочения сердечно-сосудистых параметров.

Комбинированная модель

Последним шагом, по крайней мере, на этом этапе моего исследования, было объединение наиболее важных функций, созданных нейронной сетью CNN+RNN из видео, с наиболее важными функциями из стандартного набора данных Cardio+Biometrics и передача этих функций в новый комбинированный набор данных. модель предсказания.

Не вдаваясь в технические подробности (если я еще этого не сделал!), в результате процесса CNN+RNN я могу извлечь наиболее важные переменные из CNN+RNN, которые связаны с производительностью скаковой лошади. Оказывается, есть 4 функции из части модели CNN+RNN, которые в значительной степени объясняют наиболее важные особенности кардио-видео. Затем эти четыре переменные объединяются с данными кардио+биометрии для тех же лошадей, чтобы разработать комбинированную модель.

Из приведенного выше видно, что четыре функции CNN+RNN, извлеченные из видео, являются наиболее важными характеристиками в целом. За ними следуют LVPelvicIndex, ударный объем, сердечный выброс, длина ноги и длина тела. Интересно, что переменные, которые имели некоторое значение в наборе данных Cardio+Biometrics, а именно LVID и, что несколько удивительно, пол лошади, не имеют значения в этой комбинированной модели. Важным выводом для меня здесь является то, что я должен измерять только то, что имеет значение, и есть много переменных, которые я использовал для измерения, которые не имеют реального значения для прогнозирования результата, поэтому мне больше не следует их измерять.

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

  • Точность комбинированной модели CNN+RNN+Cardio+Biometrics Random Forest: 0,825.
  • Точность видеомодели CNN+RNN: 0,742
  • Точность текущей модели Cardio+Biometrics Random Forest: 0,702

Итак, у вас есть это. Объединив лучшие функции видеомодели CNN+RNN с соответствующими данными из моей текущей модели Cardio+Biometrics, я смог разработать модель с ОЧЕНЬ ХОРОШЕЙ точностью, намного лучше, чем моя текущая модель Cardio+Biometrics, которую я использую. .

Дальнейшие шаги

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

  1. Точно так же, как я выбрал наиболее важные функции в наборе данных Cardio+Biometrics и использовал только эти функции в комбинированной модели. У нас есть набор ДНК-маркеров, около 220 SNP, о которых уже известно, что они коррелируют с успехом скаковой лошади. Эти SNP расположены в генах, которые участвуют в определении типа мышечных волокон, оксигенации и т. д. Я могу выполнить тот же процесс «отбора признаков» для этих SNP, который мы сделали с данными кардио+биометрии выше, а затем использовать только эти SNP в анализе. новая итоговая комбинированная модель, в которой будут использоваться 4 функции, извлеченные из видео, 14 функций из модели данных Cardio+Biometrics и любые SNP, которые считаются важными. Возможно, на самом деле вероятно, что SNP устранят многие кардио- или биометрические измерения, поскольку там есть SNP, которые являются прокси для веса (в миостатине и PPARGC1a) и роста (LCORL SNP), так что может быть, что я вам нужно только взять образец шерсти, снять видео и несколько измерений на лошади, и он фиксирует все, что нужно для определения будущей производительности.
  2. Добавьте некоторый тип алгоритма кластеризации K-средних для видеопоследовательности, как в этом документе здесь — Алгоритм классификации видео на основе улучшенных K-средних — чтобы сгруппировать кардио-видео по их сходству. Хотя, безусловно, есть кардиотренировки типа «яблочко», которые хороши практически для любого типа лошадей, безусловно, есть кардиоформы, которые более эффективны для определенных типов лошадей, выполняя разные задачи. Если я применю ярлык к типу лошади, например, к лошади с хорошим задним маркером или к хорошей лошади по грязи, контролируемый алгоритм кластеризации K-средних должен быть в состоянии разделить их на разные кардио-типы. .
  3. В моем текущем алгоритме машинного обучения и в том, который я использовал для «выбора функций» и окончательной комбинированной модели, я использовал только один алгоритм машинного обучения — XGBoost. Было доказано, что использование Ensemble Stacking, когда вы используете множество слабых и сильных алгоритмов обучения, более эффективно, чем использование одного алгоритма, поэтому я планирую интегрировать процесс автоматизированного машинного обучения для этого. Есть несколько программ, которые могут это сделать, но лучшее, что я нашел на сегодняшний день, это H2o.ai. Они разработали платформу машинного обучения с открытым исходным кодом, в которой есть функция AutoML, которая включает в себя автоматическое обучение и настройку многих моделей, а также создание составного ансамбля, который в большинстве случаев должен быть самой эффективной доступной моделью. Это, безусловно, повысит точность моих прогнозов и облегчит переобучение алгоритма на новых данных. В настоящее время я обновляю свой набор данных каждые 3 месяца, поэтому, когда лошадям исполняется четыре года и у них есть как минимум 3 старта, они становятся образцами для обучения алгоритма. Настройка этого как автоматизированной функции позволит мне быстро повторить более точный алгоритм, и мне придется меньше заниматься ручной настройкой.

Эта новая модель CNN+RNN значительно улучшила то, чем я сейчас занимаюсь, и я могу с достаточной уверенностью сказать, что никто другой в области лошадей не измеряет кардиотренировки таким образом. Мне потребуется некоторое время, чтобы запустить эту новую модель в производство (я жду, пока Google настроит экземпляр графического процессора, чтобы я мог переобучить свою модель при добавлении новых данных), но я надеюсь, что смогу начать использовать ее к в середине этого года, когда начнутся первые продажи годовалых в северном полушарии.

Я также с нетерпением жду возможности добавить данные SNP, чтобы увидеть, где я получу все это с точки зрения точности. Я думаю, что точность приблизится к 0,90, но я сомневаюсь, что она превысит это значение. Каким бы всеобъемлющим я ни был, используя различные методы и собирая как можно больше релевантных данных, есть другие факторы, которые я не измеряю, но я уверен, что они помогут определить разницу между элитными и неэлитными скаковыми лошадьми. Конечно, есть и коммерческий недостаток повышения точности, как у меня, и он будет усугубляться, если при добавлении данных SNP точность достигнет 0,9 (то есть точность 90%). Чем ближе вы подходите к идеальной классификации элитных и неэлитных скаковых лошадей, тем сложнее становится найти элитных лошадей на распродажах и тем больше испытаний вам нужно провести, чтобы найти их.