Transformer在計(jì)算機(jī)視覺(jué)中的應(yīng)用

2018Google AI研究院提出了一種預(yù)訓(xùn)練模型BERT仔拟,該模型在11項(xiàng)NLP任務(wù)中奪得SOTA結(jié)果,而BERT取得成功的一個(gè)關(guān)鍵因素是Transformer的強(qiáng)大作用身诺。Transformer改進(jìn)了RNN最被人詬病的訓(xùn)練慢的缺點(diǎn),利用self-attention機(jī)制實(shí)現(xiàn)快速并行抄囚。并且Transformer可以增加到非常深的深度霉赡,充分發(fā)掘DNN模型的特性,提升模型準(zhǔn)確率幔托。由此Transformer也開(kāi)始走進(jìn)不同領(lǐng)域深度學(xué)習(xí)算法工程師們的視野穴亏。本文從Transformer的基礎(chǔ)原理和在一些領(lǐng)域的代表性論文來(lái)總結(jié)對(duì)Transformer在計(jì)算機(jī)視覺(jué)領(lǐng)域中的應(yīng)用。

BERT

Transformer 基本原理

Transformer這一結(jié)構(gòu)的概念本身可以追溯到Google2017年的一篇論文Attention Is All You Need。該論文首次沒(méi)有使用LSTMRNN結(jié)構(gòu)來(lái)構(gòu)建NLP任務(wù)的神經(jīng)網(wǎng)絡(luò)嗓化,也沒(méi)有像FAIR一樣通過(guò)CNN來(lái)實(shí)現(xiàn)自然語(yǔ)言翻譯锅劝,而是僅使用Attention模塊堆疊就能夠出色的完成相關(guān)的任務(wù)。Google給這個(gè)多層Attention堆疊的結(jié)構(gòu)起名為Transformer蟆湖。由下圖可以看出故爵,一個(gè)標(biāo)準(zhǔn)的Transformer由一個(gè)encoder和一個(gè)decoder組成,encoder包括一個(gè)自注意力層和一個(gè)前饋神經(jīng)網(wǎng)絡(luò)隅津,decoder包括一個(gè)自注意力層诬垂、一個(gè)編碼-解碼注意力層和一個(gè)前饋神經(jīng)網(wǎng)絡(luò)。

transformer

Transformer中比較重要的幾個(gè)結(jié)構(gòu)是Scaled Dot-Product Attention伦仍、 Multi-Head Attention结窘、 Position-wise Feed-Forward NetworksPositional Encoding

Scaled Dot-Product Attention通過(guò)Q充蓝、K隧枫、V對(duì)embedding后的數(shù)據(jù)進(jìn)行Attention的計(jì)算,其分別對(duì)應(yīng)的是Query谓苟,KeyValue官脓。

Multi-Head Attention則是通過(guò)h個(gè)不同的線性變換對(duì)QK涝焙,V進(jìn)行投影卑笨,最后將不同的attention結(jié)果拼接起來(lái)。

Position-wise feed-forward networks這層主要是提供非線性變換仑撞。Attention輸出的維度是[bszseq_len, num_headshead_size]赤兴,第二個(gè)sub-layer是個(gè)全連接層,之所以是position-wise是因?yàn)檫^(guò)線性層時(shí)每個(gè)位置i的變換參數(shù)是一樣的隧哮。

Transformer拋棄了RNN桶良,而RNN最大的優(yōu)點(diǎn)就是在時(shí)間序列上對(duì)數(shù)據(jù)的抽象,所以文章中作者提出兩種Positional Encoding的方法沮翔,將encoding后的數(shù)據(jù)與embedding數(shù)據(jù)求和陨帆,加入了相對(duì)位置信息。

attention

