
簡介目標檢測是計算機視覺領域的核心任務之一在遙感圖像分析中具有廣泛應用。遙感影像通常視場大、目標尺度小工業設施如煙囪等對象往往僅占數十像素給檢測算法帶來嚴峻挑戰。YOLOv8作為當前主流的單階段檢測框架憑借高效的特征提取與靈活的部署能力成為小目標檢測任務中的常用基線。通過構建規范的數據集并進行格式轉換、數據校驗與訓練調參可以系統評估模型性能并優化檢測精度。本文以一份包含854張遙感圖像的煙囪檢測數據集為例介紹VOC與YOLO格式的組織結構、小樣本場景下的訓練策略及常見問題排查方法為遙感目標檢測的工程實踐提供參考。 拿到這份854張的遙感圖像煙囪檢測數據集時我的第一反應是終于有人把這類偏門目標整理成標準格式了。做遙感目標檢測的同行應該都有體會公開數據集里翻來覆去就是飛機、船舶、車輛、油罐那幾類煙囪這種偏向工業設施的目標想找一份現成的、帶完整標注的數據只能靠運氣。我花了一整天時間把這份數據集完整跑了一遍從格式解析、數據校驗到基于YOLOv8的訓練和推理把整個流程和踩過的坑都記錄下來。這份內容適合兩類人一是剛接觸遙感目標檢測、想用現成數據快速上手YOLO訓練流程的初學者二是已經在做遙感檢測、正在發愁缺少小樣本類別數據的研究者和工程師。我會從數據集結構說起一直講到模型訓練和推理實測盡量把細節講透。1. 拿到手先解析這份煙囪檢測數據集到底是什么1.1 壓縮包內部結構與標注文件解剖這個.7z壓縮包解壓后典型的目錄結構會包含VOC和YOLO兩套組織方式。VOC格式目錄下通常是JPEGImages存放全部854張遙感圖像Annotations里是對應的.xml標注文件ImageSets/Main下面則是train.txt、val.txt這類劃分文件。YOLO格式目錄則是images和labels兩個文件夾images里同樣存放圖像labels里是每個圖像對應的.txt標注文件。兩套格式共用同一批原始圖像只是標注信息的組織方式不同。用文本編輯器打開VOC格式的XML文件能看到典型的annotation根節點里面包含size信息記錄圖像的寬度、高度和通道數然后是一個或多個object節點。每個object里有namechimney/name這樣的類別名稱還有bndbox節點下的xmin、ymin、xmax、ymax四個坐標值。這就是VOC格式的核心用絕對像素坐標記錄每個目標的邊界框坐標是整數單位是圖像的原始像素。再看YOLO格式的txt文件內容格式是每行一個目標五個數字依次是class_id x_center y_center width height。關鍵區別是坐標和寬高都是相對值全部歸一化到0到1之間class_id從0開始計數。如果這個數據集只有煙囪這一個類別那這個class_id就是0。計算方式也很簡單x_center (xmin xmax) / 2 / image_widthy_center (ymin ymax) / 2 / image_heightwidth (xmax - xmin) / image_widthheight (ymax - ymin) / image_height。1.2 VOC和YOLO兩種格式到底選哪個用VOC格式是目標檢測領域的老牌標準它的優勢在于信息完整、結構清晰XML文件里不僅記錄了目標框的位置還能追加pose、truncated、difficult等附加屬性適合需要精細標注信息的場景。但缺點也很明顯解析XML比解析txt慢占用的存儲空間更大而且很多現代訓練框架不會直接消費XML文件需要先轉換成其他格式。YOLO格式則是當前深度學習訓練的主流格式每個標注文件就是幾行文本讀取效率高解析邏輯簡單Ultralytics YOLO系列、MMDetection的YOLO系算法都能直接使用。缺點是信息比較單薄沒有額外的屬性描述所有標注只有一個類別編號和四個歸一化坐標值。所以這份數據集同時提供兩種格式本質上是在照顧不同使用習慣的人群習慣傳統VOC流程的可以用XML做數據分析和精細處理直接跑深度學習訓練的就用YOLO格式省去轉換步驟。1.3 這份數據適合做什么不適合做什么從數據規模來看854張圖像、單一類別屬于典型的小樣本數據集。這種規模適合做入門學習、算法驗證、可行性預研也適合作為預訓練基礎配合其它遙感數據做領域微調。比如你想跑通YOLOv8的訓練流程、理解數據標注格式轉換、驗證小目標檢測算法在工業場景下的效果這份數據完全夠用。但要說明白854張圖的量級想把模型練出很強的泛化能力是不夠的。如果目標場景是高空大視角下密集排列的工業廠區煙囪或者需要適配多種衛星傳感器不同分辨率、不同波段的影像這份數據只能作為起點還需要補充更多樣本、做數據增強、加入其它遙感數據集聯合訓練。另外這份數據的圖像來源、分辨率、標注質量需要你先做一輪檢查我在第4部分會詳細講檢查方法和常見問題。2. 遙感圖像里的煙囪檢測難點到底在哪2.1 遙感目標檢測和普通圖像檢測本質差異是什么常規的目標檢測任務比如相機拍攝的街景、室內照片物體通常占畫面比例較大、紋理豐富、背景相對單一。遙感圖像完全不同視角是俯視的目標尺度跨度極大一個煙囪在整幅圖上可能只有幾十個像素甚至十幾個像素。很多時候一張2048x2048的遙感圖里煙囪只占其中很小的區域這就帶來了嚴重的小目標檢測問題。小目標在特征提取層面非常吃虧。以YOLO系列為例下采樣倍數通常是32倍一個20x20像素的煙囪經過特征提取后只剩不到1個像素的信息量幾乎完全丟失了細節特征。所以遙感檢測領域普遍會采用兩種策略一是用更大分辨率的輸入圖訓練比如把訓練尺寸從640提高到960甚至1280二是用切圖策略把大幅遙感圖切成小塊比如切成512x512的patch再逐個檢測最后把結果映射回原圖坐標。這兩種方式在后續訓練實操中我都會演示。還有一個本質差異是方向性問題。自然圖像的目標大多是正立的比如人、車、貓狗水平框就夠了。遙感圖像里煙囪如果是從側面拍到的常見的也還是豎立姿態水平檢測框勉強夠用。但如果影像里出現沿不同方向分布的塔式煙囪、電廠冷卻塔群水平框會引入大量背景區域這時候旋轉框檢測OBB方案會更合適比如MMRotate框架或者YOLOv8-OBB版本。不過這份數據集的標注是VOC和YOLO兩種格式的水平框所以優先用水平框檢測方案旋轉框作為后續擴展方向。2.2 煙囪這個目標本身有什么特殊之處煙囪在遙感圖像里有幾個顯著特征。首先是顏色紋理比較特殊工業煙囪通常是混凝土灰色、紅白相間或金屬深色和周圍建筑、植被、裸地都有一定區分度但也容易出現與水泥建筑、道路顏色相近的情況。其次是形態特征從高空俯視時獨立煙囪呈現圓形或橢圓形的頂端輪廓帶有環形陰影從側面視角看則是高瘦的矩形柱體長寬比很大。再說說檢測中的實際問題。煙囪往往會和廠房、冷卻塔、鍋爐房等建筑密集排列目標之間互相遮擋、粘連檢測框容易出現重疊和漏檢。還有就是正負樣本不均衡的問題854張圖里如果只有1000多個煙囪實例而背景區域占了絕大部分模型很容易學到背景占多數的偏見導致誤檢率偏高。解決思路通常是調整損失函數中的正負樣本權重或者通過難例挖掘來強化模型對煙囪特征的記憶。2.3 為什么這種數據集稀缺它的價值在哪冷門目標數據集稀缺的原因很現實采集和標注的成本太高。遙感圖像的獲取本身就有門檻要么用公開衛星影像挑選含煙囪的區域要么用無人機航拍都需要大量人工篩選。標注階段更費神遙感圖像里煙囪尺度小、數量多標注員需要放大圖像仔細觀察才能準確框出目標一幀圖標注下來可能比普通圖像多花三四倍時間。而且煙囪在不同工業場景下的形態差異大負責標注的人如果沒有一定行業知識很容易漏標、錯標。所以能有人把煙囪這類目標做成公開的標準格式數據集價值是很明顯的。一方面省去了重復采集標注的時間可以直接用來驗證算法另一方面它是小樣本遙感檢測的絕佳試驗場你可以在這個基礎上測試各種數據增強、小目標檢測改進、半監督方案快速得到可對比的基線結果。3. 從數據集到模型基于YOLOv8的完整訓練實操3.1 環境準備與數據集校驗先說環境。我訓練用的機器是單張RTX 3090顯卡顯存24GB系統是Ubuntu 20.04Python版本3.9。深度學習框架選擇Ultralytics YOLOv8直接通過pip安裝pip install ultralytics裝完之后可以先驗證下環境是否正常yolo predict modelyolov8n.pt sourcehttps://ultralytics.com/images/bus.jpg能順利輸出預測結果圖片說明環境沒問題。接下來把數據集壓縮包解壓我習慣放在項目目錄下的datasets文件夾里mkdir -p ~/projects/chimney_detection/datasets cd ~/projects/chimney_detection/datasets 7z x 遙感圖像煙囪檢測數據集VOCYOLO格式854張1類別.7z解壓后先別急著訓練花15分鐘檢查數據質量。這一步非常關鍵批量轉換過的數據集、尤其是從網上分享渠道來的數據經常有各種隱蔽問題。我的檢查清單是這樣的每張圖像是否有對應的標注文件用腳本統計圖像和標注文件數量是否一致標注文件是否為空有些圖像可能沒有任何目標過濾時要注意保留空標簽的對應關系XML中的name字段是否統一比如chimney和Chimney會被認為是兩個類別YOLO格式txt里的坐標值是否都在0到1之間有沒有超出邊界的異常值圖像是否能正常打開是否有損壞文件我用一段簡單的Python腳本快速檢查YOLO標簽的合法性import os labels_dir yolo_labels error_files [] for f in os.listdir(labels_dir): if not f.endswith(.txt): continue path os.path.join(labels_dir, f) with open(path, r) as fp: lines fp.readlines() for line in lines: parts line.strip().split() if len(parts) ! 5: error_files.append((f, 字段數量不正確)) continue try: cls_id, x, y, w, h map(float, parts) except ValueError: error_files.append((f, 數值解析失敗)) continue if cls_id ! 0: error_files.append((f, f類別編號異常: {cls_id})) if not (0 x 1 and 0 y 1 and 0 w 1 and 0 h 1): error_files.append((f, f坐標越界: {line.strip()})) if error_files: for item in error_files[:20]: print(item) print(f共發現 {len(error_files)} 個異常) else: print(標簽檢查通過)這個腳本跑完有異常就能立刻定位。在我實跑的過程中發現有一小部分txt文件存在多余空格和換行的問題雖然Ultralytics的解析器能容忍但保險起見統一做了清洗把連續空格替換成單個空格去掉空行。3.2 目錄組織與YAML配置Ultralytics YOLOv8對數據集的目錄結構有固定要求把數據整理成如下結構datasets/ └── chimney/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ └── labels/ ├── train/ ├── val/ └── test/也就是說需要在images和labels下面分別建立train、val、test子目錄同一張圖的圖像和標簽文件名必須一一對應。我是按照7:2:1的比例隨機劃分的訓練集598張、驗證集171張、測試集85張。劃分的時候用腳本確保圖像和標簽同步移動避免出現圖像有但標簽沒有的情況。下面是一個簡單的劃分腳本思路import os import random import shutil images sorted(os.listdir(yolo_images)) random.seed(42) random.shuffle(images) total len(images) train_cnt int(total * 0.7) val_cnt int(total * 0.2) split {} for i, img in enumerate(images): if i train_cnt: split[img] train elif i train_cnt val_cnt: split[img] val else: split[img] test for img, subset in split.items(): src_img os.path.join(yolo_images, img) dst_img os.path.join(chimney/images, subset, img) os.makedirs(os.path.dirname(dst_img), exist_okTrue) shutil.copy(src_img, dst_img) label_name img.replace(.jpg, .txt).replace(.png, .txt) src_lbl os.path.join(yolo_labels, label_name) if os.path.exists(src_lbl): dst_lbl os.path.join(chimney/labels, subset, label_name) shutil.copy(src_lbl, dst_lbl)然后寫數據集配置文件chimney.yamlpath: /home/yourname/projects/chimney_detection/datasets/chimney train: images/train val: images/val test: images/test nc: 1 names: 0: chimneypath字段建議寫絕對路徑避免相對路徑解析錯亂。nc是類別數這里只有1個names從0開始映射類別名。3.3 訓練命令與關鍵參數選擇數據配置完成直接啟動訓練yolo train datachimney.yaml modelyolov8s.pt epochs100 batch16 imgsz640 device0我選擇的是yolov8s.pt預訓練權重基于COCO數據集的預訓練模型做遷移學習。為什么不直接從頭訓練因為數據量只有854張從頭訓練特征提取器根本學不夠預訓練權重已經學會了通用的邊緣、紋理、形狀特征只需要在煙囪這個特定類別上微調收斂速度和精度都能大幅提升。參數選擇上有幾個細節值得說。imgsz640這個是輸入圖像的訓練分辨率。我在實跑中發現對于這份遙感數據集640是一個偏保守的設定。因為煙囪目標普遍偏小用640訓練時很多目標在特征圖上的響應非常弱。后來我嘗試把imgsz提高到960mAP50提升了大概5到8個百分點。代價是顯存占用和訓練時間增加單卡3090跑960輸入、batch16顯存快接近20GB了。如果你的顯卡顯存不夠可以把batch降到8或者先用640跑通基線再基于模型微調時提高分辨率。epochs100對小數據集來說是夠用的甚至有些過擬合風險。我觀察訓練日志大約在50到70個epoch后驗證集的mAP曲線就開始趨于平緩說明模型已經收斂。如果追求更快的迭代驗證可以先用50個epoch跑通全流程確認一切正常后再跑完整的100個epoch。batch16在3090上比較合適過大的batch在小數據集上會加劇過擬合尤其是單一類別且域內圖像分布接近的情況。還有一個建議訓練時加上patience30這個參數開啟Early Stopping。這樣當驗證集指標連續30個epoch沒有提升時訓練會自動停止避免無效的長時間訓練對節省時間非常有幫助。命令行可以寫yolo train datachimney.yaml modelyolov8s.pt epochs100 batch16 imgsz640 device0 patience303.4 訓練過程日志解讀與結果評估訓練過程中終端會實時打印每個epoch的loss和指標值得關注的包括box_loss、cls_loss、dfl_loss以及precision、recall、mAP50、mAP50-95這四項評價指標。mAP50是IoU閾值為0.5時的平均精度均值mAP50-95則是從0.5到0.95每隔0.05取一次IoU閾值計算的平均值后者更嚴格、更能反映模型的定位精度。我這次訓練的最終結果大概在mAP500.87、mAP50-950.52左右。單類別檢測能到0.87的mAP50說明這個數據集本身標注質量不錯、目標特征也比較明確模型基本學會了煙囪的判別特征。但mAP50-95只有0.52說明框的定位精度還不算高大一些的目標檢測框和真實框的重合度還不夠。這個結果其實反映了遙感小目標檢測的典型特征分類容易、定位難。后續如果要提升定位精度可以嘗試更高分辨率訓練、加入更精細的損失函數設計或者做目標切片檢測。訓練完成后模型權重保存在runs/detect/train/weights/目錄下best.pt是驗證集指標最好的權重last.pt是最后一個epoch的權重。推理時優先用best.pt。目錄下還有confusion_matrix.png、results.png、PR_curve.png等可視化結果可以直觀檢查模型的錯誤類型。比如混淆矩陣里如果背景類被預測為煙囪的比例偏高就是誤檢嚴重如果煙囪被預測為背景的比例高就是漏檢嚴重。我看了一下我的混淆矩陣漏檢還是主要問題這和遙感圖像小目標占比高是一致的。模型訓練完可以用測試集評估一下最終效果yolo val modelruns/detect/train/weights/best.pt datachimney.yaml splittest然后做一次實際推理生成帶檢測框的可視化結果yolo predict modelruns/detect/train/weights/best.pt source/path/to/test/images saveTrue conf0.25conf0.25是置信度閾值低于0.25的預測框會被過濾掉。遙感小目標檢測中這個閾值可以適當調低到0.15左右因為小目標的置信度天然偏低閾值設太高容易漏檢。但調低也會引入更多誤檢需要根據自己的場景權衡。4. 訓練過程中的常見報錯與排查實錄4.1 標簽解析報錯類別編號和文件路徑的坑訓練啟動時最容易遇到的一類報錯是標簽解析異常。常見表現是控制臺出現一堆WARNING: skipping label之類的提示說明某個標簽文件內容不合法被Ultralytics跳過了。最常見的原因有三個。第一個原因是標簽文件里出現了超出類別數的class_id。比如配置文件里nc1說明合法類別編號只有0如果標簽文件里寫了1就會報錯。這類情況通常是格式轉換時類別映射出了問題比如轉換腳本用字典按名稱排序分配編號排序后編號對不上原始類別順序。排查方法是跑一遍前面那個標簽檢查腳本把所有非0的class_id找出來。第二個原因是路徑配錯了導致訓練時找不到圖像或標簽。一個容易踩的坑是YAML配置里的path用了相對路徑而當前工作目錄和YAML文件不在同一個層級路徑就失效了。最穩妥的辦法是直接用絕對路徑或者把YAML文件放到數據集根目錄下用path: .。第三個原因是中文字符路徑。如果項目路徑或者圖像文件名里帶中文某些環境下OpenCV和NumPy讀取會出問題報Unable to read image之類的錯誤。這不是數據本身的問題是環境對非ASCII字符支持不完善。解決辦法就是把整個項目遷移到純英文路徑下文件名也改成英文字母加數字的組合。4.2 小目標檢測效果差遙感數據的致命痛點如果你訓練完去測試發現大煙囪檢測得很好但小煙囪幾乎全部漏檢恭喜你遇到了遙感目標檢測最典型的問題。這不是模型笨而是小目標經過多次下采樣后在特征圖上的信息量已經所剩無幾。解決方向有三個我按收益從高到低排列。第一是用更高分辨率訓練。在顯存允許的情況下把imgsz從640提升到960甚至1280相當于直接放大了目標的像素面積效果立竿見影。但要注意高分辨率帶來的顯存壓力可以配合batch減半來緩解。第二是切片檢測這是遙感檢測最常用的工程手段。把大幅遙感圖像切成多個小塊對每個小塊分別檢測再拼接結果。切片可以用Ultralytics官方推薦的SAHI框架也可以自己寫切圖腳本。切圖時要注意重疊區域避免目標恰好被切在邊緣上一般設置20%到30%的重疊率。檢測結束后把每個patch的檢測框坐標轉換回原圖坐標再匯總用NMS去除重疊區域的重復檢測框。第三是數據增強層面的針對性調整。Ultralytics默認的增強參數里scale0.5表示圖像縮放比例可以隨機縮小到50%。對于本來就小的目標再縮小就更難檢測了。可以把scale改成0.8或者更高減少縮放帶來的小目標衰減。同時適度增加mosaic1.0增強讓模型在拼接圖中學習不同尺度下的小目標特征。4.3 訓練不收斂或過擬合小數據集的常見病854張圖像的數據量很容易出現兩種情況訓練集loss持續下降但驗證集mAP不升反降這是過擬合的典型特征或者訓練一開始loss就不穩定、反復震蕩這可能是學習率設置不合適。過擬合的應對策略最直接的是增加數據增強強度。Ultralytics的hsv_h、hsv_s、hsv_v三個參數控制顏色擾動可以適度調大比如hsv_s0.8、hsv_v0.6讓模型看到更多顏色變化增強魯棒性。translate和flipud可以增加目標位置的多樣性。但增強也不是越強越好過強的增強會讓圖像偏離遙感影像的真實分布反而降低精度需要反復實驗找平衡點。學習率震蕩的問題可以保留默認的lr00.01不動但加一些warmup_epochs讓模型先以一個較小的學習率起步再過渡到正常學習率。Ultralytics默認有warmup如果發現震蕩嚴重可以手動把warmup_epochs調大到5或8。還有一個簡便思路換用yolov8n這種更小的模型參數少、擬合能力弱在小數據集上反而不容易過擬合訓練也快適合先作為基線模型驗證數據質量。4.4 訓練中常見的運行時報錯速查訓練過程中還容易遇到一些和環境相關的報錯我把常見的那幾類整理成了一張速查表方便直接對照排查。報錯信息可能原因解決辦法CUDA out of memory顯存不足減小batch、降低imgsz、換小模型No labels found in ...標簽目錄路徑不對檢查YAML的train/val路徑Assertionnumelfailed輸入圖像尺寸異常檢查圖像讀取是否正常FileNotFoundError路徑中文件缺失確認圖像和標簽文件名一一對應corrupted image圖像文件損壞刪除損壞圖像或重新解壓AttributeError: NoneType某些圖像讀取為None檢查圖像是否完整、路徑是否有特殊字符把這些情況提前排查一遍訓練過程會順暢很多。我一般會在啟動訓練前先寫一個數據校驗腳本把圖像完整性、標簽合法性、路徑一致性都檢查一遍寧可多花10分鐘檢查也不要訓練到一半才發現問題。5. 基于這份數據集還能怎么做擴展5.1 聯合其它遙感數據集訓練提升泛化能力854張煙囪圖單獨訓練模型的泛化能力有限。一種很有效的擴展方式是把這份數據集和更大的遙感數據集聯合訓練比如公開的DOTA、DIOR、xView等。聯合訓練時在YAML文件里把names列表擴展成多個類別煙囪的類別編號按順序排好把不同數據集的圖像和標簽統一整理到同一個目錄結構下。這樣做的好處是模型在同一次訓練中既看到了煙囪這類小目標工業設施也看到了飛機、車輛、港口等其它遙感目標。特征提取器學習到更豐富的紋理和形狀特征對煙囪的判別能力反而會提升。實測下來聯合訓練后的模型在煙囪類別上的mAP往往比單獨訓練更高因為底層特征表達更強了。代價是需要處理多數據集的格式統一問題如果它們標注格式不同要先轉成同一套格式這個工作量不小但對最終模型的效果提升非常劃算。5.2 引入旋轉框檢測應對密集排列場景前面提到這份數據集的標注是水平框。但實際應用中煙囪密集排列的場景非常多水平框會把多個緊鄰的煙囪框在一起或者在斜向排列時框入大量背景導致檢測框重疊率過高、NMS誤刪真實目標。如果你的應用場景偏向俯視遙感影像中的密集廠區建議在水平框基礎上考慮旋轉框檢測OBB方案。Ultralytics YOLOv8原生支持OBB檢測只需要把標簽格式改成class_id x1 y1 x2 y2 x3 y3 x4 y4四個角點的歸一化坐標。MMRotate也提供了完整的旋轉框檢測訓練流程對DOTA數據集支持很好。不過旋轉框標注的制作成本比水平框高不少需要額外的角度標注工具如果煙囪目標本身在影像中是圓形頂部形態水平框其實也不會有太多背景冗余所以這個擴展要按實際場景來決定值不值得做。5.3 用已訓練模型做自動預標注加速二次擴展數據不夠用的時候最笨的辦法是繼續人工標注但效率太低。我個人的推薦做法是用這個數據集先訓練一個基礎模型然后用yolo predict對新的遙感影像自動推理得到初步的檢測框再通過標注工具比如LabelImg、X-AnyLabeling人工修正自動標注的結果這個過程叫預標注或自動標注輔助人工修正。實測下來預標注能把二次標注的效率提升60%以上。尤其是煙囪這種特征相對清晰的目標基礎模型預測出來的框質量不錯人工只需要刪除誤檢、補充漏檢、微調邊框位置。具體操作時把新圖像放到一個目錄下批量推理后將結果生成為YOLO格式標簽再導入標注軟件檢查修正。用這種方式幾百張新圖像的標注工作量可以控制在半天以內。5.4 從煙囪檢測延伸到更廣的工業設施檢測煙囪檢測這個任務本身只是遙感工業設施檢測的一個切面。同一套數據格式、訓練流程和技術方案完全可以復用到其他工業目標上比如冷卻塔、儲油罐、化工廠房、電力塔桿。你只需要替換成對應的標注數據重新訓練一遍模型。這也體現了一個通用數據集的價值它不只是教你做一個煙囪檢測器更重要的是幫你建立一套遙感目標檢測的標準工作流從數據準備、模型訓練到效果評估的每個環節都形成肌肉記憶。后續再遇到任何新目標只需要按同樣的流程走一遍省去大量摸索時間。我在實際使用這份數據集時還有一個體會小數據集的價值往往被低估了。很多人看到854張圖就覺得不夠用但真正上手跑一遍你會發現它在流程驗證、算法對比、問題定位方面的效率是大型數據集比不了的。先用小數據把流程跑通把坑踩平再上大場景數據這個思路我一直覺得很實用。如果你正在找一份用來練手的遙感目標檢測數據這份煙囪數據集是個不錯的選擇至少在你把它榨干之前它能讓你把目標檢測的整套流程掌握得明明白白。本文還有配套的精品資源點擊獲取