Кучетата срещу котките е твърде лесно

По-труден проблем: финозърнеста класификация

Снимка на Карл Хейердал на Unsplash

Проблемът Кучета срещу Котки се превърна в един вид здравей свят за дълбоко учене на хора. Много курсове и публикации в блогове, които са насочени към начинаещи, го използват като основен градивен елемент за въвеждане във вълнуващия свят на задълбоченото обучение.

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

Стигнахме дотам, че задълбоченото учене е толкова бързо и толкова лесно, че проблемът „Кучета срещу котки“, който преди няколко години беше смятан за изключително труден, сега е твърде лесен. 80% точност в миналото се смяташе за най-модерното. Нашите модели по същество правят всичко правилно през цялото време без никаква настройка.

Така проблемът Кучета срещу Котки вече не е предизвикателен, което означава, че няма възможност да се изпробват нови идеи. По-труден проблем, който Джеръми предполага, е финозърнестата класификация. С този проблем обучаваме модели за разграничаване между подобни категории. Пример, който се използва и в курса на Fastai, е набор от данни за домашни любимци Oxford-IIIT, който има 37 класа от различни видове домашни любимци.

В тази публикация ще изградим модел за класификация на изображението с фини зърна, за да открием кои видове риби се появяват на риболовна лодка, въз основа на изображения, заснети от камери на лодка под различни ъгли. Осем целеви категории са налични в този набор от данни, който е наличен в kaggle.

Природен надзор Мониторинг на риболова

Незаконните, недекларирани и нерегламентирани риболовни практики застрашават морските екосистеми, глобалните доставки на морски дарове и местния поминък. Дълбокото обучение има потенциал за драстично мащабиране на мониторинга на риболовните дейности, за да запълни критичните пропуски в науката и съответствието. - Опазването на природата

Разработването на точни модели за този проблем е критичен фактор за гарантиране на успеха на усилията за опазване на нашия риболов.

От изображенията можем да кажем, че този проблем би изисквал много усилия. С някои от изображенията ще бъде трудно дори човек да идентифицира вида на уловената риба.

За да изградим нашия модел, ще използваме библиотеката на fastai, което прави невероятно лесно (повярвайте ми) за изграждане на модели за задълбочено обучение.

Първата ни стъпка ще бъде да заредим и нормализираме данните.

Нормализирането на данните е важна стъпка, която гарантира, че всеки входен параметър (в този случай пиксел) има подобно разпределение на данните. Това прави сближаването по-бързо, докато тренирате мрежата. Нормализирането на данните се извършва чрез изваждане на средната стойност от всеки пиксел и след това разделяне на резултата със стандартното отклонение. - Нихил Баладжи

Това създава разделяне на 80/20 за нашите данни, 80% от данните се използват за тренировъчния набор, а 20% се използват за валидирането. Концепцията за набори за обучение, валидиране и тестове може да бъде много подобна на обстановка в класната стая. Уроците и задачите са учебният комплект, тестовете са комплект за валидиране, а финалният изпит е тестът.

В клас, който научавате (обучавате) от уроците, които вземате, както и задачите, които са ви дадени. Дават се викторини за валидиране и даване на полезна обратна връзка на учителя относно ефективността на нейния подход. Учителят (практикуващ задълбочено обучение) използва тази обратна връзка, за да коригира своя подход с цел постигане на по-добри резултати (точност или всяка друга метрика). Заключителният изпит дава по-цялостна оценка на представянето на учениците в класа и показва колко добре учителят е могъл да обучава учениците (модел).

Създаване на модела

Ние създаваме нашия модел, като използваме предварително обучен resnet50 модел за извършване на трансферно обучение. Трансферното обучение ни позволява да използваме модел, изграден за друга задача, като отправна точка за модела, който искаме да разработим за нашата собствена задача.

Идеята е да вземем знанията, научени по предварително обучения модел и да го приложим към нашата задача. Невронна мрежа се обучава на данни, които в случай на ImageNet са 1.2M изображения с етикет. Тази мрежа улавя универсални характеристики на изображения като извивки, форми и ръбове.

Така че вместо да тренираме нова мрежа и да я накараме да научи всички тези функции от нулата, прехвърляме знанията, научени от предварително обучената мрежа, в нашия проблемен домейн.

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

С трансферното обучение можем да постигнем съвременни резултати за кратко време дори и с малък набор от данни, защото използваме знанията, получени от предишното обучение на по-голям набор от данни. Можете да прочетете повече за обучението по трансфер тук.

След обучение за 5 епохи приключваме със степен на грешка 0.093. Тоест, нашият модел прави грешни прогнози 9% от времето.

Фина настройка

За такъв важен проблем 9% процент на грешка не е твърде добър. За да подобрим нашата точност, се обръщаме към фина настройка. В първата фаза на обучението актуализирахме само теглата на новоинициализирания напълно свързан слой. Не актуализирахме (замразихме) теглата на предварително тренирания модел.

Размразяваме тежестите на предварително тренирания модел и тренираме модела отново. Това фино настройва теглата на предварително обучения модел, което го прави по-подходящ за нашата задача да идентифицираме рибните видове.

Интуицията зад фината настройка е, че по-ранните слоеве на мрежата улавят общи характеристики на изображения като криви и ръбове. Но по-късните слоеве научават функции, по-специфични за данните, на които е обучен, като например разпознаване на кучета и котки в случая на ImageNet.

Когато усъвършенстваме мрежата, ние по същество коригираме теглата на тези слоеве, така че те да улавят характеристиките, които са по-важни за задачата.

Топ загуби

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

Крайният ни процент на грешки е 0,05, който все още може да бъде подобрен. Това обаче показва колко предизвикателни могат да бъдат проблемите с класификацията на фините зърна. Надяваме се, че насочим фокуса си към този вид проблеми, ще можем да разработим техники, които да ни помогнат да постигнем още по-високи нива на точност.

Кодът за този проект е достъпен на github.

Ако ви хареса това парче, моля препоръчайте и споделете