91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于YoloV3對衛(wèi)星圖像進(jìn)行儲(chǔ)油罐容積占用率的研究

電子設(shè)計(jì) ? 來源: 電子設(shè)計(jì) ? 作者: 電子設(shè)計(jì) ? 2020-12-10 15:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

來源:深度學(xué)習(xí)計(jì)算機(jī)視覺
作者:磐懟懟

在1957年以前,地球上只有一顆天然衛(wèi)星:月球。1957年10月4日,蘇聯(lián)發(fā)射了世界上第一顆人造衛(wèi)星,從那時(shí)起,來自40多個(gè)國家大約有8900顆衛(wèi)星發(fā)射升空。

這些衛(wèi)星可以幫助我們進(jìn)行監(jiān)視、通信、導(dǎo)航等等。國家可以利用衛(wèi)星監(jiān)視另一個(gè)國家的土地及其動(dòng)向,估計(jì)其經(jīng)濟(jì)和實(shí)力,然而所有的國家都互相隱瞞著他們的信息。

同理,全球石油市場也并非完全透明,幾乎所有的產(chǎn)油國都在努力隱藏著自己的總產(chǎn)量、消費(fèi)量和儲(chǔ)存量,各國這樣做是為了間接地向外界隱瞞其實(shí)際經(jīng)濟(jì),并增強(qiáng)其國防系統(tǒng)的能力,這種做法可能會(huì)對其他國家造成威脅。

出于這個(gè)原因,許多初創(chuàng)公司,如Planet和Orbital Insight,都通過衛(wèi)星圖像來關(guān)注各國的此類活動(dòng)。通過收集儲(chǔ)油罐的衛(wèi)星圖像來估算石油儲(chǔ)量。

但問題是,如何僅憑衛(wèi)星圖像來估計(jì)儲(chǔ)油罐的體積呢?首先第一個(gè)條件是儲(chǔ)油罐為浮頂油罐,因?yàn)橹挥羞@樣,衛(wèi)星才能檢測到。這種特殊類型的油罐是專門為儲(chǔ)存大量石油產(chǎn)品而設(shè)計(jì)的,如原油或凝析油,它由頂蓋組成,直接位于油的頂部,隨著油箱中油量的增加或下降,并在其周圍形成兩個(gè)陰影。如下圖所示,陰影位于北側(cè)

(外部陰影)是指儲(chǔ)罐的總高度,而儲(chǔ)罐內(nèi)的陰影(內(nèi)部陰影)表示浮頂?shù)纳疃龋w積可估計(jì)計(jì)算為1-(內(nèi)部陰影區(qū)域/外部陰影區(qū)域)。

在本文,我們將使用Tensorflow2.x框架,在衛(wèi)星圖像的幫助下,使用python從零開始實(shí)現(xiàn)一個(gè)完整的模型來估計(jì)儲(chǔ)油罐的占用量。

GitHub倉庫

本文的所有內(nèi)容和整個(gè)代碼都可以在這個(gè)github存儲(chǔ)庫中找到

https://github.com/mdmub0587/...

以下是本文目錄。我們會(huì)逐一探索。

目錄

  1. 問題陳述、數(shù)據(jù)集和評(píng)估指標(biāo)
  2. 現(xiàn)有方法
  3. 相關(guān)研究工作
  4. 有用的博客和研究論文
  5. 我們的貢獻(xiàn)
  6. 探索性數(shù)據(jù)分析(EDA)
  7. 數(shù)據(jù)擴(kuò)充
  8. 數(shù)據(jù)預(yù)處理、擴(kuò)充和TFRecords
  9. 基于YoloV3的目標(biāo)檢測
  10. 儲(chǔ)量估算
  11. 結(jié)果
  12. 結(jié)論
  13. 參考引用

1.問題陳述、數(shù)據(jù)集和評(píng)估指標(biāo)

問題陳述:

利用衛(wèi)星圖像進(jìn)行浮頂油罐的檢測和儲(chǔ)油量的估算,然后將圖像塊重新組合成具有儲(chǔ)油量估計(jì)的全圖像。

數(shù)據(jù)集:

數(shù)據(jù)集鏈接:https://www.kaggle.com/toward...

該數(shù)據(jù)集包含一個(gè)帶注釋的邊界框,衛(wèi)星圖像是從谷歌地球(google earth)拍攝的,它包含有世界各地的工業(yè)區(qū)。數(shù)據(jù)集中有2個(gè)文件夾和3個(gè)文件,讓我們逐一看看。

  • large/_images: 這是一個(gè)文件夾,包含100個(gè)衛(wèi)星原始圖像,每個(gè)大小為4800x4800,所有圖像都以id/_large.jpg格式命名。
  • Image/_patches: Image/_patches目錄包含從大圖像生成的512x512大小的子圖,每個(gè)大的圖像被分割成100個(gè)512x512大小的子圖,兩個(gè)軸上的子圖之間有37個(gè)像素的重疊,生成圖像子圖的程序以id/_row/_column.jpg格式命名
  • labels.json: 它包含所有圖像的標(biāo)簽。標(biāo)簽存儲(chǔ)為字典列表,每個(gè)圖像對應(yīng)一個(gè)字典,不包含任何浮頂罐的圖像將被標(biāo)記為“skip”,邊界框標(biāo)簽的格式為邊界框四個(gè)角的(x,y)坐標(biāo)。
  • labels/_coco.json: 它包含與前一個(gè)文件相同的標(biāo)簽的COCO標(biāo)簽格式。在這里,邊界框的格式為[x/_min, y/_min, width, height].
  • large/_image/_data.csv: 它包含大型圖像文件的元數(shù)據(jù),包括每個(gè)圖像的中心坐標(biāo)和海拔高度。

