基於YoloV3衛星圖像的儲油罐容積佔用率研究

2020-10-01 人工智慧遇見磐創

在1957年以前,地球上只有一顆天然衛星:月球。1957年10月4日,蘇聯發射了世界上第一顆人造衛星。從那時起,來自40多個國家大約有8900顆衛星發射升空。

這些衛星幫助我們進行監視、通信、導航等等。這些國家還利用衛星監視另一個國家的土地及其動向,估計其經濟和實力。然而,所有的國家都互相隱瞞他們的信息。

同樣,全球石油市場也並非完全透明。幾乎所有的產油國都努力隱藏自己的總產量、消費量和儲存量。各國這樣做是為了間接地向外界隱瞞其實際經濟,並增強其國防系統的能力。這種做法可能會對其他國家造成威脅。

出於這個原因,許多初創公司,如Planet和Orbital Insight,都通過衛星圖像來關注各國的此類活動。Thye收集儲油罐的衛星圖像並估算儲量。

但問題是,如何僅憑衛星圖像來估計儲油罐的體積?好吧,只有當儲油罐存在浮頂油罐時才有可能。這種特殊類型的油罐是專門為儲存大量石油產品而設計的,如原油或凝析油。它由頂蓋組成,它直接位於油的頂部,隨著油箱中油量的增加或下降,並在其周圍形成兩個陰影。如下圖所示,陰影位於北側

(外部陰影)是指儲罐的總高度,而儲罐內的陰影(內部陰影)表示浮頂的深度。體積估計為1-(內部陰影區域/外部陰影區域)。

在本博客中,我們將使用Tensorflow2.x框架,在衛星圖像的幫助下,使用python從零開始實現一個完整的模型來估計儲油罐的佔用量。

GitHub倉庫

本文的所有內容和整個代碼都可以在這個github存儲庫中找到

https://github.com/mdmub0587/Oil-Storage-Tank-s-Volume-Occupancy

以下是本博客目錄。我們會逐一探索。

目錄

  1. 問題陳述、數據集和評估指標
  2. 現有方法
  3. 相關研究工作
  4. 有用的博客和研究論文
  5. 我們的貢獻
  6. 探索性數據分析(EDA)
  7. 數據擴充
  8. 數據預處理、擴充和TFRecords
  9. 基於YoloV3的目標檢測
  10. 儲量估算
  11. 結果
  12. 結論
  13. 今後的工作
  14. 參考引用

1.問題陳述、數據集和評估指標

問題陳述:

浮頂油罐的檢測和儲油量的估算。然後將圖像塊重新組合成具有儲油量估計的全圖像。

數據集:

數據集連結:https://www.kaggle.com/towardsentropy/oil-storage-tanks

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

  • large_images: 這是一個文件夾,包含100個衛星原始圖像,每個大小為4800x4800。所有圖像都以id_large.jpg格式命名。
  • Image_patches: Image_patches目錄包含從大圖像生成的512x512大小的子圖。每個大的圖像被分割成100, 512x512大小的子圖,兩個軸上的子圖之間有37個像素的重疊。生成圖像子圖的程序以id_row_column.jpg格式命名
  • labels.json:它包含所有圖像的標籤。標籤存儲為字典列表,每個圖像對應一個字典。不包含任何浮頂罐的圖像將被標記為「skip」。邊界框標籤的格式為邊界框四個角的(x,y)坐標。
  • labels_coco.json: 它包含與前一個文件相同的標籤,轉換為COCO標籤格式。在這裡,邊界框的格式為[x_min, y_min, width, height].
  • large_image_data.csv:它包含有關大型圖像文件的元數據,包括每個圖像的中心坐標和海拔高度。

評估指標:

對於儲油罐的檢測,我們將使用每種儲油罐的平均精度(Average Precision,AP)和各種儲油罐的mAP(Mean Average Precision,平均精度)。浮頂罐的估計容積沒有度量標準。

mAP 是目標檢測模型的標準評估指標。mAP 的詳細說明可以在下面的youtube播放列表中找到

https://www.youtube.com/watch?list=PL1GQaVhO4f_jE5pnXU_Q4MSrIQx4wpFLM&v=e4G9H18VYmA

2.現有方法