一次self-attention的運(yùn)算可以通過(guò)以下步驟完成:

  1. 從每個(gè)編碼器的輸入向量(每個(gè)單詞的詞向量)中生成三個(gè)向量鉴竭。也就是說(shuō)對(duì)于每個(gè)單詞歧譬,我們創(chuàng)造一個(gè)查詢向量Q岸浑、一個(gè)鍵向量K和一個(gè)值向量V搏存。這三個(gè)向量是通過(guò)詞嵌入與三個(gè)權(quán)重矩陣后相乘創(chuàng)建的。假設(shè)詞向量x的大小為1x4矢洲,權(quán)重矩陣Wq的大小為4x3璧眠,其相乘后就可以得到大小為1x3的查詢向量q

  2. 假設(shè)我們?yōu)榈谝粋€(gè)詞Thinking計(jì)算自注意力向量,我們需要拿輸入句子中的每個(gè)單詞對(duì)Thinking打分责静。這些分?jǐn)?shù)決定了在編碼單詞Thinking的過(guò)程中有多重視句子的其它部分袁滥。這些分?jǐn)?shù)是通過(guò)打分單詞(所有輸入句子的單詞)的鍵向量與Thinking的查詢向量相點(diǎn)積來(lái)計(jì)算的。所以如果我們是處理位置最靠前的詞的自注意力的話灾螃,第一個(gè)分?jǐn)?shù)是q1k1的點(diǎn)積题翻,第二個(gè)分?jǐn)?shù)是q1k2的點(diǎn)積。

  3. 將分?jǐn)?shù)除以8(8是論文中使用的鍵向量的維數(shù)64的平方根腰鬼,這會(huì)讓梯度更穩(wěn)定嵌赠。這里也可以使用其它值,8只是默認(rèn)值)熄赡,然后通過(guò)softmax傳遞結(jié)果姜挺。softmax的作用是使所有單詞的分?jǐn)?shù)歸一化,得到的分?jǐn)?shù)都是正值且和為1彼硫。這個(gè)softmax分?jǐn)?shù)決定了每個(gè)單詞對(duì)編碼當(dāng)下位置單詞的貢獻(xiàn)炊豪。顯然,已經(jīng)在這個(gè)位置上的單詞將獲得最高的softmax分?jǐn)?shù)拧篮,但有時(shí)關(guān)注另一個(gè)與當(dāng)前單詞相關(guān)的單詞也會(huì)有幫助词渤。

  4. 將每個(gè)值向量乘以softmax分?jǐn)?shù),這里的直覺(jué)是希望關(guān)注語(yǔ)義上相關(guān)的單詞串绩,并弱化不相關(guān)的單詞(例如掖肋,讓它們乘以0.001這樣的小數(shù))。

  5. 對(duì)加權(quán)值向量求和赏参,然后即得到自注意力層在該位置的輸出志笼。自注意力的另一種解釋就是在編碼某個(gè)單詞時(shí),就是將所有單詞的表示(值向量)進(jìn)行加權(quán)求和把篓,而權(quán)重是通過(guò)該詞的表示(鍵向量)與被編碼詞表示(查詢向量)的點(diǎn)積并通過(guò)softmax得到纫溃。

    self-attention`

Multi-Head Attention為每個(gè)頭保持獨(dú)立的查詢/鍵/值權(quán)重矩陣,從而產(chǎn)生不同的查詢/鍵/值矩陣韧掩。這些集合中的每一個(gè)都是隨機(jī)初始化的紊浩,在訓(xùn)練之后,每個(gè)集合都被用來(lái)將輸入詞嵌入(或來(lái)自較低編碼器/解碼器的向量)投影到不同的表示子空間中疗锐。它擴(kuò)展了模型專(zhuān)注于不同位置的能力并且給出了注意力層的多個(gè)“表示子空間”坊谁。

multi-head-attention`

為了理解輸入單詞的順序,Transformer為每個(gè)輸入的詞嵌入添加了一位置個(gè)向量滑臊。這些向量遵循模型學(xué)習(xí)到的特定模式口芍,這有助于確定每個(gè)單詞的位置,或序列中不同單詞之間的距離雇卷。這里的直覺(jué)是鬓椭,將位置向量添加到詞嵌入中使得它們?cè)诮酉聛?lái)的運(yùn)算中颠猴,能夠更好地表達(dá)的詞與詞之間的距離。論文中使用了sincos的方法進(jìn)行位置編碼小染,其中pos是位置翘瓮,i是維度。

sin\cos
position1
position2

視覺(jué)應(yīng)用

雖然Transformer結(jié)構(gòu)在NLP領(lǐng)域得到了廣泛的應(yīng)用裤翩,但是在視覺(jué)領(lǐng)域的應(yīng)用仍然有限资盅。在視覺(jué)領(lǐng)域,attention或者是和CNN網(wǎng)絡(luò)共同使用或者是代替CNN中特定的組件踊赠。想要將 Transformer應(yīng)用到視覺(jué)任務(wù)中律姨,我們首先需要構(gòu)建一些類(lèi)似于VGGResNet之類(lèi)的backbone臼疫。

Backbone

VIT

github: Implementation of Vision Transformer, a simple way to achieve SOTA in vision classification with only a single transformer encoder, in Pytorch