評(píng)估指標(biāo):

對于儲(chǔ)油罐的檢測,我們將使用每種儲(chǔ)油罐的平均精度(Average Precision,AP)和各種儲(chǔ)油罐的mAP(Mean Average Precision,平均精度)來作為評(píng)估指標(biāo)。浮頂罐的估計(jì)容積沒有度量標(biāo)準(zhǔn)。

mAP 是目標(biāo)檢測模型的標(biāo)準(zhǔn)評(píng)估指標(biāo)。mAP 的詳細(xì)說明可以在下面的youtube播放列表中找到

https://www.youtube.com/watch?list=PL1GQaVhO4f/_jE5pnXU/_Q4MSrIQx4wpFLM&v=e4G9H18VYmA

2.現(xiàn)有方法

Karl Keyer [1]在他的存儲(chǔ)庫中使用RetinaNet來完成儲(chǔ)油罐探測任務(wù)。他從頭開始創(chuàng)建模型,并將生成的錨框應(yīng)用于該數(shù)據(jù)集,他的研究使得浮頂罐的平均精度(AP)達(dá)到76.3%,然后他應(yīng)用陰影增強(qiáng)和像素閾值法來計(jì)算它的體積。

據(jù)我所知,這是互聯(lián)網(wǎng)上唯一可用的方法。

3.相關(guān)研究工作

Estimating the Volume of Oil Tanks Based on High-Resolution Remote Sensing Images [2]:

這篇文章提出了一種基于衛(wèi)星圖像的油罐容量/容積估算方法。為了計(jì)算一個(gè)儲(chǔ)油罐的總?cè)莘e,他們需要儲(chǔ)油罐的高度和半徑。為了計(jì)算高度,他們使用了與投影陰影長度的幾何關(guān)系,但是計(jì)算陰影的長度并不容易,為了突出陰影使用了HSV(即色調(diào)飽和度值)顏色空間,因?yàn)橥ǔj幱霸贖SV顏色空間中具有高飽和度,然后采用基于亞像素細(xì)分定位(sub-pixel subdivision positioning)的中值法來計(jì)算陰影長度,最后利用Hough變換算法得到油罐半徑。

在本文的相關(guān)工作中,提出了基于衛(wèi)星圖像的建筑物高度計(jì)算方法。

4.有用的博客和研究論文

A Beginner’s Guide To Calculating Oil Storage Tank Occupancy With Help Of Satellite Imagery [3]:

本博客作者為TankerTracker.com,其中的一項(xiàng)工作是利用衛(wèi)星圖像跟蹤幾個(gè)感興趣的地理位置的原油儲(chǔ)存情況。

在這篇博客中,他們詳細(xì)描述了儲(chǔ)油罐的外部和內(nèi)部陰影如何幫助我們估計(jì)其中的石油含量,還比較了衛(wèi)星在特定時(shí)間和一個(gè)月后拍攝的圖像,顯示了一個(gè)月來儲(chǔ)油罐的變化。這個(gè)博客給了我們一個(gè)直觀的知識(shí),即如何估計(jì)量。

A Gentle Introduction to Object Recognition With Deep Learning [4] :

本文會(huì)介紹對象檢測初學(xué)者頭腦中出現(xiàn)的最令人困惑的概念。首先,描述了目標(biāo)分類、目標(biāo)定位、目標(biāo)識(shí)別和目標(biāo)檢測之間的區(qū)別,然后討論了一些最新的深度學(xué)習(xí)算法來展開目標(biāo)識(shí)別任務(wù)。

對象分類是指將標(biāo)簽分配給包含單個(gè)對象的圖像,而對象定位是指在圖像中的一個(gè)或多個(gè)對象周圍繪制一個(gè)邊界框,目標(biāo)檢測任務(wù)結(jié)合了目標(biāo)分類和定位。這意味著這是一個(gè)更具挑戰(zhàn)性/復(fù)雜的任務(wù),首先通過本地化技術(shù)在感興趣對象(OI)周圍繪制一個(gè)邊界框,然后借助分類為每個(gè)OI分配一個(gè)標(biāo)簽。目標(biāo)識(shí)別是上述所有任務(wù)的集合(即分類、定位和檢測)。


最后,本文還討論了兩種主要的目標(biāo)檢測算法/模型:Region-Based Convolutional Neural Networks (R-CNN)和You Only Look Once (YOLO)。

Selective Search for Object Recognition [5]:

在目標(biāo)檢測任務(wù)中,最關(guān)鍵的部分是目標(biāo)定位,因?yàn)槟繕?biāo)分類是在此基礎(chǔ)上進(jìn)行的,它依賴于定位所輸出的目標(biāo)區(qū)域(簡稱區(qū)域建議)。更完美的定位可以實(shí)現(xiàn)更完美的目標(biāo)檢測。選擇性搜索是一種新興的算法,在一些物體識(shí)別模型中被用于物體定位,如R-CNN和Fast-R-CNN。