Karl Keyer [1]在他的存儲庫中使用RetinaNet來完成儲油罐探測任務。他從頭開始創建模型,並將生成的錨框應用於該數據集。這使得浮頂罐的平均精度(AP)達到76.3%。然後他應用陰影增強和像素閾值法來計算它的體積。

據我所知,這是網際網路上唯一可用的方法。

3.相關研究工作

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

這篇文章提出了一種基於衛星圖像的油罐容量/容積估算方法。為了計算一個儲油罐的總容積,他們需要儲油罐的高度和半徑。為了計算高度,他們使用了與投影陰影長度的幾何關係。但是計算陰影的長度並不容易。為了突出陰影使用HSV(即色調飽和度值)顏色空間,因為通常陰影在HSV顏色空間中具有高飽和度。然後採用基於亞像素細分定位(sub-pixel subdivision positioning)的中值法計算陰影長度。最後利用Hough變換算法得到油罐半徑。

在本文的相關工作中,提出了基於衛星圖像的建築物高度計算方法。

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

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

本博客作者為TankerTracker.com。其中一項服務是利用衛星圖像跟蹤幾個感興趣的地理位置關注點的原油儲存情況。

在這篇博客中,他們詳細描述了儲油罐的外部和內部陰影如何幫助我們估計其中的石油含量。還比較了衛星在特定時間和一個月後拍攝的圖像,顯示了一個月來儲油罐的變化。這個博客給了我們一個直觀的知識,即如何估計量。

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

本文介紹了對象檢測初學者頭腦中出現的最令人困惑的概念。首先,描述了目標分類、目標定位、目標識別和目標檢測之間的區別。然後討論了一些最新的深度學習算法來展開目標識別任務。

對象分類是指將標籤分配給包含單個對象的圖像。而對象定位是指在圖像中的一個或多個對象周圍繪製一個邊界框。目標檢測任務結合了目標分類和定位。這意味著這是一個更具挑戰性/複雜的任務,首先通過本地化技術在感興趣對象(OI)周圍繪製一個邊界框,然後藉助分類為每個OI分配一個標籤。目標識別只是上述所有任務的集合(即分類、定位和檢測)。

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

Selective Search for Object Recognition [5]:

在目標檢測任務中,最關鍵的部分是目標定位,因為目標分類是在此基礎上進行的。該分類依賴於定位所提出的感興趣區域(簡稱區域建議)。更完美的定位將導致更完美的目標檢測。選擇性搜索是一種新興的算法,在一些物體識別模型中被用於物體定位,如R-CNN和Fast-R-CNN。

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

Region Proposal Network — A detailed view[6]:

RPN(Region-proposition Network)由於其比傳統的選擇性搜索算法更快而被廣泛地應用於目標定位。它從特徵地圖中學習目標的最佳位置,就像CNN從特徵圖中學習分類一樣。

它負責三個主要任務,首先生成錨定框(每個特徵映射點生成9個不同形狀的錨定框),然後將每個錨定框分類為前景或背景(即是否包含對象),最後學習錨定框的形狀偏移量以使其適合對象。

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

Faster R-CNN模型解決了前兩個相關模型(R-CNN和Fast R-CNN)的所有問題,並使用RPN作為區域建議生成器。它的架構與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

這個模型在對象檢測模型列表中佔據首位的原因有很多。然而,最主要的原因是它的牢固性。它的推理時間非常短,這就是為什麼它很容易匹配視頻的正常速度(即25fps)並應用於實時數據的原因。

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

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

是什麼讓YoloV3比Yolov2更好。

  • 如果你仔細看一下yolov2論文的標題,那就是「YOLO9000: Better, Faster, Stronger」。yolov3比yolov2好得多嗎?好吧,答案是肯定的,它更好,但不是更快更強,因為體系的複雜性增加了。
  • Yolov2使用了19層DarkNet架構,沒有任何殘差塊、skip連接和上採樣,因此它很難檢測到小對象。然而,在Yolov3中,這些特性被添加,並且使用了在Imagenet上訓練的53層DarkNet網絡。除此之外,還堆積了53個卷積層,形成了106個卷積層結構。

  • Yolov3在三種不同的尺度上進行預測,首先是大對象的13X13網格,其次是中等對象的26X26網格,最後是小對象的52X52網格。
  • YoloV3總共使用9個錨箱,每個標度3個。用K均值聚類法選出最佳錨盒。
  • Yolov3現在對圖像中檢測到的對象執行多標籤分類。通過logistic回歸預測對象置信度和類預測。

