close

瑞典的森林到處都是。瑞典近70%的土地面積是森林,這是一種不應有的民族自豪感。他們是少數幾個能夠保持伐木業成功並同時增加樹木覆蓋率的國家之一。

這並不是說瑞典的森林沒有面臨挑戰。與世界上許多其他地區一樣,入侵性害蟲會對北歐林地造成嚴重破壞。在Västergötland西南部地區,落葉松箱蛾是一種暗灰色的小蛾,會造成廣泛的經濟損失。

雌性在落葉松的針葉上產卵。然後幼蟲會吃掉這根針和周圍的針,把之前被吃掉的針的外面變成一個保護殼(因此有了「松箱」這個綽號)。

幼蟲長約5毫米;看到的機會很小。如果只有一個或幾個這樣的生物降落在一棵樹上,它們可能永遠不會被注意到。落葉松為高大喬木,高達45米;任何這種大小的有機體都能對付一些微小的寄生蟲。問題是這些蛾子的數量遠不止這些。雖然昆蟲本身是看不見的,但它們所造成的傷害卻是顯而易見的。如果這是可見的,計算機視覺模型可以學會檢測它。

瑞典林業局發布了一個數據集,其中包括Västergötland五個地區落葉松森林的空中無人機照片。這些照片拍攝於2019年5月27日和8月19日兩天,拍攝於Västergötland五個地區(Bebehojd、Ekbacka、Jallasvag、Kampe和Nordkap)。

所有圖像都附帶由邊界框坐標和標籤組成的XML文件。標籤指示包圍在邊界框中的樹是落葉松還是其他樹種(很可能是雲杉,儘管只有兩個邊界框被標記為雲杉)。如果這棵樹是落葉松,圖像的標籤包括傷害程度。傷害等級為健康、低傷害和高傷害。

數據概要

在5月份的數據中,落葉松占了近80%,但在8月份的數據中,落葉松僅占70%左右。8月份的數據包含的圖像總體上較少,分別為698張和836張,但包含的不是落葉松的樹木多出1900棵。

按位置劃分,5月份圖像中落葉松的百分比始終在四分之三到五分之四之間,除了Kampe和Ekbacka,後者的樹木密度最高,後者最低。

8月份,每個地區落葉松樹的比例差異很大,賈拉斯瓦格和其他地方的小落葉松樹的比例大幅下降。這可能是在兩張照片之間的三個月內剔除病樹的結果,但這似乎不太可能,因為變化百分比最高的Jallasvag和變化百分比最低的Kampe兩棵健康落葉松的百分比最高。更有可能的是,在兩次採集過程中對不同區域進行了採樣。


歐洲落葉松不是最黑的針葉樹。即使在健康的情況下,這些樹也比它們的鄰居輕得多,針葉略帶藍色

左圖:健康落葉松樹林。右圖:由其他樹種組成的森林區域。注意,即使是健康的落葉松也有淺色的針葉。

當帶菌者開始感染時,落葉松樹的外部針葉開始變成棕色。

坎佩的一個森林區域,由落葉松組成,大部分損害較低。沿着樹的邊緣可以看到淡淡的棕色。

當蟲害達到高傷害階段時,樹木留下的針葉已經變成棕色。

坎佩的一個森林區域,由嚴重受感染的落葉松組成。剩下的一點綠色大部分來自落葉松周圍生長的較小的植物。

目標檢測模型需要檢測綠色的陰影,以區分落葉松和其他品種,以及區分不同程度的侵擾的綠色和棕色陰影。雖然樹枝的形狀和樹木的大小有微妙之處,但顏色可能是唯一最重要的因素。即使是一個相當簡單的檢測模型也可以很好地解決這個問題。

建立模型

最後檢查,EfficientSet仍然是單鏡頭目標檢測的最先進模型架構。

EfficientSet由一系列目標檢測模型組成,旨在順利管理大小和效率之間的權衡。最小的模型可用於手持或遠程設備,其中可能包括監控森林的無人機,而最大的模型可在GPU供電的服務器上提供更高的精度。

