ImageNet冠軍領(lǐng)隊帶你入門計算機視覺:監(jiān)督學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)的簡單實現(xiàn)

姓名:張慶慶

學(xué)號:19021211151

嵌牛導(dǎo)讀:機器學(xué)習(xí)計算機視覺的發(fā)展以及監(jiān)督學(xué)習(xí)席爽,神經(jīng)網(wǎng)絡(luò)的基本原理

?嵌牛鼻子:計算機視覺 監(jiān)督學(xué)習(xí) 神經(jīng)網(wǎng)絡(luò)

嵌牛提問:什么是計算機視覺筐付,神經(jīng)網(wǎng)絡(luò)及監(jiān)督學(xué)習(xí)的基本理論有哪些

轉(zhuǎn)載源:ImageNet冠軍領(lǐng)隊帶你入門計算機視覺:監(jiān)督學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)的簡單實現(xiàn) - 簡書

原作者 | 董健,原編輯 | Vincent

嵌牛正文:

AI 前線導(dǎo)語:近幾年歉备,人工智能的浪潮席卷了整個科技圈。Google匪燕,F(xiàn)acebook蕾羊,微軟,百度等全球最頂尖的科技公司都將目光轉(zhuǎn)向了人工智能帽驯,并將之視為今后的戰(zhàn)略重心龟再。 隨著人臉識別,輔助駕駛尼变,AlphaGo 等應(yīng)用的不斷涌現(xiàn)利凑,基于學(xué)習(xí)的計算機視覺(learning based vision)正在越來越多的改變我們的生活 。本系列文章嫌术,將逐步介紹這些看似神奇的系統(tǒng)背后的視覺算法原理哀澈。

本文是整個系列的第一篇文章,將會簡單介紹一下計算機視覺的發(fā)展度气,以及監(jiān)督學(xué)習(xí)割按、神經(jīng)網(wǎng)絡(luò)的基本原理。最后的實踐部分磷籍,會用 TensorFlow 給出之前介紹算法的一個簡單實現(xiàn)适荣。

計算機視覺的發(fā)展

什么是計算機視覺? 首先我們看一下維基百科的定義:

Computer vision is an interdisciplinary field that deals with how computers can be made for gaining high-level understanding from digital images or videos.

簡單來說院领,計算機視覺就是讓機器能自動的理解圖片或視頻弛矛。

計算機視覺的起源可以追溯到 1966 年,當時 MIT 著名的工智能專家 Marvin Minsky 給他的本科學(xué)生留了一個暑期作業(yè) -“Link a camera to a computer and get the computer to describe what it saw”栅盲。 雖然人可以很容易的理解圖片汪诉,但事實證明,讓計算機理解圖片遠比我們一開始想象的復(fù)雜。

早期的計算機視覺研究扒寄,由于計算資源和數(shù)據(jù)的原因鱼鼓,主要集中在幾何和推理。 上世紀 90 年代该编,由于計算機硬件的不斷發(fā)展和數(shù)字照相機的逐漸普及迄本,計算機視覺進入了快速發(fā)展期。 這期間的一大突破是各種人工設(shè)計特征的涌現(xiàn)课竣,例如 SIFT嘉赎,HOG 等局部特征。 這些特征相對原始像素具有對尺度于樟,旋轉(zhuǎn)等的魯棒性公条,因此得到了廣泛的應(yīng)用,催生了如圖像拼接迂曲、圖像檢索靶橱、三位重建等視覺應(yīng)用。 另一大突破是基于統(tǒng)計和機器學(xué)習(xí)的方法的流行路捧。隨著數(shù)字照片的不斷普及关霸,大規(guī)模的數(shù)據(jù)集也相伴而生,基于學(xué)習(xí)的計算機視覺(Learning based Vision)杰扫,由于可以通過大量數(shù)據(jù)自動學(xué)習(xí)模型參數(shù)队寇,漸漸的成為了主流。

