LINUX.ORG.RU

Простой бинарный классификатор изображений

 , ,


0

1

Ищу готовый сабж для сортировки изображений в две группы а-ля спамфильтры (ок/не ок), чтобы работал из коробки с минимальными настройками. Точность не важна, хватит >70%. В идеале должны быть две команды вроде:

$ image-classifier train good good-image.jpg
$ image-classifier train bad bad-image.jpg
$ image-classifier guess looks-like-good-image.jpg
good: 89%
bad: 12%

Но в принципе можно и с доработкой напильником. Желательно опенсорс, чтобы на досуге поковырять и настроить под себя.

Попробовал гуглить нейронки для этого дела, но гугл у меня нетренированный и предлагает только учебные задания для студентов с захардкожеными значениями, типа: «скопируй и запусти».

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

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

★★★

сабж для сортировки изображений в две группы

Слишком размытая задача. Если подавать на НС phash изображений, тогда пойдёт даже перцептрон.

anonymous
()

Ищу готовый сабж

Не бывает, ибо для изображений нету готовых критериев «good/bad», их каждый сам формализует под свою задачу.

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

Глянь SegNet ©.

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

SegNet

Это же выделение контуров и распознавание объектов. Чем это может помочь бинарной классификации?

E ★★★
() автор топика
Ответ на: комментарий от E

Это же выделение контуров и распознавание объектов. Чем это может помочь бинарной классификации?

Бинарная классификация — подмножество задач распознавания (PDF) ©.

Структурная кластеризация контуров обычно быстрее и проще бинарной, например цепное кодирование контура инвариантно к ориентации объекта ©.

Но, как уже глаголил предыдущий оратор, конкретно формализованная постановка задачи предвосхищает половину её решения.

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

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

E ★★★
() автор топика
Ответ на: комментарий от E

Спасибо, конечно

Надо ж уметь так вежливо на х.. послать.

anonymous
()

На мой взгляд пройдет еще некоторое время, прежде чем нужное ТС соберут в один продукт.

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

Самое интересное, что может тут реально простая сеть сойдет, но ее таки нужно сделать и поддерживать.

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

  1. Даже если есть 2 подмножества, которые казалось бы, легко классифицировать, то не факт, что есть закономерности, которые может выучить сеть. Картинки, грубо говоря, человек как попало накидал, есть там зависимость или нет? Будет ли переобучение и как с ним бороться, если множества менять никто не будет?

  2. Как это все обучать, чтобы подобная тулза пошла в массы? Даже простые сети на больших или нетривиальных наборах данных могут потребовать сложного обучения. Не важно как обучать, online/stream (когда данные льются потоком) или через батчи/эпохи. Пока не у любого пользователя есть свободная GPU от NVidia.

  3. Кроме тупо выбора архитектуры сети, есть еще куча нюансов, типа loss-функции, алгоритма оптимизации и пр. Как это все подбирать/оптимизировать с минимальным участием пользователя? Есть конечно всякие оптимизаторы гиперпараметров, но они требуют еще больших выч. мощностей. Если компьютер хомячка будет забит тренировкой/перетренировкой/дотренировкой сети постоянно, то никто не будет это использовать. Выч. мощности растут и быстро, но не настолько.

anonymous
()
Ответ на: комментарий от anonymous

Это всё очень хорошие замечания, но у меня задача гораздо проще и определённая погрешность вполне допустима. Мне нужно, чтобы тулза умела определять примитивные составные части - основную палитру, градиенты, характер изображения, текстуру и т.п. НС вполне с этим может справиться, мы все такие нейронки писали на лабораторных для распознавания котиков/цветочков.

Примерно как байесовский фильтр реагирует на отдельные слова/н-граммы и их комбинации, не вдаваясь в смысл, настроение текста и прочие комплексные характеристики.

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

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

А можно пример или чуть больше подробностей? Я не совсем понял, какую метаинформацию phash может в себе хранить, чтобы его можно было осмысленно по ней категоризировать.

E ★★★
() автор топика

Говорят, можно индусов занедорого нанять капчу разгадывать. API заказчику предоставляется

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 1)
Ответ на: комментарий от E

какую метаинформацию phash может в себе хранить

Не мета, а «низкочастотную» составляющую изображения. С полным игнорированием всей «средне-» и «высокочастотной» составляющей. Это позволяет по phash «находить» «похожие» (а точнее с одинаковой «низкочастотной» составляющей) изображения.

anonymous
()

Возьми туториал по keras, pytorch или tensorflow (в порядке усложнения) про классификацию изображений с сеткой предобученной на imagenet. Там дел на один вечер разобраться под пиво.

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()

Всё плохо. Готового сабжа нет принципиально — все эти модели сильно зависят от того множества данных которое у тебя есть. В зависимости от его свойств точность той или иной модели может очень сильно колебаться. Очень сильно, это от 50% (как в анекдоте про блондинку и динозавра) до 90%. Т.е. тебе надо брать Python, scikit-learn, специалиста по ML (как минимум начального уровня обезьянку) и гонять разные модели. А если все будут работать плохо/данные нуждаются в сильной обработке, то ML обезьянка не справится и придётся вливать кучу бабосов в серьёзных разработчиков/стайку обезьянок.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)
Ответ на: комментарий от E

Какие-то взаимоисключающие параграфы.

НС вполне с этим может справиться, мы все такие нейронки писали на лабораторных для распознавания котиков/цветочков.

100% не такие, там множества «домашние» были, а не реальные данные.

Я из темы выпал лет на 10 и в буме ML не участвовал, поэтому могу хотеть странного.

10 лет назад я сильно сомневаюсь, что были лабы про такие нейронки. Тогда из нормальных фреймворков было хрень да маленько по нейронным сетям вообще, не говоря уже про адекватный Deep Learning. Caffe году в 2012-2013 появился.

На чем вы могли тогда такие «простые» задачи решать?

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

Разве что свою функцию parse_arguments написать, все остальное из фреймфорка тащить - минутное дело.

pip install tensorflow-gpu keras python-opencv-headless

Строк 40-50 кода (ну 80 максимум, если красиво форматировать и комменты писать) и все, что душа пожелает. Это с нуля (ну т.е. подтягивать те же resnet*, efficientnet* и писать тренировку).

А примеров типа cats-vs-dogs на github много больше, чем нужно, и переписать под свои данные, дело минутное.

anonymous
()
Ответ на: комментарий от anonymous

Поддержу. Вообще 70-90% времени уходит на очистку данных/приведение её к удобоваримому виду и 30-10% на тестирование алгоритмов/изобретение своих велосипедов.

peregrine ★★★★★
()
Ответ на: комментарий от anonymous

«Похожие» по каким параметрам? Визуально в общем плане изображения могут сильно отличаться.

E ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.