[英]Image testing accuracy increases after adding noise
我正在使用不同方面的面部圖像進行實驗。 第一個數據集只是普通人臉,我的第二個數據集是通過添加不同級別的噪聲產生的遮擋。 第一個數據集由方差為 0.025 的噪聲組成,第二個數據集包含方差為 0.05 的圖像。 第三個數據集的圖像方差為 0.1。 因此,我使用線性 SVM 對它們進行了訓練和測試,其中方差水平,我期望測試精度下降到 go。 當我用正常人臉圖像進行測試時,測試精度為:正常人臉圖像為 96.59,模擬遮擋圖像為 48.04,方差值為 0.025 時為 95.01,方差值為 0.05 時為 93.65。 到目前為止,一切看起來都很合理,但是對於 0.1 的方差,im 得到 95.46,這高於方差為 0.05 的圖像噪聲。
我原以為最后一個值會低於 95.01。
我對每個數據集訓練都使用相同的 model:
SVC(kernel='linear', C=0.00006)
我想知道為什么會發生這樣的事情,什么是合理的解決辦法? 鑒於我想使用相同的正則化參數來訓練每個數據集。
我如何以百分比級別向圖像添加噪聲:
def generate_noisy_image(x: np.array, variance: float) -> np.array:
noise = np.random.normal(loc=0, scale=variance, size=x.shape)
return x + noise
def load_dataset(path, max_num):
imagesList = listdir(path)
loadedImages = []
for root, dirs, files in os.walk(path):
for i, name in enumerate(files):
if i == max_num:
break
print(image)
img = PImage.open(path + image)
img.resize((81, 150))
arr = np.array(img)
noise_image = generate_noisy_image(x = arr, variance=0.1)
noise_image = Image.fromarray(noise_image)
noise_image = noise_image.convert("L")
loadedImages.append(arr)
#noise_image.save('C:/Users/Noise-Dataset/Noise_Value_10/'+person_folder+filepath, 'JPEG')
return loadedImages
noise_dataset_1 = load_dataset('C:/Users/Noise-Dataset/Noise_Value_10', 50)
X_train_n1, X_test_n1, y_train_n1, y_test_n1 = train_test_split(
noise_dataset_1_array, noise_1_target, test_size=0.49, random_state=0)
def train(clf, X_train, X_test, y_train, y_test):
clf.fit(X_train, y_train)
print ("Accuracy on training set:")
print (clf.score(X_train, y_train))
print ("Accuracy on testing set:")
print (clf.score(X_test, y_test))
y_pred = clf.predict(X_test)
print ("Classification Report:")
print (metrics.classification_report(y_test, y_pred))
print ("Accuracy:")
print (metrics.accuracy_score(y_test, y_pred))
svc_1 = SVC(kernel='linear', C=0.00006)
train(svc_1, X_train_n1, X_test_n1, y_train_n1, y_test_n1 )
我以前做過類似的事情,增強圖像實際上提高了准確性。 在這里我假設你正在做一個分類任務,比如性別檢測? 你的結果背后的原因是你的原始面部圖像在預測 class 中可能有不同程度的噪聲(例如,大多數男性圖像有噪聲,女性圖像噪聲較小),所以在檢測 output 時,model 使用低級線索,即噪聲作為特征。 您可以將 model 視為“懶惰”,尤其是在這里您沒有使用 DNN,因此 model 更可能是“懶惰”並依賴於低級線索。 通過添加噪聲,您可以使 model 更難依賴信息,因為現在所有圖像都有噪聲,因此 model 開始尋找高級線索,在您的情況下,這些線索可能會提供 model 更高的預測能力/准確性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.