① 科普講堂|實時熒光定量PCR檢測方法
聚合酶鏈式反應(PCR)是一種用於放大擴增特定的DNA片段的分子生物學技術,它可看作是生物體外的特殊DNA復制,PCR的最大特點是能將微量的DNA大幅增加。目前,PCR成為分子生物學研究必不可少的一部分。實時熒光定量PCR(Quantitative Real-time PCR)技術,是指在PCR反應體系中加入熒光基團,利用熒光信號積累實時監測整個PCR進程,最後通過標准曲線對模板進行定量分析的方法。該項技術可以對DNA、RNA樣品進行相對定量、絕對定量和定性分析,提高了普通PCR技術的特異性和准確性,被廣泛應用於基礎研究、疾病診斷、農業檢測和法醫調查等領域。
一、常規PCR
利用DNA分子會在體外95°高溫時會發生變性解旋變成單鏈,然後降溫到60°C左右時引物會與單鏈DNA按鹼基互補配對原則結合,接著再升高溫度到72°C左右,即DNA聚合酶最適反應溫度,DNA聚合酶會沿著磷酸到五碳糖(5'-3')的方向合成相應的互補鏈,如此循環往復以達到DNA分子擴增的目的,常規PCR技術無法實現精確定量。
二、實時熒光定量PCR
如要對DNA、RNA樣品進行精確定量研究,就需要採用實時熒光定量PCR,根據檢測實時熒光PCR產物的方式不同,實時熒光定量PCR主要有DNA結合染料法、基於探針的化學法、淬滅染料引物法等類型。
1. DNA 結合染料法
原理 :應用一種帶有熒光的、非特異的DNA結合染料檢測PCR過程中積累的擴增產物。
應用於核算定量和基因表達驗證。
優缺點: 它們的優點是可以對任何雙鏈DNA 進行定量,不需要探針,具有相對高的靈敏度和可靠性,並且成本低,簡單易用,缺點是它們能在反應中結合所有的DNA雙鏈,其中包括在PCR過程中產生的引物二聚體或其他非特異產物。
染料法一般使用的是SYBR Green I染料,這是一種可以與雙鏈DNA小溝結合的熒光染料,不會與單鏈DNA結合,並且在游離狀態下幾乎無熒光,只有與雙鏈DNA結合才會發出熒光,因此將PCR擴增產生的雙鏈DNA數量與熒光強度直接關聯,產生實時監測的效果。
2. 基於探針的化學法
原理: 應用一個或多個熒游標記的寡核苷酸探針檢測PCR擴增產物;依賴熒光能量共振傳遞檢測特異性擴增產物。
應用於核酸定量、基因表達驗證、等位基因鑒別、SNP分型、病原體和病毒檢測、多重PCR。
優缺點: 探針法的鑒別能力遠遠大於DNA結合染料法,因為它們只與目的產物結合,從不與引物二聚體或其他非特異產物結合,缺點是它的合成價格高。
探針法中最常用的TaqMan探針是一種寡核苷酸探針,熒光基團連接在探針的5』末端,而淬滅基團則在3』末端,PCR擴增時在加入引物的同時加入探針,探針完整時,熒光信號被淬滅基團吸收,PCR擴增時,5』→3』外切酶活性將探針酶切降解,使熒光基團和淬滅基團分離,從而檢測器可以接收到熒光信號。
3. 淬滅染料引物法
原理: 採用熒游標記引物擴增,從而使熒游標記基團直接摻入PCR擴增產物中,依賴熒光能量共振傳遞。
應用於核酸定量、基因表達驗證、等位基因鑒別、SNP分型、病原體和病毒檢測、多重PCR
優缺點:探針和目標片段的特異性結合產生熒光信號,因此減少了背景熒光和假陽性,還可進行多重PCR擴增,缺點是原料成本價格高
三、實時熒光PCR儀
實時熒光PCR系統包括熱循環儀,用於熒光激發的光學系統以及用於收集熒光數據和管理分析的計算機軟體,數據通過實時分析軟體以圖表的形式顯示。
② 小目標檢測相關技巧總結
小目標問題在物體檢測和語義分割等視覺任務中一直是存在的一個難點,小目標的檢測精度通常只有大目標的一半。
CVPR2019論文: Augmentation for small object detection 提到了一些應對小目標檢測的方法,筆者結合這篇論文以及查閱其它資料,對小目標檢測相關技巧在本文進行了部分總結。
小目標的定義: 在MS COCO數據集中,面積小於 32*32 的物體被認為是小物體。
小目標難以檢測的原因: 解析度低,圖像模糊,攜帶的信息少。由此所導致特徵表達能力弱,也就是在提取特徵的過程中,能提取到的特徵非常少,這不利於我們對小目標的檢測。
1、由於小目標面積太小,可以放大圖片後再做檢測,也就是在尺度上做文章,如FPN(Feature Pyramid Networks for Object Detection),SNIP(An Analysis of Scale Invariance in Object Detection – SNIP)。
Feature-Fused SSD: Fast Detection for Small Objects, Detecting Small Objects Using a Channel-Aware Deconvolutional Network 也是在多尺度上做文章的論文。
2、在Anchor上做文章(Faster Rcnn,SSD, FPN都有各自的anchor設計),anchor在設置方面需要考慮三個因素:
anchor的密度: 由檢測所用feature map的stride決定,這個值與前景閾值密切相關。
anchor的范圍: RetinaNet中是anchor范圍是32~512,這里應根據任務檢測目標的范圍確定,按需調整anchor范圍,或目標變化范圍太大如MS COCO,這時候應採用多尺度測試。
anchor的形狀數量: RetinaNet每個位置預測三尺度三比例共9個形狀的anchor,這樣可以增加anchor的密度,但stride決定這些形狀都是同樣的滑窗步進,需考慮步進會不會太大,如RetinaNet框架前景閾值是0.5時,一般anchor大小是stride的4倍左右。
該部分anchor內容參考於: https://zhuanlan.hu.com/p/55824651
3、在ROI Pooling上做文章,文章SINet: A Scale-Insensitive Convolutional Neural Network for Fast Vehicle Detection 認為小目標在pooling之後會導致物體結構失真,於是提出了新的Context-Aware RoI Pooling方法。
4、用生成對抗網路(GAN)來做小目標檢測:Perceptual Generative Adversarial Networks for Small Object Detection。
1、從COCO上的統計圖可以發現,小目標的個數多,佔到了41.43%,但是含有小目標的圖片只有51.82%,大目標所佔比例為24.24%,但是含有大目標的圖像卻有82.28%。這說明有一半的圖像是不含小目標的,大部分的小目標都集中在一些少量的圖片中。這就導致在訓練的過程中,模型有一半的時間是學習不到小目標的特性的。
此外,對於小目標,平均能夠匹配的anchor數量為1個,平均最大的IoU為0.29,這說明很多情況下,有些小目標是沒有對應的anchor或者對應的anchor非常少的,即使有對應的anchor,他們的IoU也比較小,平均最大的IoU也才0.29。
如上圖,左上角是一個anchor示意圖,右上角是一個小目標所對應的anchor,一共有隻有三個anchor能夠與小目標配對,且配對的IoU也不高。左下角是一個大目標對應的anchor,可以發現有非常多的anchor能夠與其匹配。匹配的anchor數量越多,則此目標被檢出的概率也就越大。
實現方法:
1、Oversampling :我們通過在訓練期間對這些圖像進行過采樣來解決包含小對象的相對較少圖像的問題(多用這類圖片)。在實驗中,我們改變了過采樣率和研究不僅對小物體檢測而且對檢測中大物體的過采樣效果
2、Copy-Pasting Strategies:將小物體在圖片中復制多分,在保證不影響其他物體的基礎上,增加小物體在圖片中出現的次數(把小目標扣下來貼到原圖中去),提升被anchor包含的概率。
如上圖右下角,本來只有一個小目標,對應的anchor數量為3個,現在將其復制三份,則在圖中就出現了四個小目標,對應的anchor數量也就變成了12個,大大增加了這個小目標被檢出的概率。從而讓模型在訓練的過程中,也能夠有機會得到更多的小目標訓練樣本。
具體的實現方式如下圖:圖中網球和飛碟都是小物體,本來圖中只有一個網球,一個飛碟,通過人工復制的方式,在圖像中復制多份。同時要保證復制後的小物體不能夠覆蓋該原來存在的目標。
網上有人說可以試一下lucid data dreaming Lucid Data Dreaming for Multiple Object Tracking ,這是一種在視頻跟蹤/分割裡面比較有效的數據增強手段,據說對於小目標物體檢測也很有效。
基於無人機拍攝圖片的檢測目前也是個熱門研究點(難點是目標小,密度大)。
相關論文:
The Unmanned Aerial Vehicle Benchmark: Object Detection and Tracking(數據集)
Drone-based Object Counting by Spatially Regularized Regional Proposal Network
Simultaneously Detecting and Counting Dense Vehicles from Drone Images
Vision Meets Drones: A Challenge(數據集)
1: https://zhuanlan.hu.com/p/55824651
2: https://zhuanlan.hu.com/p/57760020
3: https://www.hu.com/question/269877902/answer/548594081
4: https://zhuanlan.hu.com/p/60033229
5: https://arxiv.org/abs/1902.07296
6: http://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Perceptual_Generative_Adversarial_CVPR_2017_paper.pdf
7: http://openaccess.thecvf.com/content_cvpr_2017/papers/Lin_Feature_Pyramid_Networks_CVPR_2017_paper.pdf
③ 計算機視覺——典型的目標檢測演算法(OverFeat演算法)(二)
【嵌牛導讀】目標檢測在現實中的應用很廣泛,我們需要檢測數字圖像中的物體位置以及類別,它需要我們構建一個模型,模型的輸入一張圖片,模型的輸出需要圈出圖片中所有物體的位置以及物體所屬的類別。在深度學習浪潮到來之前,目標檢測精度的進步十分緩慢,靠傳統依靠手工特徵的方法來提高精度已是相當困難的事。而ImageNet分類大賽出現的卷積神經網路(CNN)——AlexNet所展現的強大性能,吸引著學者們將CNN遷移到了其他的任務,這也包括著目標檢測任務,近年來,出現了很多目標檢測演算法。
【嵌牛鼻子】計算機視覺
【嵌牛提問】如何理解目標檢測演算法——OverFeat
【嵌牛正文】
一、深度學習的典型目標檢測演算法
深度學習目標檢測演算法主要分為 雙階段檢測演算法 和 單階段檢測演算法 ,如圖1所示。
雙階段目標檢測演算法先對圖像提取候選框,然後基於候選區域做二次修正得到檢測結果,檢測精度較高,但檢測速度較慢;單階段目標驗測演算法直接對圖像進行計算生成檢測結果,檢測速度快,但檢測精度低。
1、雙階段目標檢測演算法
雙階段目標檢測方法主要通過選擇性搜索(Selective Search)或者Edge Boxes等演算法對輸入圖像選取可能包含檢測目標的候選區域(Region Proposal),再對候選區域進行分類和位置回歸以得到檢測結果。
1.1 OverFeat 演算法
《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks》
Sermanet 等改進AlexNet 提出 OverFeat 演算法。該演算法結合AlexNet通過多尺度滑動窗口實現特徵提取功能,並且共享特徵提取層,應用於圖像分類、定位和目標檢測等任務。
關鍵技術:
1、FCN( 全卷積神經網路 )
對於一個各層參數結構都設計好的網路模型,要求輸入圖片的尺寸是固定的(例如,Alexnet要求輸入圖片的尺寸為227px*227px)。如果輸入一張500*500的圖片,希望模型仍然可以一直前向傳導,即一個已經設計完畢的網路,可以輸入任意大小的圖片,這就是FCN。
FCN的思想在於:
1、從卷積層到全連接層,看成是對一整張圖片的卷積層運算。
2、從全連接層到全連接層,看成是採用1*1大小的卷積核,進行卷積層運算。
如上圖所示,綠色部分代表卷積核大小。假設一個CNN模型,其輸入圖片大小是14*14,通過第一層卷積後得到10*10大小的圖片,然後接著通過池化得到了5*5大小的圖片。像但是對於像素值為5*5的圖片到像素值為1*1的圖片的過程中:
(1)傳統的CNN:如果從以前的角度進行理解的話,那麼這個過程就是全連接層,我們會把這個5*5大小的圖片,展平成為一維向量進行計算。
(2)FCN:FCN並不是把5*5的圖片展平成一維向量再進行計算,而是直接採用5*5的卷積核,對一整張圖片進行卷積運算。
二者本質上是相同的,只是角度不同,FCN把這個過程當成了對一整張特徵圖進行卷積,同樣,後面的全連接層也是把它當做是以1*1大小的卷積核進行卷積運算。
當輸入一張任意大小的圖片,就需要利用以上所述的網路,例如輸入一張像素為16*16的圖片:
根據上圖,該網路最後的輸出是一張2*2的圖片。可見採用FCN網路可以輸入任意大小的圖片。同時需要注意的是網路最後輸出的圖片大小不在是一個1*1大小的圖片,而是一個與輸入圖片大小息息相關的一張圖片。
Overfeat就是把採用FCN的思想把全連接層看成了卷積層,在網路測試階段可以輸入任意大小的圖片。
2、offset max-pooling
簡單起見,不用二維的圖像作為例子,而是採用一維作為示例:
如上圖所示,在X軸上有20個神經元,並且選擇池化size=3的非重疊池化,那麼根據之前所學的方法應該是:對上面的20個神經元,從1位置開始進行分組,每3個連續的神經元為一組,然後計算每組的最大值(最大池化),19、20號神經元將被丟棄,如下圖所示:
或者可以在20號神經元後面,添加一個數值為0的神經元編號21,與19、20成為一組,這樣可以分成7組:[1,2,3],[4,5,6]……,
[16,17,18],[19,20,21],最後計算每組的最大值。
如果只分6組,除了以1作為初始位置進行連續組合之外,也可以從位置2或者3開始進行組合。也就是說其實有3種池化組合方法:
A、△=0分組:[1,2,3],[4,5,6]……,[16,17,18];
B、△=1分組:[2,3,4],[5,6,7]……,[17,18,19];
C、△=2分組:[3,4,5],[6,7,8]……,[18,19,20];
對應圖片如下:
以往的CNN中,一般只用△=0的情況,得到池化結果後,就送入了下一層。但是該文獻的方法是,把上面的△=0、△=1、△=2的三種組合方式的池化結果,分別送入網路的下一層。這樣的話,網路在最後輸出的時候,就會出現3種預測結果了。
前面所述是一維的情況,如果是2維圖片的話,那麼(△x,△y)就會有9種取值情況(3*3);如果我們在做圖片分類的時候,在網路的某一個池化層加入了這種offset 池化方法,然後把這9種池化結果,分別送入後面的網路層,最後的圖片分類輸出結果就可以得到9個預測結果(每個類別都可以得到9種概率值,然後我們對每個類別的9種概率,取其最大值,做為此類別的預測概率值)。
演算法原理:
文獻中的演算法,就是把這兩種思想結合起來,形成了文獻最後測試階段的演算法。
1、論文的網路架構與訓練階段
(1)網路架構
對於網路的結構,文獻給出了兩個版本——快速版、精確版,一個精度比較高但速度慢;另外一個精度雖然低但是速度快。下面是高精度版本的網路結構表相關參數:
表格參數說明:
網路輸入:圖片大小為221px*221px;
網路結構方面基本上和AlexNet相同,使用了ReLU激活,最大池化。不同之處在於:(a)作者沒有使用局部響應歸一化層;(b)然後也沒有採用重疊池化的方法;(c)在第一層卷積層,stride作者是選擇了2,這個與AlexNet不同(AlexNet選擇的跨步是4,在網路中,如果stride選擇比較大得話,雖然可以減少網路層數,提高速度,但是卻會降低精度)。
需要注意的是把f7這一層,看成是卷積核大小為5*5的卷積層,總之就是需要把網路看成前面所述的FCN模型,去除了全連接層的概念,因為在測試階段可不是僅僅輸入221*221這樣大小的圖片,在測試階段要輸入各種大小的圖片,具體請看後面測試階段的講解。
(2)網路訓練
訓練輸入:對於每張原圖片為256*256,然後進行隨機裁剪為221*221的大小作為CNN輸入,進行訓練。
優化求解參數設置:訓練的min-batchs選擇128,權重初始化選擇高斯分布的隨機初始化:
然後採用隨機梯度下降法,進行優化更新,動量項參數大小選擇0.6,L2權重衰減系數大小選擇10-5次方。學習率初始化值為0.05,根據迭代次數的增加,每隔幾十次的迭代後,就把學習率的大小減小一半。
然後就是DropOut,這個只有在最後的兩個全連接層,才採用dropout,dropout比率選擇0.5。
2、網路測試階段
在Alexnet的文獻中,預測方法是輸入一張圖片256*256,然後進行multi-view裁剪,也就是從圖片的四個角進行裁剪,還有就是一圖片的中心進行裁剪,這樣可以裁剪到5張224*224的圖片。然後把原圖片水平翻轉一下,再用同樣的方式進行裁剪,又可以裁剪到5張圖片。把這10張圖片作為輸入,分別進行預測分類,在後在softmax的最後一層,求取個各類的總概率,求取平均值。
然而Alexnet這種預測方法存在兩個問題:
一方面這樣的裁剪方式,把圖片的很多區域都給忽略了,這樣的裁剪方式,剛好把圖片物體的一部分給裁剪掉了;
另一方面,裁剪窗口重疊存在很多冗餘的計算,像上面要分別把10張圖片送入網路,可見測試階段的計算量還是較大的。
Overfeat演算法:
訓練完上面所說的網路之後,在測試階段不再是用一張221*221大小的圖片了作為網路的輸入,而是用了6張大小都不相同的圖片,也就是所謂的多尺度輸入預測,如下表格所示:
當網路前向傳導到layer 5的時候,就利用了前面所述的FCN、offset pooling這兩種思想的相結合。現以輸入一張圖片為例(6張圖片的計算方法都相同),講解layer 5後面的整體過程,具體流程示意圖如下:
步驟一:
對於某個尺度的圖片,經過前五層的卷積後得到特徵圖。上圖中特徵圖的解析度是20x23,256個通道。
步驟二:
對於該特徵圖,重復多次使用非重疊的池化,每次池化的偏置不同,有行偏置和列偏置。上圖中偏置池化3次,偏置分別為為(0,1,2)。這就是offset pooling,也被稱為fine stride。offset pooling得到的特徵圖的維度為6x7x3x3xD,其中6x7是特徵圖的解析度,3x3是偏置池化的次數,D是通道數。上圖中是以1維顯示的。
步驟三:
池化後得到的特徵圖將被送入分類器。
步驟四:
分類器的輸入是的5x5xD,輸出是C(類別數)維向量。但是offset pooling後得到的特徵圖並不是5x5xD,比如上圖中的特徵圖大小為6x7xD,因此分類器以滑動窗口的方式應用在特徵圖上,每個滑動窗口經過分類器輸出一個C維向量。比如上圖中輸入的6x7xD的特徵圖最終得到2x3xC的輸出,其中2x3是滑動窗口的個數。
步驟五:
而2x3xC只是一組偏置池化的輸出,總的輸出為2x3x3x3xC,將輸出的張量reshape,得到6x9xC輸出張量。最終輸出分類張量為3d張量,即兩個解析度維度 x C維。
然後需要在後面把它們拉成一維向量,這樣在一個尺度上,可以得到一個C*N個預測值矩陣,每一列就表示圖片屬於某一類別的概率值,並且求取每一列的最大值,作為本尺度的每個類別的概率值。
最後一共用了6種不同尺度(文獻使用了12張,另外6張是水平翻轉的圖片)進行做預測,然後把這六種尺度結果再做一個平均,作為最最後的結果。
從上面過程可以看到整個網路分成兩部分:layer 1~5這五層稱之為特徵提取層;layer 6~output稱之為分類層。
六、定位任務
用於定位任務的時候,就把分類層(上面的layer 6~output)給重新設計一下,把分類改成回歸問題,然後在各種不同尺度上訓練預測物體的bounding box。