語義分割實現地表建築物識別1

2021-10-19 14:30:31 字數 4100 閱讀 3244

通過對遙感技術獲取的航拍圖進行計算機視覺識別可以獲取植被面積、建築物檢測等地表覆蓋資訊,是一項高效且意義重大的任務。本次任務是根據航拍圖識別中的地表建築具體畫素位置。

目前,我了解到的計算機視覺的任務包括影象分類(分辨貓狗)、目標檢測(定位)、語義分割(地表建築物識別)。

他們之間的關係可以在第12章視覺和語音找到解釋,簡而言之就是:

賽題目標:通過地標建築物識別入門語義分割的解題流程和模型

資料說明:是航拍圖jpg,資料標籤是影象畫素類別(無建築和有建築)rle編碼字串。

評價函式:

1.1 理解rle編碼過程

rle(run-length encoding)演算法的基本思路是對於連續重複資料塊以【塊數】+【資料塊】的形式表達,從而達到節省儲存空間的目的。rle演算法參考

在語義分割任務中,rle編碼是對中連續的黑、白畫素以不同的碼字(0/1)進行編碼,生成壓縮的字串形式。rle解碼則相反,將rle字串解析成影象掩膜(mask)。

import numpy as np

defrle_encode

(im)

:'''將編碼為rle格式'''

pixels = im.flatten(order=

'f')

pixels = np.concatenate([[

0],pixels,[0

]]) runs = np.where(pixels[1:

]!= pixels[:-

1])[

0]+1

runs[1:

:2]-= runs[::

2]return

' '.join(

str(x)

for x in runs)

defrle_decode

(mask_rle,shape=

(512

,512))

:'''將rle格式進行解碼為'''

if mask_rle is np.nan:

return

none

s = mask_rle.split(

) starts,lengths =

[np.asarray(x,dtype=

int)

for x in

(s[0:]

[::2

],s[1:

][::

2])]

starts -=

1 ends = starts + lengths

img = np.zeros(shape[0]

*shape[1]

,dtype=np.uint8)

for lo,hi in

zip(starts,ends)

: img[lo:hi]=1

return img.reshape(shape,order=

'f')

1.2 賽題資料讀取並視覺化
import cv2

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import albumentations as a

defadd_mask2image_binary

(img_path, mask=

none):

# add binary masks to images 帶掩膜效果的

#將image的相素值和mask畫素值相加得到結果

# cv2格式轉為rgb顯示

統計所有整圖中沒有任何建築物畫素佔所有訓練集的比例

統計所有中建築物畫素佔所有相似度的比例

統計所有中建築物區域平均區域大小

def

rle_mask_stats

(x):

if x is np.nan:

return

(none

,none

,none

) mask = rle_decode(x)

return

(mask.

sum()/

(mask.shape[0]

*mask.shape[1]

), mask.

sum(

),mask.shape[0]

*mask.shape[1]

)train_mask[

['mask_01'

,'mask_02'

,'mask_03']]

= train_mask[

'mask'].

(rle_mask_stats)

.(pd.series)

train_mask[

'mask_01'

].hist(bins=

500)

print

('統計所有整圖中沒有任何建築物畫素佔所有訓練集的比例》'

)print

('1%%為沒有任何建築物閾值》%.3f'

%train_mask[

'mask_01'

].le(

0.01

).mean())

print

('5%%為沒有任何建築物閾值》%.3f'

%train_mask[

'mask_01'

].le(

0.05

).mean())

print

('10%%為沒有任何建築物閾值》%.3f'

%train_mask[

'mask_01'

].le(

0.1)

.mean())

print

('統計所有中建築物畫素佔比比例》'

,train_mask[

'mask_01'

].describe())

print

('統計所有中建築物區域平均區域大小》'

,train_mask[

'mask_02'

].mean(

),train_mask[

'mask_01'

].mean(

))

語義分割綜述

目前語義分割的流行框架可以分為前端 後端。前端採用fcn定位不同類別的物體,後端採用rf crf mrf 精確定位物體邊界。也就是說,前端解決 是什麼 what 後端解決 在 where 可以把語義分割網路分為兩類 以fcn為代表的編解碼器 encode decode 網路 以deeplab為代表的...

語義分割概述

影象語義分割 一 影象語義分割含義及原理 含義 對分割後的影象加上語義標籤 用不同的顏色代表不同類別的物體 就是給分割後影象中的每一類物體加上標籤,輸入一般是彩色深度 rgb d 影象。要求 1 分割得到的不同區域內部平整,其紋理和灰度有相似性 2 相鄰語義分割區域對分割所依據的性質有明顯的差異 3...

語義分割概述

本文大多來自方便讀 使用 影象語義分割 semantic segmentation 從字面意思上理解就是讓計算機根據影象的語義來進行分割,例如讓計算機在輸入下面左圖的情況下,能夠輸出右圖。語義在語音識別中指的是語音的意思,在影象領域,語義指的是影象的內容,對意思的理解,並對不同部分進行標註,圖中紅色...