該算法首先使用高效的基于圖的圖像分割方法生成輸入圖像的子段,然后使用貪婪算法將較小的相似區(qū)域合并為較大的相似區(qū)域。分段相似性基于顏色、紋理、大小和填充四個(gè)屬性。

Region Proposal Network — A detailed view[6]:

RPN(Region-proposition Network)由于其比傳統(tǒng)選擇性搜索算法更快而被廣泛地應(yīng)用于目標(biāo)定位,它從特征圖中學(xué)習(xí)目標(biāo)的最佳位置,就像CNN從特征圖中學(xué)習(xí)分類一樣。

它負(fù)責(zé)三個(gè)主要任務(wù),首先生成錨定框(每個(gè)特征映射點(diǎn)生成9個(gè)不同形狀的錨定框),然后將每個(gè)錨定框分類為前景或背景(即是否包含對象),最后學(xué)習(xí)錨定框的形狀偏移量以使其適合對象。

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks[7]:

Faster R-CNN模型解決了前兩個(gè)相關(guān)模型(R-CNN和Fast R-CNN)的所有問題,并使用RPN作為區(qū)域建議生成器。它的架構(gòu)與Fast R-CNN完全相同,只是它使用了RPN而不是選擇性搜索,這使得它比Fast R-CNN快34倍。

Real-time Object Detection with YOLO, YOLOv2, and now YOLOv3 [8]:

在介紹Yolo系列模型之前,讓我們先看一下首席研究員約瑟夫·雷德曼在Ted演講上的演講。

https://youtu.be/Cgxsv1riJhI

這個(gè)模型在對象檢測模型列表中占據(jù)首位的原因有很多,然而,最主要的原因是它的牢固性,它的推理時(shí)間非常短,這是為什么它很容易匹配視頻的正常速度(即25fps)并應(yīng)用于實(shí)時(shí)數(shù)據(jù)的原因。

與其他對象檢測模型不同,Yolo模型具有以下特性。

  • 單神經(jīng)網(wǎng)絡(luò)模型(即分類和定位任務(wù)都將從同一個(gè)模型中執(zhí)行):以一張照片作為輸入,直接預(yù)測每個(gè)邊界框的邊界框和類標(biāo)簽,這意味著它只看一次圖像。
  • 由于它對整個(gè)圖像而不是圖像的一部分執(zhí)行卷積,因此它產(chǎn)生的背景錯(cuò)誤非常少。
  • YOLO學(xué)習(xí)對象的一般化表示。在對自然圖像進(jìn)行訓(xùn)練和藝術(shù)品測試時(shí),YOLO的性能遠(yuǎn)遠(yuǎn)超過DPM和R-CNN等頂級(jí)檢測方法。由于YOLO具有高度的通用性,所以當(dāng)應(yīng)用于新的域或意外的輸入時(shí),它不太可能崩潰。

是什么讓YoloV3比Yolov2更好。

  • 如果你仔細(xì)看一下yolov2論文的標(biāo)題,那就是“YOLO9000: Better, Faster, Stronger”。yolov3比yolov2更好嗎?答案是肯定的,它更好,但不是更快更強(qiáng),因?yàn)轶w系的復(fù)雜性增加了。
  • Yolov2使用了19層DarkNet架構(gòu),沒有任何殘差塊、skip連接和上采樣,因此它很難檢測到小對象,然而在Yolov3中,這些特性被添加了,并且使用了在Imagenet上訓(xùn)練的53層DarkNet網(wǎng)絡(luò),除此之外,還堆積了53個(gè)卷積層,形成了106個(gè)卷積層結(jié)構(gòu)。

  • Yolov3在三種不同的尺度上進(jìn)行預(yù)測,首先是大對象的13X13網(wǎng)格,其次是中等對象的26X26網(wǎng)格,最后是小對象的52X52網(wǎng)格。
  • YoloV3總共使用9個(gè)錨箱,每個(gè)標(biāo)度3個(gè),用K均值聚類法選出最佳錨盒。
  • Yolov3可以對圖像中檢測到的對象執(zhí)行多標(biāo)簽分類,通過logistic回歸預(yù)測對象置信度和類預(yù)測。

5.我們的貢獻(xiàn)

我們的問題陳述包括兩個(gè)任務(wù),第一個(gè)是浮頂罐的檢測,另一個(gè)是陰影的提取和已識(shí)別罐容積的估計(jì)。第一個(gè)任務(wù)是基于目標(biāo)檢測,第二個(gè)任務(wù)是基于計(jì)算機(jī)視覺技術(shù)。讓我們描述一下解決每個(gè)任務(wù)的方法。

儲(chǔ)罐檢測:

我們的目標(biāo)是估算浮頂罐的容積。我們可以為一個(gè)類建立目標(biāo)檢測模型,但是為了減少一個(gè)模型與另一種儲(chǔ)油罐(即其他類型儲(chǔ)油罐)的混淆,并使其具有魯棒性,我們提出了三個(gè)類別的目標(biāo)檢測模型。使用帶有轉(zhuǎn)移學(xué)習(xí)的YoloV3進(jìn)行目標(biāo)檢測是因?yàn)樗菀自跈C(jī)器上訓(xùn)練,此外為了提高度量分值,還采用了數(shù)據(jù)增強(qiáng)的方法。