隨著計算能力的不斷進步和海量互聯(lián)網(wǎng)數(shù)據(jù)的產(chǎn)生章姓,傳統(tǒng)的基于人工特征和 SVM/boosting 等簡單機器學(xué)習(xí)算法的視覺技術(shù)遇到了瓶頸佳遣。因此,工業(yè)界和學(xué)術(shù)界都在探索如何避免繁瑣的人工特征設(shè)計同時加強模型的擬合性能凡伊,從而進一步利用海量數(shù)據(jù)苍日。深度學(xué)習(xí)很好的滿足了這一需求,因此在視覺領(lǐng)域得到了非常廣泛的應(yīng)用窗声。2010 年之后,計算機視覺逐漸進入了深度學(xué)習(xí)的時代辜纲。標志性的事件是 ImageNet 2012 比賽笨觅。這次比賽中,基于深度學(xué)習(xí)的算法大大超過了經(jīng)過精心設(shè)計的傳統(tǒng)算法耕腾,震驚了整個學(xué)術(shù)界见剩,進而帶動了深度學(xué)習(xí)在其他領(lǐng)域中的應(yīng)用。這次比賽也被看成是深度學(xué)習(xí)在整個人工智能領(lǐng)域復(fù)興的標志性事件扫俺。

目前苍苞,除了三維重建等 low-level vision 問題,基于深度學(xué)習(xí)的算法,在大多數(shù)視覺問題上的性能已經(jīng)遠遠超過了傳統(tǒng)算法羹呵,因此本系列文章會重點介紹基于深度學(xué)習(xí)的計算機視覺算法骂际。

神經(jīng)網(wǎng)絡(luò) (neural network)

神經(jīng)網(wǎng)絡(luò)(NN),簡單來說就是神經(jīng)元組成的網(wǎng)絡(luò)冈欢,是最早出現(xiàn)歉铝,也是最簡單的一種深度學(xué)習(xí)模型。其他很多更復(fù)雜的算法比如卷積神經(jīng)網(wǎng)絡(luò)凑耻,深度增強學(xué)習(xí)中的許多概念都來源于神經(jīng)網(wǎng)絡(luò)太示。因此,我們在這篇文章中先介紹一下神經(jīng)網(wǎng)絡(luò)的原理香浩。 要理解神經(jīng)網(wǎng)絡(luò)类缤,我們需要先了解什么是神經(jīng)元。

神經(jīng)元 & 感知器

神經(jīng)元(neuron)是神經(jīng)網(wǎng)絡(luò)的最小單位邻吭。每個神經(jīng)元將多個入映射到一個輸出餐弱。如圖所示,神經(jīng)元的輸出是輸入的加權(quán)和加上偏置镜盯,再通過一個激活函數(shù)岸裙。具體可以表示成:

激活函數(shù) φ 有各種不同的形式。如果使用 step 函數(shù)速缆,那神經(jīng)元等價于一個線性分類器:

這個分類器在歷史上被稱為感知器(Perceptron)降允。

多層神經(jīng)網(wǎng)絡(luò)

單層的感知器只能解決線性可分的問題。但實際中絕大多數(shù)問題都是非線性的艺糜,這時單層感知器就無能為力了剧董。 為此,我們可以把單個的 neuron 組成網(wǎng)絡(luò)破停,讓前一層 neuron 的輸出做為下一層 neuron 的輸入翅楼。組成如下圖所示的神經(jīng)網(wǎng)絡(luò):

由于非線性激活函數(shù)的存在,多層神經(jīng)網(wǎng)絡(luò)就有了擬合非線性函數(shù)的能力真慢。由于歷史的原因毅臊,多層神經(jīng)網(wǎng)絡(luò)也被稱為 multilayer perceptrons(MLP)。

神經(jīng)網(wǎng)絡(luò)具有擬合非線性函數(shù)的能力黑界。但是為了擬合不同的非線性函數(shù)管嬉,我們是否需要設(shè)計不同的非線性激活函數(shù)和網(wǎng)絡(luò)結(jié)構(gòu)呢?

答案是不需要朗鸠。

universal approximation theorem已經(jīng)證明蚯撩,前向神經(jīng)網(wǎng)絡(luò)是一個通用的近似框架。 簡單來說烛占,對常用的 sigmoid胎挎,relu 等激活函數(shù),即使只有一層隱藏層的神經(jīng)網(wǎng)絡(luò),只要有足夠多的神經(jīng)元犹菇,就可以無限逼近任何連續(xù)函數(shù)德迹。在實際中,淺層神經(jīng)網(wǎng)絡(luò)要逼近復(fù)雜非線性函數(shù)需要的神經(jīng)元可能會過多项栏,從而提升了學(xué)習(xí)的難度并影響泛化性能浦辨。因此,我們往往通過使用更深的模型沼沈,從而減少所需神經(jīng)元的數(shù)量流酬,提升網(wǎng)絡(luò)的泛化能力。

