YOLO v2《YOLO9000: Better, Faster, Stronger》

本文大部分內(nèi)容來自史上最通俗易懂的YOLOv2講解浮庐。

YOLO v1提出了一種端到端的目標(biāo)檢測算法。雖然其mAP相對于當(dāng)前表現(xiàn)最好的目標(biāo)檢測算法faster R-CNN略有不及筹裕,但是其速度卻快了很多博秫。YOLO v1有兩個主要的缺點(diǎn):其一是物體定位不夠準(zhǔn)確,其二是目標(biāo)對象召回率較低泛领。YOLO v2針對這兩點(diǎn)進(jìn)行了改進(jìn)思恐,并提出了一種檢測與分類聯(lián)合訓(xùn)練的方法沾谜。使用這種聯(lián)合訓(xùn)練方法在COCO檢測數(shù)據(jù)集和ImageNet分類數(shù)據(jù)集上訓(xùn)練出了YOLO 9000模型,其可以檢測超過9000多類物體胀莹。所以這篇文章其實(shí)包含兩個模型:YOLO v2和YOLO9000基跑,不過后者是在前者基礎(chǔ)上提出的,兩者模型主體結(jié)構(gòu)一致描焰。YOLOv2相比YOLOv1做了很多方面的改進(jìn)涩僻,這也使得YOLOv2的mAP有顯著的提升,并且YOLOv2的速度依然很快,保持著自己作為one-stage方法的優(yōu)勢逆日,YOLOv2和Faster R-CNN, SSD等模型的對比如圖1所示嵌巷。這里將首先介紹YOLOv2的改進(jìn)策略,然后介紹YOLO9000室抽。


YOLOv2與其它模型在VOC 2007數(shù)據(jù)集上的效果對比

1搪哪、YOLOv2的改進(jìn)策略

YOLOv1雖然檢測速度很快,但是在檢測精度上卻不如R-CNN系檢測方法坪圾,YOLOv1在物體定位方面(localization)不夠準(zhǔn)確晓折,并且召回率(recall)較低。YOLOv2共提出了幾種改進(jìn)策略來提升YOLO模型的定位準(zhǔn)確度和召回率兽泄,從而提高mAP漓概,YOLOv2在改進(jìn)中遵循一個原則:保持檢測速度,這也是YOLO模型的一大優(yōu)勢病梢。YOLOv2的改進(jìn)策略如圖2所示胃珍,可以看出,大部分的改進(jìn)方法都可以比較顯著提升模型的mAP蜓陌。下面詳細(xì)介紹各個改進(jìn)策略觅彰。


YOLOv2相比YOLOv1的改進(jìn)策略

1.1 Batch Normalization

Batch Normalization可以提升模型收斂速度,而且可以起到一定正則化效果钮热,降低模型的過擬合填抬。在YOLOv2中,每個卷積層后面都添加了Batch Normalization層隧期,并且不再使用droput飒责。使用Batch Normalization后,YOLOv2的mAP提升了2.4%仆潮。

1.2 High Resolution Classifier

使用了高分辨率圖片fine-tune模型宏蛉,在YOLO v1中是用低分辨率(224x224)進(jìn)行訓(xùn)練,高分辨率(448x448)直接預(yù)測鸵闪。而在YOLO v2中先用低分辨率分辨率進(jìn)行訓(xùn)練模型,再用高分辨率(448x448)fine-tune暑诸。使用高分辨率fine-tune分類器后蚌讼,YOLOv2的mAP提升了約4%。

1.3 Convolutionlal With Anchor Boxes

YOLO v1是先將整個圖片分為SxS個網(wǎng)格个榕,每個網(wǎng)格篡石,每個網(wǎng)格預(yù)測兩個bounding boxes。最后使用NMS選擇預(yù)測結(jié)果好的bbox最為此網(wǎng)格的預(yù)測結(jié)果西采。而YOLO v2則是借鑒了faster R-CNN中的anchor boxes思想凰萨,選擇feature map上的多個anchor box來進(jìn)行預(yù)測而非像YOLO v1中那樣使用最后的全連接層直接進(jìn)行定位預(yù)測。因此,YOLO v1中僅有SxSx2個bbox進(jìn)行預(yù)測胖眷,而YOLO v2中則有SxSxn(S指feature map大小武通,n指feature map上每個位置的anchor box數(shù)量)。而且YOLO v2輸出的feature map更大珊搀,這使得它可以生成更多的目標(biāo)候選框進(jìn)行預(yù)測冶忱,不容易丟失對象。所以使用anchor boxes之后境析,YOLOv2的召回率大大提升囚枪,由原來的81%升至88%,但是其mAP卻稍有下降劳淆。

