2021年1月20日 星期三
如何提高CNN準確度
markdown
主要從網路上心得做整理
* 增加更多Data
* 參考[data imbalance-資料不均勻問題與處理方式](https://ny20201209blog.blogspot.com/2020/12/data-imbalance.html)中的data Oversampling
* [更換CNN架構](https://ny20201209blog.blogspot.com/2021/01/kerascnn.html)
* 使用預訓練(pretrained)的卷積層
* tune parameter
* 提高epoch
* learning rate
* 觀察是Overfitting還是Underfitting
* Underfitting
* 提高epoch、增加訓練時間
* 增加更多特徵
* 減少 regularization
* Data augmentation
* Overfitting
* 減少特徵(無用的特徵)、降維(特徵工程)
* L2 regularization
* 讓網路變淺(減少層數)、減少隱藏層
* 確保訓練與測試資料來自同一個資料分布
* Drop out
* Early Stopping
2021年1月11日 星期一
在Keras上使用經典的CNN架構
markdown
CNN架構選擇一直是deep learning中很重要的一部分,從早期LeNet-5用來手寫字元辨識
F-CNN、resnet、vgg19...
一開始心中都會有個疑問,到底這些層數是怎麼決定出來的
後來大概理解就像是hyperparameter一樣吧,透過不斷的實驗而得出來的最佳化結果
通常這類的CNN架構,還會包含預先訓練好的conv layer
讓你在訓練新的data時收斂速度更快
在keras中,只要簡單的指令就可以快速的把這些經典的CNN模型架起來
並且可以修改輸入的影像尺寸、增減模型的層數
```=python # 定義你的輸入影像尺寸 custom_input_shape =(128, 128, 3) # 定義你的data類別總數 classes = 6 # 從tf.keras.applications載入CNN架構 base_model=MobileNetV2(weights='imagenet', input_shape=custom_input_shape) x=base_model.output x=GlobalAveragePooling2D()(x) x=Dense(1024,activation='relu')(x) #增加dense層讓model可以學習更複雜的分類 x=Dense(1024,activation='relu')(x) #dense layer 2 x=Dense(512,activation='relu')(x) #dense layer 3 preds=Dense(classes,activation='softmax')(x) #最後一層需填入dataset的類別總數 model=keras.Model(inputs=base_model.input,outputs=preds) #宣告model, 指定輸入和輸出 model.summary() # 用文字方式顯示CNN架構 ``` 想看keras有甚麼經典模型可以看這裡Module: tf.keras.applications 參考:Keras with MobilenetV2 for Deep Learning
F-CNN、resnet、vgg19...
一開始心中都會有個疑問,到底這些層數是怎麼決定出來的
後來大概理解就像是hyperparameter一樣吧,透過不斷的實驗而得出來的最佳化結果
通常這類的CNN架構,還會包含預先訓練好的conv layer
讓你在訓練新的data時收斂速度更快
在keras中,只要簡單的指令就可以快速的把這些經典的CNN模型架起來
並且可以修改輸入的影像尺寸、增減模型的層數
```=python # 定義你的輸入影像尺寸 custom_input_shape =(128, 128, 3) # 定義你的data類別總數 classes = 6 # 從tf.keras.applications載入CNN架構 base_model=MobileNetV2(weights='imagenet', input_shape=custom_input_shape) x=base_model.output x=GlobalAveragePooling2D()(x) x=Dense(1024,activation='relu')(x) #增加dense層讓model可以學習更複雜的分類 x=Dense(1024,activation='relu')(x) #dense layer 2 x=Dense(512,activation='relu')(x) #dense layer 3 preds=Dense(classes,activation='softmax')(x) #最後一層需填入dataset的類別總數 model=keras.Model(inputs=base_model.input,outputs=preds) #宣告model, 指定輸入和輸出 model.summary() # 用文字方式顯示CNN架構 ``` 想看keras有甚麼經典模型可以看這裡Module: tf.keras.applications 參考:Keras with MobilenetV2 for Deep Learning
2021年1月5日 星期二
在C#上使用emgucv中的image stitching(影像拼接)功能
markdown
測試資料下載:test data
安裝emgucv方法參考連結
```=C#
//載入影像到image array中
string[] dirs = Directory.GetFiles(@"你的影像路徑資料夾", "*.jpg");
Image[] sourceImages = new Image[dirs.Length];
for (int i = 0;i(dirs[i]);
}
Stitcher stitcher = new Stitcher();
//選擇特徵演算法
Emgu.CV.Features2D.SIFT finder = new Emgu.CV.Features2D.SIFT();
WarperCreator warper = new SphericalWarper();
stitcher.SetFeaturesFinder(finder);
stitcher.SetWarper(warper);
VectorOfMat vm = new VectorOfMat();
Mat result = new Mat();
vm.Push(sourceImages);
//紀錄拼接時間
Stopwatch watch = Stopwatch.StartNew();
//拼接開始
Stitcher.Status stitchStatus = stitcher.Stitch(vm, result);
watch.Stop();
if(stitchStatus == Stitcher.Status.Ok)
{
Bitmap img = result.ToBitmap();
img.Save("save.bmp");
}
```
結果 可依使用需求修改 拼接演算法
EX:影像角度旋轉量較大的用SIFT
想要運算速度快一點的可以用ORB
訂閱:
意見 (Atom)