機器學(xué)習(xí)的基本概念

深度神經(jīng)網(wǎng)絡(luò)是深度學(xué)習(xí)中的一類算法列另,而深度學(xué)習(xí)是機器學(xué)習(xí)的一種特例芽腾。因此,這一節(jié)我們在機器學(xué)習(xí)的一般框架下页衙,介紹模型訓(xùn)練相關(guān)的基本概念摊滔,及其在 Tensorflow 中的實現(xiàn)。相關(guān)概念適用于包括 NN 在內(nèi)的機器學(xué)習(xí)算法店乐。

機器學(xué)習(xí)的常見問題

常見的機器學(xué)習(xí)問題艰躺,可以抽象為 4 大類問題:

1、監(jiān)督學(xué)習(xí)

2眨八、非監(jiān)督學(xué)習(xí)

3腺兴、半監(jiān)督學(xué)習(xí)

4、增強學(xué)習(xí)

根據(jù)訓(xùn)練數(shù)據(jù)是否有 label廉侧,可以將問題分為監(jiān)督學(xué)習(xí)(所有數(shù)據(jù)都有 label)页响,半監(jiān)督學(xué)習(xí)(部分數(shù)據(jù)有 label)和非監(jiān)督學(xué)習(xí)(所有數(shù)據(jù)都沒有 label)。 增強學(xué)習(xí)不同于前 3 種問題段誊,增強學(xué)習(xí)也會對行為給出反饋(reward)闰蚕,但關(guān)注的是如何在環(huán)境中采取一系列行為,從而獲得最大的累積回報连舍。監(jiān)督學(xué)習(xí)是目前應(yīng)用最廣泛没陡,也是研究最充分的機器學(xué)習(xí)問題,本文接下來將重點介紹監(jiān)督學(xué)習(xí)索赏。

監(jiān)督學(xué)習(xí)

在監(jiān)督學(xué)習(xí)中诗鸭,給定 N 個訓(xùn)練樣本

我們的目標是得到一個從輸入到輸出的函數(shù):

實際中,我們通常不會直接優(yōu)化函數(shù) f参滴,而是根據(jù)問題的具體情況,選擇一組參數(shù)化的函數(shù) fθ, 將優(yōu)化函數(shù) f 轉(zhuǎn)換成優(yōu)化參數(shù)θ锻弓。

常見的分類問題和回歸問題砾赔,都是監(jiān)督學(xué)習(xí)的一種特例。線性分類器,深度神經(jīng)網(wǎng)絡(luò)等模型暴心,都是為了解決這些問題設(shè)計的參數(shù)化后的函數(shù)妓盲。為了簡單,我們以線性分類器

為例专普,需要優(yōu)化的參數(shù)θ為 (w,b)悯衬。

損失函數(shù)

為了衡量函數(shù)的好壞,我們需要一個客觀的標準檀夹。 在監(jiān)督學(xué)習(xí)中筋粗,這個評判標準通常是一個損失函數(shù)

對一個訓(xùn)練樣本

模型的預(yù)測結(jié)果為 y^,那對應(yīng)的損失為

損失越小炸渡,表明函數(shù)預(yù)測的結(jié)果越準確娜亿。實際中,需要根據(jù)問題的特點蚌堵,選擇不同的損失函數(shù)买决。

二分類問題中,常用的 logistic regression 采用 sigmoid + cross entroy 作為 loss吼畏。對常見的 loss督赤,tensorflow 都提供了相應(yīng)的函數(shù)。

loss = tf.nn.sigmoid_cross_entropy_with_logits(labels=labels, logits=y)

對多分類問題泻蚊,如上圖所示躲舌,我們可以將二分類的線性分類器進行擴展為 N 個線性方程:

然后通過

進行歸一化,歸一化后的結(jié)果作為每一類的概率藕夫。因此孽糖,多分類通常使用 softmax + cross entropy 作為損失函數(shù)。

