光學遙感圖像典型目標檢測算法大賽全記錄

前言

       這是 2019.6~2019.08 期間進行的一次全色遙感圖像典型目標檢測的比賽,現將過程記錄於此。
       先說幾句題外話,之前一路這麼跌跌撞撞地摸爬滾打過來,光顧着學些基礎知識,看看論文、做做項目或者打打比賽。像猴子搬苞米,這一陣子學的目標檢測,打了這個比賽用了這個方法;下幾個月又開始搞 GAN,天天沉浸在生成器、對抗器和損失函數調來調去的世界裏;又過了些時候,大 boss 又大手一揮,這個項目裏面的圖像增強部分沒人做,你來幹,順便再把界面給搭起來… 這樣周而復始所造成的一個結果是,我把每一個任務都完成了,我的見識、閱歷、做事情的能力當然有所提升,可這些過程中實實在在的一些知識、實際應用時的技巧都有很大部分的遺忘掉了。
       所以說,及時總結和歸納是極其重要的一個環節,之前我許多時候有所疏忽,想着做完了就完成了。可後來慢慢我發現,其實每一次學習新的知識、遇見新的領域、看到新的算法、打的比賽和做的項目…等等這每一個過程中都藏着我提高的空間。而這些有很大一部分都需要事後的及時總結來提煉。
       我很感謝我養成了寫博客的習慣,在這裏我可以記錄下學術上成長起來的點點滴滴,有哪些知識遺忘了也可以及時回顧,而不是隻能“重頭再來”。
       這次是對我去年參加的一個哈工大和國防科技創新快速響應小組聯合舉辦的遙感圖像典型目標檢測的比賽的回顧,僅僅不到一年的時間,其實很多細節都已經模糊掉了。這算是我第一次參加這種比賽,而且全程都是我一個人在摸索,在比賽的那幾天就覺得我能順利做完得出結果就已經是了不起的了。但現在看來,很多地方都能做的更好,排名就算進不了前10,也不至於22名這麼低。

1. 分析數據及要求,選定模型

       因爲年代有點久遠,原比賽網站已經失聯,還好當時有在組會上做彙報,這裏就摘錄當年在 PPT 中的內容。

在這裏插入圖片描述
在這裏插入圖片描述
       先來分析數據,可以看到遙感圖像的數據格式是 TIFF 格式,且給的數據集是未標註過的。一般遙感圖像的數據集都會很大,且圖像分辨率很高,這次的也不例外,給的數據集是未公開的,有14個G, 分辨率達到 4096×4096,這裏就需要將這些數據集在標註後進行各種處理,我們放到後面說。
       目標類型有六類,分析和查看數據可以發現,檢測目標存在以下特點:

  1. 尺度差異較大。既有超過100×100的橋樑、操場,也有小於50×50的儲蓄罐、船隻,還有介於其間的飛機、碼頭。這裏就要求我們的算法對多尺度需求比較高,如果是用當前最流行的錨點框檢測的方法時,要注意錨點框的尺度大小表示;
  2. 飛機、操場和碼頭目標受拍攝方向影響較大。這些目標的長寬比往往較大,這要求我們如果採用水平框標註的話很容易出現bounding box不匹配的問題,這樣學習起來效果會比較差,特徵沒那麼明顯。但因爲賽組委給的最後的輸出格式是四點座標(Xmin, Ymin)(Xmax, Ymax)形式,所以我們不能採用傾斜座標標定,這樣就對標註時的精細度要求較高;
  3. 船隻目標較爲密集。且與碼頭目標有很多相互交疊的部分,並容易與海浪等干擾物混淆,背景複雜度很高,這就要求我們採用的算法魯棒性能要相對較好一些。

       綜上所述,再結合給定的評價標準只要求 map 值,不要求速度和召回率。選定 Faster R-CNN 作爲主要檢測模型。

2. 工作流程及部分細節

       因爲這個算是我第一次獨立完成一個比賽,很多流程一開始一臉懵逼,根本不知道要幹些什麼,渾渾噩噩浪費了1天之後決定把要做的大致內容定一個框架,然後按照各個時間點去完成,果然條理比以前清楚了許多。要做好一個項目,必要的前期調研和規劃也是極其重要的。

在這裏插入圖片描述

2.1 Demo及訓練問題

       其中跑通 demo 以及訓練的問題,大致可以參考 這兩個博客,好吧,我承認還是要早點總結,我記得當初也是走過好多坑,代碼也修改了不少地方的,結果當時做完一扔,現在啥也不記得了,一定要吸取教訓,及時總結:
       https://blog.csdn.net/qq_34116292/article/details/90715649
       https://blog.csdn.net/jcli1_14/article/details/81327047

