YOLO(一) 算法的原理及演變

第一次接觸到y(tǒng)olo這個算法是通過吳恩達的教學(xué)視頻了解到的驼侠,當(dāng)時其實也算是第一次接觸到目標(biāo)檢測算法。這里我們主要介紹下YOLO(You Only Look Once)∽晃猓現(xiàn)在已經(jīng)進化到了V3版本了倒源。它不同于Faster RCNN這個分支走的兩部策略先進行前景識別在進行目標(biāo)檢測,它是直接一步到位進行目標(biāo)檢測句狼。因此在識別的速度上優(yōu)于Faster RCNN(5 FPS), 而 YOLO_v1基礎(chǔ)版在Titan X GPU上可以達到45幀/s笋熬; 快速版可以達到150幀/s。但是在準(zhǔn)確率上YOLO是稍差與Faster RCNN這個在之后會詳細(xì)介紹腻菇。順便提下如果想了解Faster RCNN原理可以參考Faster-RCNN的原理及演變胳螟。

YOLO v1


我們知道YOLO其實就是 You Only Look Once, 意思是只需要看一眼就知道位置及對象,個人覺得蠻形象的芜繁。他不需要Faster RCNN的RPN結(jié)構(gòu)旺隙,他其實選取anchor是預(yù)訂了候選框绒极,將圖片劃分為7x7的網(wǎng)格骏令,每個網(wǎng)格允許有2個不同的bounding box. 這樣一開始我們就有7x7x2個候選框(bounding box), 大致粗略覆蓋了圖像的整個區(qū)域。他的思想就是Faster RCNN在第一階段就算有了回歸框垄提,在第二階段還是需要進行精調(diào)榔袋,那還不如就先生成大致回歸框就ok了。

下面我們就來好好介紹一下這個模型铡俐。

一凰兑、模型結(jié)構(gòu)


細(xì)節(jié)模型結(jié)構(gòu)

其實將這個模型簡單話為:


縮略版模型結(jié)構(gòu)
  1. 其實前面就是提取特征后后面為7x7x30的輸出。下面說一下模型輸入輸出
階段 圖示
模型輸入 輸入的是原始圖像审丘,但是需要resize到448x448
模型輸出 輸出為7x7x30向量
輸出向量表示
  1. 模型的輸出為什么是7x7x30呢吏够?
    首先我們來看7x7表示的意思。


    image.png

    其實對于每一個grid代表了(448/7)的區(qū)域表達滩报。當(dāng)然這里的7x7也是可以調(diào)節(jié)大小的锅知。

那30又是如何形成的通道大小的呢?

a. 2個bounding box的位置(8個通道)
每個bounding box需要4個數(shù)值來表示其位置脓钾,(Center_x,Center_y,width,height)售睹,即(bounding box的中心點的x坐標(biāo),y坐標(biāo)可训,bounding box的寬度昌妹,高度)捶枢,2個bounding box共需要8個數(shù)值來表示其位置。

b. 2個bounding box 置信度(2個通道)

bounding box的置信度 =是否存在目標(biāo)與iou值的乘積
image.png