loss = tf.nn.softmax_cross_entropy_with_logits(

labels=labels, logits=logits)

可以證明毅贮,對于二分類問題办悟,采用 sigmoid cross entroy 和 softmax cross entory 作為 loss,在理論上是完全等價的滩褥。此外病蛉,實際中通常采用直接計算 softmax cross entropy 而不是先計算 softmax,后計算 cross entory瑰煎,這主要是從數(shù)值穩(wěn)定性的角度考慮的铺然。

損失最小化和正則項

在定義了損失函數(shù)之后,監(jiān)督學(xué)習(xí)問題可以轉(zhuǎn)化為最小化實驗損失

實際中酒甸,為了保證模型的擬合能力魄健,函數(shù) $f$ 的復(fù)雜度有時會比較高。如最圖中最右邊情況所示插勤,如果訓(xùn)練樣本數(shù)較少或者 label 有錯誤時沽瘦,直接最小化實驗損失而不對 $f$ 加限制的話革骨,模型容易過擬合。

因此析恋,在樣本數(shù)量較少或者標注質(zhì)量不高的情況下良哲,需要額外添加正則項(regularizer),保證模型的泛化能力助隧。實際中根據(jù)不同需求筑凫,可以選擇不同的正則項。在神經(jīng)網(wǎng)絡(luò)當中并村,比較常見的是 l2 norm 正則項:

在 tensorflow 中巍实,通常有兩種方法添加正則項。一種是根據(jù)需要橘霎,自己實現(xiàn)相應(yīng)的 regularization loss蔫浆,然后和其他 loss 相加進行優(yōu)化。這種方法可以實現(xiàn)比較復(fù)雜的 regularizer姐叁。

weight_decay = tf.multiply(tf.nn.l2_loss(weights),

wd, name='weight_loss')

對于常見的正則項瓦盛,也可以使用 tensorflow 自帶的功能,對相應(yīng)的變量進行正則化外潜。然后將系統(tǒng)生成的所有 regularization loss 和其他 loss 相加進行優(yōu)化原环。

tf.contrib.layers.apply_regularization(

tf.contrib.layers.l2_regularizer(wd), weights)

tf.losses.get_regularization_losses()

梯度下降和反向傳播

在定義了損失函數(shù)和正則項之后,最終正則化后的 loss 為:

有了 loss 函數(shù)处窥,相應(yīng)的參數(shù)可以通過標準的梯度下降算法進行優(yōu)化求解嘱吗。例如對線性分類器中的 $w$,可以通過如下的公式進行迭代更新:

通過設(shè)定合適的 learning rate滔驾,參數(shù)會逐步收斂到局部 / 全局最優(yōu)解谒麦。

反向傳播可以看成梯度下降在神經(jīng)網(wǎng)絡(luò)中的一個推廣,也是通過最小化 loss 函數(shù)哆致,計算參數(shù)相對于 loss 的梯度绕德,然后對參數(shù)進行迭代更新。具體的推導(dǎo)因為篇幅原因在這里略過了摊阀。在 tensorflow 中耻蛇,只需要指定 loss 函數(shù)和步長(learning rate),optimizer 可以自動幫我們完成梯度下降 / 反向傳播的過程:

tf.train.GradientDescentOptimizer(

learning_rate).minimize(loss)

OCR 實戰(zhàn)

最后本文通過一個 OCR 的例子胞此,展示如何用 Tensorflow 實現(xiàn) Softmax 分類器和 MLP 分類器臣咖。實驗數(shù)據(jù)集采用著名的數(shù)字識別數(shù)據(jù)集 MNIST。該數(shù)據(jù)集包含了 60000 張訓(xùn)練圖片和 10000 張測試圖片漱牵。數(shù)據(jù)集中的每一張圖片都代表了 0-9 中的一個數(shù)字夺蛇,圖片的尺寸為 28×28。

Softmax 分類器

我們首先實現(xiàn)一個簡單的 Softmax 分類器酣胀。由于 Tensorflow 運行構(gòu)建好的網(wǎng)絡(luò)的過程比較復(fù)雜蚊惯,為了提高開發(fā)效率和代碼的復(fù)用性愿卸,我們將代碼分成了 3 個主要模塊,分別是 Dataset 模塊截型,Net 模塊和 Solver 模塊。

