Pull to refresh

Comments 28

А почему для классификации не используется контурный анализ?
habrahabr.ru/post/118486/
По-моему он лучше, чем представленные метрики должен работать.
Да, и ещё два вопроса вдогонку.
Первый: а при обучении по выборке пробовали применять разные алгоритмы? В принципе, как мне подсказывает опыт, иногда лучше SVM, иногда adaboost, а иногда ещё что-то вроде нейросетей. Часто за счёт правильного метода можно эффективность поднять на десятки процентов.

Второй: Всегда любопытно, когда натыкаешься на какую-нибудь компанию, занимающуюся обработкой изображений или машинным обучением в России. Тут мало кто этими тематиками занимается. Вашу компанию вижу в первый раз, к тому же у вас это похоже у вас первый пост на Хабре. Будут какие-нибудь посты о деятельности компании и тех задачах, что она решает?
Еще хотелось бы порекомендовать попробовать RBM (и DBM, соответственно).
DBM?
Вы имеете в виду Deep Belief Network, или это чтото новое, также на основе RBM?

Да, почему бы и нет. Можно копать еще глубже :) К примеру, во всякие deep NCA, говорят они клевые.
Я всегда называл его Deep Boltzmann Machine, но, вроде, это то же самое
Я так понимаю, что DBN предполагается использовать на последнем этапе — для изучения форм по очищенным от шума изображениям? Т.е. входными образцами должны быть просто наборы пикселей, составляющие фигуру? Или вы подразумевали что-то другое?
Приветствуем. Мы начали нашу деятельность относительно недавно, тем более на Хабре. В ближайшее время планируется вывесить статью о нашей деятельности — чем мы занимаемся помимо обучения студентов. Всегда рады поделиться с общественностью клевыми интересными штуками и продвигать машинное обучение в массы.

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

Например, как вы заметили, в реальных приложениях можно использовать контурный анализ, или как намекают в комментарии ниже RBM\deep learning. Или еще чтонибудь вроде признаков Хаара и разного рода сверток, но никак не отношение площади к квадрату периметра.

Насчет других методов — действительно есть смысл поиграться с ними. Хотя, с одной стороны, по графикам видно что на имеющихся признаках 100%-ая точность не достижима. С другой, решающее дерево наглядно для интерпретации.

Представьте — вас спросят «как отличить квадрат от треугольника?». А вы скажете — «о, все просто — отношение площади к периметру должно быть меньше 0.06». Это прикольнее чем svm, хоть, в данном случае(!), и чуть менее точно :)
Ухты, круто!

Интересно, иконка замочка ему понравилась, а аватарка нет. Это в OpenCV, верно?
У автарки буква b сильно подпортила контур и оно посчитало что это уже не квадрат )

Это в OpenCV, верно?
Да, контуры ищутся с помощью OpenCV
а преподаватель (Александр Шлемов; он также руководил дальнейшей реализацией) показал, почему для решения лучше использовать машинное обучение.

А нам расскажете, почему всё-таки лучше? Из статьи это совсем не следует… Напротив, по моему именно эта задача в конкретной формулировке красивше решается через вычисление характеристик контуров(хотя-бы посчитать центральные или хью моменты)… А ML тут — это как из пушки по воробьям стрелять…
Полагаю что потому что было несколько метрик и ни одна из них не давала хорошей классификации сама по себе

Тут возникает проблема нахождения границ: необходимо знать, какие значения метрики могут получаться для каждой из фигур. Можно проложить эти границы вручную “на глазок”, но лучше поручить это дело математически обоснованному алгоритму.
Да, вы верно заметили. А также, идея была в том чтобы построить на основе таких признаков чтото простое — дерево решений или логистическую регрессию.

Это не то, чтобы из пушки по воробьям (хотя если бы речь шла про GBM 1, 2, это было бы правдой), но и не совсем тривиальный подход.

Плюс, для первичного ознакомления с машинным обучением, Хью моменты и вейвлет-анализ могут быть слишком хардкорны :)
Как-то лихо они сделали такой вывод: взяли несколько плохих метрик, получили ожидаемо плохой результат и тут-же сделали вывод, что ML — спасение человечества)
А сейчас в обработке изображений у многих бытует мнение, что любая задачка сводиться к правильному обучению классификатора:)
Никто не учитывает, что есть и другие варианты решения проблем:)
Скорей всего эти люди не замниаются продуктизацией такого кода) Когда резко оказывается, что для промышленного применения такой «вроде здорово натренированный» классификатор не подхдоит в связи с плохой точностью:)
Вот, вот в этом и было ключевое недопонимание. Ни о какой продуктизации здесь речи не шло:
Таким образом эта учебная задачка стала для меня введением в Machine Learning, и я хотел бы поделиться с вами этим опытом.


