鯨尾識別獲獎方案總結

文章目錄

    • 1st solution(classification)
    • 2nd place code, end to end whale Identification model
    • 3rd place solution with code: ArcFace
    • 4th Place Solution: SIFT + Siamese
    • 5th solution blog post + code -Siamese
    • 7th place Pure Magic thanks Radek solution: classification
    • 9th place solution or how we spent last one and a half month
    • 10th Place Solution: Metric Learning, Classification, Siamese, LGBM
    • 15-th plcae solution: sphereface, image alignment and multi-layer fusion
    • 24th place solution
    • 25-th place solution: CosFace + ProtoNets
    • 31st place solution + source code

主要是學會常見方法的實踐,解決工程問題;掌握每種方案的流程及思想。

1st solution(classification)

原文
code

在這里插入圖片描述
在這里插入圖片描述
方法介紹:采用SENet154作為基礎模型,采用了PCB對local特征進行監督,對局部和全局特征進行triplet loss監督。作者認為沒有triplet loss,精度也能達到 0.96。分類分支把數據看做5004類和new_whale類。關鍵是增加了掩膜輸入,使用了兩種損失函數。

概述:
0.8->0.96->0.973
在一開始,我們使用softmax +固定閾值(看代碼應該是指損失函數使用了margin)來訓練模型,但沒有得到好的結果(<0.9)。 為了在我們的網絡中使用new_whale圖像,我們決定對每個鯨魚類進行2分類(判斷是否是new_whale嗎?)。
經過幾周的實驗,senet154表現最好,我們得到了0.96(both public & private)結果(單一模型)。
為了進一步改進,我們添加了一些技巧(將在后面討論)并得到0.969,加上4倍交叉驗證類平衡后處理以達到0.973。
我們還嘗試將se154與SE-Resnext101,DPN131等其他網絡組合,但沒有得到任何提升。

  • 網絡輸入及訓練步驟:
    輸入尺寸 (512, 256)
    4通道輸入, RGB + masks (基于450 張已有標簽進行訓練)
    Step 1: 訓練圖片數量 >10 的樣本(更容易收斂)
    Step 2:訓練所有訓練集, 固定網絡除了最后兩個全連接層.

  • 圖片水平翻轉(+0.006)
    翻轉圖片作為新的類別,沒有標簽的數據不處理

  • 偽標簽 (+ 0.001)
    在訓練集中添加了約2000張測試圖像(分類置信度> 0.96)。

  • 標簽平衡 (+0.001 ~ 0.002)
    在我們持續改進期間(從0.8+到0.96),我們發現標簽與分數相關。 因此,我們使用策略來進一步平衡我們的預測:
    對于Top5預測中的類別class1到class5,如果:conf class1 - conf class 2 <0.3,并且class 2未在所有Top1預測中沒有出現過,而class 1已多次出現在top2中,我們切換class1和class2的位置。

2nd place code, end to end whale Identification model

code
原文
在這里插入圖片描述
在這里插入圖片描述
方法介紹:多網絡融合,多損失函數
模型
? 輸入: 256x512 or 512512 cropped images;
? 骨架網絡: resnet101, seresnet101, seresnext101;
? 損失函數: arcface loss + triplet loss + focal loss;
? 優化器: adam ,學習率熱身;
? 數據增強: blur,grayscale,noise,shear,rotate,perspective transform;
? 圖片翻轉 -> 5004
2
? 偽標簽

補充:

我的baseline模型僅在arcface上訓練(非新鯨圖像)。 為了推斷,我刪除了margin m并直接使用最后一個fc的softmax結果。 最后一個fc的L2范數權重矩陣接近于中心類特征。 我的arcface模型在public LB上可以達到0.930~940左右。 進一步的改進來自增加的具有focal loss的分類分支(在非新鯨圖像和新鯨圖像上)。 ID翻轉策略非常重要,它讓我獲得了最后的0.01提升。

3rd place solution with code: ArcFace

原文
code

方法介紹:使用了ArcLoss,訓練的時候,使用了多個檢測框,保存每個類的多張圖片的多部分的中心作為特征,測試的時候也是使用多個框的特征中心(估計是參考few-shot的思想)。其實有點類似考慮局部的特征。

解決方案摘要
數據集
?驗證集:隨機抽樣400個類,其中每類包含2個圖像+ 110個新鯨魚(= 400 * 0.276)。
?訓練集:除新鯨以外的所有圖像。
?水平翻轉將身份加倍。