模型結(jié)構(gòu)

對每一個 Net 類里儒溉,我們需要實現(xiàn)三個函數(shù):

1宦焦、inference

我們在 inference 函數(shù)中定義網(wǎng)絡(luò)的主體結(jié)構(gòu)。在 tensorflow 中顿涣,變量用 tf.Variable 表示波闹。因為 Softmax 分類器是一個凸函數(shù),任何初始化都可以保證達到全局最優(yōu)解涛碑,因此我們可以簡單的將W和b初始化為 0精堕。 Softmax 分類器可以簡單的通過一個矩陣乘法y = tf.matmul(data, W) + b后接一個tf.nn.softmax函數(shù)實現(xiàn)。

2蒲障、loss

按照之前介紹的歹篓,為了保證數(shù)值穩(wěn)定性,我們直接采用直接計算tf.nn.softmax_cross_entropy_with_logits的方式揉阎。

3庄撮、metric

在訓(xùn)練完模型后,我們需要在 validation 或 test 集合上驗證模型的性能毙籽。在測試集比較大時洞斯,我們無法一次得到模型在整個測試集上的結(jié)果,需要將測試集分成小的 batch坑赡,在每個 batch 上進行測試烙如,之后將每個 batch 的結(jié)果匯總起來。 為此毅否,tensorflow 提供了 tf.metrics 模塊亚铁,可以自動完成對每個 batch 進行評價,并將所有的評價匯總的功能搀突。在這個例子里刀闷,我們是解決分類問題,因此可以使用tf.metrics.accuracy計算分類的準確率仰迁。

Dataset

In versions of TensorFlow before 1.2, we recommended using multi-threaded, queue-based input pipelines for performance. Beginning with TensorFlow 1.2, however, we recommend using the tf.contrib.data module instead.

從 Tensorflow1.2 開始甸昏,Tensorflow 提供了基于 tf.contrib.data 的新 API。相比原來基于 QuequRunner 和 Coordinator 的 API徐许,代碼結(jié)構(gòu)簡潔了很多施蜜。所以我們在 Dataset 類中采用了新的 API,實現(xiàn)數(shù)據(jù)讀取雌隅。

我們首先讀取了 numpy.array 格式的 mnist 數(shù)據(jù)集images翻默, labels缸沃。然后通過tf.contrib.data.Dataset.from_tensor_slices將之轉(zhuǎn)換成 tf.contrib.data.Dataset 格式。之后我們可以設(shè)置對 Dataset 的遍歷次數(shù)(None 代表無限次)修械,batch size 以及是否對數(shù)據(jù)集進行 shuffle趾牧。 最后,我們采用最簡單的make_one_shot_iterator()和get_next()肯污,得到網(wǎng)絡(luò)的基本數(shù)據(jù)單元 batch翘单。 按默認配置,每個 batch 含有 50 張圖和其對應(yīng)的 label蹦渣。

Solver

最后我們介紹 Sover 類哄芜。Solver 類主要包含五個函數(shù):

1、build_optimizer

因為網(wǎng)絡(luò)比較簡單柬唯,這里我們選用最基本的隨即梯度下降算法tf.train.GradientDescentOptimizer认臊,并使用了固定的 learning rate。

2锄奢、build_train_net失晴、build_test_net

這兩個函數(shù)的作用類似,都是將 Dataset 中的數(shù)據(jù)和 Net 中的網(wǎng)絡(luò)結(jié)構(gòu)串聯(lián)起來斟薇。在最后我們調(diào)用tf.summary.scalar將 loss 添加到 summary 中师坎。 tensorflow 提供了強大的可視化模塊 tensorboard,可以很方便的對 summary 中的變量進行可視化堪滨。

3胯陋、train_net

在 train_net 的開頭,我們完成了 Graph袱箱,Saver遏乔,summary 等模塊的初始化。 然后通過summary_writer.add_graph(tf.get_default_graph())发笔,將網(wǎng)絡(luò)結(jié)構(gòu)打印到 summary 中盟萨。

之后初始化tf.Session(),并通過session.run運行對應(yīng)的操作了讨。在 tensorflow 使用了符號式編程的模式捻激,創(chuàng)建 Graph 的過程只是完成了構(gòu)圖,并沒有對數(shù)據(jù)進行實際運算前计。在 Session 中運行對應(yīng)的操作時胞谭,才真正對底層數(shù)據(jù)進行操作。