2.2 標註及一些痛的領悟

       標註圖片採用的是 labelimg 的方式,這裏不得不提醒各位,標註前真的要了解清楚,你要標註的目標你真的瞭解嗎…這個項目中最痛苦的莫過於這個環節,真的是反反覆覆兩週的時間獻給標註了。因爲官方給的是原始數據,且沒有給例圖,這就導致了,你以爲你知道操場是什麼樣子?可是你看到的有四四方方的空地、正規帶跑道的操場、也圍成橢圓形的空地、還有各種奇奇怪怪的地方讓你頭疼這算不算空地;這倒罷了,畢竟操場那麼大,標註錯了再返工也不太費事,總共也沒幾個,可是當密密麻麻的船只需要標註呢?一開始官方是沒有給“潛在目標大於20×20”這句話的,然後我費勁兒的標了2天,就像下面這種圖,之後我突然看到有一張圖裏有個大船,疑似客輪或者軍艦的,我就在想,這也是船隻的話,都一起標註了,那訓練得訓練成啥樣啊,這特徵能把握到麼…於是我就給官方賽組委發郵件(好吧,我不得不吐槽一下這個賽組委是真的坑,沒有電話沒有qq沒有微信只有個郵箱,然後這個郵箱我發過去,一直沒有回覆過我,直到3天以後,我帶着疑惑又點開官方的規則,發現這個規則中加了上面那一句話…我相信,這個比賽這麼多研究所、科研院校、包括大公司參加的情況下,僅僅只有一個技術指標 map,到最終了第一名的精度是0.35,這個跟規則不說清楚,標註的混亂是有很大關係的!!!),除了船隻,還有到底什麼纔是儲蓄罐等等各種坑等着你來跳。

在這裏插入圖片描述       所以好端端的一個孩子究竟是怎麼瞎的…

       並且還有比賽規則中給出的數據質量已經給出幾何校正和輻射校正,一開始也是沒有的,然後我前期查的資料裏面說明了原始全色遙感圖像一定要經過這幾個校正,我特意費盡周折下了一個專門處理遙感圖像的軟件 Envi 來做,下好了,官方規則一更新,我傻了…

       真的,這次比賽給我最大的感受就是,以前總看段子說985院校畢業的高材生去標註公司當標註員啥啥啥的,現在才知道,你要做好一個標註,需要的不僅僅是眼力、與客戶的溝通能力,還要有一顆生死看淡的平常心…

       並且這裏學到一個要點,對於以後的工作學習,客戶或者boss給你說的話,你不知道的、模棱兩可似是而非的時候一定不要不懂裝懂,而是要問清楚到底是什麼,需求在哪裏,因爲很可能他們也會有疏漏,而他們的一點疏忽到你這裏,就反饋成了很多做的工作必須要返工

2.3 圖像預處理工作

       其實這裏還是比較複雜的,一些細節的處理記不太清了,因爲圖片格式是.tif, 且像素過大,無法正常打開,所以做了一下處理。

  1. 圖片編號按照項目提交結果的要求,處理格式如:2th/Result_122.tif;
  2. .tif格式處理爲.jpg;
  3. 建立VOC2007數據集格式,並後續進行格式轉換, VOC2007–>.csv–>.tfrecord;
  4. 將4096×4096的大圖裁剪爲多張800×800的圖片,爲避免目標出現在裁剪邊緣,裁剪邊緣按100×100的富餘留出。

3. 模型介紹

       模型採用的 Faster R-CNN,實現的代碼可以參考:
       https://blog.csdn.net/qq_34116292/article/details/90715649
       https://blog.csdn.net/jcli1_14/article/details/81327047

       論文之後我會發詳解~這裏先貼個圖

在這裏插入圖片描述

4. 部分成果顯示

  • 典型目標有效標註

在這裏插入圖片描述

  • .txt文本輸出
    在這裏插入圖片描述

5. 工作總結及改進措施

5.1 工作總結

       該項目對給定數據集進行了有效標註,成功將其檢測框的座標和置信度信息轉換爲規定的文本輸出格式。但標註的部分船隻、碼頭、橋樑目標位置信息存在漏標和錯標現象。且由提交的mAP結果顯示其精度未達到標準。初步判定是由於訓練時間不夠長、超參數的選擇不夠精確、選用模型中一些模塊存在較大誤差有待替換等多重因素導致的。

5.2 改進措施

5.2.1 非技術層面
  1. 對給定項目要求理解不透徹就匆忙動手,導致實際操作時多次返工浪費訓練和調參時間;
  2. 團隊多人同時進行圖片標註時未曾事先統一標準,導致一部分標註圖片無法使用;
  3. 寫圖片處理程序時不夠熟練,且代碼效率不高;
  4. 測試過程中在發送結果後應該爭分奪秒繼續訓練,導致由於訓練時間不足,mAP不夠;
5.2.2 技術層面
  1. Faster R-CNN 各個模塊的增添、更改(vgg16->ResNet/Inception系列 | FPN/FPG等多尺度模塊 | RoI Align層);
  2. 模型替換(YOLOV3、RetinaNet…)
  3. 訓練過程中應該使用TensorBoard觀察mAP曲線,及時發現拐點;
  4. 採用多模型算法融合決策進行處理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章