陰影提取和體積估計(jì):

陰影提取涉及許多計(jì)算機(jī)視覺技術(shù),由于RGB顏色方案對陰影不敏感,必須先將其轉(zhuǎn)換成HSV和LAB顏色空間,我們使用(l1+l3)/(V+1) (其中l(wèi)1是LAB顏色空間的第一個(gè)通道值)的比值圖像來增強(qiáng)陰影部分。

然后,通過閾值0.5×t1+0.4×t2(其中t1是最小像素值,t2是平均值)來過濾增強(qiáng)圖像,再對閾值圖像進(jìn)行形態(tài)學(xué)處理(即去除噪聲、清晰輪廓等)。

最后,提取出兩個(gè)儲(chǔ)油罐的陰影輪廓,然后根據(jù)上述公式估算出所占用的體積。這些想法摘自以下Notebook。

https://www.kaggle.com/towardsentropy/oil-tank-volume-estimation

遵循整個(gè)流程來解決這個(gè)案例研究如下所示。

讓我們從數(shù)據(jù)集的探索性數(shù)據(jù)分析EDA開始吧!!

6.探索性數(shù)據(jù)分析(EDA)

探索Labels.json文件:

json/_labels=json.load(open(os.path.join('data','labels.json')))  
print('NumberofImages:',len(json/_labels))  
json/_labels/[25:30/]  

所有的標(biāo)簽都存儲(chǔ)在字典列表中,總共有10萬張圖片。不包含任何儲(chǔ)罐的圖像將標(biāo)記為Skip,而包含儲(chǔ)罐的圖像將標(biāo)記為tank、tank Cluster或Floating Head tank,每個(gè)tank對象都有字典格式的四個(gè)角點(diǎn)的邊界框坐標(biāo)。

計(jì)數(shù):

在10K個(gè)圖像中,8187個(gè)圖像沒有標(biāo)簽(即它們不包含任何儲(chǔ)油罐對象,此外有81個(gè)圖像包含至少一個(gè)儲(chǔ)油罐簇對象,1595個(gè)圖像包含至少一個(gè)浮頂儲(chǔ)油罐。

在條形圖中,可以觀察到,在包含圖像的1595個(gè)浮頂罐中,26.45%的圖像僅包含一個(gè)浮頂罐對象,單個(gè)圖像中浮頂儲(chǔ)罐對象的最高數(shù)量為34。

探索labels/_coco.json文件:

json/_labels/_coco=json.load(open(os.path.join('data','labels/_coco.json')))  
print('NumberofFloatingtanks:',len(json/_labels/_coco/['annotations'/]))  
no/_unique/_img/_id=set()  
foranninjson/_labels/_coco/['annotations'/]:  
no/_unique/_img/_id.add(ann/['image/_id'/])  
print('NumberofImagesthatcontainsFloatingheadtank:',len(no/_unique/_img/_id))  
json/_labels/_coco/['annotations'/]/[:8/] 

此文件僅包含浮頂罐的邊界框及其在字典格式列表中的_image/_id_

打印邊界框:

儲(chǔ)油罐有三種:

  1. Tank(T 油罐)
  2. Tank Cluster(TC 油罐組),
  3. Floating Head Tank(FHT,浮頂罐)

7.數(shù)據(jù)擴(kuò)充

在EDA中,人們觀察到10000幅圖像中有8171幅是無用的,因?yàn)樗鼈儾话魏螌ο螅送?595個(gè)圖像包含至少一個(gè)浮頂罐對象。眾所周知,所有的深度學(xué)習(xí)模型都需要大量的數(shù)據(jù),沒有足夠的數(shù)據(jù)會(huì)導(dǎo)致性能的下降。

因此,我們先進(jìn)行數(shù)據(jù)擴(kuò)充,然后將獲得的擴(kuò)充數(shù)據(jù)擬合到Y(jié)olov3目標(biāo)檢測模型中。

8.數(shù)據(jù)預(yù)處理、擴(kuò)充和TFRecords

數(shù)據(jù)預(yù)處理:

對象的注釋是以Jason格式給出的,其中有4個(gè)角點(diǎn),首先,從這些角點(diǎn)提取左上角點(diǎn)和右下角點(diǎn),然后屬于單個(gè)圖像的所有注釋及其對應(yīng)的標(biāo)簽都保存在CSV文件的一行列表中。

從角點(diǎn)提取左上角點(diǎn)和右下角點(diǎn)的代碼

defconv/_bbox(box/_dict):  
"""  
input:box/_dict->字典中有4個(gè)角點(diǎn)  
Function:獲取左上方和右下方的點(diǎn)  
output:tuple(ymin,xmin,ymax,xmax)  
"""  
xs=np.array(list(set(/[i/['x'/]foriinbox/_dict/])))  
ys=np.array(list(set(/[i/['y'/]foriinbox/_dict/])))  
x/_min=xs.min()  
x/_max=xs.max()  
y/_min=ys.min()  
y/_max=ys.max()  
  
returny/_min,x/_min,y/_max,x/_max  

CSV文件將如下所示

為了評(píng)估模型,我們將保留10%的圖像作為測試集。

#訓(xùn)練和測試劃分  
df/_train,df/_test=model/_selection.train/_test/_split(  
df,#CSV文件注釋  
test/_size=0.1,  
random/_state=42,  
shuffle=True,  
)  
df/_train.shape,df/_test.shape  