c. 20分類概率(20個通道)
下面我們來說一下剩下20維度的分類通道飞崖。每一個通道代表一個類別的分類概率烂叔。因為YOLO支持識別20種不同的對象(人、鳥固歪、貓长已、汽車、椅子等)昼牛,所以這里有20個值表示該網(wǎng)格位置存在任一種對象的概率术瓮。但是我們一組圖片只能預(yù)測49個對象,可以理解為一個grid2個achor只能有一個預(yù)測準(zhǔn)的對象(即計算IOU比例最大的那個anchor)贰健,所以7x7個對象胞四。

  1. 設(shè)置訓(xùn)練樣本的細(xì)節(jié)?
    樣本中的每個Object歸屬到且僅歸屬到一個grid伶椿,即便有時Object跨越了幾個grid辜伟,也僅指定其中一個。具體就是計算出該Object的bounding box的中心位置脊另,這個中心位置落在哪個grid导狡,該grid對應(yīng)的輸出向量中該對象的類別概率是1(該gird負(fù)責(zé)預(yù)測該對象),所有其它grid對該Object的預(yù)測概率設(shè)為0(不負(fù)責(zé)預(yù)測該對象)偎痛。

  2. 說到這里大家有沒有發(fā)現(xiàn)YOLO一個缺點旱捧。
    雖然每個格子可以預(yù)測 B 個 bounding box,但是最終只選擇只選擇 IOU 最高的 bounding box 作為物體檢測輸出踩麦,即每個格子最多只預(yù)測出一個物體枚赡。當(dāng)物體占畫面比例較小,如圖像中包含畜群或鳥群時谓谦,每個格子包含多個物體贫橙,但卻只能檢測出其中一個。這是 YOLO 方法的一個缺陷反粥。(可以該表grid大小例如改為12x12等方法)

  3. 例子


    樣本標(biāo)簽與網(wǎng)絡(luò)實際輸出

圖中將自行車的位置放在bounding box1卢肃,但實際上是在訓(xùn)練過程中等網(wǎng)絡(luò)輸出以后,比較兩個bounding box與自行車實際位置的IOU才顿,自行車的位置(實際bounding box)放置在IOU比較大的那個bounding box(圖中假設(shè)是bounding box1)莫湘,且該bounding box的置信度設(shè)為1

二、 損失函數(shù)


損失函數(shù)

總的來說娜膘,就是用網(wǎng)絡(luò)輸出與樣本標(biāo)簽的各項內(nèi)容的誤差平方和作為一個樣本的整體誤差逊脯。
損失函數(shù)中的幾個項是與輸出的30維向量中的內(nèi)容相對應(yīng)的。

損失類別 公式 細(xì)節(jié)內(nèi)容
分類loss
公式第5行1_i^{obj}意味著存在對象的網(wǎng)格才計入誤差竣贪。
bouding box loss
寬度和高度先取了平方根军洼,因為如果直接取差值的話巩螃,大的對象對差值的敏感度較低,小的對象對差值的敏感度較高匕争,所以取平方根可以降低這種敏感度的差異避乏,使得較大的對象和較小的對象在尺寸誤差上有相似的權(quán)重。
bounding box confidence loss
乘以\lambda_{noobj}調(diào)節(jié)不存在對象的bounding box的置信度的權(quán)重(相對其它誤差)甘桑。YOLO設(shè)置 \lambda_{noobj}=0.5拍皮,即調(diào)低不存在對象的bounding box的置信度誤差的權(quán)重。

三跑杭、 YOLO v1 缺陷

缺點
YOLO 對相互靠的很近的物體铆帽,還有很小的群體檢測效果不好,這是因為一個網(wǎng)格中只預(yù)測了兩個框德谅,并且只屬于一類爹橱。
同一類物體出現(xiàn)的新的不常見的長寬比和其他情況時,泛化能力偏弱窄做。
由于損失函數(shù)的問題愧驱,定位誤差是影響檢測效果的主要原因。尤其是大小物體的處理上椭盏,還有待加強组砚。在實現(xiàn)中,最主要的就是怎么設(shè)計損失函數(shù)掏颊,讓這個三個方面得到很好的平衡糟红。作者簡單粗暴的全部采用了 sum-squared error loss 來做這件事。
YOLO 采用了多個下采樣層蚯舱,網(wǎng)絡(luò)學(xué)到的物體特征并不精細(xì)改化,因此也會影響檢測效果掩蛤。