1.4 Dimensions cluster

在faster R-CNN中链沼,anchor box的長寬都是事先設(shè)定好的,帶有一定的人為主觀性沛鸵,不一定適合模型括勺。因此,在YOLO v2中采用了KMeans方法對anchor box的大小做了聚類分析谒臼。因?yàn)樵O(shè)置anchor box的目的是為了使得預(yù)測框和GT的IOU更好朝刊,所以聚類分析時(shí)選用box與聚類中心box之間的IOU值作為距離指標(biāo):

數(shù)據(jù)集VOC和COCO上的anchor box聚類分析結(jié)果

上圖為在VOC和COCO數(shù)據(jù)集上的聚類分析結(jié)果,可以看到蜈缤,隨著聚類中心數(shù)目的增加拾氓,平均IOU是增加的,但綜合考慮模型復(fù)雜度和召回率底哥,最終選擇5個聚類中心最為anchor box的大小咙鞍。

1.5 New Network:Darknet-19

YOLO v2使用了一個新的基礎(chǔ)模型,即Darknet 19趾徽,包括19個卷積層和5個maxpooling層续滋,如下圖所示。Darknet 與vgg16的設(shè)計(jì)原則一致孵奶,主要采用3x3卷積疲酌,每個2x2的maxpooling層之后,特征維度降低2倍了袁,而同時(shí)將特征圖的channel增加兩倍朗恳。與NIN類似,Darknet-19最終使用global avgpooling做預(yù)測载绿,并且在3x3卷積之間使用1x1卷積來壓縮特征圖channels以降低模型計(jì)算量和參數(shù)粥诫。Darknet-19每個卷積層后面同樣使用了BN來加快收斂速度,降低過擬合崭庸。使用Darknet后怀浆,雖然mAP沒有顯著提升谊囚,但由于減少了參數(shù)數(shù)量,計(jì)算量也減少了执赡。
Darknet-19模型結(jié)構(gòu)

1.6 Direct location prediction

在faster R-CNN中镰踏,邊界框的實(shí)際中心位置需根據(jù)預(yù)測的坐標(biāo)偏移值來確定,即若先驗(yàn)寬尺度為( wa, ha)搀玖,中心坐標(biāo)( xa余境,y a),預(yù)測偏移值為( tx, ty)灌诅,則預(yù)測框的中心(x芳来,y)為:
x =( tx* wa)- xa
y = ( ty*ha)- ya

但是上面的公式?jīng)]有約束,即tx猜拾,ty可為任意大小即舌,這將導(dǎo)致每個anchor box的預(yù)測框都可以出現(xiàn)在圖中任意位置,這無疑是不合適的挎袜,將導(dǎo)致模型的不穩(wěn)定顽聂,需要很長的時(shí)間來預(yù)測出正確的offsets。

因此盯仪,YOLO v2啟用了這種預(yù)測方式紊搪,選擇沿用YOLO v1中的方法思想,即預(yù)測框中心相對于對應(yīng)cell左上角位置的相對偏移全景、為了將預(yù)測邊界框的中心值約束在當(dāng)前cell中耀石,使用sigmoid函數(shù)處理偏移值,這樣預(yù)測偏移值在(0,1)范圍內(nèi)(每個cell看作1)爸黄。中的來看滞伟,根據(jù)邊界框預(yù)測的4個offset可預(yù)測出邊界框?qū)嶋H位置和大小:


其中(cx, cy)為cell的左上角坐標(biāo)炕贵,如下圖所示梆奈,在計(jì)算時(shí)每個cell的尺度為1,所以當(dāng)前cell的左上角坐標(biāo)為(1,1)称开。由于sigmoid函數(shù)的處理亩钟,邊界框的中心位置會約束在當(dāng)前cell內(nèi)部,防止偏移過多鳖轰。而pw和ph是先驗(yàn)寬(即anchor box)的長寬清酥,他們都是相對于特征圖大小的。這里記特征圖的大小為(W,H)脆霎,這樣我們就可以將邊界框相對于整張圖片的位置和大小計(jì)算出來(4個值均在0和1之間):