數(shù)據(jù)擴(kuò)充:

我們知道目標(biāo)檢測需要大量的數(shù)據(jù),但是我們只有1645幅圖像用于訓(xùn)練,這是非常少的,為了增加數(shù)據(jù),我們必須執(zhí)行數(shù)據(jù)擴(kuò)充。我們通過翻轉(zhuǎn)和旋轉(zhuǎn)原始圖像來生成新圖像。我們轉(zhuǎn)到下面的GitHub存儲(chǔ)庫,從中提取代碼進(jìn)行擴(kuò)充

https://blog.paperspace.com/data-augmentation-for-bounding-boxes/

通過執(zhí)行以下操作從單個(gè)原始圖像生成7個(gè)新圖像:

  1. 水平翻轉(zhuǎn)
  2. 旋轉(zhuǎn)90度
  3. 旋轉(zhuǎn)180度
  4. 旋轉(zhuǎn)270度
  5. 水平翻轉(zhuǎn)和90度旋轉(zhuǎn)
  6. 水平翻轉(zhuǎn)和180度旋轉(zhuǎn)
  7. 水平翻轉(zhuǎn)和270度旋轉(zhuǎn)

示例如下所示

TFRecords:

TFRecords是TensorFlow自己的二進(jìn)制存儲(chǔ)格式。當(dāng)數(shù)據(jù)集太大時(shí),它通常很有用。它以二進(jìn)制格式存儲(chǔ)數(shù)據(jù),并對訓(xùn)練模型的性能產(chǎn)生顯著影響。二進(jìn)制數(shù)據(jù)復(fù)制所需的時(shí)間更少,而且由于在訓(xùn)練時(shí)只加載了一個(gè)batch數(shù)據(jù),所以占用的空間也更少。你可以在下面的博客中找到它的詳細(xì)描述。

https://medium.com/mostly-ai/tensorflow-records-what-they-are-and-how-to-use-them-c46bc4bbb564

也可以查看下面的Tensorflow文檔。

https://www.tensorflow.org/tutorials/load/_data/tfrecord

我們的數(shù)據(jù)集已轉(zhuǎn)換成RFRecords格式,但是我們沒有必要執(zhí)行此任務(wù),因?yàn)槲覀兊臄?shù)據(jù)集不是很大,如果你感興趣,可以在我的GitHub存儲(chǔ)庫中找到代碼。

9.基于YoloV3的目標(biāo)檢測

訓(xùn)練:

為了訓(xùn)練yolov3模型,采用了遷移學(xué)習(xí)。第一步包括加載DarkNet網(wǎng)絡(luò)的權(quán)重,并在訓(xùn)練期間凍結(jié)它以保持權(quán)重不變。

defcreate/_model():  
tf.keras.backend.clear/_session()  
pret/_model=YoloV3(size,channels,classes=80)  
load/_darknet/_weights(pret/_model,'Pretrained/_Model/yolov3.weights')  
print('//nPretrainedWeightLoaded')  
  
model=YoloV3(size,channels,classes=3)  
model.get/_layer('yolo/_darknet').set/_weights(  
pret/_model.get/_layer('yolo/_darknet').get/_weights())  
print('YoloDarkNetweightloaded')  
  
freeze/_all(model.get/_layer('yolo/_darknet'))  
print('FrozenDarkNetlayers')  
returnmodel  
  
model=create/_model()  
model.summary()  

我們使用adam優(yōu)化器(初始學(xué)習(xí)率=0.001)來訓(xùn)練我們的模型,并根據(jù)epoch應(yīng)用余弦衰減來降低學(xué)習(xí)速率。在訓(xùn)練過程中使用模型檢查點(diǎn)保存最佳權(quán)重,訓(xùn)練結(jié)束后保存最后一個(gè)權(quán)重。

tf.keras.backend.clear/_session()  
epochs=100  
learning/_rate=1e-3  
  