VIT(VISION TRANSFORMER)Google2020年提出的一種使用Transformer進(jìn)行圖像分類(lèi)的backbone择份。

VIT在模型結(jié)構(gòu)上保持了和原版Transformer相近。為將2D圖像變成對(duì)應(yīng)的1-D的序列patch embedding輸入烫堤,對(duì)于一張圖像 荣赶,首先將其切分成為N個(gè)PxPpatch,其中N=WH / P^2鸽斟,最終獲得N個(gè)P^2 ? C大小的矩陣拔创。然后將圖像拉平轉(zhuǎn)化為一維的序列輸入,并通過(guò)MLP層將其線性映射到一個(gè)固定的維度富蓄,實(shí)現(xiàn)embedding的效果剩燥。作者指出,圖像塊序列可以來(lái)自于原始圖像立倍,也可以來(lái)自于CNN的特征圖灭红。對(duì)于CNN特征圖,甚至可以將區(qū)塊大小設(shè)置為1*1口注。

作者在經(jīng)過(guò)Embedding后的序列的最前面加上了一個(gè)D維的class embedding变擒,類(lèi)似于BERT中的class token,在positional encoding之后一起作為 transformer encoder的輸入寝志。輸出部分娇斑,VIT去掉了decoder的部分,encoder得到的特征直接送入MLP head材部,最后通過(guò)softmax進(jìn)行分類(lèi)處理毫缆。

VIT
result

DeiT

github: facebookresearch/deit: Official DeiT repository

DeiT(Data-efficient Image Transformers)facebookresearch2021年提出的一種基于知識(shí)蒸餾來(lái)學(xué)習(xí)的image transformer。相比VIT乐导,DeiT需要更少的數(shù)據(jù)和更少的計(jì)算資源就能生成高性能的圖像分類(lèi)模型苦丁。研究人員僅用一臺(tái) 8-GPU 的服務(wù)器對(duì) DeiT 模型進(jìn)行 3 天訓(xùn)練,該方法就在 ImageNet 基準(zhǔn)測(cè)試中達(dá)到了84.2%top-1 準(zhǔn)確率兽叮,并且訓(xùn)練階段未使用任何外部數(shù)據(jù)芬骄,該結(jié)果可以與頂尖的卷積神經(jīng)網(wǎng)絡(luò)媲美。

perf

DeiT首個(gè)重要的組件是其訓(xùn)練策略鹦聪。研究者在最初用于卷積神經(jīng)網(wǎng)絡(luò)的現(xiàn)有研究基礎(chǔ)上進(jìn)行了調(diào)整與改進(jìn)账阻,并提出了一種基于蒸餾token的新型蒸餾流程,它的作用與class token相同泽本,不過(guò)其目的在于復(fù)制教師網(wǎng)絡(luò)估計(jì)的標(biāo)簽淘太。實(shí)驗(yàn)結(jié)果表明,這種特定Transformer策略大幅度優(yōu)于vanilla蒸餾方法规丽。

蒸餾流程如下圖所示蒲牧。研究者僅添加了一個(gè)新的蒸餾token,它通過(guò)自注意力層與class tokenpatch token交互作用赌莺。蒸餾token的作用與class token類(lèi)似冰抢,不過(guò)前者的目的是復(fù)制教師網(wǎng)絡(luò)預(yù)測(cè)的(硬)標(biāo)簽,而不是正確標(biāo)簽艘狭。Transformerclass token和蒸餾token輸入均通過(guò)反向傳播學(xué)得挎扰。

ViTclass token類(lèi)似,distillation token是在圖像塊序列后面加上的token巢音。然后它經(jīng)過(guò)transformer encoder之后的輸出用于和teacher model 的輸出計(jì)算loss遵倦。作者發(fā)現(xiàn)class tokendistillation token會(huì)收斂于不同的向量,cos距離為0.06官撼,隨著層數(shù)的加深梧躺,兩者embedding的相似度逐漸上升,最終cos距離為0.93傲绣,說(shuō)明他們希望得到相似但不相同的target掠哥。為了證明distillation token的有效是由于knowledge distillation的作用,而不是只由于多了一個(gè)token導(dǎo)致的秃诵,作者做了對(duì)比試驗(yàn)龙致,不是在后面加distillation token,而是再加一個(gè)class token顷链,發(fā)現(xiàn)他們最終收斂結(jié)果的相似性達(dá)到0.999目代,并且性能弱于前者,證明了加入distillation token的意義嗤练。

DeiT
result2

TNT