5.我們的貢獻

我們的問題陳述包括兩個任務,第一個是浮頂罐的檢測,另一個是陰影的提取和已識別罐容積的估計。第一個任務是基於目標檢測,第二個任務是基於計算機視覺技術。讓我們描述一下解決每個任務的方法。

儲罐檢測:

我們的目標是估算浮頂罐的容積。我們可以為一個類建立目標檢測模型,但是為了減少一個模型與另一種儲油罐(即其他類型儲油罐)的混淆,並使其具有魯棒性,我們提出了三個類別的目標檢測模型。使用帶有轉移學習的YoloV3進行目標檢測是因為它更容易在機器上訓練。此外,為了提高度量分值,還採用了數據增強的方法。

陰影提取和體積估計:

陰影提取涉及許多計算機視覺技術。由於RGB顏色方案對陰影不敏感,必須先將其轉換成HSV和LAB顏色空間。我們使用(l1+l3)/(V+1) (其中l1是LAB顏色空間的第一個通道值)的比值圖像來增強陰影部分。

然後,通過閾值0.5×t1+0.4×t2(其中t1是最小像素值,t2是平均值)來過濾增強圖像。然後對閾值圖像進行形態學處理(即去除噪聲、清晰輪廓等)。

最後,提取出兩個儲油罐的陰影輪廓,然後根據上述公式估算出所佔用的體積。這些想法摘自以下Notebook。

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

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

讓我們從數據集的探索性數據分析EDA開始!!

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

探索Labels.json文件:

json_labels = json.load(open(os.path.join('data','labels.json')))print('Number of Images: ',len(json_labels))json_labels[25:30]

所有的標籤都存儲在字典列表中。總共有10萬張圖片。不包含任何儲罐的圖像將標記為Skip,而包含儲罐的圖像將標記為tank、tank Cluster或Floating Head tank。每個tank對象都有字典格式的四個角點的邊界框坐標。

計數:

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

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

探索labels_coco.json文件:

json_labels_coco = json.load(open(os.path.join('data','labels_coco.json')))print('Number of Floating tanks: ',len(json_labels_coco['annotations']))no_unique_img_id = set()for ann in json_labels_coco['annotations']: no_unique_img_id.add(ann['image_id'])print('Number of Images that contains Floating head tank: ', len(no_unique_img_id))json_labels_coco['annotations'][:8]

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

列印邊界框:

儲油罐有三種:

Tank(T 油罐)

Tank Cluster(TC 油罐組),

Floating Head Tank(FHT,浮頂罐)

7.數據擴充

在EDA中,人們觀察到10000幅圖像中有8171幅是無用的,因為它們不包含任何對象。此外,1595個圖像包含至少一個浮頂罐對象。眾所周知,所有的深度學習模型都需要大量的數據,沒有足夠的數據會導致性能的下降。

因此,我們先進行數據擴充,然後將獲得的擴充數據擬合到Yolov3目標檢測模型中。

8.數據預處理、擴充和TFRecords

數據預處理:

觀察到對象的注釋以Jason格式給出,其中有4個角點。首先,從這些角點提取左上角點和右下角點。接下來,屬於單個圖像的所有注釋及其對應的標籤都保存在CSV文件的一行列表中。

從角點提取左上角點和右下角點的代碼

def conv_bbox(box_dict): """ input: box_dict-> 字典中有4個角點 Function: 獲取左上方和右下方的點 output: tuple(ymin, xmin, ymax, xmax) """ xs = np.array(list(set([i['x'] for i in box_dict]))) ys = np.array(list(set([i['y'] for i in box_dict]))) x_min = xs.min() x_max = xs.max() y_min = ys.min() y_max = ys.max() return y_min, x_min, y_max, x_max

CSV文件將如下所示

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

# 訓練和測試劃分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

數據擴充:

