卷積四分類項目
Gitee傳送門
分類目標選取
鮮花
- 杏花 apricot_blossom
- 桃花 peach_blossom
- 梨花 pear_blossom
- 梅花 plum_blossom
模型選擇
卷積
- LeNet5
- VGG16
- ResNet18
- ResNet34
以圖搜圖
獲取相似度前10的搜圖結果
數據清洗
鮮花四分類
刪除非圖片文件
刪除重復圖片
整理數據集
鮮花四分類
每種類別數據:訓練500、測試50、預測10
總訓練集:2500
總測試集:250
總預測集:40
訓練模型
報錯
ValueError: num_samples should be a positive integer value, but got num_samples=0
換了電腦后,數據集的存儲位置不同,更換路徑后解決
RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same
原因:錯誤內容就在類型不匹配,根據報錯內容可以看出Input type為torch.FloatTensor(CPU數據類型),而weight type(即網絡權重參數這些)為torch.cuda.FloatTensor(GPU數據類型)
方案:將輸入類型轉變為GPU類型
輸入數據和網絡都切換到cuda,但問題仍存在
檢查網絡,修改模型隱藏層初始化方式后,解決了問題
鮮花
v1:LeNet5:bn
輸出4分類
v2:VGG16:bn
數據太差,提前中斷了訓練
v3:ResNet18:bn
輸出4分類
f4_v3:32x32
準確率仍上不去,預估增大迭代次數,準確率能慢慢提升
f4_v3.3:224x224
過擬合前最佳:
測試數據出現過擬合現象,考慮減小數據大小
f4_v3.4:112x112
過擬合前最佳:
再次出現過擬合,提前中斷了訓練
f4_v3.5:56x56
過擬合前最佳:
再次出現過擬合,提前中斷了訓練
結論:圖片縮放大小無法解決過擬合問題
f4_v3.6:32x32,減4個殘差塊
測試集過擬合前
最佳
f4_v3.6:32x32,減4個殘差塊,transforms減Norm
測試集過擬合前
最佳
v4:ResNet34:bn
輸出4分類
預估:增加迭代次數,可能能緩慢提升準確率
以圖搜圖
報錯
ValueError: Expected more than 1 value per channel when training, got input size torch.Size([1, 512, 1, 1])
LeNet5模型能正常運行,ResNet18和ResNet34模型報錯
正常運行
報錯
報錯
原因:模型中含有nn.BatchNorm層,訓練時需要batch_size大于1,來計算當前batch的running mean and std。自定義數據數量除以batch_size后剛好余1,就發生了上述報錯
方案1:在pytorch的Dataloader中設置drop_last=True即可,這樣會忽略最后一個batch
嘗試在數據集增加drop_last=True
,再次訓練,尚未解決這個問題
方案2:在添加數據前增加model.eval()
代碼原本就有這個語句,仍存在這個問題
方案3:修改訓練模型數據預處理中Resize大小32–>224,問題解決
搜圖結果
v1:LeNet5:bn
沒有一個是正確分類
v3:ResNet18:bn
f4_v3:32x32
沒有一個是正確分類,且相似度差距很大
f4_v3.3:224x224
過擬合前最佳:
預測最佳類別中top10圖片和原圖類別相同,但與top1圖片與原圖相似度不是0
原因:檢索庫圖片根據特征處理、帶參數的模型生成對應的特征文件,更換特征處理方式或參數后,生成的特征文件有所不同,所以計算相似度,哪怕是原圖也不為0
解決方案:更換特征處理方式或參數后,重新初始化特征文件,再進行預測,解決了這個問題
v4:ResNet34:bn
f4_v4:32x32
沒有一個是正確分類,且相似度差距很大
f4_v4.3:224x224
出現了一個正確分類,由于時間問題,v4.3版沒有完成足夠的訓練,不確定迭代后的數據能否達到預期效果
特征處理
feat_v3.3.0:tensor
feat_v3.3.1:tensor+Resize56
feat_v3.3.2:tensor+Resize56+Norm
feat_v3.3.3:tensor+crop+Resize56
feat_v3.3.4:tensor+Resize+crop+Resize56
feat_v3.3.5:tensor+Resize+crop+Resize224
feat_v3.3.6:tensor+Resize+crop+Resize112
feat_v3.3.7:tensor+Resize+crop+Resize32
總結
feat_v3.3.4.txt版本的特征處理效果最好
特征處理方式:tensor+Resize600+crop400+Resize56
搜圖效果
相似度前10的結果,top1是原圖,6張正確類別花,3張錯誤類別花
原因:這四類花本身比較相似,不便于學習;也可能是數據量不夠多,訓練效果不夠好;也可能迭代的次數不夠多,模型沒有訓練到足夠好的效果