注意:

  1. 乘以\lambda調(diào)節(jié)bounding box位置誤差的權(quán)重(相對分類誤差和置信度誤差)枉昏。YOLO設(shè)置\lambda_{coord}=5,即調(diào)高位置誤差的權(quán)重揍鸟。
  2. 都帶有1_i^{obj}意味著只有"負(fù)責(zé)"(IOU比較大)預(yù)測的那個bounding box的數(shù)據(jù)才會計入誤差兄裂。

細(xì)節(jié):
YOLO的最后一層采用線性激活函數(shù),其它層都是Leaky ReLU阳藻。訓(xùn)練中采用了drop out和數(shù)據(jù)增強(data augmentation)來防止過擬合晰奖。更多細(xì)節(jié)請參考原論文

YOLO v2


在67 FPS,YOLOv2在PASCAL VOC 2007上獲得76.8%的mAP腥泥。在40 FPS時匾南,YOLOv2獲得78.6%mAP,這比使用ResNet和SSD 更快的R-CNN更好蛔外。憑借如此優(yōu)異的成績蛆楞,YOLOv2于2017年CVPR發(fā)布并獲得超過1000次引用溯乒。YOLO有兩個缺點:一個缺點在于定位不準(zhǔn)確,另一個缺點在于和基于region proposal的方法相比召回率較低豹爹。因此YOLOv2主要是要在這兩方面做提升裆悄。另外YOLOv2并不是通過加深或加寬網(wǎng)絡(luò)達到效果提升,反而是簡化了網(wǎng)絡(luò)臂聋。

下面主要從兩點來介紹下YOLO v2的提升之處光稼。分別是Better以及Faster.

