第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

當(dāng)使用 OpenCV 完成圖像加載和調(diào)整大小時(shí),Resnet50 會(huì)產(chǎn)生不同的預(yù)測(cè)

當(dāng)使用 OpenCV 完成圖像加載和調(diào)整大小時(shí),Resnet50 會(huì)產(chǎn)生不同的預(yù)測(cè)

素胚勾勒不出你 2023-09-26 16:23:14
我想使用 Keras Resnet50 模型和 OpenCV 來讀取輸入圖像并調(diào)整其大小。我使用 Keras 中的相同預(yù)處理代碼(對(duì)于 OpenCV,我需要轉(zhuǎn)換為 RGB,因?yàn)檫@是 preprocess_input() 期望的格式)。我使用 OpenCV 和 Keras 圖像加載得到的預(yù)測(cè)略有不同。我不明白為什么預(yù)測(cè)不一樣。這是我的代碼:import numpy as npimport jsonfrom tensorflow.keras.applications.resnet50 import ResNet50from tensorflow.keras.preprocessing import imagefrom tensorflow.keras.applications.resnet50 import preprocess_input, decode_predictionsimport cv2model = ResNet50(weights='imagenet')img_path = '/home/me/squirle.jpg'# Keras predictionimg = image.load_img(img_path, target_size=(224, 224))x = image.img_to_array(img)x = np.expand_dims(x, axis=0)x = preprocess_input(x)preds = model.predict(x)print('Predicted Keras:', decode_predictions(preds, top=3)[0])# OpenCV predictionimgcv = cv2.imread(img_path)dim = (224, 224)imgcv_resized = cv2.resize(imgcv, dim, interpolation=cv2.INTER_LINEAR)x = cv2.cvtColor(imgcv_resized , cv2.COLOR_BGR2RGB)x = np.expand_dims(x, axis=0)x = preprocess_input(x)preds = model.predict(x)print('Predicted OpenCV:', decode_predictions(preds, top=3)[0])Predicted Keras: [('n02490219', 'marmoset', 0.28250763), ('n02356798', 'fox_squirrel', 0.25657368), ('n02494079', 'squirrel_monkey', 0.19992349)]Predicted OpenCV: [('n02356798', 'fox_squirrel', 0.5161952), ('n02490219', 'marmoset', 0.21953616), ('n02494079', 'squirrel_monkey', 0.1160824)]如何使用 OpenCVimread()并resize()獲得與 Keras 圖像加載相同的預(yù)測(cè)?
查看完整描述

2 回答

?
森欄

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊

# Keras prediction

img = image.load_img(img_path, target_size=(224, 224))


   # OpenCV prediction

imgcv = cv2.imread(img_path)

dim = (224, 224)

imgcv_resized = cv2.resize(imgcv, dim, interpolation=cv2.INTER_LINEAR)

  1. 如果你仔細(xì)看的話,你在cv2的情況下指定的插值是cv2.INTER_LINEAR(雙線性插值);但是,默認(rèn)情況下 image.load_img()使用INTER_NEAREST插值方法。

  2. img_to_array(img)。這里的參數(shù)dtype是:無

默認(rèn)為 None,在這種情況下使用全局設(shè)置 tf.keras.backend.floatx() (除非您更改它,否則它默認(rèn)為“float32”)

因此,img_to_array(img)您有一個(gè)由值組成的圖像float32,而cv2.imread(img)返回一個(gè)值的 numpy 數(shù)組uint8

  1. 確保從 BGR 轉(zhuǎn)換為 RGB,因?yàn)?OpenCV 直接加載為 BGR 格式。您可以使用image = image[:,:,::-1]image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB); 否則,R 和 B 通道將會(huì)顛倒,導(dǎo)致比較不正確。

由于您在這兩種情況下應(yīng)用的預(yù)處理是相同的,因此唯一的區(qū)別是我上面提到的那些;適應(yīng)這些變化應(yīng)確??芍貜?fù)性。

我想做一個(gè)觀察:假設(shè)使用一個(gè)cv2自動(dòng)(并且可以說僅加載整數(shù))而不是浮點(diǎn)數(shù)的庫(在本例中),唯一正確的方法是將第一個(gè)預(yù)測(cè)數(shù)組(Keras)轉(zhuǎn)換為uint8因?yàn)橥ㄟ^將后者轉(zhuǎn)換為float32,信息中可能存在的差異就會(huì)丟失。例如,通過cv2加載到uint8,并通過強(qiáng)制轉(zhuǎn)換而不是233得到233.0。然而,也許初始像素值是233,3,但由于第一次轉(zhuǎn)換而丟失了。



查看完整回答
反對(duì) 回復(fù) 2023-09-26
?
慕仙森

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

Keras 以RGB格式加載圖像,而 OpenCV 以BGR格式加載圖像。

ResNet50的預(yù)處理函數(shù)使用caffe設(shè)置,它期望圖像為RGB格式,并應(yīng)用以下內(nèi)容:

  1. 反轉(zhuǎn)通道(RGB -> BGR)

  2. 從各自的值中減去 [103.939, 116.779, 123.68]

由于每個(gè)通道要減去的值不同,因此通道順序很重要。此外,預(yù)訓(xùn)練的ResNet50 模型的各層已經(jīng)按照一定的順序進(jìn)行了訓(xùn)練。

因此,使用 OpenCV 加載圖像時(shí),必須將通道順序從BGR反轉(zhuǎn)為RGB

imgcv_resized?=??imgcv_resized[:,:,::-1]


查看完整回答
反對(duì) 回復(fù) 2023-09-26
  • 2 回答
  • 0 關(guān)注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)