fastaiv3-lesson3筆記-CamVid圖片語(yǔ)義分割

基本原理及實(shí)例

計(jì)算機(jī)視覺(jué)技術(shù):圖像語(yǔ)義分割,根據(jù)「圖像內(nèi)容」對(duì)「指定區(qū)域」進(jìn)行標(biāo)記」的「計(jì)算機(jī)視覺(jué)」任務(wù)毕莱。簡(jiǎn)言之就是「這張圖片里有什么蔑鹦,其在圖片中的位置是什么?」

下面是語(yǔ)義分割后的圖片(搖滾專輯封面)


英國(guó)披頭士樂(lè)隊(duì)的著名專輯封面 Abbey Road


!

Pink Floyd 樂(lè)隊(duì)的名作《 Wish You Were Here》


英式搖滾綠洲樂(lè)隊(duì)的《Morning Glory》


原理:

  • 預(yù)測(cè)每一張圖片中每一個(gè)像素的所屬分類的概率弟晚。

可視化:

  • 相同的類別忘衍,同一種顏色顯示逾苫。

語(yǔ)義分割數(shù)據(jù)集 CamVid 的一個(gè)樣本圖片示例

原圖

mask語(yǔ)義分割之后的圖片

數(shù)據(jù)集 Camvid

指標(biāo)結(jié)果

fastiai創(chuàng)始人 Jeremy 的示例:Accuracy:93.3% (State-of-the-Art )
筆者復(fù)現(xiàn):Accuracy:90.9% (更換預(yù)訓(xùn)練模型為 ResNets18,示例是 ResNets34)

筆記

  • 算力需求->大

You may have to restart your kernel and come back to this stage if you run out of memory, and may also need to decrease bs.

筆記提示:
如果你的GPU內(nèi)存耗盡枚钓,請(qǐng)重啟 kernel铅搓,或者減小批量(batch_size)的大小。由此可見(jiàn)搀捷,相比于更簡(jiǎn)單的圖片分類任務(wù)星掰,語(yǔ)義分割非常消耗算力。(多買英偉達(dá)的股票吧嫩舟,同志們氢烘。)

具體代碼也有體現(xiàn):

size = src_size

free = gpu_mem_get_free_no_cache()
# the max size of bs depends on the available GPU RAM
if free > 8200: bs=3
else:           bs=1
print(f"using bs={bs}, have {free}MB of GPU RAM free")

如果RAM 內(nèi)存容量大于 8200,batch_size設(shè)置為 3家厌。
如果 RAM 內(nèi)容容量小于或等于 8200播玖,batch_size設(shè)置為 1。

  • 數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)
camvid = untar_data(URLs.CAMVID_TINY)
path_lbl = camvid/'labels'
path_img = camvid/'images'
[PosixPath('/home/ubuntu/course-v3/nbs/dl1/data/camvid/images'),
 PosixPath('/home/ubuntu/course-v3/nbs/dl1/data/camvid/codes.txt'),
 PosixPath('/home/ubuntu/course-v3/nbs/dl1/data/camvid/valid.txt'),
 PosixPath('/home/ubuntu/course-v3/nbs/dl1/data/camvid/labels')]

圖片數(shù)據(jù)集分為「圖片文件夾」&「標(biāo)簽文件夾」

codes = np.loadtxt(camvid/'codes.txt', dtype=str); codes
array(['Animal', 'Archway', 'Bicyclist', 'Bridge', 'Building', 'Car', 'CartLuggagePram', 'Child', 'Column_Pole',
       'Fence', 'LaneMkgsDriv', 'LaneMkgsNonDriv', 'Misc_Text', 'MotorcycleScooter', 'OtherMoving', 'ParkingBlock',
       'Pedestrian', 'Road', 'RoadShoulder', 'Sidewalk', 'SignSymbol', 'Sky', 'SUVPickupTruck', 'TrafficCone',
       'TrafficLight', 'Train', 'Tree', 'Truck_Bus', 'Tunnel', 'VegetationMisc', 'Void', 'Wall'], dtype='<U17')

一個(gè)文本文件像街,存儲(chǔ)了所有的預(yù)測(cè)分類(classes)黎棠,這些分類對(duì)應(yīng)的是不同的分類的遮罩,比如動(dòng)物镰绎、橋梁脓斩、汽車、道路畴栖、行人随静、樹(shù)木等等。

get_y_fn = lambda x: path_lbl/f'{x.stem}_P{x.suffix}'

這個(gè) python 匿名函數(shù)吗讶,主要是作用是不同的像素對(duì)應(yīng)的分類燎猛,也就是標(biāo)簽對(duì)應(yīng)像素點(diǎn)。

Mask遮罩

