Какво е семантична сегментация?

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

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

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

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

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

Като цяло искаме да въведем изображение с размер (ВИСОЧИНА X ШИРИНА X 3) и да изведем матрица с размер (ВИСОЧИНА X ШИРИНА), съдържаща предвидения цвят на класа, съответстващ на всички пиксели.

Приложения:

Има няколко приложения, за които семантичното сегментиране е много полезно.

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

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

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

Семантична сегментация с помощта на конволюционна невронна мрежа:

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

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

Първоначалните слоеве научават характеристиките на ниско ниво, като цветове и ръбове, а по-късните слоеве научават характеристики на високо ниво, като различни обекти, сложни криви и т.н.

На по-ниските нива слоят съдържа информация за малка област от изображението, докато по-късните слоеве съдържат информация за голяма област от изображението. По този начин, докато добавяме повече слоеве, размерът на изображението продължава да намалява, а броят на каналите продължава да се увеличава. НАМАЛЕНОТО ИЗВЪРШВАНЕ се дължи на обединяването на слоевете. Конволюционните слоеве, съчетани със слоеве за понижаване на дискретизацията, произвеждат тензор с ниска разделителна способност, съдържащ информация от високо ниво.

Като вземем пространствения тензор с ниска разделителна способност, който съдържа информация от високо ниво, трябва да произведем изходни данни за сегментиране с висока разделителна способност. За да направим това, добавяме още слоеве за навиване, съчетани със слоевеUP-SAMPLING, които увеличават размера на пространствения тензор. Докато увеличаваме разделителната способност, намаляваме броя на каналите, докато се връщаме към информацията от ниско ниво. Това се нарича ENCODER-DECODER архитектура.

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

Прехвърляне на обучение в сегментиране:

Моделът, обучен за задача за класификация на изображения, съдържа пълна със смисъл информация, която може да се използва и за сегментиране. Можем да използваме повторно слоевете на навиване на предварително обучените модели в СЛОЕВЕТЕ НА ЕНКОДИРАЩИТЕ СЛОЕВЕ на сегментационния модел. Използването на Resnet или VGG, предварително обучени на набора от данни ImageNet, е популярен избор.

Изграждане на модела:

Ще използваме API на Keras за изграждане на модела за сегментиране с прескачащи връзки

from keras.layers import Conv2D, MaxPooling2D, Dropout,pSampling2D, concatenate
img_input = Input(shape=(input_height,input_width , 3 ))

Енкодерни слоеве:

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

conv1 = Conv2D(32, (3, 3), activation=’relu’, padding=’same’)(img_input)
conv1 = Dropout(0.2)(conv1)
conv1 = Conv2D(32, (3, 3), activation=’relu’, padding=’same’)(conv1)
pool1 = MaxPooling2D((2, 2))(conv1)
conv2 = Conv2D(64, (3, 3), activation=’relu’, padding=’same’)(pool1)
conv2 = Dropout(0.2)(conv2)
conv2 = Conv2D(64, (3, 3), activation=’relu’, padding=’same’)(conv2)
pool2 = MaxPooling2D((2, 2))(conv2)

conv1 и conv2 съдържат междинни изходи на енкодера, които ще бъдат използвани от декодера. pool2 е крайният изход на енкодера.

Декодерни слоеве:

Ние свързваме изходите на междинния енкодер с изходите на междинния декодер, които са прескачащите връзки.

conv3 = Conv2D(128, (3, 3), activation=’relu’, padding=’same’)(pool2)
conv3 = Dropout(0.2)(conv3)
conv3 = Conv2D(128, (3, 3), activation=’relu’, padding=’same’)(conv3)
up1 = concatenate([UpSampling2D((2, 2))(conv3), conv2], axis=-1)
conv4 = Conv2D(64, (3, 3), activation=’relu’, padding=’same’)(up1)
conv4 = Dropout(0.2)(conv4)
conv4 = Conv2D(64, (3, 3), activation=’relu’, padding=’same’)(conv4)
up2 = concatenate([UpSampling2D((2, 2))(conv4), conv1], axis=-1)
conv5 = Conv2D(32, (3, 3), activation=’relu’, padding=’same’)(up2)
conv5 = Dropout(0.2)(conv5)
conv5 = Conv2D(32, (3, 3), activation=’relu’, padding=’same’)(conv5)

Тук conv1 е свързан с conv4, а conv2 е свързан с conv3.

out = Conv2D( n_classes, (1, 1) , padding=’same’)(conv5)

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

Базов модел за сегментиране:

Обикновено моделите за сегментиране, базирани на дълбоко обучение, се изграждат върху базова мрежа на CNN. Обикновено за базова мрежа се избира стандартен модел като ResNet, VGG или MobileNet. Някои първоначални слоеве на основната мрежа се използват в енкодера, а останалата част от мрежата за сегментиране е изградена върху това. За повечето от моделите на сегментиране може да се използва всяка базова мрежа.

  1. Напълно свързана конволюционна мрежа: Този модел използва различни блокове от навиване и максимални слоеве на пула, за да декомпресира първо изображение до 1/32 от оригиналния му размер. След това прави прогноза за клас на това ниво на детайлност. И накрая, той използва слоеве за повишаване на дискретизацията и деконволюция, за да преоразмери изображението до оригиналните му размери. Трите варианта са FCN8, FCN16 и FCN32. В FCN8 и FCN16 се използват прескачащи връзки

2. UNet: Архитектурата на UNet приема рамка за енкодер-декодер с прескачащи връзки. Слоевете енкодер и декодер са симетрични един спрямо друг.

3. PSPNet: Pyramid Scene Parsing Network е оптимизирана, за да научи по-добро глобално контекстно представяне на сцена. Първо, изображението се предава на основната мрежа, за да се получи карта на характеристиките. Картата на характеристиките е намалена до различни мащаби. Конволюцията се прилага към обединените карти на характеристиките. След това всички карти на функциите се дискретизират до общ мащаб и се свързват заедно. Накрая се използва друг слой на навиване, за да се получат окончателните резултати от сегментирането. Тук по-малките обекти се улавят добре от характеристиките, обединени до висока разделителна способност, докато големите обекти се улавят от функциите, обединени до по-малък размер.

Заключение:

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

Чувствай се свободен да се свържеш с мен.

Препратки:

1. https://machinelearningmastery.com/upsampling-and-transpose-convolution-layers-for-generative-adversarial-networks/

2. https://www.tensorflow.org/tutorials/images/segmentation/

3. https://link.springer.com/article/10.1007/s10278-019-00227-x

Написано от-

Абас Исмаил ([email protected])

Технологичен институт Бирла, Месра