無人機採集的所有圖像均為1500x1500。雖然一致性受到讚賞,但除了最大的EfficientDet模型外,其他所有模型的尺寸都太大了。事實上,EfficientSet模型對用於訓練的輸入大小相當挑剔。最小的D0為512x512,下一個最大的D1為640x640。經驗表明,不將輸入調整到這些大小必然導致性能損失。

BBOX=A.BboxParams(format='pascal_voc',min_area=0,min_visibility=0,label_fields=['labels'])defget_train_transforms(img_size):"""返回一個函數,用於執行訓練數據的標準預處理步驟序列。"""returnA.Compose([A.RandomResizedCrop(height=img_size,width=img_size,scale=(0.05,1),ratio=(3/4,4/3),p=1.0),A.HorizontalFlip(p=0.5),A.VerticalFlip(p=0.5),A.RandomRotate90(p=1.0),A.Transpose(p=0.5),ToTensorV2(p=1.0)],bbox_params=BBOX,p=1.0)

幸運的是,裁剪和調整大小是深度學習預處理管道的標準部分。裁剪和調整大小通常伴隨一些適度的拉伸和擠壓;隨機裁剪的比例在4:3和3:4之間,然後重新調整為1:1。這一舉措對解決這一問題的價值值得商榷。樹木圖像會被壓縮成不切實際的形狀嗎?可能沒有這些高寬比;由此產生的圖像可能仍然反映了野生樹木的自然外觀。

使用從4:3延伸到1:1縱橫比的樹木訓練圖像。扭曲不足以使樹看起來不現實。

用於訓練的其他有用的預處理操作是翻轉、水平和垂直、旋轉和轉置。由於顏色是一個非常重要的特徵,而且各個位置的類別顏色相當同質,因此幾乎沒有理由添加顏色增強。事實上,在現代體系中,色彩增強通常會導致精確度略有下降。

預處理驗證數據是一件簡單的事情。由於圖像已經是正方形,因此調整其大小以適合模型內部就足夠了。所有預處理操作都使用Albumentations包完成。

defget_val_full_transform(img_size):"""返回一個函數,用於執行驗證數據的標準預處理步驟序列。"""returnA.Compose([A.Resize(height=img_size,width=img_size,p=1.0),ToTensorV2(p=1.0)],bbox_params=BBOX,p=1.0)

20%的數據是隨機選擇的,但分層分布在五個地點,用於驗證。

模型的訓練參數相當標準。初始學習率為2.56e-3,權重衰減為4e-5的Adam優化器表現良好。餘弦學習率衰減規律略優於指數衰減規律;似乎模型需要花一段時間大步尋找它的最佳區域,但隨後學習率需要迅速衰減。因為adam被認為是在狹窄的山谷中找到了最佳狀態,所以這種行為並不奇怪。

模型的大小,或者更準確地說,Colab的內存限制,決定了批量大小。對於EfficientDet0和EfficientDet1,批量大小為8起作用,但對於EfficientDet2,必須將其減少到4。最終結果是,從D1到D2時,精確度略有下降。

結果

總體鑑定結果良好,EfficientDet0的COCO mAP為48.6,EfficientDet1的COCO mAP為50.8。由於訓練中使用的批量較小,因此EfficientDet2降至50.1。結果更實際,因為它反映了實際使用的預測,AP@50 D0為75.9,D1為79.0,D2為77.4。不同類的分數因類頻率而異,低傷害最高,健康最低。

EfficientDet0的平均精度:

EfficientDet1的平均精度

EfficientDet2的平均精度

D2模型的精度下降主要是檢測健康樹木的能力下降。低損傷的檢測略有上升,而高損傷大致保持不變。由於從D0到D1的精度確實全面提高,因此似乎沒有什麼理由在生產中使用D0(除非CPU限制非常嚴格)。D1和D2之間的選擇是一種判斷,但由於D1在頻率較低的類上表現明顯更好,因此它可能是更好的模型。

值得注意的是,當從AR@100到AR時,對高損傷的召回超過了對Other損傷的召回。