一、Better

  1. Batch Normalization
    相當(dāng)于對每一層的輸入做了歸一化孩等, 加快收斂艾君,并刪除后面的dropout,提升2%的mAP

  2. High-Resolution Classifier, 將輸入大小由224x224改448x448。因為yolov2模型只使用了卷積層和池化層邢滑,模型可以隨時調(diào)整圖片的輸入大小岭埠。
    原來的YOLO網(wǎng)絡(luò)在預(yù)訓(xùn)練的時候采用的是224224的輸入(這是因為一般預(yù)訓(xùn)練的分類模型都是在ImageNet數(shù)據(jù)集上進行的),然后在detection的時候采用448448的輸入偶翅,這會導(dǎo)致從分類模型切換到檢測模型的時候,模型還要適應(yīng)圖像分辨率的改變。而YOLOv2則將預(yù)訓(xùn)練分成兩步:先用224224的輸入從頭開始訓(xùn)練網(wǎng)絡(luò)写烤,大概160個epoch(表示將所有訓(xùn)練數(shù)據(jù)循環(huán)跑160次),然后再將輸入調(diào)整到448448拾徙,再訓(xùn)練10個epoch洲炊。注意這兩步都是在ImageNet數(shù)據(jù)集上操作。最后再在檢測的數(shù)據(jù)集上fine-tuning尼啡,也就是detection的時候用448*448的圖像作為輸入就可以順利過渡了暂衡。作者的實驗表明這樣可以提高幾乎 4%的MAP

  3. Convolutional With Anchor Boxes
    原來的YOLO是利用全連接層直接預(yù)測bounding box的坐標(biāo)崖瞭,而YOLOv2借鑒了Faster R-CNN的思想狂巢,引入anchor。首先將原網(wǎng)絡(luò)的全連接層和最后一個pooling層去掉书聚,使得最后的卷積層可以有更高分辨率的特征唧领;然后縮減網(wǎng)絡(luò),用416416大小的輸入代替原來448448雌续。這樣做的原因在于希望得到的特征圖都有奇數(shù)大小的寬和高斩个,奇數(shù)大小的寬和高會使得每個特征圖在劃分cell的時候就只有一個center cell(比如可以劃分成77或99個cell,center cell只有一個驯杜,如果劃分成88或1010的受啥,center cell就有4個)。為什么希望只有一個center cell呢?因為大的object一般會占據(jù)圖像的中心滚局,所以希望用一個center cell去預(yù)測叁温,而不是4個center cell去預(yù)測。網(wǎng)絡(luò)最終將416416的輸入變成1313大小的feature map輸出核畴,也就是縮小比例為32膝但。
    我們知道原來的YOLO算法將輸入圖像分成77的網(wǎng)格,每個網(wǎng)格預(yù)測兩個bounding box谤草,因此一共只有98個box跟束,但是在YOLOv2通過引入anchor boxes,預(yù)測的box數(shù)量超過了1千(以輸出feature map大小為1313為例丑孩,每個grid cell有9個anchor box的話冀宴,一共就是13139=1521個,當(dāng)然由后面第4點可知温学,最終每個grid cell選擇5個anchor box)略贮。順便提一下在Faster RCNN在輸入大小為1000*600時的boxes數(shù)量大概是6000,在SSD300中boxes數(shù)量是8732仗岖。顯然增加box數(shù)量是為了提高object的定位準(zhǔn)確率逃延。作者的實驗證明:雖然加入anchor使得MAP值下降了一點(69.5降到69.2),但是提高了recall(81%提高到88%)轧拄。

  4. Dimension Clusters
    我們知道在Faster R-CNN中anchor box的大小和比例是按經(jīng)驗設(shè)定的揽祥,然后網(wǎng)絡(luò)會在訓(xùn)練過程中調(diào)整anchor box的尺寸。但是如果一開始就能選擇到合適尺寸的anchor box檩电,那肯定可以幫助網(wǎng)絡(luò)越好地預(yù)測detection拄丰。所以作者采用k-means的方式對訓(xùn)練集的bounding boxes做聚類,試圖找到合適的anchor box俐末。
    另外作者發(fā)現(xiàn)如果采用標(biāo)準(zhǔn)的k-means(即用歐式距離來衡量差異)料按,在box的尺寸比較大的時候其誤差也更大,而我們希望的是誤差和box的尺寸沒有太大關(guān)系卓箫。所以通過IOU定義了如下的距離函數(shù)载矿,使得誤差和box的大小無關(guān):



    如下圖Figure2,左邊是聚類的簇個數(shù)核IOU的關(guān)系丽柿,兩條曲線分別代表兩個不同的數(shù)據(jù)集恢准。在分析了聚類的結(jié)果并平衡了模型復(fù)雜度與recall值,作者選擇了K=5甫题,這也就是Figure2中右邊的示意圖是選出來的5個box的大小,這里紫色和黑色也是分別表示兩個不同的數(shù)據(jù)集涂召,可以看出其基本形狀是類似的坠非。而且發(fā)現(xiàn)聚類的結(jié)果和手動設(shè)置的anchor box大小差別顯著。聚類的結(jié)果中多是高瘦的box果正,而矮胖的box數(shù)量較少炎码。



    Table1中作者采用的5種anchor(Cluster IOU)的Avg IOU是61盟迟,而采用9種Anchor Boxes的Faster RCNN的Avg IOU是60.9,也就是說本文僅選取5種box就能達到Faster RCNN的9中box的效果潦闲。

    5攒菠、Direct Location prediction
    作者在引入anchor box的時候遇到的第二個問題:模型不穩(wěn)定,尤其是在訓(xùn)練剛開始的時候歉闰。作者認(rèn)為這種不穩(wěn)定主要來自預(yù)測box的(x,y)值辖众。我們知道在基于region proposal的object detection算法中,是通過預(yù)測下圖中的tx和ty來得到(x,y)值和敬,也就是預(yù)測的是offset凹炸。另外關(guān)于文中的這個公式,個人認(rèn)為應(yīng)該把后面的減號改成加號昼弟,這樣才能符合公式下面的example啤它。這里xa和ya是anchor的坐標(biāo),wa和ha是anchor的size舱痘,x和y是坐標(biāo)的預(yù)測值变骡,tx和ty是偏移量。文中還特地舉了一個例子:A prediction of tx = 1 would shift the box to the right by the width of the anchor box, a prediction of tx = -1 would shift it to the left by the same amount.

    在這里作者并沒有采用直接預(yù)測offset的方法芭逝,還是沿用了YOLO算法中直接預(yù)測相對于grid cell的坐標(biāo)位置的方式锣光。
    前面提到網(wǎng)絡(luò)在最后一個卷積層輸出13*13大小的feature map,然后每個cell預(yù)測5個bounding box铝耻,然后每個bounding box預(yù)測5個值:tx誊爹,ty,tw瓢捉,th和to(這里的to類似YOLOv1中的confidence)频丘。看下圖泡态,tx和ty經(jīng)過sigmoid函數(shù)處理后范圍在0到1之間搂漠,這樣的歸一化處理也使得模型訓(xùn)練更加穩(wěn)定;cx和cy表示一個cell和圖像左上角的橫縱距離某弦;pw和ph表示bounding box的寬高桐汤,這樣bx和by就是cx和cy這個cell附近的anchor來預(yù)測tx和ty得到的結(jié)果。



    如果對上面的公式不理解靶壮,可以看Figure3怔毛,首先是cx和cy,表示grid cell與圖像左上角的橫縱坐標(biāo)距離腾降,黑色虛線框是bounding box拣度,藍色矩形框就是預(yù)測的結(jié)果。
  5. Fine-Grained Features
    這里主要是添加了一個層:passthrough layer。這個層的作用就是將前面一層的2626的feature map和本層的1313的feature map進行連接抗果,有點像ResNet筋帖。這樣做的原因在于雖然13*13的feature map對于預(yù)測大的object以及足夠了,但是對于預(yù)測小的object就不一定有效冤馏。也容易理解日麸,越小的object,經(jīng)過層層卷積和pooling逮光,可能到最后都不見了代箭,所以通過合并前一層的size大一點的feature map,可以有效檢測小的object睦霎。(其實就是將前面一層大的feature(比較容易檢測到小物體)與后面小的feature map結(jié)合在一起)

  6. Multi-Scale Training
    為了讓YOLOv2模型更加robust梢卸,作者引入了Muinti-Scale Training,簡單講就是在訓(xùn)練時輸入圖像的size是動態(tài)變化的副女,注意這一步是在檢測數(shù)據(jù)集上fine tune時候采用的蛤高,不要跟前面在Imagenet數(shù)據(jù)集上的兩步預(yù)訓(xùn)練分類模型混淆,本文細(xì)節(jié)確實很多碑幅。具體來講戴陡,在訓(xùn)練網(wǎng)絡(luò)時,每訓(xùn)練10個batch(文中是10個batch沟涨,個人認(rèn)為會不會是筆誤恤批,不應(yīng)該是10個epoch?)裹赴,網(wǎng)絡(luò)就會隨機選擇另一種size的輸入喜庞。那么輸入圖像的size的變化范圍要怎么定呢?前面我們知道本文網(wǎng)絡(luò)本來的輸入是416416棋返,最后會輸出1313的feature map延都,也就是說downsample的factor是32,因此作者采用32的倍數(shù)作為輸入的size睛竣,具體來講文中作者采用從{320,352,…,608}的輸入尺寸晰房。
    這種網(wǎng)絡(luò)訓(xùn)練方式使得相同網(wǎng)絡(luò)可以對不同分辨率的圖像做detection。雖然在輸入size較大時射沟,訓(xùn)練速度較慢殊者,但同時在輸入size較小時,訓(xùn)練速度較快验夯,而multi-scale training又可以提高準(zhǔn)確率猖吴,因此算是準(zhǔn)確率和速度都取得一個不錯的平衡。
    Table3就是在檢測時簿姨,不同輸入size情況下的YOLOv2和其他object detection算法的對比距误◆じ悖可以看出通過multi-scale training的檢測模型扁位,在測試的時候准潭,輸入圖像在尺寸變化范圍較大的情況下也能取得mAP和FPS的平衡。High Resolution Classifier的提升非常明顯(近4%)域仇,另外通過結(jié)合dimension prior+localtion prediction這兩種方式引入anchor也能帶來近5%mAP的提升刑然。

