от Кристиан Кастило, Серхио Перес, Антонио Рубио и Яно Солер.

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

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

Двете основни заплахи за земеделския сектор са времето и вредителите. За да постигнем ранно откриване на портокаловите болести и тъй като много от тях показват ясни деформации във външния вид на плода, решихме да обучим модели за визуално разпознаване, така че те да могат да различават здрави от болни парчета. и в допълнение, в рамките на болните, класифицира болестта. По-конкретно, ние обучаваме модела за откриване на 3 много често срещани болести или вредители: Planococcus citri, известен като "cotonet", Aonidiella aurantii или калифорнийска червена въшка и Thysanoptera или трипси.

Инфраструктура на проекта.

В тази първа версия на проекта се фокусирахме върху получаването на напълно функционален MVP. Използването на нашия модел се основава на уеб приложение, направено в NodeJS/Express, което ни позволява да заредим изображение и да го изпратим до api в Google Cloud.

След като API получи данните от изображението, извиква модела на класификатора, който преди това е бил експортиран и включен в API, като му предава изображението.

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

Проучвателен анализ на данни (EDA).

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

За да получим повече данни за обучение, проведохме процес на увеличаване на данните, който се състои от поредица от техники за увеличаване на набора от данни чрез прилагане на трансформации към изображенията, които имахме на разположение. В нашия случай анализираме, че оптималното би било да се прилагат само трансформации, които се състоят от завъртане на изображението, така че за всяко изображение генерираме три, прилагайки завъртане от 90, 180 и 270 градуса към всяко от тях. За да направим това, ние избрахме библиотеката Albummentations, поради голямото разнообразие от трансформации, които ни предлага, и нейната лекота на използване. Разработихме скрипт на Python, който получи директория с изображения като аргумент и, използвайки библиотеката Albummentations, приложихме гореспоменатите трансформации към всяко от изображенията в тази директория.

Преди обучението всички тези изображения трябваше да бъдат правилно подготвени: те трябваше да бъдат етикетирани според заболяването, което показват, или дали са здрави, и също така да ги трансформирате при същите стандарти за качество и размер. Впоследствие те трябваше да бъдат разделени на комплекти за обучение и тестове. Използвахме Roboflow, за да изпълним тази задача.

Модели за визуално разпознаване.

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

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

От наша страна избраният модел беше YOLOv5s (малката версия на YoloV5 със 7.2M params). От една страна, защото предлага добра скорост на откриване, а от друга, защото се нуждаехме от модел, който не е претоварен, за да бъде релевантен нашия набор от данни.

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

За щастие YOLOv5 работи много добре с техниките за увеличаване на данни и ние успяхме последователно да преминем от 288 изображения до 1013, обикновено се препоръчва за всеки клас да има около 1000 анотации, в нашия случай броят беше около 325 за всеки клас.

Резултати.

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

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

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

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

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

Реални употреби.

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

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

Бъдещи линии на работа.

След като инфраструктурата е сглобена, е лесно, стига да се получат голям брой изображения, да се обучи моделът да открива повече заболявания. Би било удобно да го направим за 6 или 7 най-важни, тъй като сме го правили само с 3 от тях. Също така, заедно с информацията за класификация, може да бъде включена информация, представляваща интерес за откритите заболявания и дори как да се лекуват.

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

Друга линия на работа за постигане на продукт с по-високо качество би била преквалифицирането с EDA с много повече данни и подобряване на скоростта на реакция, така че процесът да бъде много по-бърз или дори в реално време, особено за автоматизиране на процеса с дронове или роботи.

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

Благодарности и признателност.

Преди всичко бихме искали да благодарим на всички ментори за обучението, което получихме по време на курса Saturdays.AI Castellón и особено да подчертаем страхотната организационна работа на Ракел Алвеар, която положи безкористни усилия за курса работи динамично и вярваме, че тя го е постигнала повече от това.

Също така благодаря за съветите на Jose Llorens и Ianisse Quinzán, които ни напътстваха в конкретни моменти от проекта.

Благодарим на AVA-ASAJA за изображенията на болестта, които ни предоставиха.

По-долу ще намерите връзки към различните технологии, използвани в проекта:

YoloV5: https://github.com/ultralytics/yolov5

Roboflow: https://roboflow.com/

Албументи: https://albumentations.ai/

Колба: https://flask.palletsprojects.com/en/2.0.x/

ExpressJS: https://expressjs.com/

HandlebarsJS: https://handlebarsjs.com/