所有模型的平均召回率。

平均準確率和平均召回率是衡量模型性能的有效指標,但它們本身並不能說明模型在實踐中的應用。這還需要一個項目,即閾值。簡單的閾值選擇是0.5,高於該閾值的所有檢測都將保持,低於該閾值的所有檢測都將丟棄。

在多類問題中,這個選擇幾乎從來都不是正確的選擇。要選擇最佳閾值,請找到平衡精度和召回率的閾值。F1分數適用於確定最佳閾值。

使用閾值0.0:1.0:0.01的範圍計算每個閾值的F1分數。對每個類別分別計算F1,然後取平均值。對於D0模型,F1的最佳得分為0.4,D1的最佳得分為0.409。D2模型的最佳閾值為0.379。


具有代表性的圖像。左是真實結果;右邊是D1的檢測結果。

上圖為mAP56.2,略高於總mAP50.8。預測和真實結果顯然是緊密相連的。最明顯的差異是該預測傾向於過度計算落葉松以外的樹木。

在某些情況下,不清楚模型是否檢測到過多的樹,或者注釋器是否遺漏了一些樹。左上角的三個綠色檢測框應該只有兩個,但右側高傷害假陽性下方的小綠色假陽性看起來確實像一棵樹,應該在地面上。因此,高傷害假陽性似乎是一棵死樹或垂死樹;這是不是落葉松還有待商榷。

另一個顯而易見的事實是,對於圖像中最常見的類別,準確度通常是最高的。一棵樹的健康狀況往往由它的鄰居的健康狀況決定,這一點也不奇怪。該模型似乎已經意識到了這一點。單個圖像的類級別映射與同一圖像中的類頻率相關。這種相關性確實隨着模型尺寸的增大而略微減小,這表明較小的模型比數據所保證的更可能「聚集」識別。


健康樹百分比最高的圖像。左是真實結果;右邊是D1的檢測結果。

上圖的上半部分是聚類的一個示例。少數標記為低傷害的樹木被模型歸類為健康樹木,或者,在兩棵小樹的情況下,被完全忽略。在左下角,情況正好相反;四棵健康的樹被標記為低傷害。在這兩種情況下,都不清楚模型或基本事實是否正確。

具有高百分比高傷害樹的圖像。左是真實標籤;右邊是D1的檢測結果。

同樣的情況也發生在以高傷害樹為主的圖像中。在上圖中,如果樹木附近有其他高傷害樹木,則有輕微偏向於將其標記為高傷害樹。左下角的低傷害樹簇在具有模型預測邊界框的圖像中較小,左中角的一些低傷害樹已被丟棄或標記為高傷害。

關注預測誤差很容易;它們在視覺上總是顯而易見的,但模型的準確性總體上還是不錯的。在足夠大的批量上訓練更大的模型仍然會表現得更好,但這在Colab中目前是不可能的。

示例代碼

用於訓練EfficientDet1模型的筆記本:https://colab.research.google.com/github/DanielMorton/Larch/blob/main/Larch%20Edet1.ipynb

包含生成預測代碼的筆記本:https://github.com/DanielMorton/Larch/blob/main/Larch%20Predict.ipynb

包含評估代碼的筆記本:https://github.com/DanielMorton/Larch/blob/main/Predict.ipynb

用於訓練模型的代碼可以由任何用戶運行。預測和評估的代碼需要調整一些引用,以指向用戶生成的模型和輸出文件。

引用

數據:https://lila.science/datasets/forest-damages-larch-casebearer/

Mingxing Tan, Ruoming Pang, and Quoc V. Le. EfficientDet: Scalable and Efficient Object Detection. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2020.

Swedish Forest Agency (2021): Forest Damages — Larch Casebearer 1.0. National Forest Data Lab. Dataset



☆ END ☆
如果看到這裡,說明你喜歡這篇文章,請轉發、點讚。微信搜索「uncle_pn」,歡迎添加小編微信「 woshicver」,每日朋友圈更新一篇高質量博文。
↓掃描二維碼添加小編↓

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()