將上面的四個值在分別乘以圖片的長寬就可以得到邊界框的最終位置和大小了总处。這就是YOLOv2邊界框的整個解碼過程狈惫。約束了邊界框的位置預(yù)測值使得模型更容易穩(wěn)定訓(xùn)練睛蛛,結(jié)合聚類分析得到先驗(yàn)框與這種預(yù)測方法鹦马,YOLOv2的mAP值提升了約5%。
邊界框位置與大小的計(jì)算示例圖

1.7 Fine-Grained Features

YOLO v2的輸入圖片大小為416x416忆肾,經(jīng)過5次maxpooling后得到13x13大小的特征圖荸频,并以此特征圖做預(yù)測。對于一般對象客冈,13x13的大小已經(jīng)足夠旭从,但對于更小的物體,還需要更精細(xì)的特征圖场仲,F(xiàn)PN和悦,SSD等使用多尺度特征圖來檢測小物體。

YOLO v2提出了一種passthrough層來利用更精細(xì)的特征圖渠缕。對于Darknet來說鸽素,最后一層輸出feature map大小為13x13,下采樣之前的大小為26x26亦鳞,將其拆分為4個13x13的feature map(具體怎么拆的還沒弄清楚)馍忽。因此feature map大小減半,但是通道數(shù)增加了4倍(因?yàn)椴痖_后是按通道并排的)燕差。這些上一層拆分后的feature map在于最后一層的feature map進(jìn)行合并(雖然文中提到的合并是類似于ResNet中的跳躍連接遭笋,但是其實(shí)這里更像DenseNet的跳躍連接,通道數(shù)合并而非相同位置的feature按位相加)徒探。因此瓦呼,最后的feature map通道數(shù)為兩層feature map通道數(shù)之和。


另外刹帕,作者在后期的實(shí)現(xiàn)中借鑒了ResNet網(wǎng)絡(luò)吵血,不是直接對高分辨特征圖處理,而是增加了一個中間卷積層偷溺,先采用64個11卷積核進(jìn)行卷積蹋辅,然后再進(jìn)行passthrough處理,這樣2626512的特征圖得到1313*256的特征圖挫掏。這算是實(shí)現(xiàn)上的一個小細(xì)節(jié)侦另。使用Fine-Grained Features之后YOLOv2的性能有1%的提升。

1.8 Multi-Scale Training

由于YOLO v2所用的模型只有卷積層和池化層尉共,所以YOLO v2的輸入可以不限于416x416的圖片褒傅。為增強(qiáng)模型魯棒性,YOLO v2采用多尺度輸入訓(xùn)練的策略袄友,具體地殿托,就是在訓(xùn)練過程中每隔一定的iteration之后改變模型的輸入大小。由于YOLO v2模型的總下采樣倍數(shù)為32剧蚣,輸入圖片大小選擇一系列為32倍數(shù)的值:{320,352支竹,...旋廷,608}。沒訓(xùn)練10個iterations隨機(jī)選擇一個輸入圖片的大小礼搁。

采用Multi-Scale訓(xùn)練策略饶碘,YOLO v2可以適應(yīng)不同大小的圖片,并且預(yù)測出很好地結(jié)果馒吴。在測試時(shí)扎运,YOLOv2可以采用不同大小的圖片作為輸入。采用低分辨率輸入時(shí)饮戳,mAP較低豪治,但是速度快;采用高分辨率時(shí)扯罐,mAP提升鬼吵,但相應(yīng)的速度也有所下降。


YOLOv2在VOC 2007數(shù)據(jù)集上的性能對比

1.9 小結(jié)

總結(jié)來看篮赢,雖然YOLOv2做了很多改進(jìn)齿椅,但是大部分都是借鑒其它論文的一些技巧,如Faster R-CNN的anchor boxes启泣,YOLOv2采用anchor boxes和卷積做預(yù)測涣脚,這基本上與SSD模型(單尺度特征圖的SSD)非常類似了,而且SSD也是借鑒了Faster R-CNN的RPN網(wǎng)絡(luò)寥茫。從某種意義上來說遣蚀,YOLOv2和SSD這兩個one-stage模型與RPN網(wǎng)絡(luò)本質(zhì)上無異,只不過RPN不做類別的預(yù)測纱耻,只是簡單地區(qū)分物體與背景芭梯。在two-stage方法中,RPN起到的作用是給出region proposals弄喘,其實(shí)就是作出粗糙的檢測玖喘,所以另外增加了一個stage,即采用R-CNN網(wǎng)絡(luò)來進(jìn)一步提升檢測的準(zhǔn)確度(包括給出類別預(yù)測)蘑志。而對于one-stage方法累奈,它們想要一步到位,直接采用“RPN”網(wǎng)絡(luò)作出精確的預(yù)測急但,要因此要在網(wǎng)絡(luò)設(shè)計(jì)上做很多的tricks澎媒。YOLOv2的一大創(chuàng)新是采用Multi-Scale Training策略,這樣同一個模型其實(shí)就可以適應(yīng)多種大小的圖片了波桩。

