SOLO算法簡讀

論文鏈接:https://arxiv.org/abs/1912.04488

代碼鏈接:https://github.com/WXinlong/SOLO

摘要

提出一種新的實例分割方法。與語義分割等其他密集預測任務相比,實例分割的難度要大得多。為了預測每個實例的掩碼,主流方法要么遵循“detect-then-segment”的策略,如Mask R-CNN所使用的策略,要么先預測嵌入向量,然后使用聚類技術將像素分組到單個實例中。通過引入“實例類別”的概念,文章從一個全新的角度來看待實例分割的任務,它根據實例的位置和大小為實例中的每個像素分配類別,從而很好地將實例掩碼分割轉化為一個可分類的問題。將實力分割分解為兩類任務。文章提出的框架在精確度上優于最近的單點實例分段器。

簡介

實例分割不僅要準確的分離圖像中的所有對象,還要求對每個實例實現像素級的語義分割。圖像中的對象屬于一組固定的語義范疇,但是實例的數量不同。因此,語義分割可以很容易地表述為密集的逐像素分類問題,而直接按照相同的范式預測實例標簽則是一個挑戰
最近的實例分割方法可以分為兩類:自頂向下和自底向上的范例。前一種方法即“detect-then-segment”,首先檢測邊界盒,然后將實例掩碼分割到每個邊界盒中。后一種方法學習一種親緣關系,通過推離屬于不同實例的像素和拉近相同實例的像素,為每個像素分配一個嵌入向量。然后需要分組后處理來分離實例。這兩種范式都是步進式和間接式的,要么嚴重依賴準確的邊界盒檢測,要么依賴逐像素嵌入學習和分組處理。


image

目標:在完整實例掩碼注釋的監督下直接分割實例掩碼

提出問題:圖像中的對象實例之間的基本區別是什么?

發現:在大多數案例下,圖像中的兩個實例要么有不同的中心位置,要么有不同的對象大小

現今主流:目前占主導地位的范式利用了完全卷積的網絡(FCN)輸出N個信道的稠密預測

語義切分的目的:區分不同的語義類別

文章引入了“實例類別(instance categories)”的概念來區分圖像中的對象實例,量化的中心位置和對象大小,從而能夠按位置劃分對象

文章中提出的SOLO的核心思想是根據位置和大小分離對象實例。

原理

位置 將圖象劃分為SxS的網格,從而產生 S^2 個中心位置類。根據對象中心的坐標,將對象實例分配給其中一個網格單元格,作為其中心位置類別。SOLO算法將中心位置類別編碼為通道軸,類似于語義分類中的語義類別。每個輸出通道負責一個中心位置類別,相應的通道映射應該預測屬于該類別的對象的實例掩碼。

本質上,實例類別近似于實例的對象中心位置.因此,通過將每個像素分類到其實例類別中,就相當于使用回歸從每個像素中預測目標中心。將位置預測任務轉換為分類而不是回歸

尺寸 為了區分不同對象大小的實例,文章采用了特征金字塔網絡(FPN),從而將不同尺寸的對象分配到不同層次的特征圖中,作為對象尺寸類。因此,所有的對象實例都是定期分離的,從而能夠通過“實例類”對對象進行分類。這里的FPN目的是檢測圖像中不同尺寸的目標。
FPN是SOLO的核心方法。
在SOLO框架中通過使用掩碼注釋,以端到端的方式對網絡進行優化。并跳出局部框劃分和像素分組的限制,進行像素級實例分割。

SOLO在COCO數據集上與Mask R-CNN取得同等結果。另外SOLO具有通用性。
本質上,SOLO將坐標回歸轉化為離散量化的分類。這樣做的一個優點是避免了啟發式協調規范化和日志轉換,這通常在YOLO之類的檢測器中使用.

相關工作
SOLO是完全無箱的,因此不受(錨)箱的位置和規模的限制,并自然受益于固有的優勢FCNs
SOLO不利用像素成對關系和像素分組,而是直接在訓練期間學習實例掩碼注釋,并端到端預測實例掩碼和語義類別,無需分組后處理。SOLO是一種直接的端到端實例分割方法

SOLO以圖像為輸入,直接輸出實例掩碼和對應的類概率,采用完全卷積、無盒、無組的范式。

我們的簡單網絡可以優化端到端,而不需要箱監督。為了進行預測,該網絡直接將輸入圖像映射到每個單獨實例的掩模中,既不依賴于RoI特征裁剪等中間操作,也不依賴于分組后處理。

SOLO

