使用 TensorFlow 2.x API 介紹圖像中的顯著性圖
TensorFlow 2.x 簡(jiǎn)介
在計(jì)算機(jī)視覺領(lǐng)域中,顯著性圖是圖像在人類視線最初聚焦的區(qū)域。顯著性圖的主要目標(biāo)是突出特定像素對(duì)人類視覺感知的重要性。
例如,在下圖中,花和手是人們首先注意到的東西,因此必須在顯著性圖上強(qiáng)調(diào)它們。還有一點(diǎn)需要注意的是,人工神經(jīng)網(wǎng)絡(luò)創(chuàng)建的顯著性圖并不總是與生物或自然視覺產(chǎn)生的顯著性圖相同。
什么是顯著圖?
顯著性圖是深度學(xué)習(xí)和計(jì)算機(jī)視覺的一個(gè)關(guān)鍵主題。在深度卷積神經(jīng)網(wǎng)絡(luò)(CNN)的訓(xùn)練過(guò)程中,了解每一層的特征圖變得至關(guān)重要。CNN 的特征圖告訴我們模型的學(xué)習(xí)特征。而顯著性圖主要關(guān)注圖像的特定像素,而忽略其他像素。
顯著性圖
圖像的顯著性圖表示圖像中最突出和最集中的像素。有時(shí),圖像中較亮的像素會(huì)告訴我們像素的顯著性。這意味著像素的亮度與圖像的顯著性成正比。
假設(shè)我們想要關(guān)注圖像的特定部分,比如想要關(guān)注鳥的圖像而不是天空、鳥巢等其他部分。然后通過(guò)計(jì)算顯著圖,我們將實(shí)現(xiàn)這一點(diǎn)。它將有助于降低計(jì)算成本,通常是灰度圖像,但可以根據(jù)我們的視覺舒適度轉(zhuǎn)換為另一種格式的彩色圖像。
顯著性圖也稱為“熱圖”,因?yàn)閳D像的熱度/亮度對(duì)識(shí)別對(duì)象的類別有影響。顯著性圖旨在確定中央凹(高分辨率的顏色)中每個(gè)地方顯著或可觀察的區(qū)域,并根據(jù)顯著性的空間模式影響注意力區(qū)域的決策。它用于各種視覺注意模型。
如何使用 TensorFlow 計(jì)算顯著性圖?
顯著圖可以通過(guò)對(duì)輸入圖像 X 取類別概率 Pk的導(dǎo)數(shù)來(lái)計(jì)算。
等一下!這似乎很熟悉!是的,這與我們用于訓(xùn)練模型的反向傳播相同。我們只需要再邁出一步:梯度不會(huì)在我們網(wǎng)絡(luò)的第一層停止。相反,我們必須將其返回給輸入圖像 X。
因此,顯著性圖根據(jù)特定的類別預(yù)測(cè) Pi 為每個(gè)輸入像素提供合適的表征。對(duì)花卉預(yù)測(cè)具有重要意義的像素應(yīng)聚集在花卉像素周圍。否則,經(jīng)過(guò)訓(xùn)練的模型會(huì)發(fā)生一些非常奇怪的事情。
顯著圖的優(yōu)勢(shì)在于,由于它們完全依賴于梯度計(jì)算,許多常用的深度學(xué)習(xí)模型可以免費(fèi)為我們提供顯著圖。我們根本不需要修改網(wǎng)絡(luò)架構(gòu);我們只需要稍微調(diào)整梯度計(jì)算。
不同類型的顯著圖
靜態(tài)顯著性:針對(duì)圖像的每個(gè)靜態(tài)像素點(diǎn)計(jì)算出重要的感興趣區(qū)域,進(jìn)行顯著性圖分析。
動(dòng)態(tài)顯著性:關(guān)注視頻數(shù)據(jù)的動(dòng)態(tài)特征。視頻中的顯著性圖是通過(guò)計(jì)算視頻的光流來(lái)計(jì)算的。移動(dòng)實(shí)體/對(duì)象被認(rèn)為是顯著對(duì)象。
代碼
我們將逐步研究 ResNet50 架構(gòu),該架構(gòu)已在 ImageNet 上進(jìn)行了預(yù)訓(xùn)練。但是你可以采用其他預(yù)訓(xùn)練的深度學(xué)習(xí)模型或你自己的訓(xùn)練模型。
我們將說(shuō)明如何利用 TensorFlow 2.x 中最著名的 DL 模型開發(fā)基本的顯著性圖。在教程中,我們使用了 Wikimedia 圖像作為測(cè)試圖像。
我們首先創(chuàng)建一個(gè)具有 ImageNet 權(quán)重的 ResNet50。使用簡(jiǎn)單的輔助函數(shù),我們將圖像導(dǎo)入并準(zhǔn)備將其饋送到 ResNet50。
# Import necessary packages
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
def input_img(path):
image = tf.image.decode_png(tf.io.read_file(path))
image = tf.expand_dims(image, axis=0)
image = tf.cast(image, tf.float32)
image = tf.image.resize(image, [224,224])
return image
def normalize_image(img):
grads_norm = img[:,:,0]+ img[:,:,1]+ img[:,:,2]
grads_norm = (grads_norm - tf.reduce_min(grads_norm))/ (tf.reduce_max(grads_norm)- tf.reduce_min(grads_norm))
return grads_norm
def get_image():
import urllib.request
filename = 'image.jpg'
img_url = r"https://upload.wikimedia.org/wikipedia/commons/d/d7/White_stork_%28Ciconia_ciconia%29_on_nest.jpg"
urllib.request.urlretrieve(img_url, filename)
def plot_maps(img1, img2,vmin=0.3,vmax=0.7, mix_val=2):
f = plt.figure(figsize=(15,45))
plt.subplot(1,3,1)
plt.imshow(img1,vmin=vmin, vmax=vmax, cmap="ocean")
plt.a(chǎn)xis("off")
plt.subplot(1,3,2)
plt.imshow(img2, cmap = "ocean")
plt.a(chǎn)xis("off")
plt.subplot(1,3,3)
plt.imshow(img1*mix_val+img2/mix_val, cmap = "ocean" )
plt.a(chǎn)xis("off")
圖1:輸入圖像
為了獲得預(yù)測(cè)向量,ResNet50 將直接從 Keras 應(yīng)用程序中加載。
test_model = tf.keras.a(chǎn)pplications.resnet50.ResNet50()
#test_model.summary()
get_image()
img_path = "image.jpg"
input_img = input_img(img_path)
input_img = tf.keras.a(chǎn)pplications.densenet.preprocess_input(input_img)
plt.imshow(normalize_image(input_img[0]), cmap = "ocean")
result = test_model(input_img)
max_idx = tf.a(chǎn)rgmax(result,axis = 1)
tf.keras.a(chǎn)pplications.imagenet_utils.decode_predictions(result.numpy())
TensorFlow 2.x 上提供了 GradientTape 函數(shù),該函數(shù)能夠處理反向傳播相關(guān)操作。在這里,我們將利用 GradientTape 的優(yōu)勢(shì)來(lái)計(jì)算給定圖像的顯著性圖。
with tf.GradientTape() as tape:
tape.watch(input_img)
result = test_model(input_img)
max_score = result[0,max_idx[0]]
grads = tape.gradient(max_score, input_img)
plot_maps(normalize_image(grads[0]), normalize_image(input_img[0]))
圖2:(1)Saliency_map,(2)input_image,(3)overlayed_image
關(guān)于Tensorflow 2.x 的結(jié)論
在這篇博客中,我們從不同方面定義了顯著性圖。我們添加了一個(gè)圖形表示來(lái)深入理解“顯著性地圖”這個(gè)術(shù)語(yǔ)。此外,我們通過(guò)使用 TensorFlow API 在 python 中實(shí)現(xiàn)它來(lái)理解它。結(jié)果似乎很容易理解。
在本文中,我們學(xué)習(xí)了:
1. 使用 tensorflow 的圖像的顯著性圖
2. 實(shí)現(xiàn)了一個(gè) python 代碼來(lái)計(jì)算圖像的顯著性圖
3. 顯著性圖的數(shù)學(xué)背景
4. 計(jì)算了顯著性圖
原文標(biāo)題 : 使用 TensorFlow 2.x API 介紹圖像中的顯著性圖

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車研發(fā)中心重磅落地,寶馬家門口“搶人”
最新活動(dòng)更多
-
即日-9.16點(diǎn)擊進(jìn)入 >> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
-
10月23日立即報(bào)名>> Works With 開發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
精彩回顧立即查看>> 【限時(shí)下載】ADI中國(guó)三十周年感恩回饋助力企業(yè)升級(jí)!
推薦專題
- 1 阿里首位程序員,“掃地僧”多隆已離職
- 2 先進(jìn)算力新選擇 | 2025華為算力場(chǎng)景發(fā)布會(huì)暨北京xPN伙伴大會(huì)成功舉辦
- 3 宇樹機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 4 清華跑出具身智能獨(dú)角獸:給機(jī)器人安上眼睛和大腦,融資近20億
- 5 踢館大廠和微軟,剖析WPS靈犀的AI實(shí)用主義
- 6 特朗普要求英特爾首位華人 CEO 辭職
- 7 AI版“四萬(wàn)億刺激”計(jì)劃來(lái)了
- 8 騰訊 Q2 財(cái)報(bào)亮眼:AI 已成第二增長(zhǎng)曲線
- 9 谷歌吹響AI沖鋒號(hào),AI還有哪些機(jī)會(huì)
- 10 蘋果把身家押在Siri上:一場(chǎng)輸不起的自我革命