src_size = np.array(mask.shape[1:])
src_size,mask.data
Out[ ]:
(array([720, 960]), tensor([[[ 4,  4,  4,  ..., 26, 26, 26],
          [ 4,  4,  4,  ..., 26, 26, 26],
          [ 4,  4,  4,  ..., 26, 26, 26],
          ...,
          [19, 19, 19,  ..., 17, 17, 17],
          [19, 19, 19,  ..., 17, 17, 17],
          [19, 19, 19,  ..., 17, 17, 17]]]))

4/26/17,這些數(shù)字照皆,就是預(yù)測(cè)的像素類別重绷。

  • 數(shù)據(jù)預(yù)處理
data = (ImageFileList.from_folder(path_img)                #Where are the input files? -> in path_img
        .label_from_func(get_y_fn)                         #How to label? -> use get_y_fn
        .random_split_by_pct()                             #How to split between train and valid? -> randomly
        .datasets(SegmentationDataset, classes=codes)      #How to create a dataset? -> use SegmentationDataset
        .transform(get_transforms(), size=96, tfm_y=True)  #Data aug -> Use standard tfms with tfm_y=True
        .databunch(bs=64))                                 #Lastly convert in a databunch with batch size of 64.

定義一個(gè) DataBunch 對(duì)象,設(shè)置圖片地址膜毁、標(biāo)簽如何匹配(通過(guò)上面的函數(shù)get_y_fn)昭卓、數(shù)據(jù)集類型(語(yǔ)義分割數(shù)據(jù)集 SegmentationDateset)、數(shù)據(jù)增強(qiáng)參數(shù)(大小 96瘟滨,默認(rèn)垂直翻轉(zhuǎn)為 True 真值)候醒、批大小 64

  • 微調(diào)->圖片放大(Go Big)

先訓(xùn)練小尺寸的樣本圖片,得到模型后杂瘸,再將圖片尺寸調(diào)大倒淫,再次微調(diào)。模型精度更高败玉。

  • 語(yǔ)義分割模型->預(yù)測(cè)新圖片的代碼
img = open_image('/home/jupyter/tutorials/fastai/course-v3/nbs/dl1/images/wish_you_here.png')
prediction = learn.predict(img)
prediction[0].show(figsize=(5,5))

參考來(lái)源:https://forums.fast.ai/t/image-segmentation-on-new-images-lesson-3-beginner/41209/4

其他

  • 碎碎念

「付費(fèi)敌土,穩(wěn)定镜硕、高速的服務(wù) --> 完爆 --> 「免費(fèi),隨機(jī)纯赎、不穩(wěn)定的普通服務(wù)」
比如谷歌系自己的 GCP VS Colab谦疾。筆者曾在 colab 上用 fastai 訓(xùn)練一個(gè)亞馬遜評(píng)論的數(shù)據(jù)集,多次運(yùn)行中虛擬機(jī)器崩潰報(bào)錯(cuò)犬金,訓(xùn)練過(guò)程支離破碎。相比之下六剥,GCP 的機(jī)器晚顷,就跟在本地運(yùn)行幾乎一樣的體驗(yàn)。
人也如此疗疟,在職場(chǎng)中该默,若一個(gè)人能夠一個(gè)高速穩(wěn)定簡(jiǎn)潔的接口一樣。人人都愛(ài)啊策彤。

changeLog

2019.07.12 init
2019.07.16 public

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末栓袖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子店诗,更是在濱河造成了極大的恐慌裹刮,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庞瘸,死亡現(xiàn)場(chǎng)離奇詭異捧弃,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)擦囊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門违霞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瞬场,你說(shuō)我怎么就攤上這事买鸽。” “怎么了贯被?”我有些...
    開(kāi)封第一講書人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵眼五,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我刃榨,道長(zhǎng)弹砚,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任枢希,我火速辦了婚禮桌吃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苞轿。我一直安慰自己茅诱,他們只是感情好逗物,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著瑟俭,像睡著了一般翎卓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上摆寄,一...
    開(kāi)封第一講書人閱讀 50,043評(píng)論 1 291
  • 那天失暴,我揣著相機(jī)與錄音,去河邊找鬼微饥。 笑死逗扒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的欠橘。 我是一名探鬼主播矩肩,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肃续!你這毒婦竟也來(lái)了黍檩?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤始锚,失蹤者是張志新(化名)和其女友劉穎刽酱,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體疼蛾,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肛跌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了察郁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衍慎。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖皮钠,靈堂內(nèi)的尸體忽然破棺而出稳捆,到底是詐尸還是另有隱情,我是刑警寧澤麦轰,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布乔夯,位于F島的核電站,受9級(jí)特大地震影響款侵,放射性物質(zhì)發(fā)生泄漏末荐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一新锈、第九天 我趴在偏房一處隱蔽的房頂上張望甲脏。 院中可真熱鬧,春花似錦、人聲如沸块请。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)墩新。三九已至贸弥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間海渊,已是汗流浹背绵疲。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留臣疑,地道東北人最岗。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像朝捆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子懒豹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容