我們知道目標檢測需要大量的數據,但是我們只有1645幅圖像用於訓練,這是非常少的。為了增加數據,我們必須執行數據擴充。在此過程中,通過翻轉和旋轉原始圖像生成新圖像。我們轉到下面的GitHub存儲庫,從中提取代碼進行擴充

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

通過執行以下操作從單個原始圖像生成7個新圖像:

  1. 水平翻轉
  2. 旋轉90度
  3. 旋轉180度
  4. 旋轉270度
  5. 水平翻轉和90度旋轉
  6. 水平翻轉和180度旋轉
  7. 水平翻轉和270度旋轉

示例如下所示

TFRecords:

TFRecords是TensorFlow自己的二進位存儲格式。當數據集太大時,它通常很有用。它以二進位格式存儲數據,並對訓練模型的性能產生顯著影響。二進位數據複製所需的時間更少,而且由於在訓練時只加載了一個batch數據,所以佔用的空間也更少。你可以在下面的博客中找到它的詳細描述。

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

我們的數據集已轉換成RFRecords格式。沒有必要執行此任務,因為我們的數據集不是很大。然而,這是為了知識的目的。如果你感興趣,可以在我的GitHub存儲庫中找到代碼。

9.基於YoloV3的目標檢測

訓練:

為了訓練yolov3模型,採用了遷移學習。第一步包括加載DarkNet網絡的權重,並在訓練期間凍結它以保持權重不變。

def create_model(): tf.keras.backend.clear_session() pret_model = YoloV3(size, channels, classes=80) load_darknet_weights(pret_model, 'Pretrained_Model/yolov3.weights') print('\nPretrained Weight Loaded') model = YoloV3(size, channels, classes=3) model.get_layer('yolo_darknet').set_weights( pret_model.get_layer('yolo_darknet').get_weights()) print('Yolo DarkNet weight loaded') freeze_all(model.get_layer('yolo_darknet')) print('Frozen DarkNet layers') return modelmodel = create_model()model.summary()

我們使用adam優化器(初始學習率=0.001)來訓練我們的模型,並根據epoch應用餘弦衰減來降低學習速率。在訓練過程中使用模型檢查點保存最佳權重,訓練結束後保存最後一個權重。