github:lucidrains/transformer-in-transformer: Implementation of Transformer in Transformer, pixel level attention paired with patch level attention for image classification, in Pytorch

TNT是華為諾亞實(shí)驗(yàn)室在2021年提出的一種基于Transformer的網(wǎng)絡(luò)架構(gòu)榛了。TNT通過(guò)內(nèi)外兩個(gè)Transformer聯(lián)合提取圖像局部和全局特征,通過(guò)堆疊TNT模塊煞抬,研究者搭建了全新的純Transformer網(wǎng)絡(luò)架構(gòu)霜大。作者表示它的表現(xiàn)優(yōu)于谷歌的ViTFacebookDeiT

TNT網(wǎng)絡(luò)主要由若干個(gè)TNT block堆疊構(gòu)成革答。TNT block有 2 個(gè)輸入战坤,一個(gè)是pixel embedding曙强,一個(gè)是patch embedding。對(duì)應(yīng)地途茫,TNT block包含 2 個(gè)標(biāo)準(zhǔn)的transformer block碟嘴。對(duì)于輸入的圖像,TNTVIT一樣將圖像切塊囊卜,構(gòu)成patch序列娜扇。不過(guò)TNT不把patch拉直為向量,而是將patch看作像素(組)的序列栅组。

具體地說(shuō)雀瓢,TNT將圖像轉(zhuǎn)化成patch embedding序列和pixel embedding序列。圖像首先被均勻切分成若干個(gè)patch玉掸,每個(gè)patch通過(guò)im2col操作轉(zhuǎn)化成像素向量序列刃麸,像素向量通過(guò)pytorch unfold操作將patch轉(zhuǎn)化成m個(gè)像素向量,然后用一個(gè)全連接層將m個(gè)像素向量映射為m個(gè)pixel embedding司浪。而patch embedding(包括一個(gè) class token)是一組初始化為零的向量嫌蚤。對(duì)每個(gè)patch embedding加一個(gè)patch position encoding,對(duì)每個(gè)pixel embedding加一個(gè)pixel position encoding断傲,兩種 Position encoding在訓(xùn)練過(guò)程中都是可學(xué)習(xí)的參數(shù)脱吱。最終,TNT block 輸出處理過(guò)后的pixel embeddingpatch embedding认罩,最后通過(guò)一個(gè)MLP層輸出結(jié)果箱蝠。

TNT
patch
result

ViT G/14

2021年,GoogleViT團(tuán)隊(duì)的幾位成員又嘗試將ViT模型進(jìn)行擴(kuò)展垦垂,使用到了包含30億圖像的JFT-3B數(shù)據(jù)集宦搬,并提出了參數(shù)量高達(dá)20億參數(shù)的ViT變體模型ViT G/14,在ImageNet圖像數(shù)據(jù)集上實(shí)現(xiàn)了新的SOTA Top-1準(zhǔn)確率劫拗。論文主要研究了預(yù)訓(xùn)練ViT模型用于圖像分類(lèi)任務(wù)的遷移性能的擴(kuò)展規(guī)則间校。特別是,研究者試驗(yàn)了從500萬(wàn)到20億個(gè)參數(shù)不等的模型页慷、從3000萬(wàn)到30億個(gè)訓(xùn)練圖像不等的數(shù)據(jù)集以及從低于 1個(gè) TPUv3 核每天到超過(guò)10000個(gè)核每天的計(jì)算預(yù)算憔足。其主要貢獻(xiàn)是描述ViT模型的性能計(jì)算邊界。

result

具體任務(wù)

檢測(cè)

github: facebookresearch/detr: End-to-End Object Detection with Transformers

DETRfacebookresearch2020年提出的一種基于Transformer的目標(biāo)檢測(cè)模型酒繁。整個(gè)DETR架構(gòu)很容易理解滓彰,它包含三個(gè)主要組件:CNNbackbonetransformer的編碼器-解碼器和一個(gè)前饋網(wǎng)絡(luò)州袒。通過(guò)卷積backbone得到的feature map拉平成一維特征圖揭绑,加上position信息之后送到基于Transformer的編碼器。該編碼器的輸出是N個(gè)固定長(zhǎng)度的embedding feature郎哭,其中N是模型假設(shè)的圖像中的對(duì)象數(shù)他匪,論文中N=100菇存。基于Transformer的解碼器借助自身和編碼器-解碼器注意機(jī)制將這些特征并行解碼為邊界框坐標(biāo)邦蜜。最后依鸥,前饋神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)邊界框的標(biāo)準(zhǔn)化中心坐標(biāo),高度和寬度畦徘,最后的線性層使用softmax函數(shù)預(yù)測(cè)類(lèi)別標(biāo)簽毕籽。