SOLO框架的核心思想是將實例分割重新定義為兩個同時存在的分類感知預測和實例感知掩碼生成問題。系統將輸入圖像劃分為均勻的SXS的網格,如果一個對象中心落到一個網格單元中,該網格單元格負責1)預測語義類別以及2)分割該對象實例

在語義類別預測的同時,每個正網格單元也將生成相應的實例掩碼。對于一個輸入圖像I,如果我們把它分成S×S個網格,總共最多會有S^2個預測掩模。文章明確地在三維輸出張量的第三維(通道)編碼這些掩模。具體來說,實例掩碼輸出將具有Hi×Wi×S2Hi×Wi×S^2Hi×Wi×S2維。第k個通道負責在網格(i, j)處分段實例,其中k = i·S + j(i和j從零開始).為此,在語義類別和類不可知的掩碼之間建立了一一對應關系
在這里插入圖片描述

SOLO需要一個在空間上變化的模型,或者更準確地說,位置敏感的模型,因為我們的分割掩模取決于網格單元,必須由不同的特征通道分開。

具體地說,文章創建了一個與輸入具有相同空間大小的張量,該張量包含歸一化為[?1,1]的像素坐標。然后這個張量被連接到輸入特征并傳遞到下面的層。通過讓卷積訪問它自己的輸入坐標,我們將空間功能添加到傳統的FCN模型中。如果原始特征張量的大小為H×W×D,則新張量的大小為H×W×(D+2),其中后兩個通道為x-y像素坐標。

形成實例分割

在SOLO中,類別預測和對應的掩模自然通過它們的參考網格單元k=i?S+jk = i · S + jk=i?S+j關聯起來。在此基礎上,SOLO可以直接形成每個網格的最終實例分割結果。原始實例分割結果是通過收集所有網格結果生成的。最后,使用非最大抑制(non-maximum-suppression, NMS)來獲得最終的實例分割結果。不需要其他后處理操作

網絡結構
我們使用FPN[11],它為每一層生成一個具有固定數量通道(通常為256-d)的不同大小的金字塔特征圖。這些映射用作每個預測頭的輸入:語義類別和實例掩碼。頭部的權重在不同層上共享。在這個場景中,只有最后的1×1 conv不共享。

在每個FPN特征級別上,我們附加兩個兄弟子網絡,一個用于實例類別預測(上),另一個用于實例掩碼分割(下)。在掩碼分支中,我們將x、y坐標和原始特征連接起來,對空間信息進行編碼。這里數字表示空間分辨率和通道。在圖中,我們以256個通道為例。箭頭表示卷積或插值。所有的卷積都是3×3,除了輸出conv。“Align”是指自適應池、插值或區域網格插值,在推理過程中,掩碼分支輸出進一步向上采樣到原始圖像大小。

SOLO 學習

標簽分配

對于類別預測分支,網絡需要給出每個S×S網格下的目標類別概率。具體來說,如果網格(i, j)落在任何ground truth掩碼的中心區域,則認為它是正樣本,反之則認為它是負樣本。使用中心采樣進行掩模類別分類。得到質點中心(n,m),寬w高h的mask,那么該實例的中心位置就是(n,m,w1,h1),其中w1=βw,h1=βh,β在文中設為β=0.2

Loss損失函數

L=Lcate+λLmaskL = L_{cate} + λL_{mask} L=Lcate?+λLmask?
這里的Lcate是傳統的語義類別分類的Focal Loss,Lmask是用于掩模預測的損失,λ=3
image
image
Npos表示正樣本的數量,p?和m?分別代表類別和掩模目標。ll是指示函數,當
Pi,j?>0P^*_{i,j} > 0 Pi,j??>0
時為1,否則為0.對于dmask,文章進行了一系列的對比,最終選用 Dice Loss(效果比BCE、Focal Loss好)。Dice Loss定義為

LDice=1?D(p,q),L_{Dice} = 1 ?D(p, q), LDice?=1?D(p,q),
D是骰子系數,定義為
image
px,y和qx,y分別是soft mask p和truth mask q位于(x, y)的像素值。

推論
前向傳播得到類別分數pi,j和相應的mask mk,其中k=i?S+j。首先使用置信閾值0.1來過濾低置信的預測,然后選取前500個排好序的mask進行NMS操作,然后用0.5的閾值進行mask二值化,保留前100個instance mask進行評估。

實驗

image

如何工作
在這里插入圖片描述