模型
bounding box & landmark
?我使用了Paul Johnson和Radek Osmulski的標注。
?我制作了5交叉訓練,并使用它們訓練了5個模型。
?IOU:0.93

鯨魚識別器:
?使用ArcFace損失
?最后一次卷積后的層被替換為 flattening -> BN -> dropout -> FC -> BN。
?densenet121
?m = 0.5(論文默認值)
?weight decay 0.0005, droupout 0.5

數據增強
? average blur, motion blur
? add, multiply, grayscale
? scale, translate, shear, rotate
? align or no-align

訓練
?adam優化器
?學習率為0.00025 - > 0.000125 - > 0.0000625

測試
(1)獲取每張圖片的特征:
?對于每個圖像,我通過使用5個bounding boxes 和 landmarks, 獲得了多個特征向量。
?對于每個類,所有特征向量的中心用作最終特征。
(2)獲取測試圖像的特征
?對于每個圖像,生成多個特征向量,計算特征向量的中心。
(3)計算相似度
?上述兩個特征向量的余弦相似度用作相似性的度量。
(4)選擇閾值
?選擇新鯨魚的閾值約為0.276。

以下是最終方法的過程。
Without landmark
起初,我從訓練集中排除了只有一個圖像的和新鯨魚的圖片。為了推斷,使用訓練集的最相似圖像的身份作為預測身份。
Public LB: 0.90, Private LB: 0.90
在使用相同身份的所有特征向量的中心之后,我得到了:
Public LB: 0.942 / Private LB: 0.939
使用權重衰減weight decay 0.0005
Public LB: 0.946 / Private LB: 0.946
加入只有一張圖片的類到訓練集:
Public LB: 0.963 / Private LB: 0.961

with landmark
當我使用對齊圖像時,網絡訓練得更快但分數沒有提高
Public LB: 0.962 / Private LB: 0.959
一些圖像的bounding boxes和landmarks非常差,似乎無法提高分數。所以我也使用了非對齊圖像
Public LB: 0.965 / Private LB: 0.961
最后,我通過水平翻轉加倍了身份。翻轉的圖像具有不同的身份,但在視覺上非常相似。所以我將logit值平滑為零以防止梯度消失。
Public LB: 0.968 ~ 0.971 / Private LB: 0.965 ~ 0.968

4th Place Solution: SIFT + Siamese

原文
code

作者關注的重點是如何識別new_whale(N = 0)和N = 1個樣本。特別是如何識別盡可能多的N = 1個樣本。
我的流程有三個主要組成部分:
(1)關鍵點匹配 – 傳統方法和新tricks
(2)Siamese 網絡
(3)后處理

1.關鍵點匹配
這占我最終預測的80%以上,并且是經典的關鍵點匹配,是原始的low-shot方法之一。我嘗試過SIFT,ROOTSIFT和一系列binary descriptors和匹配器,不同技術之間沒有太大區別。
這里的數據集處于最佳位置,其中強力關鍵點匹配發揮作用。 7960個測試圖像與15,697個訓練圖像屬于合理范圍。我選擇了完全圖像分辨率的純蠻力方法,所有測試圖像與所有訓練圖像,沒有詞袋或關鍵點的knn聚類。我必須克服幾個重大挑戰:

1.速度。每個圖像的關鍵點描述符/匹配最多可能需要1-2秒,具體取決于您的硬件設置,但我使用了一些技巧,例如將所有關鍵點索引到hdf5文件,在匹配期間將所有關鍵點存儲到RAM中,以及使用偉大的faiss庫。在兩個系統中,我可以在大約12小時內完成整個數據集的強力運行。
2.誤報。在這個數據集上kp匹配的主要問題是誤報,它有兩個來源:背景海洋和鯨魚尾部的許多亮點。我通過使用unet僅分割鯨魚尾巴和單應矩陣的自定義xgboost模型來解決這個問題,以將圖像對之間的最終單應性分類為有效或無效。

最終的kp匹配流程:
從訓練集和測試集中提取所有kps(原始圖,全尺度)到hdf5文件,將關鍵點限制為unet預測的鯨魚吸蟲面具區域。從CLAHE預處理圖像中提取效果最佳。

匹配:
a.一種。循環遍歷所有測試/訓練對
b.使用faiss匹配關鍵點
c.關鍵點的雙重單應性過濾(LMEDS后跟RANSAC)
d. xgboost預測驗證單應矩陣
e.如果#匹配>閾值,則使用預測