DETR
DETR

DETR有趣的地方在于抬闯,DETR給予一組固定的可學(xué)習(xí)的目標(biāo)query集合井辆,推理目標(biāo)坐標(biāo)和圖片上下文直接輸出最終的預(yù)測(cè)結(jié)果。也就是其一次性預(yù)測(cè)所有的目標(biāo)溶握,而不是先找出所有的候選框杯缺,然后通過(guò)手工設(shè)計(jì)的組件(編碼先驗(yàn)錨框或者NMS處理)來(lái)過(guò)濾出真正的物體。從直覺(jué)上DETR的方式更接近人的識(shí)別方式睡榆,也可以將DETR視為一種No Anchor的方法萍肆。個(gè)人感覺(jué)是通過(guò)position embeddingquery代替了anchor

圖中的object queries是一組可以學(xué)習(xí)的變量的集合胀屿,從作者的代碼中能夠看出其是一個(gè)大小為100 × 2 × 256的變量塘揣。這里的100是個(gè)超參數(shù),表示對(duì)于每張圖片宿崭,預(yù)測(cè)100個(gè)bboxes亲铡。設(shè)為100的原因是數(shù)據(jù)集中有90個(gè)類(lèi)別,100剛好合適葡兑。object queries的意思就是告訴模型要100個(gè)實(shí)例奖蔓,然后decoder根據(jù)得到特征的位置和顯著性解碼出100個(gè)instance,其中部分是前景部分是背景讹堤,前景的就class loss+box loss吆鹤,背景的就當(dāng)背景。

最后N個(gè)預(yù)測(cè)值與真值是如何對(duì)應(yīng)的呢洲守,文中通過(guò)匈牙利算法來(lái)實(shí)現(xiàn)的二分最大匹配疑务。所謂二分的最大匹配,即保證預(yù)測(cè)值與真值實(shí)現(xiàn)最大的匹配梗醇,保證預(yù)測(cè)的N個(gè)實(shí)例(包括?)按照位置與真值對(duì)應(yīng)起來(lái)暑始。實(shí)現(xiàn)一一對(duì)應(yīng)之后,便能夠利用分類(lèi)Loss以及boundingbox Loss進(jìn)行優(yōu)化婴削。這種一一對(duì)應(yīng)的關(guān)系廊镜,同時(shí)也另一個(gè)好處是,不會(huì)多個(gè)預(yù)測(cè)值對(duì)應(yīng)到同一個(gè)真實(shí)值上唉俗,然后再通過(guò)NMS進(jìn)行后處理嗤朴。

分割

github: Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers

SETR是在CVPR 2021上提出的一種基于Transformer的語(yǔ)義分割模型配椭。整體結(jié)構(gòu)基本如下圖所示,ViT作為encoder加上一個(gè)卷積組成的decoder雹姊,這個(gè)decoder也是常規(guī)的上采樣加上跨特征融合股缸。根據(jù)最后的實(shí)驗(yàn)結(jié)果,個(gè)人感覺(jué)文章證明了一次卷積特征疊加許多個(gè)transformer的情況下吱雏,配合巨量數(shù)據(jù)的pretrain敦姻,也能達(dá)到同類(lèi)卷積分割模型的效果。不過(guò)這個(gè)Transformer的參數(shù)量和運(yùn)行速度都與現(xiàn)有的語(yǔ)義分割模型相差很大歧杏,基本做不到實(shí)用的地步镰惦。

SETR

車(chē)道線檢測(cè)

github: liuruijin17/LSTR: This is an official repository of End-to-end Lane Shape Prediction with Transformers

LSTR是在WACV 2021上提出的一種基于Transformer的車(chē)道線檢測(cè)模型,能夠在1080TI的顯卡上實(shí)現(xiàn)420 FPS的檢測(cè)速度犬绒。作者借助于對(duì)車(chē)道線曲線和相機(jī)內(nèi)參的描述旺入,采用多項(xiàng)式參數(shù)模型來(lái)描述車(chē)道線,并配以Bipartite Matching Loss函數(shù)凯力,實(shí)現(xiàn)端到端訓(xùn)練茵瘾,網(wǎng)絡(luò)的目標(biāo)成為預(yù)測(cè)幾個(gè)參數(shù),這無(wú)需后處理且降低了計(jì)算量咐鹤。