二、Faster

1暇务、Darknet-19
在YOLO v1中泼掠,作者采用的訓(xùn)練網(wǎng)絡(luò)是基于GooleNet,這里作者將GooleNet和VGG16做了簡單的對比垦细,GooleNet在計算復(fù)雜度上要優(yōu)于VGG16(8.25 billion operation VS 30.69 billion operation)择镇,但是前者在ImageNet上的top-5準(zhǔn)確率要稍低于后者(88% VS 90%)。而在YOLO v2中括改,作者采用了新的分類模型作為基礎(chǔ)網(wǎng)絡(luò)腻豌,那就是Darknet-19。Table6是最后的網(wǎng)絡(luò)結(jié)構(gòu):Darknet-19只需要5.58 billion operation嘱能。這個網(wǎng)絡(luò)包含19個卷積層和5個max pooling層吝梅,而在YOLO v1中采用的GooleNet,包含24個卷積層和2個全連接層惹骂,因此Darknet-19整體上卷積卷積操作比YOLO v1中用的GoogleNet要少苏携,這是計算量減少的關(guān)鍵。最后用average pooling層代替全連接層進行預(yù)測对粪。這個網(wǎng)絡(luò)在ImageNet上取得了top-5的91.2%的準(zhǔn)確率右冻。

2、Training for Classification
這里的2和3部分在前面有提到著拭,就是訓(xùn)練處理的小trick纱扭。這里的training for classification都是在ImageNet上進行預(yù)訓(xùn)練,主要分兩步:1茫死、從頭開始訓(xùn)練Darknet-19跪但,數(shù)據(jù)集是ImageNet,訓(xùn)練160個epoch峦萎,輸入圖像的大小是224224屡久,初始學(xué)習(xí)率為0.1。另外在訓(xùn)練的時候采用了標(biāo)準(zhǔn)的數(shù)據(jù)增加方式比如隨機裁剪爱榔,旋轉(zhuǎn)以及色度被环,亮度的調(diào)整等。2详幽、再fine-tuning 網(wǎng)絡(luò)筛欢,這時候采用448448的輸入浸锨,參數(shù)的除了epoch和learning rate改變外,其他都沒變版姑,這里learning rate改為0.001柱搜,并訓(xùn)練10個epoch。結(jié)果表明fine-tuning后的top-1準(zhǔn)確率為76.5%剥险,top-5準(zhǔn)確率為93.3%聪蘸,而如果按照原來的訓(xùn)練方式,Darknet-19的top-1準(zhǔn)確率是72.9%表制,top-5準(zhǔn)確率為91.2%健爬。因此可以看出第1,2兩步分別從網(wǎng)絡(luò)結(jié)構(gòu)和訓(xùn)練方式兩方面入手提高了主網(wǎng)絡(luò)的分類準(zhǔn)確率。