2. YOLO v2的訓(xùn)練

YOLO v2的訓(xùn)練主要包括三個階段:

  • 第一階段就是現(xiàn)在ImageNet分類數(shù)據(jù)集上預(yù)訓(xùn)練Darknet-19戒努,此時(shí)模型輸入為224x224,共訓(xùn)練160個epochs镐躲;
  • 第二個階段調(diào)整輸入為448x448储玫,fine-tune模型冬三,訓(xùn)練10個epoch;
  • 第三階段缘缚,修改Darknet為檢測模型,在檢測數(shù)據(jù)集上fine-tune模型敌蚜。網(wǎng)絡(luò)結(jié)構(gòu)修改包括:移除最后一層卷積層桥滨、global avgpooling層以及softmax層,并且新增了三個3x3x2014卷積層弛车,同時(shí)增加了一個passthrough層齐媒,最后使用1*1卷積層輸出預(yù)測結(jié)果,輸出的channel數(shù)為num_anchors*(5 + num_classes)纷跛,num_classes和訓(xùn)練采用的數(shù)據(jù)集對象類數(shù)有關(guān)系喻括。


    YOLOv2訓(xùn)練的三個階段

YOLOv2的網(wǎng)絡(luò)結(jié)構(gòu)以及訓(xùn)練參數(shù)我們都知道了,但是貌似少了點(diǎn)東西贫奠。仔細(xì)一想唬血,原來作者并沒有給出YOLOv2的訓(xùn)練過程的兩個最重要方面,即先驗(yàn)框匹配(樣本選擇)以及訓(xùn)練的損失函數(shù)唤崭,難怪Ng說YOLO論文很難懂拷恨,沒有這兩方面的說明我們確實(shí)不知道YOLOv2到底是怎么訓(xùn)練起來的。不過默認(rèn)按照YOLOv1的處理方式也是可以處理谢肾,我看了YOLO在TensorFlow上的實(shí)現(xiàn)darkflow(見yolov2/train.py)腕侄,發(fā)現(xiàn)它就是如此處理的:和YOLOv1一樣,對于訓(xùn)練圖片中的ground truth芦疏,若其中心點(diǎn)落在某個cell內(nèi)冕杠,那么該cell內(nèi)的5個先驗(yàn)框所對應(yīng)的邊界框負(fù)責(zé)預(yù)測它,具體是哪個邊界框預(yù)測它酸茴,需要在訓(xùn)練中確定分预,即由那個與ground truth的IOU最大的邊界框預(yù)測它,而剩余的4個邊界框不與該ground truth匹配薪捍。YOLOv2同樣需要假定每個cell至多含有一個grounth truth噪舀,而在實(shí)際上基本不會出現(xiàn)多于1個的情況。與ground truth匹配的先驗(yàn)框計(jì)算坐標(biāo)誤差飘诗、置信度誤差(此時(shí)target為1)以及分類誤差与倡,而其它的邊界框只計(jì)算置信度誤差(此時(shí)target為0)。YOLOv2和YOLOv1的損失函數(shù)一樣昆稿,為均方差函數(shù)纺座。但是我看了YOLOv2的源碼(訓(xùn)練樣本處理與loss計(jì)算都包含在文件region_layer.c中,YOLO源碼沒有任何注釋溉潭,反正我看了是直搖頭)净响,并且參考國外的blog以及allanzelener/YAD2K(Ng深度學(xué)習(xí)教程所參考的那個Keras實(shí)現(xiàn))上的實(shí)現(xiàn)少欺,發(fā)現(xiàn)YOLOv2的處理比原來的v1版本更加復(fù)雜。先給出loss計(jì)算公式:


我們來一點(diǎn)點(diǎn)解釋馋贤,首先W,H分別指的是特征圖(13*13)的寬與高赞别,而A指的是先驗(yàn)框數(shù)目(這里是5),各個λ值是各個loss部分的權(quán)重系數(shù)配乓。

