作者|Md. Mubasir
編譯|VK
來源|Towards Data Science

在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
以下是本博客目錄,我們會逐一探索,
目錄
-
問題陳述、資料集和評估指標
-
現有方法
-
相關研究作業
-
有用的博客和研究論文
-
我們的貢獻
-
探索性資料分析(EDA)
-
資料擴充
-
資料預處理、擴充和TFRecords
-
基于YoloV3的目標檢測
-
儲量估算
-
結果
-
結論
-
今后的作業
-
參考參考
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個新影像:
-
水平翻轉
-
旋轉90度
-
旋轉180度
-
旋轉270度
-
水平翻轉和90度旋轉
-
水平翻轉和180度旋轉
-
水平翻轉和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 model
model = create_model()
model.summary()

我們使用adam優化器(初始學習率=0.001)來訓練我們的模型,并根據epoch應用余弦衰減來降低學習速率,在訓練程序中使用模型檢查點保存最佳權重,訓練結束后保存最后一個權重,
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) 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 $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=https://www.cnblogs.com/panchuangai/p/valid_dataset)
model.save('Weights/Last_weight.hdf5')
損失函式:

YOLO損失函式:
Yolov3模型訓練中所用的損失函式相當復雜,Yolo在三個不同的尺度上計算三個不同的損失,并對反向傳播進行總結(正如你在上面的代碼單元中看到的,最終損失是三個不同損失的串列),每個loss都通過4個子函式計算定位損失和分類損失,
- 中心(x,y) 的MSE損失.
- 邊界框的寬度和高度的均方誤差(MSE)
- 邊界盒的二元交叉熵得分與無目標得分
- 邊界盒多類預測的二元交叉熵或稀疏范疇交叉熵
讓我們看看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)
原文鏈接:https://towardsdatascience.com/oil-storage-tanks-volume-occupancy-on-satellite-imagery-using-yolov3-3cf251362d9d
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方檔案:
http://sklearn123.com/
歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/143254.html
標籤:其他
上一篇:BLE中的廣播與掃描狀態