網(wǎng)絡(luò)的backboneResNet18拗秘,通過(guò)8倍的下采樣取得特征后送入一個(gè)Transformer模塊,這一塊基本和vit類(lèi)似祈惶。使用Transformer的原因是雕旨,對(duì)于細(xì)長(zhǎng)線條Transformer能學(xué)習(xí)更豐富的結(jié)構(gòu)和上下文信息。LSTR預(yù)測(cè)的值并不是圖片上的像素坐標(biāo)行瑞,而是車(chē)道線近似為一條三次曲線后從道路到圖片上的投影方程的參數(shù)奸腺,學(xué)到參數(shù)后通過(guò)y來(lái)計(jì)算x的位置。對(duì)于預(yù)測(cè)N條固定的曲線(N大于典型數(shù)據(jù)集中車(chē)道線數(shù)量的最大值)血久,預(yù)測(cè)的曲線為H突照,真實(shí)曲線的像素排列為s ,真實(shí)曲線為L氧吐。Bipartite matching求的是預(yù)測(cè)曲線與真實(shí)曲線之間的距離讹蘑,目標(biāo)是使得距離之和最少(其中使用了Hungarian algorithm)。這種方法求解三次方程速度比較快筑舅,但是對(duì)水平線相當(dāng)?shù)牟挥押谩?/p>

LSTR
LSTR-EN-DE
result

ReID

github: michuanhaohao/AICITY2021_Track2_DMT: The 1st place solution of track2 (Vehicle Re-Identification) in the NVIDIA AI City Challenge at CVPR 2021 Workshop. (github.com)

DMT是在CVPR 2021上提出的一種基于Transformer的車(chē)輛ReID模型座慰,同時(shí)也是NVIDIA AI CITY Challenge 2021 Track2的冠軍方案京郑。具體結(jié)構(gòu)沒(méi)什么好說(shuō)的涌矢,把去年的冠軍方案的ResNet101backbone換成了VITloss和訓(xùn)練策略還是常規(guī)的ReID思路吨瞎。此外作者還用到了UDA Training,即用聚類(lèi)的方法給測(cè)試集分配偽標(biāo)簽然后用來(lái)訓(xùn)練蛮粮。

DMT

除了TransformerbackboneUDA Training益缎,在測(cè)試過(guò)程中還用到了Augmentation TestRe-Ranking然想, Weighted Tracklet Features 莺奔,Camera VerificationInter-Camera FusionCamera and Orientation Bias 等技巧來(lái)提升測(cè)試結(jié)果变泄。

result

Reference

圖解Transformer(完整版)_龍心塵-CSDN博客_transformer
Attention Is All You Need
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
Training data-efficient image transformers & distillation through attention
Transformer in Transformer
Scaling Vision Transformers
End-to-End Object Detection with Transformers
Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers
End-to-end Lane Shape Prediction with Transformers
An Empirical Study of Vehicle Re-Identification on the AI City Challenge

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末令哟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子妨蛹,更是在濱河造成了極大的恐慌屏富,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滑燃,死亡現(xiàn)場(chǎng)離奇詭異役听,居然都是意外死亡颓鲜,警方通過(guò)查閱死者的電腦和手機(jī)表窘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)甜滨,“玉大人乐严,你說(shuō)我怎么就攤上這事∫履Γ” “怎么了昂验?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)艾扮。 經(jīng)常有香客問(wèn)我既琴,道長(zhǎng),這世上最難降的妖魔是什么泡嘴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任甫恩,我火速辦了婚禮,結(jié)果婚禮上酌予,老公的妹妹穿的比我還像新娘磺箕。我一直安慰自己,他們只是感情好抛虫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布松靡。 她就那樣靜靜地躺著,像睡著了一般建椰。 火紅的嫁衣襯著肌膚如雪雕欺。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音屠列,去河邊找鬼蛛枚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脸哀,可吹牛的內(nèi)容都是我干的蹦浦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼撞蜂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼盲镶!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蝌诡,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤溉贿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后浦旱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體宇色,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年颁湖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宣蠕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡甥捺,死狀恐怖抢蚀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情镰禾,我是刑警寧澤皿曲,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站吴侦,受9級(jí)特大地震影響屋休,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜备韧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一劫樟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盯蝴,春花似錦毅哗、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至闽烙,卻和暖如春翅睛,著一層夾襖步出監(jiān)牢的瞬間声搁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工捕发, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疏旨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓扎酷,卻偏偏與公主長(zhǎng)得像檐涝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子法挨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容