這里我們可以看到不同的實例在不同的掩模預測通道上激活,通過顯式地在不同位置分割實例,SOLO將實例分割問題轉化為位置感知的分類任務。
在每個網格中只有一個實例被激活,并且一個實例可以被多個相鄰掩碼通道預測。在推斷期間,我們使用NMS來抑制這些冗余掩碼

消融實驗1

Grid number

將網格數對性能的影響與單一輸出特征圖進行了比較
image
這一結果表明,我們的單尺度SOLO可以適用于一些對象尺度變化不大的場景。然而,單尺度模型在很大程度上滯后于金字塔模型,這說明了FPN在處理多尺度預測中的重要性。

Multi-level Prediction

image
從表2中我們可以看到,單尺度的SOLO在分割多尺度的對象時遇到了困難。在消融過程中,我們證明這個問題可以通過FPN的多級預測得到很大程度的解決,表3使用
五個FPN金字塔來分割不同尺度的對象.

CoordConv

另一個促進我們的SOLO模式的重要組成部分是空間變化的卷積(CoordConv )

一個單一的CoordConv已經使預測具有良好的空間變異/位置敏感性,過多無用。

Loss function.

骰子損失(DL)導致最好的AP,訓練時更穩定

Different head depth

image
圖5中的結果顯示,當深度超過7時,性能會下降。所以使用的深度為7.

Decoupled SOLO

給定一個預先定義好的網格數,如 S=20S=20,這樣SOLO head就會輸出400個通道的特征圖。但是,這樣預測有些冗余,因為絕大多數場景中,圖像上的物體都是比較稀疏的,不太會出現特別多的物體實例。這一節,作者進一步介紹了一個等價的、更加高效率的 SOLO 模型的變體,稱為 Decoupled SOLO, 如下圖所示
image

在Decoupled SOLO中,原始的輸出張量
M∈RH×W×S2M∈R ^{H×W×S^2} MRH×W×S2
被替換為兩個輸出張量X∈R
H×W×S
和Y∈R H×W×S ,對應著兩個坐標軸。因此,輸出空間就從HxWxS2 降低到了H×W×2S。對于網格位置為(i,j)的物體,原來的SOLO模型在輸出張量M的第k個通道上分割掩碼,其中k=i?S+j。而 Decoupled SOLO的物體掩碼預測,定義為兩個通道特征圖的 element-wise 相乘。

mk=xj?yim_k=x_j?y _i mk?=xj??yi?
其中xj,yi分別表示X的第j個通道圖,和Y的第i個通道圖。
在這里插入圖片描述

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

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

相關文章

Rxjs的flatMap使用

Rxjs的flatMap使用 flatMap是Rxjs比較繞的一個概念,這里我們只是講解如何使用。在Rxjs 4.0版本時叫flatMap,在Rxjs 5.0時被更名為margeMap,現在flatMap作為margeMap的別名使用,這是考慮向下兼容。 官方flatMap的定義: Projects each sourc…

關于Loss的簡單總結

Dice Loss 參考:https://blog.csdn.net/l7H9JA4/article/details/108162188 Dice系數: 是一種集合相似度度量函數,通常用于計算兩個樣本的相似度,取值范圍為[0,1]。 s2∣X∩Y∣∣X∣∣Y∣s \frac{2|X ∩ Y|}{|X||Y|} s∣X∣∣Y…

Angular_PWA使用+Demo

Angular_PWA使用+Demo 什么是PWA PWA(Progressive Web App)利用TLS,webapp manifests和service workers使應用程序能夠安裝并離線使用。 換句話說,PWA就像手機上的原生應用程序,但它是使用諸如HTML5,JavaScript和CSS3之類的網絡技術構建的。 如果構建正確,PWA與原生應…

SOLOv2論文簡讀

論文:SOLOv2: Dynamic, Faster and Stronger 代碼:https://github.com/WXinlong/SOLO 摘要 主要提出了作者在SOLOv2中實現的優秀的實例分割方法,旨在創建一個簡單、直接、快速的實例分割框架: 通過提出動態學習對象分割器的mas…

Angular6_PWA

Angular6_PWA Angular正式發布了V6.0,我們已經可以利用對應的@angular/cli V6.0來直接開發PWA應用了。 第一步:安裝@angular/cli V6.0 如果你機器上有老版本,請先卸載。 打開你的終端,執行: npm install -g @angular/cli 或 cnpm install -g @angular/cli 安裝成功…

Ubuntu18.04 關于使用vnc的踩坑

由于種種原因,手上多了一臺可使用的桌面版Ubuntu,正好用來測試代碼,方便調試。因為只能遠程,所以需要配置遠程連接。因此就打算使用vnc進行遠程連接,誰料一路坎坷,特此記錄。 安裝 設置桌面共享 需要注意…