3么介、Training for Detection
在前面第2步之后娜遵,就開始把網(wǎng)絡(luò)移植到detection,并開始基于檢測的數(shù)據(jù)再進行fine-tuning壤短。首先把最后一個卷積層去掉设拟,然后添加3個33的卷積層,每個卷積層有1024個filter鸽扁,而且每個后面都連接一個11的卷積層蒜绽,11卷積的filter個數(shù)根據(jù)需要檢測的類來定。比如對于VOC數(shù)據(jù)桶现,由于每個grid cell我們需要預(yù)測5個box躲雅,每個box有5個坐標(biāo)值和20個類別值,所以每個grid cell有125個filter(與YOLOv1不同骡和,在YOLOv1中每個grid cell有30個filter相赁,還記得那個7730的矩陣嗎,而且在YOLOv1中慰于,類別概率是由grid cell來預(yù)測的钮科,也就是說一個grid cell對應(yīng)的兩個box的類別概率是一樣的,但是在YOLOv2中婆赠,類別概率是屬于box的绵脯,每個box對應(yīng)一個類別概率,而不是由grid cell決定休里,因此這邊每個box對應(yīng)25個預(yù)測值(5個坐標(biāo)加20個類別值)蛆挫,而在YOLOv1中一個grid cell的兩個box的20個類別值是一樣的)。另外作者還提到將最后一個33*512的卷積層和倒數(shù)第二個卷積層相連妙黍。最后作者在檢測數(shù)據(jù)集上fine tune這個預(yù)訓(xùn)練模型160個epoch悴侵,學(xué)習(xí)率采用0.001,并且在第60和90epoch的時候?qū)W(xué)習(xí)率除以10拭嫁,weight decay采用0.0005可免。