2.Siamese網絡
這是我的管道中最弱的部分,還有其他帖子表明網絡比我使用的更強大。我稍微調整了Martin的代碼,并使用了InceptionResNetV2,InceptionV3和ResNet50的集合。我沒有使用任何數據增強并堅持使用灰度圖像。
為了幫助訓練更快一點,我在進入Siamese網絡之前做了大量的骨干網絡預訓練,這似乎有所幫助。
我的預訓練流程是:
? 前200類進行訓練分類
? 在N> 8(~576類)的所有類別上進行微調
? 對所有類別上進行微調
? 對所有類別上進行微調+混合+圖像大小384x384
3.后期處理
我發現這次比賽和Statoil Iceberg挑戰競賽之間的數據有一些相似之處,所以我能夠使用winning solution(https://www.kaggle.com/c/statoil-iceberg-classifier-challenge)的一些相同的技巧和我在那里的獲勝解決方案。
當從Siamese網絡分析得到的預測矩陣時,我注意到總是有一些相同的火車圖像不成比例地占據前5個位置。這讓我想到我需要找到一種方法來抑制支配預測,或者弄清楚如何讓N = 1類更加公平地升到預測結果的頂端。
我提出的想法非常簡單:我沒有用傳統的“哪種火車圖像最接近我的測試圖像”的方式查看預測矩陣,而是轉換矩陣現在看“哪個測試圖像最接近我的訓練圖像”圖片”。當我將轉置矩陣限制為N = 1個樣本時,我發現我可以沿著訓練軸使用N = 1個訓練樣本的新閾值。這在N = 1樣本中,我的top1預測會產生更多正確的結果。我相信有更好的方法可以實現同一個目標。
我對其他競爭對手發現的錯誤標簽的數量感到驚訝,并且感謝Alex Mokin和這篇文章的撰稿人,我相信多余的類有一定作用。

流程缺點:
再次,像贊助商一樣思考,他們可能不喜歡我的解決方案有以下幾個原因:
1.計算成本非常高,特別是關鍵點匹配了流程;
2. 將流程轉換為簡單的方法來進行單個圖像推斷在后期處理比較困難。
我可能會采取別人的siamese網絡作為一個純粹的替代品放入我的管道,這將需要重新調整后處理流程,但這是可能的。
流程優勢:
我認為關鍵點步驟非常強大,如果使用傳統的關鍵點算法,沒有足夠壓縮的空間。 將unet和xgb模型合并到流程中確實有助于將誤報減少到可以忽略不計。

5th solution blog post + code -Siamese

原文
code
博客:推薦詳細研究

在這里插入圖片描述
方法介紹:流程如上圖,使用了DenseNet121作為骨架網絡,使用了類似VGG的網絡作為關鍵點提取,并獲得尾部的圖片。采用了困難樣本挖掘。

7th place Pure Magic thanks Radek solution: classification

原文
code

9th place solution or how we spent last one and a half month

原文

TL;DR Adam, Cosine with restarts, CosFace, ArcFace, High-resolution images, Weighted sampling, new_whale distillation, Pseudo labeled test, Resnet34, BNInception, Densenet121, AutoAugment, CoordConv, GAPNet

參考文獻
《Deep Face Recognition: A Survey》
損失函數:
《CosFace: Large Margin Cosine Loss for Deep Face Recognition》
《ArcFace: Additive Angular Margin Loss for Deep Face Recognition》
Cosface and Arcface parameters was optimised as well. Cosface: S = 32.0, M=0.35. Arcface: M1 = 1.0, M2 = 0.4, M3 = 0.15.
嘗試的優化器: Adam, AdamW, SGD, SGDW. 最好的是 Adam with Cosine annealing.
網絡結構:
CoordConv和 GapNet 有一些效果
《An Intriguing Failing of Convolutional Neural Networks and the CoordConv Solution》
《Human-level Protein Localization with Convolutional Neural Networks》
(https://openreview.net/forum?id=ryl5khRcKm)
Squeeze-and-Excitation, Convolutional Block Attention Module 沒有效果

數據增強:
對于 zero and few-shot learning,參考文獻進行增強
《AutoAugment: Learning Augmentation Policies from Data》
? HorizontalFlip
? Rotate with 16 degree limit
? ShiftScaleRotate with 16 degree limit
? RandomBrightnessContrast
? RandomGamma
? Blur
? Perspective transform: tile left, right and corner
? Shear
? MotionBlur
? GridDistortion
? ElasticTransform
? Cutout
相關實現代碼:
https://github.com/albu/albumentations
https://github.com/mdbloice/Augmentor

無效果:TTA和Mixed precision learning
測試時增強(test time augmentation, TTA)。這里會為原始圖像造出多個不同版本,包括不同區域裁剪和更改縮放程度等,并將它們輸入到模型中;然后對多個版本進行計算得到平均輸出,作為圖像的最終輸出分數,可調用learn.TTA()來使用該算法。

10th Place Solution: Metric Learning, Classification, Siamese, LGBM

原文

15-th plcae solution: sphereface, image alignment and multi-layer fusion

原文

24th place solution

原文

25-th place solution: CosFace + ProtoNets

原文

31st place solution + source code

原文

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13466.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13466.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13466.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QGIS DEM數據快速獲取

背景 Dem 是非常重要的數據&#xff0c;30 m 的精度也是最容易獲取的&#xff0c;目前有很多種方式可以獲取&#xff0c;比如地理空間數據云&#xff0c;今天介紹用 QGIS插件獲取。 這種方式的最大優勢是方便快捷。 插件下載與安裝 插件-管理并安裝插件-搜索下載 OpenTopogr…

linux:信號深入理解

文章目錄 1.信號的概念1.1基本概念1.2信號的處理基本概念1.3信號的發送與保存基本概念 2.信號的產生2.1信號產生的五種方式2.2信號遺留問題(core,temp等) 3.信號的保存3.1 信號阻塞3.2 信號特有類型 sigset_t3.3 信號集操作函數3.4 信號集操作函數的使用 4.信號的處理4.1 信號的…

C# Winform實現五子棋游戲(代完善)

實現了基本的玩法。 BoardController.cs using System;namespace GomokuGame {public class BoardController{private static BoardController instance;private readonly int[,] board;private const int boardSize 15;private BoardController(){board new int[boardSize…

uniapp(h5 app) 中 webview和h5通信

1 uniapph5 和h5頁面 通信 h5 window.parent.postMessage(message, *); uniapph5 onload中 window.addEventListener(message, function (e) { // 監聽 message 事件 //console.log(e.origin) console.log(收到的cocos游戲ID,e.data) …

Python實現天氣數據采集

Python實現天氣數據采集 一、需求介紹二、完整代碼一、需求介紹 本次天氣數據采集的需求是獲取每日的最高溫、最低溫、風力、風向、天氣狀況、AQI指數,如圖所示,完整代碼附后: 本次采集的目標網址是2345天氣網: 上圖的URL中,beijing是城市名稱的縮寫,54511即為城市代碼…

數據庫設計步驟and相關注意點

文章目錄 前言數據庫設計的主要步驟1.需求分析2.概念結構設計3.邏輯結構設計4.物理結構模型設計5.數據庫實施和維護給出一些題目理解一下吧~ 總結 前言 學無止境&#xff0c;筆勤不輟。最近筆者狀態不是特別好&#xff0c;一直忙于應付課程作業&#xff0c;于是一直沒有時間更…

科技引領未來:高速公路可視化

高速公路可視化監控系統利用實時視頻、傳感器數據和大數據分析&#xff0c;通過圖撲 HT 可視化展示交通流量、車速、事故和路況信息。交通管理人員可以實時監控、快速響應突發事件&#xff0c;并優化交通信號和指揮方案。這一系統不僅提高了道路安全性和車輛通行效率&#xff0…

vue3結合element-plus之如何優雅的使用表格

背景 表格組件的使用在后臺管理系統中是非常常見的,但是如果每次使用表格我們都去一次一次地從 element-plus 官網去 復制、粘貼和修改成自己想要的表格。 這樣一來也說得過去,但是如果我們靜下來細想不難發現,表格的使用都是大同小異的,每次都去復制粘貼,對于有很多表格…

vue3封裝ElementUI plus Dialog彈窗

因為ElementuiPlus的dialog彈框的初始樣式不太好看,而公司要求又要好看,本來是已經實現了,但是后來想想了發現封裝完dialog的其他功能也要,所以特此記錄一下 方案一 思路:封裝一個組件,將所有新增的參數引入el-dialog 參數中,實現參數共用 新建一個組件,將官網暴露的屬性全部引…

C++開源庫glog使用封裝--自定義日志輸出格式,設置日志保留時間

glog下載和編譯 glog開源地址 https://github.com/google/glog glog靜態庫編譯 cd /home/wangz/3rdParty/hldglog/glogmkdir out mkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX../out -DCMAKE_BUILD_TYPERelease -DBUILD_SHARED_LIBSOFF本文選擇的glo…

網關路由SpringCloudGateway、nacos配置管理(熱更新、動態路由)

文章目錄 前言一、網關路由二、SpringCloudGateway1. 路由過濾2. 網關登錄校驗2.1 鑒權2.2 網關過濾器2.3 登錄校驗2.3.1 JWT2.3.2 登錄校驗過濾器 3. 微服務從網關獲取用戶4. 微服務之間用戶信息傳遞 三、nacos配置管理問題引入3.1 配置共享3.1.1 在Nacos中添加共享配置3.1.2 …

【前端三劍客之HTML】詳解HTML

1. HTML(超文本標記語言) HTML意為超文本標記語言&#xff0c;其可以通過標簽把其他網頁/圖片/視頻等資源引入到當前網頁中&#xff0c;讓網頁最終呈現出來的效果超越了文本.HTML是一種標記語言&#xff0c;其是由一系列標簽組成的. 而且每個標簽都有特定的含義和確定的頁面顯…

Vue 3入門指南

title: Vue 3入門指南 date: 2024/5/23 19:37:34 updated: 2024/5/23 19:37:34 categories: 前端開發 tags: 框架對比環境搭建基礎語法組件開發響應式系統狀態管理路由配置 第1章&#xff1a;Vue 3簡介 1.1 Vue.js的歷史與發展 Vue.js由前谷歌工程師尤雨溪&#xff08;Eva…

Java分支結構詳解

Java分支結構詳解 前言一、if 語句基本語法表示一表示二表示三 代碼示例判定一個數字是奇數還是偶數判定一個數字是正數還是負數判定某一年份是否是閏年 注意要點懸垂 else 問題代碼風格問題分號問題 二、switch 語句基本語法代碼示例根據 day 的值輸出星期 注意事項break 不要…

深入了解 Pandas:對象的缺少值

目錄 前言 第一點&#xff1a;導入模塊 第二點 &#xff1a;發現對象的缺失值 第二點&#xff1a;剔除缺少值 第三點&#xff1a;填補缺失值 總結 前言 在數據處理中&#xff0c;經常會遇到數據中存在缺失值的情況。處理缺失值是數據清洗的一個重要環節&#xff0c;能夠確…

spring常用知識點

1、攔截器和過濾器區別 1. 原理不同&#xff1a; 攔截器是基于java的反射機制&#xff0c;而過濾器采用責任鏈模式是基于函數回調的。 2. 使用范圍不同&#xff1a; 過濾器Filter的使用依賴于Tomcat等容器&#xff0c;導致它只能在web程序中使用 攔截器是一個Sping組件&am…

abs(-2147483648) == 2147483648?

從數學意義上&#xff0c;這是對的。但是&#xff0c;就怕但是。 #include int main() {long long v;v abs(-2147483648);printf("%lld\n", v);return 0; } 輸出: -2147483648 我們從source code中一一解開. /* Return the absolute value of I. */ int abs (…

Mongodb介紹及springboot集成增刪改查

文章目錄 1. MongoDB相關概念1.1 業務應用場景1.2 MongoDB簡介1.3 體系結構1.4 數據模型1.5 MongoDB的特點 2. docker安裝mongodb3. springboot集成3.1 文件結構3.2 增刪改查3.2.1 增加insert3.2.2 保存save3.2.3 更新update3.2.4 查詢3.2.5 刪除 1. MongoDB相關概念 1.1 業務…

Docker-Android安卓模擬器本地部署并實現遠程開發測試

文章目錄 1. 虛擬化環境檢查2. Android 模擬器部署3. Ubuntu安裝Cpolar4. 配置公網地址5. 遠程訪問小結 6. 固定Cpolar公網地址7. 固定地址訪問 本文主要介紹如何在Ubuntu系統使用Docker部署docker-android安卓模擬器&#xff0c;并結合cpolar內網穿透工具實現公網遠程訪問本地…

51建模網AR虛擬試用,讓網購不再只靠想象!

在數字化的浪潮中&#xff0c;網購已成為現代人生活的一部分。然而&#xff0c;傳統的網購模式常常因為無法直接試穿、試用商品&#xff0c;導致買家在收到商品后感到失望&#xff0c;特別是面對大件家居產品時&#xff0c;僅憑屏幕上的圖片和尺寸描述&#xff0c;很難準確地把…