tf.keras.backend.clear_session() epochs = 100learning_rate=1e-3optimizer = get_optimizer( optim_type = 'adam', learning_rate=1e-3, decay_type='cosine', decay_steps=10*600 )loss = [YoloLoss(yolo_anchors[mask], classes=3) for mask in yolo_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 $logdirtensorboard_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')

損失函數:

YOLO損失函數:

Yolov3模型訓練中所用的損失函數相當複雜。Yolo在三個不同的尺度上計算三個不同的損失,並對反向傳播進行總結(正如你在上面的代碼單元中看到的,最終損失是三個不同損失的列表)。每個loss都通過4個子函數計算定位損失和分類損失。

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

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

Yolov2中的最後三項是平方誤差,而在Yolov3中,它們被交叉熵誤差項所取代。換句話說,Yolov3中的對象置信度和類預測現在通過logistic回歸進行預測。

看看Yolov3損失函數的實現

def YoloLoss(anchors, classes=3, ignore_thresh=0.5): def yolo_loss(y_true, y_pred): # 1. 轉換所有預測輸出 # 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,y of last channel pred_wh = pred_xywh[..., 2:4] #w,h of last channel # 2. 轉換所有真實輸出 # 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) #轉換 x1, y1, x2, y2 to x, 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] # 小盒子要更高權重 #shape-> (batch_size, grid, grid, anchors) box_loss_scale = 2 - true_wh[..., 0] * true_wh[..., 1] # 3. 對pred box方程反向 # 把 (bx, by, bw, bh) 變為 (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是0, 用錨點劃分可能導致inf或nan 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. 計算所有掩碼 #從張量的形狀中去除尺寸為1的維度。 #obj_mask: (batch_size, grid, grid, anchors) obj_mask = tf.squeeze(true_obj, -1) #當iou超過臨界值時,忽略假正例 #best_iou: (batch_size, grid, grid, anchors) best_iou = tf.map_fn( lambda x: 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 < ignore_thresh, tf.float32) # 5.計算所有損失 xy_loss = obj_mask * box_loss_scale * \ tf.reduce_sum(tf.square(true_xy - pred_xy), axis=-1) wh_loss = obj_mask * box_loss_scale * \ tf.reduce_sum(tf.square(true_wh - pred_wh), axis=-1) obj_loss = binary_crossentropy(true_obj, pred_obj) obj_loss = obj_mask * obj_loss + \ (1 - obj_mask) * ignore_mask * obj_loss #TODO:使用binary_crossentropy代替 class_loss = obj_mask * sparse_categorical_crossentropy( true_class_idx, pred_class) # 6. 在(batch, gridx, gridy, anchors)求和得到 => (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)) return xy_loss + wh_loss + obj_loss + class_loss return yolo_loss

分數:

為了評估我們的模型,我們使用了AP和mAP評估訓練和測試數據

測試集分數

get_mAP(model, 'data/test.csv')

訓練集分數

get_mAP(model, 'data/train.csv')

推理

讓我們看看這個模型是如何執行的

10.儲量估算

體積估算是本案例研究的最終結果。沒有評估估計容積的標準。然而,我們試圖找到圖像的最佳閾值像素值,以便能夠在很大程度上檢測陰影區域(通過計算像素數)。

我們將使用衛星拍攝到的4800X4800形狀的大圖像,並將其分割成100個512x512的子圖,兩個軸上的子圖之間重疊37像素。圖像修補程序在id_row_column.jpg命名。

每個生成的子圖的預測都將存儲在一個CSV文件中。接下來,估計每個浮頂儲油罐的體積(代碼和解釋以Notebook格式在我的GitHub存儲庫中提供)。

最後,將所有的圖像塊和邊界框與標籤合併,輸出估計的體積,形成一個大的圖像。你可以看看下面的例子:

11.結果

測試集上浮頂罐的AP分數為0.874,訓練集上的AP分數為0.942。

12.結論

  • 只需有限的圖像就可以得到相當好的結果。
  • 數據擴充工作得很到位。
  • 在本例中,與RetinaNet模型的現有方法相比,yolov3表現得很好。

13.今後的工作

  • 浮頂罐的AP值為87.4%,得分較高。然而,我們可以嘗試在更大程度上提高分數。
  • 我們將嘗試生成的更多數據來訓練這個模型。
  • 我們將嘗試訓練另一個更精確的模型,如yolov4,yolov5(非官方)。

14.參考引用

[1] Oil-Tank-Volume-Estimation, by Karl Heyer, Nov 2019. (https://github.com/kheyer/Oil-Tank-Volume-Estimation)

[2] Estimating the Volume of Oil Tanks Based on High-Resolution Remote Sensing Images by Tong Wang, Ying Li, Shengtao Yu, and Yu Liu, April 2019.(https://www.researchgate.net/publication/332193936_Estimating_the_Volume_of_Oil_Tanks_Based_on_High-Resolution_Remote_Sensing_Images)

[3] A Beginner’s Guide To Calculating Oil Storage Tank Occupancy With Help Of Satellite Imagery by TankerTrackers.com, Sep 2017.(https://medium.com/planet-stories/a-beginners-guide-to-calculating-oil-storage-tank-occupancy-with-help-of-satellite-imagery-e8f387200178)

[4] A Gentle Introduction to Object Recognition With Deep Learning by https://machinelearningmastery.com/, May 2019.(https://machinelearningmastery.com/object-recognition-with-deep-learning/)

[5] Selective Search for Object Recognition by J.R.R. Uijlings at el. 2012(http://www.huppelen.nl/publications/selectiveSearchDraft.pdf)

[6] Region Proposal Network — A detailed view by Sambasivarao. K, Dec 2019(https://towardsdatascience.com/region-proposal-network-a-detailed-view-1305c7875853)

[7] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks by Ross Girshick et al. Jan 2016.(https://arxiv.org/abs/1506.01497)

[8] Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3 by Joseph Redmon, 2015–2018 (https://arxiv.org/abs/1506.02640,https://arxiv.org/abs/1612.08242,https://arxiv.org/abs/1804.02767)

相關焦點

  • 使用Google Colab上的PyTorch YOLOv3
    開始谷歌Colab地址:https://colab.research.google.com/github/vindruid/yolov3-in-colab/blob/master/yolov3_video.ipynb。yolo的git倉庫:https://github.com/ultralytics/yolov3。
  • 基於小波變換的圖像壓縮算法改進研究
    但是,隨著多媒體和網絡技術的快速發展和深入應用,海量的圖像信息與有限的存儲容量、有限的處理能力以及有限的網絡帶寬之間的矛盾日益突出。因此,圖像壓縮是必不可少的,同時,也已經成為了研究熱點。研究主要集中在兩個方向,一是通過減少各類冗餘信息以實現圖像壓縮;二是根據圖像數據分布情況及其出現頻率,確定合適的編碼方式,減少每個數據所佔的比特數,從而實現圖像壓縮。
  • 南極科考與氣候研究的一大突破!研究人員:從企鵝大便的衛星圖像...
    研究人員:從企鵝大便的衛星圖像看出端倪  Evelyn Zhang • 2018-12-25 08:20:10 來源:前瞻網
  • [圖像處理] 深圳供電局 謝有慶 等:基於分數階微分的電力系統有霧圖像增強研究
    基於分數階微分的電力系統有霧圖像增強研究謝有慶,何濤,邱捷(深圳供電局有限公司,廣東深圳518000)摘  要:電力系統監控視頻有霧圖像增強研究能有效縮短霧天電力系統故障發生因素查找時間和大幅提升可視化工程管控的效率,為此提出一種基於大氣散射分數階微分的自適應暗通道先驗有霧圖像增強算法。
  • 基於小波變換的視頻圖像壓縮算法研究
    l 引 言 隨著網絡和多媒體技術的迅速發展,特別是3G技術的逐漸普及,多媒體信息特別是視頻圖像信息將越來越豐富。對數據量龐大的視頻圖像信息進行壓縮是非常必要的,因此視頻圖像的壓縮也一直吸引著廣大研究者進行不斷深入的探索。
  • NVIDIA確認430.39驅動導致CPU佔用率過高:正著手修復
    不過,近日,有NVIDIA社區用戶反饋,該驅動會導致CPU佔用率過高,主要原因是NVContainer導致。隨後,NVIDIA官方也確認了此事,並表示正在著手修復。有Reddit用戶表示,安裝完430.39驅動之後,NVContainer進程的CPU佔用率始終在15-20%,只能先回滾到之前的驅動版本,等NV修復。
  • 宇宙人(585期)冰眼發布25釐米雷達圖像;疫情中太空飛行器遠程操控走紅;「快舟·傳祺GS4號」運載火箭即將發射「行雲·武漢號」衛星
    「快舟·傳祺GS4號」運載火箭即將發射「行雲·武漢號」衛星3月29日,航天三江快舟火箭行雲衛星聯合試驗隊分批全部抵達酒泉衛星發射中心,隨後將對一枚「武漢產」快舟一號甲固體運載火箭進行總裝測試,擬於4月中下旬將「武漢產」「行雲·武漢號」衛星送上太空。
  • Windows 10再遇尷尬:Cortana進程CPU佔用率高達40%
    不過部分用戶反饋稱在安裝該累積更新之後出現了CPU佔用率過高的問題,降低了系統的整體性能,罪魁禍首可能就是Cortana。Build 189362.329修復了大量內容,包括修復了阻止部分遊戲利用Spatial Audio的能力以及使用觸摸選擇文本輸入框時無法提供光標的問題。
  • 風雲一號系列衛星首幅圖像
    風雲一號A星首幅圖像。風雲一號A星1988年9月7日發射,國務院、中央軍委發賀電慶祝髮射成功。這標誌著我國航天和氣象衛星技術有了新的進步。風雲一號B星首幅圖像。風雲一號B星1990年9月3日發射成功。A、B衛星為試驗衛星。
  • 上柴股份柴油發電機組-儲油罐安裝標準是什麼
    安裝柴油發電機組儲油罐時,應嚴格遵守以下原則:1、儲油罐應存放在安全和防火的地點,油罐或油桶應分別放置在可見或專用儲油區,適當遠離柴油發電機,嚴禁吸菸。2、油箱內的燃料容量須確保每日供應。
  • 埋在加油站地下的儲油罐,怎麼防止洩露事故?看完這些你就知道了
    埋在加油站地下的儲油罐,怎麼防止洩露事故?看完這些你就知道了石油是當代社會發展必不可少的一種資源,缺少這類珍貴的資源,汽車是無法正常上路行駛,而石油經過開採加工後,很快就要被運送往各大城市的加油站內,來給汽車供給燃料。
  • 基於圖像的高通量表型分析方法在扁豆耐鹽性研究中的發展與應用
    基於圖像的高通量表型技術的最新進展為植物篩選一系列脅迫(如鹽脅迫)提供了前所未有的機會。本文介紹了一種用於小扁豆耐鹽性篩選的高通量表型方法的發展和應用。耐鹽小扁豆材料(從左到右)在施鹽後兩周成像的綠色和非綠色變化
  • 通訊:廢棄儲油罐的華麗變身——記韓國首爾麻浦儲油基地改造工程
    新華社首爾11月6日電通訊:廢棄儲油罐的華麗變身——記韓國首爾麻浦儲油基地改造工程新華社記者 陸睿 姚琪琳韓國首爾麻浦區的梅峰山腳下,錯落有致地分布著5個大小各異的儲油罐。這些儲油罐曾被政府列為一級保護設施,在過去41年裡禁止市民靠近。
  • 基於提升小波變換的模糊圖像融合算法研究
    引言 圖像融合指綜合和提取兩個或多個圖像的信息,從而獲得對同一場景或目標更為準確、全面和可靠的圖像,使其更加適合人眼感知或計算機後續處理。
  • 【源碼】基於二維圖像的多孔介質二維/三維比表面積研究
    基於二維圖像的多孔介質二維/三維比表面積研究多孔介質的比表面有兩種不同的定義:1.
  • 一種基於人工智慧的腦圖像處理方法
    打開APP 一種基於人工智慧的腦圖像處理方法 MedPeer 發表於 2019-10-22 16:41:57 (文章來源:MedPeer
  • 基於DSP集成開發環境CCS2.2的指紋圖像預處理的應用研究
    基於DSP集成開發環境CCS2.2的指紋圖像預處理的應用研究 趙慧民 , 朱立 發表於 2020-12-01 10:47:00 利用生物認證技術進行個人身份鑑定,取代傳統的使用鑰匙
  • 衛星圖像提供了一種新的棲息地檢測方式
    ——衛星圖像,它可以通過算法來運行對地球的俯視快照,以便「識別和量化土地覆蓋變化和棲息地喪失狀況」,這使「系統的保護監測」成為可能。自然資源保護主義者和其他關心生物多樣性的保護人士已經開始利用衛星圖像來尋找新的研究區域,如估測無管制的捕魚活動、繪製全球森林損失地圖、定位海洋中的塑料廢物並請人們注意某些特定棲息地的破壞案例,但能夠有效掃描關注領域並觀察變化的工具並不多。目前缺乏可靠的、廣泛的監測有幾個相關的影響。例如,研究人員不知道當前棲息地退化的程度,現有保護措施得不到有效執行等等。
  • 容積捕獲 —— 高水準的現實主義
    Intel公司在2017年就宣布與特納體育(Turner Sports)建立合作夥伴關係,將虛擬實境和容積捕獲技術帶入了NBA。此後,隨著體育和娛樂領域對容積拍攝視頻的需求越來越多,容積捕獲視頻的主要玩家們(包括Microsoft、Intel、Facebook等)紛紛與體育俱樂部合作,向客戶提供最新的交互式產品。
  • 衛星圖像與計算機深度學習發現:撒哈拉沙漠地區大約有18億顆樹
    撒哈拉沙漠大約有18億顆樹乍看之下,西非撒哈拉和薩赫勒沙漠看似貧瘠的地區幾乎沒有什麼綠色植物,但衛星圖像與計算機深度學習卻揭示了一幅不同的畫面在樹木充足的地區,即使是在低解析度下,厚厚的生長叢也會比較清晰地出現在衛星圖像中,並且很容易與裸露的土地區分開來。但在比較分散的地方,衛星圖像的解析度太低,無法挑出單個樹木甚至小叢樹林。現在已經有了更高解析度的圖像,但即便如此,問題依然存在:計算單個樹木,尤其是在廣大地區,幾乎是一項不可能完成的任務。