第一項(xiàng)loss是計(jì)算background的置信度誤差仿滔,但是哪些預(yù)測框來預(yù)測背景呢,需要先計(jì)算各個預(yù)測框和所有g(shù)round truth的IOU值犹芹,并且取最大值Max_IOU崎页,如果該值小于一定的閾值(YOLOv2使用的是0.6),那么這個預(yù)測框就標(biāo)記為background腰埂,需要計(jì)算noobj的置信度誤差飒焦。

第二項(xiàng)是計(jì)算先驗(yàn)框與預(yù)測寬的坐標(biāo)誤差,但是只在前12800個iterations間計(jì)算屿笼,我覺得這項(xiàng)應(yīng)該是在訓(xùn)練前期使預(yù)測框快速學(xué)習(xí)到先驗(yàn)框的形狀牺荠。

第三大項(xiàng)計(jì)算與某個ground truth匹配的預(yù)測框各部分loss值,包括坐標(biāo)誤差驴一、置信度誤差以及分類誤差志电。先說一下匹配原則,對于某個ground truth蛔趴,首先要確定其中心點(diǎn)要落在哪個cell上挑辆,然后計(jì)算這個cell的5個先驗(yàn)框與ground truth的IOU值(YOLOv2中bias_match=1),計(jì)算IOU值時(shí)不考慮坐標(biāo)孝情,只考慮形狀鱼蝉,所以先將先驗(yàn)框與ground truth的中心點(diǎn)都偏移到同一位置(原點(diǎn)),然后計(jì)算出對應(yīng)的IOU值箫荡,IOU值最大的那個先驗(yàn)框與ground truth匹配魁亦,對應(yīng)的預(yù)測框用來預(yù)測這個ground truth。

在計(jì)算obj置信度時(shí)羔挡,在YOLOv1中target=1洁奈,而YOLOv2增加了一個控制參數(shù)rescore,當(dāng)其為1時(shí)绞灼,target取預(yù)測框與ground truth的真實(shí)IOU值利术。對于那些沒有與ground truth匹配的先驗(yàn)框(與預(yù)測框?qū)?yīng)),除去那些Max_IOU低于閾值的低矮,其它的就全部忽略印叁,不計(jì)算任何誤差。這點(diǎn)在YOLOv3論文中也有相關(guān)說明:YOLO中一個ground truth只會與一個先驗(yàn)框匹配(IOU值最好的),對于那些IOU值低于一定閾值的先驗(yàn)框轮蜕,其預(yù)測結(jié)果就忽略了昨悼。這和SSD與RPN網(wǎng)絡(luò)的處理方式有很大不同,因?yàn)樗鼈兛梢詫⒁粋€ground truth分配給多個先驗(yàn)框跃洛。盡管YOLOv2和YOLOv1計(jì)算loss處理上有不同率触,但都是采用均方差來計(jì)算loss。另外需要注意的一點(diǎn)是汇竭,在計(jì)算boxes的和誤差時(shí)葱蝗,YOLOv1中采用的是平方根以降低boxes的大小對誤差的影響,而YOLOv2是直接計(jì)算韩玩,但是根據(jù)ground truth的大小對權(quán)重系數(shù)進(jìn)行修正:l.coord_scale * (2 - truth.w*truth.h),這樣對于尺度較小的boxes其權(quán)重系數(shù)會更大一些陆馁,起到和YOLOv1計(jì)算平方根相似的效果(參考YOLO v2 損失函數(shù)源碼分析)找颓。

最終的YOLOv2模型在速度上比YOLOv1還快(采用了計(jì)算量更少的Darknet-19模型),而且模型的準(zhǔn)確度比YOLOv1有顯著提升叮贩,詳情見paper击狮。

3、YOLO9000

YOLO9000是在YOLOv2的基礎(chǔ)上提出的一種可以檢測超過9000個類別的模型益老,其主要貢獻(xiàn)點(diǎn)在于提出了一種分類和檢測的聯(lián)合訓(xùn)練策略彪蓬。眾多周知,檢測數(shù)據(jù)集的標(biāo)注要比分類數(shù)據(jù)集打標(biāo)簽繁瑣的多捺萌,所以ImageNet分類數(shù)據(jù)集比VOC等檢測數(shù)據(jù)集高出幾個數(shù)量級档冬。在YOLO中,邊界框的預(yù)測其實(shí)并不依賴于物體的標(biāo)簽桃纯,所以YOLO可以實(shí)現(xiàn)在分類和檢測數(shù)據(jù)集上的聯(lián)合訓(xùn)練酷誓。對于檢測數(shù)據(jù)集,可以用來學(xué)習(xí)預(yù)測物體的邊界框态坦、置信度以及為物體分類盐数,而對于分類數(shù)據(jù)集可以僅用來學(xué)習(xí)分類,但是其可以大大擴(kuò)充模型所能檢測的物體種類伞梯。