Конечно же, для промышленного применения, как неоднократно писали выше, уже есть свои, куда более совершенные инструменты. А также есть готовые коробки, как показанный выше OpenCV — их достаешь и не думаешь о том, кто и как тренировал ее содержимое.
Это конечно клево, что ML ассоциируется со спасением человечества (не надо злить skynet), но таких далеких выводов пока не делалось :) В рамках этого поста, по-крайней мере.

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

С другой стороны, если сразу юзать чтото более серьезное и смотреть, как какой-нибудь DBN перемалывает распознавание формочек\циферок — это вариант, но не факт что оправданно технически сложный.
С другой стороны — придумать умозрительных размышлений о контурах и свести их воедино позволит и голову подключить и в азах обучения разобраться.

А после того как студент справится с заданием, то вытащить тех же вейвлет фич и вместо одного дерева решений обучить тысячу штук — дело техники.
Без обид, но мне ваше решение видится так: давайте возьмем кучу плохих фич, выбирать из них хорошие не будем, ведь заниматься анализом предметной области — это так сложно и скучно, затем возьмем какойнибудь крутой метод машинного обучения и стравим ему получившееся у нас дескрипторы, что-то даже местами отработало(ибо задача достаточно простая, и ML метод кое как справился с убогими фичами) и пофигу что мисматчи вылезли даже на достаточно хороших данных… Вот как-то так. Может я чего-то не понимаю, но хоть с точки зрения компьютерного зренияЮ хоть с точки зрения ML вы показали в статье то, как не надо делать при решении задачи. Если цель была сделать введение в ML, то непонятно где пропал этап feature selection… кучу метрик вы взяли, но их качество не оценили, а на сложных данных это грозит эпичным фэйлом. Если это было введение в компьютерное зрение, то вы опять не «изучили» предметную область… нет никакого анализа качества фич, и попыток решиьт задачу при помощи методов компьютерного зрения… Как-то так…
То что вы говорите это все верно, применительно к настоящим и «сложным» данным, но есть большое но. Вы слишком серьезно подошли именно к учебной задаче, которая не претендовала на чтото серьезное и «настоящее» в производственном плане (прямо в abstract'е к посту). Этот пост был написан учеником о его собственном опыте — первый его подход к снаряду.

Все же проще — есть задача. Она простая и наглядная — буквально, игрушечная. И то что она связана с компьютерным зрением — просто такую задачу придумали для студентов на вступительных экзаменах. На экзамене от студента при ответе на задачу ожидалась именно умственная деятельность по придумыванию критерия, как отделить одно от другого.

Так как критериев больше одного, их можно было как раз использовать в рамках ML, чтобы слепить один большой критерий, без специальных инструментов (надо будет дисклеймер писать в следующий раз). К слову, feature selection как раз был в рамках построения дерева. Но так как в этой статье «куча» метрик перечислима по пальцам одной руки, этот вопрос можно умышленно умолчать :)
Спасибо за идею, добавили еще пару тегов =)
Кстати, на тимусе есть задачка с ровно таким же условием, так что если кто-то хочет проверить на скорую руку набросанное решение — он может сделать это в системе автоматической проверки: http://acm.timus.ru/problem.aspx?space=1&num=1378
Да, условия задачи почти такие же, только на изображения надо ещё помехи нанести, так она становится интереснее.
Недавно мы еще решали задачу с распознаванием цифр на kaggle, если кому-то интересно могу скинуть свое решение =)
До чего техника дошла… Мы в одиннадцатом классе просто считали расстояние от центра масс до самой близкой и самой удаленной точки на границе, а потом смотрели на их отношение. Если близко к 1, то круг. Если в районе корня из двух, то квадрат. Если больше, то треугольник. И ничего, AC.
Для фигур, генерируемых bitbucket.org/rampeer/image-classifier/src/HEAD/picture_generator.py, вполне работает такая простая метрика: описываем вокруг фигуры окружность с центром в центре масс фигуры и с радиусом, равным расстоянию от центра масс фигуры до ее наиболее удаленной точки. Далее считаем отношение площади такой окружности к площади самой фигуры.
Вот что получаем: image
Код:

Sign up to leave a comment.