App_Shell模型

App_Shell模型 App Shell 架構是構建 Progressive Web App 的一種方式,這種應用能可靠且即時地加載到您的用戶屏幕上,與本機應用相似。 App shell是支持用戶界面所需的最小的 HTML、CSS 和 JavaScript,如果離線緩存,可確保在用戶重復訪問時提供即時、可靠的良好性能。這意…

Angular6_服務端渲染SSR

Angular6_服務端渲染 在使用服務端渲染之前,需要安裝最新版本的Angular。 npm install -g @angular/cli 或 cnpm install -g @angular/cli github項目 創建項目 ng new PWCat --routing 為項目添加universalng g universal --client-project=PWCat 或

Jenkins自定義主題教程

Jenkins自定義主題 由于Jenkins自帶的樣式比較丑陋,所以有很多第三方的樣式庫,這里針對jenkins-material-theme樣式庫做一個安裝教程。 下載樣式庫 下載連接 Select your color 選擇一個你喜歡的主題顏色。Choose your company logo 上傳你自定義的…

IndexedDB_Web 離線數據庫

IndexedDB_Web 離線數據庫 本文會從頭剖析一下 IndexedDB 在前端里面的應用的發展。 indexedDB 目前在前端慢慢得到普及和應用。它正朝著前端離線數據庫技術的步伐前進。以前一開始是 manifest、localStorage、cookie 再到 webSQL,現在 indexedDB 逐漸被各大瀏覽器認…

Angular 單元測試講解

Angular_單元測試 測試分類 按開發階段劃分按是否運行劃分按是否查看源代碼劃分其他ATDD,TDD,BDD,DDD ATDDTDDBDDDDDAngular單元測試 Karma的介紹jasmine介紹單元測試的好處使用jasmine和karma創建一個Angular項目Karma配置Test.ts文件測試體驗測試Form測試服務service常用斷言…

基于 Docker 的微服務架構

基于 Docker 的微服務架構-分布式企業級實踐前言Microservice 和 Docker服務發現模式客戶端發現模式Netflix-Eureka 服務端發現模式ConsulEtcdZookeeper 服務注冊自注冊模式 Self-registration pattern第三方注冊模式 Third party registration pattern小結一 服務間的 IPC 機制…

funcode游戲實訓,java及C/C++,網上整理

軟件,常見錯誤都有。 所有資源可到公眾號獲取(源碼也是),不再直接分享

Docker 容器部署 Consul 集群

Docker 容器部署 Consul 集群 Consul 介紹 Consul 提供了分布式系統的服務發現和配置的解決方案。基于go語言實現。并且在git上開放了源碼consul-git。consul還包括了分布式一致協議的實現,健康檢查和管理UI。Consul和zk相比較起來,更加輕量級&#xf…

swing皮膚包 substance

分享一下swing皮膚包substance 資源可到公眾號獲取

基于Android的聊天軟件,Socket即時通信,實現用戶在線聊天

基于Android的聊天軟件,Socket即時通信,單聊,聊天室,可自行擴展功能,完善細節。 【實例功能】 1.運行程序,登錄界面, 注冊賬號功能 2.進入主界面,有通訊錄, 個人信息。 3.點擊好友會話框&#…

用Docker搭建Elasticsearch集群

用Docker搭建Elasticsearch集群 對于用Docker搭建分布式Elasticsearhc集群的一個介紹,以及一些實施中遇到問題的總結 搜索服務簡述 結合業務的場景,在目前的商品體系需要構建搜索服務,主要是為了提供用戶更豐富的檢索場景以及高速&#xf…

Go實現簡單的RESTful_API

Go實現簡單的RESTful_API 何為RESTful API A RESTful API is an application program interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. A RESTful API – also referred to as a RESTful web service – is based on representational state t…

Docker使用Dockerfile構建簡單鏡像

Docker使用Dockerfile構建簡單鏡像 首先確保系統已經安裝docker 構建鏡像 安裝基礎鏡像 sudo docker pull ubuntu 查看鏡像是否已經拉取成功 REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu …

Weave Scope安裝

Weave Scope安裝 首先確保已經安裝docker 實時了解Docker容器狀態 查看容器基礎設施的概況,或者專注于一個特殊的微服務。從而輕松發現并糾正問題,確保你的容器化應用的穩定與性能。 內部細節與深度鏈接 查看容器的指標、標簽和元數據。 在一個可擴展…