YOLO v3


這里yolo v3相對于yolo v2有三點:1. 利用多尺度特征進行對象檢測 2. 調(diào)整基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)

  1. 利用多尺度特征進行對象檢測


    image.png

    YOLOv3采用了3個尺度的特征圖(當(dāng)輸入為416×416時):(13×13)抓于,(26×26),(52×52),YOLOv3每個位置使用3個先驗框,所以使用k-means得到9個先驗框浇借,并將其劃分到3個尺度特征圖上捉撮,尺度更大的特征圖使用更小的先驗框

  2. 調(diào)整基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)
    YOLO V3特征提取網(wǎng)絡(luò)使用了殘差模型,相比YOLO V2使用的Darknet-19逮刨,其包含53個卷積層所以稱為Darknet-53.其網(wǎng)絡(luò)結(jié)構(gòu)如下圖


    Darknet-53
參考:
  1. YOLO v1深入理解
  2. 從YOLOv1到Y(jié)OLOv3呕缭,目標(biāo)檢測的進化之路
  3. YOLO2詳解
  4. 目標(biāo)檢測網(wǎng)絡(luò)之 YOLOv3
  5. <機器愛學(xué)習(xí)>YOLOv2 / YOLO9000 深入理解
  6. 目標(biāo)檢測之YOLO V2 V3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堵泽,一起剝皮案震驚了整個濱河市修己,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌迎罗,老刑警劉巖睬愤,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纹安,居然都是意外死亡尤辱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門厢岂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來光督,“玉大人,你說我怎么就攤上這事塔粒〗峤瑁” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵卒茬,是天一觀的道長船老。 經(jīng)常有香客問我,道長圃酵,這世上最難降的妖魔是什么柳畔? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮郭赐,結(jié)果婚禮上薪韩,老公的妹妹穿的比我還像新娘。我一直安慰自己捌锭,他們只是感情好俘陷,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舀锨,像睡著了一般岭洲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坎匿,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天盾剩,我揣著相機與錄音雷激,去河邊找鬼。 笑死告私,一個胖子當(dāng)著我的面吹牛屎暇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播驻粟,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼根悼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蜀撑?” 一聲冷哼從身側(cè)響起挤巡,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酷麦,沒想到半個月后矿卑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡沃饶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年母廷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糊肤。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡琴昆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出馆揉,到底是詐尸還是另有隱情业舍,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布把介,位于F島的核電站勤讽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拗踢。R本人自食惡果不足惜脚牍,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巢墅。 院中可真熱鬧诸狭,春花似錦、人聲如沸君纫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蓄髓。三九已至叉庐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間会喝,已是汗流浹背陡叠。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工玩郊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人枉阵。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓译红,卻偏偏與公主長得像,于是被迫代替她去往敵國和親兴溜。 傳聞我的和親對象是個殘疾皇子侦厚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

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