作者選擇在COCO和ImageNet數(shù)據(jù)集上進(jìn)行聯(lián)合訓(xùn)練玫氢,但是遇到的第一問題是兩者的類別并不是完全互斥的,比如"Norfolk terrier"明顯屬于"dog"谜诫,所以作者提出了一種層級分類方法(Hierarchical classification)漾峡,主要思路是根據(jù)各個類別之間的從屬關(guān)系(根據(jù)WordNet)建立一種樹結(jié)構(gòu)WordTree,結(jié)合COCO和ImageNet建立的WordTree如下圖所示:


基于COCO和ImageNet數(shù)據(jù)集建立的WordTree

WordTree中的根節(jié)點(diǎn)為"physical object"喻旷,每個節(jié)點(diǎn)的子節(jié)點(diǎn)都屬于同一子類灰殴,可以對它們進(jìn)行softmax處理。在給出某個類別的預(yù)測概率時(shí),需要找到其所在的位置牺陶,遍歷這個path伟阔,然后計(jì)算path上各個節(jié)點(diǎn)的概率之積。


ImageNet與WordTree預(yù)測的對比

在訓(xùn)練時(shí)掰伸,如果是檢測樣本皱炉,按照YOLOv2的loss計(jì)算誤差,而對于分類樣本狮鸭,只計(jì)算分類誤差合搅。在預(yù)測時(shí),YOLOv2給出的置信度就是Pr(physicalobject)歧蕉,同時(shí)會給出邊界框位置以及一個樹狀概率圖灾部。在這個概率圖中找到概率最高的路徑,當(dāng)達(dá)到某一個閾值時(shí)停止惯退,就用當(dāng)前節(jié)點(diǎn)表示預(yù)測的類別赌髓。

通過聯(lián)合訓(xùn)練策略,YOLO9000可以快速檢測出超過9000個類別的物體催跪,總體mAP值為19,7%锁蠕。我覺得這是作者在這篇論文作出的最大的貢獻(xiàn),因?yàn)閅OLOv2的改進(jìn)策略亮點(diǎn)并不是很突出懊蒸,但是YOLO9000算是開創(chuàng)之舉荣倾。

參考:
YOLO9000: Better, Faster, Stronger.
史上最通俗易懂的YOLOv2講解
目標(biāo)檢測之YOLO系列-V1至V3改進(jìn)詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市骑丸,隨后出現(xiàn)的幾起案子舌仍,更是在濱河造成了極大的恐慌,老刑警劉巖通危,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抡笼,死亡現(xiàn)場離奇詭異,居然都是意外死亡黄鳍,警方通過查閱死者的電腦和手機(jī)推姻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來框沟,“玉大人藏古,你說我怎么就攤上這事∪淘铮” “怎么了拧晕?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長梅垄。 經(jīng)常有香客問我厂捞,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任靡馁,我火速辦了婚禮欲鹏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘臭墨。我一直安慰自己赔嚎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布胧弛。 她就那樣靜靜地躺著尤误,像睡著了一般。 火紅的嫁衣襯著肌膚如雪结缚。 梳的紋絲不亂的頭發(fā)上损晤,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音红竭,去河邊找鬼尤勋。 笑死,一個胖子當(dāng)著我的面吹牛德崭,可吹牛的內(nèi)容都是我干的斥黑。 我是一名探鬼主播揖盘,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼眉厨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了兽狭?” 一聲冷哼從身側(cè)響起憾股,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎箕慧,沒想到半個月后服球,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颠焦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年斩熊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伐庭。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡粉渠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出圾另,到底是詐尸還是另有隱情霸株,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布集乔,位于F島的核電站去件,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尤溜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一倔叼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靴跛,春花似錦缀雳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绝葡,卻和暖如春深碱,著一層夾襖步出監(jiān)牢的瞬間钥庇,已是汗流浹背牛哺。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工怔锌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谤饭,地道東北人弧可。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓择克,卻偏偏與公主長得像拳恋,于是被迫代替她去往敵國和親终畅。 傳聞我的和親對象是個殘疾皇子榜旦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355