4男杈、test_net

和 train_net 類似丈屹,test_net 主要完成了各種模塊的初始化,之后讀取模型目錄文件下的 checkpoint 文件中記錄的最新的模型伶棒,并在測試集中進行測試旺垒。

下圖是 tensorboad 中可視化的網(wǎng)絡(luò)結(jié)構(gòu)彩库,和 loss 的統(tǒng)計∠冉可以看到骇钦,tensorboad 對我們進行分析提供很好的可視化支持。

最終程序的輸出結(jié)果如下:

可以看到竞漾,一個簡單的線性模型可以達到 92% 的準確率司忱。我們猜測數(shù)字識別這個問題應(yīng)該不是線性可分,因此使用更復(fù)雜的非線性分類器應(yīng)該可以得到更好的結(jié)果畴蹭。

MLP 分類器

由于我們采用了模塊化的設(shè)計,各個模塊直接基本是解耦合的鳍烁。因此將 Softmax 分類器替換成 MLP 非常容易叨襟,我們只需要重新實現(xiàn) Net 層就可以了。

為了證明 MLP 的效果幔荒,我們構(gòu)造了一個含有 2 層 hidden layer 的神經(jīng)網(wǎng)絡(luò)糊闽。代碼結(jié)構(gòu)和 Softmax 分類其大致一樣,就不做過多解釋了爹梁。 因為線性層在網(wǎng)絡(luò)中多次出現(xiàn)右犹,我們將他抽象為一個可以復(fù)用的函數(shù)。 另外姚垃,為了讓 graph 在 tensorboad 中的可視化效果更好念链,我們將相關(guān)的變量和操作,通過with tf.variable_scope('hidden1'):放置在同一個 variable_scope 下面积糯。這樣所有相關(guān)變量和操作在 tensorboad 都會收縮成一個可以展開的節(jié)點掂墓,從而提供更好的可視化效果。

最終的網(wǎng)絡(luò)結(jié)果和運行結(jié)果如下所示:

可以看到看成,使用了包含 2 層 hidden layer 的簡單神經(jīng)網(wǎng)絡(luò)君编,分類的準確率已經(jīng)提升到了 97%,大大優(yōu)于簡單的線性分類器川慌。證明了模型選擇對最終性能的重要影響吃嘿。

完整代碼下載:

https://github.com/Dong--Jian/Vision-Tutorial

嵌牛總結(jié):本文重點介紹了計算機視覺的基本概念梦重,以及神經(jīng)網(wǎng)絡(luò)抚芦,監(jiān)督學(xué)習(xí)的基本理論,希望對學(xué)習(xí)深度學(xué)習(xí)的你有所幫助紊搪。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耐版,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子艾蓝,更是在濱河造成了極大的恐慌力崇,老刑警劉巖斗塘,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亮靴,居然都是意外死亡馍盟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門茧吊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贞岭,“玉大人,你說我怎么就攤上這事搓侄∶榻埃” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵讶踪,是天一觀的道長芯侥。 經(jīng)常有香客問我,道長乳讥,這世上最難降的妖魔是什么柱查? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮云石,結(jié)果婚禮上唉工,老公的妹妹穿的比我還像新娘。我一直安慰自己汹忠,他們只是感情好淋硝,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著错维,像睡著了一般奖地。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赋焕,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天参歹,我揣著相機與錄音,去河邊找鬼隆判。 笑死犬庇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的侨嘀。 我是一名探鬼主播臭挽,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咬腕!你這毒婦竟也來了欢峰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纽帖,沒想到半個月后宠漩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡懊直,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年扒吁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片室囊。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡雕崩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出融撞,到底是詐尸還是另有隱情盼铁,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布尝偎,位于F島的核電站捉貌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏冬念。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一牧挣、第九天 我趴在偏房一處隱蔽的房頂上張望急前。 院中可真熱鬧,春花似錦瀑构、人聲如沸裆针。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽世吨。三九已至,卻和暖如春呻征,著一層夾襖步出監(jiān)牢的瞬間耘婚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工陆赋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沐祷,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓攒岛,卻偏偏與公主長得像赖临,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子灾锯,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

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