IGARSS2019-项目实战总结-keras
0.寫在前邊
這算得上是真正意義上接觸的第一個(gè)深度學(xué)習(xí)項(xiàng)目了。果真在既沒有經(jīng)驗(yàn),又沒有實(shí)力的情況下,項(xiàng)目被搞得一團(tuán)糟。實(shí)踐出真知,趕緊總結(jié)吸取教訓(xùn)!!!
1.項(xiàng)目流程
1.1數(shù)據(jù)流
(1)超參傳遞
1)通過.py傳遞
eg: params.py中存儲(chǔ)超參[OPTIMIZER = ‘Adam’]的值;則在新的.py文件中導(dǎo)入[import params],便可通過 params.OPTIMIZER獲得超參的值;
2)通過sys傳遞外部參數(shù)
(2)數(shù)據(jù)讀取過程
1)獲取圖像名稱列表:glob;
2)生成batches索引列表;
3)生成(圖像,標(biāo)簽)batch:i加載數(shù)據(jù);ii數(shù)據(jù)預(yù)處理[數(shù)據(jù)增廣、歸一化、標(biāo)簽轉(zhuǎn)換等];
實(shí)用代碼
數(shù)據(jù)增廣
from albumentations import (PadIfNeeded,HorizontalFlip, # VerticalFlip, # CenterCrop, Crop,Compose, #Transpose, #RandomRotate90, #ElasticTransform,GridDistortion, OpticalDistortion,RandomSizedCrop,OneOf,CLAHE,RandomContrast,RandomGamma,RandomBrightness ) def image_augmentation(currImg, labelMask):aug = Compose([VerticalFlip(p=0.5), RandomRotate90(p=0.5),HorizontalFlip(p=0.5),Transpose(p=0.5)])augmented = aug(image=currImg, mask=labelMask)imageMedium = augmented['image']labelMedium = augmented['mask']return imageMedium,labelMediumRGB圖像歸一化:從[0-255]到[0-1]
from keras.applications import imagenet_utils imgBatch = imagenet_utils.preprocess_input(imgBatch) imgBatch = imgBatch / 255.01.2模型&代碼
(通用定義)
from keras.layers import Input # 定義模型所需要的 [輸入的張量(占位?),張量的形狀] input_tensor = Input(shape=(imgSz[0],imgSz[1],self.params.NUM_CHANNELS)) input_shape = (imgSz[0],imgSz[1],self.params.NUM_CHANNELS) # 模型逐層定義# backbone# 自定義# model = Model(input, x)# 損失函數(shù)# 優(yōu)化算法# 編譯# return model #后處理
語(yǔ)義分割
pred = np.argmax(pred, axis=2).astype('uint8')高度預(yù)測(cè)
pred = convert_labels(pred, self.params, toLasStandard=True)最后
pred = pred[:,:,0] tifffile.imsave(os.path.join(self.params.OUTPUT_DIR, outName), pred, compress=6)訓(xùn)練&推理
推理階段:模型不需要損失函數(shù)和優(yōu)化算法;
對(duì)數(shù)據(jù)的預(yù)處理和后處理是基本相同的;
2.模型&代碼(基模差定義)
2.0 模型基礎(chǔ)
特征交互的方式:
(1)級(jí)聯(lián):通道數(shù)變?yōu)樵瓉淼膬杀?br /> (2)級(jí)聯(lián)再卷積:卷積的目的是降低通道數(shù)與原來保持一致
(3)加:逐元素相加 ----線性和、加權(quán)和
(4)乘:逐元素相乘
金字塔的表現(xiàn)方式:
(1)圖像金字塔:圖像resize到不同尺寸,基于不同尺寸的圖像做預(yù)測(cè);
(2)特征金字塔:圖像–特征(不同尺寸的特征),基于不同尺寸的特征做預(yù)測(cè);
(3)FPN:金字塔特征+頂層特征與低層特征融合;
resnet的特點(diǎn): 包含殘差塊,即上一塊的輸出與下一層的輸出融合
2.1 UNet
encoder-decoder結(jié)構(gòu)
四個(gè)卷積塊 & 四個(gè)上采樣塊 + skip connection
2.2 FPN
特征金字塔 預(yù)測(cè)
2.3 LinkNet
四個(gè)卷積塊 & 四個(gè)上采樣塊 + skip connection
編碼時(shí)resnet作為backbone
2.4 PSPNet
金字塔池化模塊:不同尺度的池化得到不同尺度的特征,再上采樣到原來的大小,進(jìn)行級(jí)聯(lián);
3.小細(xì)節(jié)
- 命名: 項(xiàng)目、文件夾、文件、類、函數(shù)、方法、變量等,任何需要命名的東西,做到簡(jiǎn)潔、見名知意;
- 版本控制: 不同版本間的名稱做到有序有意;
– 版本控制的方法:外隔離、內(nèi)隔離;(源碼多是外隔離[.py],師兄多是內(nèi)隔離[class]) - 功能封裝: (1)程序模塊化:相似的功能模塊集成(函數(shù)、類、包);(2)使用高級(jí)模塊化的語(yǔ)句:即用盡可能少的、高效的代碼完成需要的功能;
總結(jié)
以上是生活随笔為你收集整理的IGARSS2019-项目实战总结-keras的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021上海高考小三门成绩查询,2021
- 下一篇: NDoc1.3.1使用手册