optimizer=get/_optimizer(  
optim/_type='adam',  
learning/_rate=1e-3,  
decay/_type='cosine',  
decay/_steps=10/*600  
)  
loss=/[YoloLoss(yolo/_anchors/[mask/],classes=3)formaskinyolo/_anchor/_masks/]  
  
  
model=create/_model()  
model.compile(optimizer=optimizer,loss=loss)  
  
#Tensorbaord  
!rm-rf./logs/  
logdir=os.path.join("logs",datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))  
%tensorboard--logdir$logdir  
tensorboard/_callback=tf.keras.callbacks.TensorBoard(logdir,histogram/_freq=1)  
  
callbacks=/[  
EarlyStopping(monitor='val/_loss',min/_delta=0,patience=15,verbose=1),  
ModelCheckpoint('Weights/Best/_weight.hdf5',verbose=1,save/_best/_only=True),  
tensorboard/_callback,  
/]  
  
history=model.fit(train/_dataset,  
epochs=epochs,  
callbacks=callbacks,  
validation/_data=valid/_dataset)  
model.save('Weights/Last/_weight.hdf5')  

損失函數(shù):

YOLO損失函數(shù):

Yolov3模型訓(xùn)練中所用的損失函數(shù)相當(dāng)復(fù)雜。Yolo在三個(gè)不同的尺度上計(jì)算三個(gè)不同的損失,并對反向傳播進(jìn)行總結(jié)(正如你在上面的代碼單元中看到的,最終損失是三個(gè)不同損失的列表),每個(gè)loss都通過4個(gè)子函數(shù)來計(jì)算檢測損失和分類損失。

  1. 中心(x,y) 的MSE損失.
  2. 邊界框的寬度和高度的均方誤差(MSE)
  3. 邊界框的二元交叉熵得分與無目標(biāo)得分
  4. 邊界框多類預(yù)測的二元交叉熵或稀疏范疇交叉熵

讓我們看看Yolov2中使用的損失公式

Yolov2中的最后三項(xiàng)是平方誤差,而在Yolov3中,它們被交叉熵誤差項(xiàng)所取代,換句話說,Yolov3中的對象置信度和類預(yù)測現(xiàn)在通過logistic回歸來進(jìn)行預(yù)測。

看看Yolov3損失函數(shù)的實(shí)現(xiàn)

defYoloLoss(anchors,classes=3,ignore/_thresh=0.5):  
defyolo/_loss(y/_true,y/_pred):  
#1.轉(zhuǎn)換所有預(yù)測輸出  
#y/_pred:(batch/_size,grid,grid,anchors,(x,y,w,h,obj,...cls))  
pred/_box,pred/_obj,pred/_class,pred/_xywh=yolo/_boxes(  
y/_pred,anchors,classes)  
#predicted(tx,ty,tw,th)  
pred/_xy=pred/_xywh/[...,0:2/]#x,yoflastchannel  
pred/_wh=pred/_xywh/[...,2:4/]#w,hoflastchannel  
  
#2.轉(zhuǎn)換所有真實(shí)輸出  
#y/_true:(batch/_size,grid,grid,anchors,(x1,y1,x2,y2,obj,cls))  
true/_box,true/_obj,true/_class/_idx=tf.split(  
y/_true,(4,1,1),axis=/-1)  
  
#轉(zhuǎn)換x1,y1,x2,y2tox,y,w,h  
#x,y=(x2-x1)/2,(y2-y1)/2  
#w,h=(x2-x1),(y2-y1)  
true/_xy=(true/_box/[...,0:2/]+true/_box/[...,2:4/])/2  
true/_wh=true/_box/[...,2:4/]-true/_box/[...,0:2/]  
  
#小的box要更高權(quán)重  
#shape->(batch/_size,grid,grid,anchors)  
box/_loss/_scale=2-true/_wh/[...,0/]/*true/_wh/[...,1/]  
  
  
#3.對predbox進(jìn)行反向  
#把(bx,by,bw,bh)變?yōu)?tx,ty,tw,th)  
grid/_size=tf.shape(y/_true)/[1/]  
grid=tf.meshgrid(tf.range(grid/_size),tf.range(grid/_size))  
grid=tf.expand/_dims(tf.stack(grid,axis=/-1),axis=2)  
true/_xy=true/_xy/*tf.cast(grid/_size,tf.float32)-tf.cast(grid,tf.float32)  
true/_wh=tf.math.log(true/_wh/anchors)  
true/_wh=tf.where(tf.logical/_or(tf.math.is/_inf(true/_wh),  
tf.math.is/_nan(true/_wh)),  
tf.zeros/_like(true/_wh),true/_wh)  
  
#4.計(jì)算所有掩碼  
#從張量的形狀中去除尺寸為1的維度。  
#obj/_mask:(batch/_size,grid,grid,anchors)  
obj/_mask=tf.squeeze(true/_obj,/-1)  
#當(dāng)iou超過臨界值時(shí),忽略假正例  
#best/_iou:(batch/_size,grid,grid,anchors)  
best/_iou=tf.map/_fn(  
lambdax:tf.reduce/_max(broadcast/_iou(x/[0/],tf.boolean/_mask(  
x/[1/],tf.cast(x/[2/],tf.bool))),axis=/-1),  
(pred/_box,true/_box,obj/_mask),  
tf.float32)  
ignore/_mask=tf.cast(best/_iou(batch,1)  
xy/_loss=tf.reduce/_sum(xy/_loss,axis=(1,2,3))  
wh/_loss=tf.reduce/_sum(wh/_loss,axis=(1,2,3))  
obj/_loss=tf.reduce/_sum(obj/_loss,axis=(1,2,3))  
class/_loss=tf.reduce/_sum(class/_loss,axis=(1,2,3))  
  
returnxy/_loss+wh/_loss+obj/_loss+class/_loss  
returnyolo/_loss  

分?jǐn)?shù):

為了評(píng)估我們的模型,我們使用了AP和mAP來評(píng)估訓(xùn)練和測試數(shù)據(jù)

測試集分?jǐn)?shù)

get/_mAP(model,'data/test.csv')  

訓(xùn)練集分?jǐn)?shù)

get/_mAP(model,'data/train.csv')  

推理

讓我們看看這個(gè)模型是如何執(zhí)行的

10.儲(chǔ)量估算

體積估算是本案例研究的主要內(nèi)容。雖然沒有評(píng)估估計(jì)容積的標(biāo)準(zhǔn),但我們試圖找到圖像的最佳閾值像素值,以便能夠在很大程度上檢測陰影區(qū)域(通過計(jì)算像素?cái)?shù))。

我們將使用衛(wèi)星拍攝到的4800X4800形狀的大圖像,并將其分割成100個(gè)512x512的子圖,兩個(gè)軸上的子圖之間重疊37像素。圖像修補(bǔ)程序在id/_row/_column.jpg命名。

每個(gè)生成的子圖預(yù)測都將存儲(chǔ)在一個(gè)CSV文件中,然后再估計(jì)每個(gè)浮頂儲(chǔ)油罐的體積(代碼和解釋以Notebook格式在我的GitHub存儲(chǔ)庫中提供)。

最后,將所有的圖像塊和邊界框與標(biāo)簽合并,輸出估計(jì)的體積,形成一個(gè)大的圖像。你可以看看下面的例子:

11.結(jié)果

測試集上浮頂罐的AP分?jǐn)?shù)為0.874,訓(xùn)練集上的AP分?jǐn)?shù)為0.942。

12.結(jié)論

  • 只需有限的圖像就可以得到相當(dāng)好的結(jié)果。
  • 數(shù)據(jù)增強(qiáng)工作得很到位。
  • 在本例中,與RetinaNet模型的現(xiàn)有方法相比,yolov3表現(xiàn)得很好。

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 人工智能
    +關(guān)注

    關(guān)注

    1806

    文章

    49011

    瀏覽量

    249364
  • 圖像分析
    +關(guān)注

    關(guān)注

    0

    文章

    82

    瀏覽量

    18933
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RV1126 yolov8訓(xùn)練部署教程

    YOLOv8 是 ultralytics 公司在 2023 年 1月 10 號(hào)開源的基于YOLOV5進(jìn)行更新的 下一個(gè)重大更新版本,目前支持圖像分類、物體檢測和實(shí)例分割任務(wù),鑒于
    的頭像 發(fā)表于 04-16 14:53 ?474次閱讀
    RV1126 <b class='flag-5'>yolov</b>8訓(xùn)練部署教程

    基于衛(wèi)星圖像的智能定位系統(tǒng)軟件

    基于衛(wèi)星圖像的智能定位系統(tǒng)軟件是衛(wèi)星導(dǎo)航、圖像處理與智能算法融合的前沿技術(shù)結(jié)晶,在高精度定位領(lǐng)域具有卓越表現(xiàn)。以下是對這類軟件的詳細(xì)介紹: 應(yīng)用案例 目前,已有多個(gè)基于衛(wèi)星圖像的智能定
    的頭像 發(fā)表于 04-01 09:55 ?388次閱讀

    基于衛(wèi)星圖像的智能定位系統(tǒng)全面解析

    智慧華盛恒輝基于衛(wèi)星圖像的智能定位系統(tǒng),作為融合衛(wèi)星導(dǎo)航、圖像處理以及智能算法的前沿科技,在高精度定位領(lǐng)域表現(xiàn)卓越。下面為您全方位深入剖析該系統(tǒng)。 ? 一、系統(tǒng)架構(gòu)構(gòu)成 基于衛(wèi)星圖像
    的頭像 發(fā)表于 03-31 16:55 ?371次閱讀

    為什么在Ubuntu20.04上使用YOLOv3比Yocto操作系統(tǒng)上的推理快?

    使用 2021.4 OpenVINO?中的 GPU 插件運(yùn)行帶有 YOLOv3 模型的 對象檢測 C++ 演示 。 使用 英特爾? 酷睿? i5-1145G7E、英特爾? 酷睿
    發(fā)表于 03-05 06:48

    儲(chǔ)油自動(dòng)化革命,網(wǎng)關(guān)PROFINET與MODBUS網(wǎng)橋的無縫融合,錦上添花

    ,定義MODBUS設(shè)備的地址、寄存器和數(shù)據(jù)格式,確保與現(xiàn)場設(shè)備匹配。4. **程序編寫**:在PLC中編寫程序,實(shí)現(xiàn)對儲(chǔ)油罐區(qū)液位、溫度、壓力等參數(shù)的監(jiān)控和對閥門、泵等設(shè)備的控制。- **網(wǎng)關(guān)配置軟件**:用于配置WL-ABC3010網(wǎng)關(guān),以確保MODBUS設(shè)備能夠被PLC正確識(shí)別和控制。
    的頭像 發(fā)表于 03-04 10:41 ?263次閱讀
    <b class='flag-5'>儲(chǔ)油</b>自動(dòng)化革命,網(wǎng)關(guān)PROFINET與MODBUS網(wǎng)橋的無縫融合,錦上添花

    請問rt-thread studio如何進(jìn)行多線程編譯?

    ,使用的是5800h+32g內(nèi)存+sn550 ssd,開啟16線程編譯時(shí)cpu的占用率也只能到30%,編譯完整個(gè)工程需要3分鐘 感覺多線程編譯設(shè)置沒有生效,有辦法提高編譯速度嗎
    發(fā)表于 02-19 08:30

    【米爾RK3576開發(fā)板評(píng)測】+項(xiàng)目名稱YOLOV5目標(biāo)檢測

    的Toolkit來進(jìn)行格式轉(zhuǎn)換。(PC電腦需要聯(lián)網(wǎng)) 三、模型轉(zhuǎn)換 cd Projects/rknn_model_zoo/examples/yolov5/python python convert.py
    發(fā)表于 02-15 13:24

    采用華為云 Flexus 云服務(wù)器 X 實(shí)例部署 YOLOv3 算法完成目標(biāo)檢測

    一、前言 1.1 開發(fā)需求 這篇文章講解:?采用華為云最新推出的 Flexus 云服務(wù)器 X 實(shí)例部署 YOLOv3 算法,完成圖像分析、目標(biāo)檢測。 隨著計(jì)算機(jī)視覺技術(shù)的飛速發(fā)展,深度學(xué)習(xí)模型如
    的頭像 發(fā)表于 01-02 12:00 ?540次閱讀
    采用華為云 Flexus 云服務(wù)器 X 實(shí)例部署 <b class='flag-5'>YOLOv3</b> 算法完成目標(biāo)檢測

    在RK3568教學(xué)實(shí)驗(yàn)箱上實(shí)現(xiàn)基于YOLOV5的算法物體識(shí)別案例詳解

    非常流行的實(shí)時(shí)目標(biāo)檢測模型,它提供了出色的性能和精度。YOLOv5可以分為三個(gè)部分,分別是: 1、主干特征提取網(wǎng)絡(luò)(Backbone) 2、加強(qiáng)特征提取網(wǎng)絡(luò)(FPN) 3、分類器與回歸器(Yolo
    發(fā)表于 12-03 14:56

    在樹莓派上部署YOLOv5進(jìn)行動(dòng)物目標(biāo)檢測的完整流程

    卓越的性能。本文將詳細(xì)介紹如何在性能更強(qiáng)的計(jì)算機(jī)上訓(xùn)練YOLOv5模型,并將訓(xùn)練好的模型部署到樹莓派4B上,通過樹莓派的攝像頭進(jìn)行實(shí)時(shí)動(dòng)物目標(biāo)檢測。 一、在電腦上訓(xùn)練YOLOv5模型
    的頭像 發(fā)表于 11-11 10:38 ?3692次閱讀
    在樹莓派上部署<b class='flag-5'>YOLOv</b>5<b class='flag-5'>進(jìn)行</b>動(dòng)物目標(biāo)檢測的完整流程

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實(shí)現(xiàn)Yolov5分類檢測

    NPU。 應(yīng)用領(lǐng)域 圖像識(shí)別: NPU能夠迅速對圖像進(jìn)行分類、檢測和分割等操作,大大提升了處理效率。 語音識(shí)別: NPU實(shí)現(xiàn)了實(shí)時(shí)語音轉(zhuǎn)換和語音合成功能,為語音交互提供了更自然的體驗(yàn)。 自然語言處理
    發(fā)表于 10-24 10:13

    CPU占用率過高的常見原因

    排查系統(tǒng)問題時(shí),CPU 飆升是一個(gè)常見的問題。
    的頭像 發(fā)表于 10-23 09:33 ?2439次閱讀

    服務(wù)器cpu占用率高怎么解決

    服務(wù)器CPU占用率高是一個(gè)常見的問題,它可能會(huì)導(dǎo)致服務(wù)器性能下降,甚至影響用戶體驗(yàn)。 一、了解服務(wù)器CPU占用率高的原因 應(yīng)用程序問題 應(yīng)用程序設(shè)計(jì)不合理,導(dǎo)致CPU占用率高 應(yīng)用程序存在死循環(huán)或者
    的頭像 發(fā)表于 10-10 15:14 ?1841次閱讀

    RK3588 技術(shù)分享 | 在Android系統(tǒng)中使用NPU實(shí)現(xiàn)Yolov5分類檢測

    NPU。 應(yīng)用領(lǐng)域 圖像識(shí)別: NPU能夠迅速對圖像進(jìn)行分類、檢測和分割等操作,大大提升了處理效率。 語音識(shí)別: NPU實(shí)現(xiàn)了實(shí)時(shí)語音轉(zhuǎn)換和語音合成功能,為語音交互提供了更自然的體驗(yàn)。 自然語言處理
    發(fā)表于 08-20 11:13
    主站蜘蛛池模板: 五月激情丁香 | 国产免费高清在线精品一区 | 亚洲成av人片在线观看无码 | 色噜噜狠狠色综合欧洲selulu | 日本不卡视频免费 | 国产毛片农村妇女aa板 | 天天爽夜夜爽精品视频一 | 欧美人与动性xxxxbbbb | 在线天堂视频 | 五月婷婷激情 | 99视频全部免费 | 午夜爱爱爱爱爽爽爽网站免费 | 天堂网在线最新版www | 亚洲夜夜爱 | 午夜视频黄色 | 清纯唯美亚洲综合欧美色 | 色妞妞网 | 九九精品国产兔费观看久久 | japanese日本护士xx亚洲 | 亚洲免费色 | 四虎884tt紧急大通知 | 国产精品成人一区二区三区 | 免费网站日本永久免费观看 | 日本在线视频一区 | 色女孩网站| 特黄日韩免费一区二区三区 | 二级黄绝大片中国免费视频0 | 婷婷久久综合 | 免费观看在线观看 | mm365快播综合网 | 天堂网www最新版在线资源 | 成年男人午夜片免费观看 | 天天操天天操天天干 | 久久精品视频免费观看 | 色多视频| 欧日韩视频777888 | 午夜在线观看免费观看大全 | 99久久精品99999久久 | 国产亚洲欧美成人久久片 | 日韩毛片免费视频一级特黄 | 一二三区乱码一区二区三区码 |