《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業界動態 > 僅17 KB、一萬個權重的微型風格遷移網絡!

僅17 KB、一萬個權重的微型風格遷移網絡!

2018-11-30

今天 reddit 上一篇帖子引起了熱議,博主 jamesonatfritz 稱他將原本具備 1.7M 參數的風格遷移網絡減少到只有 11,868 個參數,該網絡仍然能夠輸出風格化的圖像。且量化后的最終網絡體積僅有 17 kB,非常適合移動 app。


jamesonatfritz 想解決神經網絡的過參數化問題,想要創建體積小但性能優的神經網絡。他所試驗的第一個任務便是藝術風格遷移。


GitHub 鏈接:https://github.com/fritzlabs/fritz-style-transfer


現在有很多用來訓練藝術風格遷移模型的現成工具,還有上千種開源實現。其中的多數工具利用 Johnson 等人在《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》中提出的網絡架構的變體來實現快速、前饋的風格化。因此,多數遷移模型的大小是 7MB。對于你的應用來說,這個負擔并非不可承受,但也并非無足輕重。


研究表明,神經網絡的體積通常遠遠大于所需,數百萬的權重中有很多并不重要。因此作者創造了一個體積大大縮小的可靠風格遷移模型:一個只有 11686 個訓練權重的 17KB 神經網絡。

微信圖片_20181130192911.jpg

左:原圖;中:來自上述 17KB 模型的風格化圖像;右:來自 7MB 模型的風格化圖像。


快速概覽:


原始模型:

大?。?MB

權重數:1.7M

在 iPhone X 上的速度:18 FPS


小模型:

大?。?7KB

權重數:11,868

在 iPhone X 上的速度:29 FPS


如何縮小風格遷移模型


作者主要使用了兩種技術,而且都可以泛化到其他模型:


1. 大刀闊斧地修剪層和權重;

2. 通過量化將 32 位浮點權重轉換為 8 位整型


機器之心Synced剪枝小程序


修剪策略


卷積神經網絡通常包含數百萬甚至上億個需要在訓練階段進行調整的權重。通常來講,權重越多準確率越高。但這種增加權重提高準確率的做法非常低效。谷歌 MobileNetV2 的 stock 配置具有 347 萬個權重,內存占用達 16MB。InceptionV3 架構大小約為前者的 6 倍,具備 2400 萬個權重,內存占用達 92MB。盡管多了 2000 多萬個權重,但 InceptionV3 在 ImageNet 上的 top-1 分類準確率只比 MobileNetV2 高出 7 個百分點(80% vs 73%)。


因此,我們可以假設神經網絡中的多數權重沒有那么重要并將其移除。但重點是怎么做呢?我們可以選擇在三個層面進行修剪:單個權重、層、塊。


權重層面:假設某個神經網絡上的多數(>95%)權重都沒有什么用。如果能找出那些對準確率有影響的權重,就可以將其留下并將其他移除。


層層面:每個層中都包含一些權重。例如,2D 卷積層具有一個權重張量,即卷積核,用戶可以定義其寬度、高度和深度??s小卷積核可以減小整個網絡的大小。


塊層面:多個層通??梢越Y合成可重復利用的子圖,即塊。以 ResNet 為例,它的名字來源于重復 10-50 次的「殘差塊」。在塊層面進行修剪可以移除多個層,從而一次性移除多個參數。


在實踐中,稀疏張量運算沒有很好的實現,因此權重層面的修剪沒有多大價值。那么就只剩下層和塊層面的修剪了。


實踐中的修剪


作者使用的層修剪技術是引入 width multiplier 作為超參數。width multiplier 最初由谷歌在其論文《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision》中提出,非常簡單、高效。


width multiplier 利用一個恒定系數調整每個卷積層中的卷積核數量。對于給定的層及 width multiplier alpha,卷積核數量 F 變為 alpha * F。


有了這個超參數,我們就可以生成一系列架構相同但權重數不同的網絡。訓練每種配置,就可以在模型速度、大小及準確率之間做出權衡。


下面是作者模仿 Johnson 等人在《The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks》提出的網絡架構構建快速風格遷移模型的方法,不同之處在于添加了 width multiplier 作為超參數。


@classmethod
def build(
        cls,
        image_size,
        alpha=1.0,
        input_tensor=None,
        checkpoint_file=None):
    """Build a Transfer Network Model using keras' functional API.
    Args:
        image_size - the size of the input and output image (H, W)
        alpha - a width parameter to scale the number of channels by
    Returns:
        model: a keras model object
    """
    x = keras.layers.Input(
        shape=(image_size[0], image_size[1], 3), tensor=input_tensor)
    out = cls._convolution(x, int(alpha * 32), 9, strides=1)
    out = cls._convolution(out, int(alpha * 64), 3, strides=2)
    out = cls._convolution(out, int(alpha * 128), 3, strides=2)
    out = cls._residual_block(out, int(alpha * 128))
    out = cls._residual_block(out, int(alpha * 128))
    out = cls._residual_block(out, int(alpha * 128))
    out = cls._residual_block(out, int(alpha * 128))
    out = cls._residual_block(out, int(alpha * 128))
    out = cls._upsample(out, int(alpha * 64), 3)
    out = cls._upsample(out, int(alpha * 32), 3)
    out = cls._convolution(out, 3, 9, relu=False, padding='same')
    # Restrict outputs of pixel values to -1 and 1.
    out = keras.layers.Activation('tanh')(out)
    # Deprocess the image into valid image data. Note we'll need to define
    # a custom layer for this in Core ML as well.
    out = layers.DeprocessStylizedImage()(out)
    model = keras.models.Model(inputs=x, outputs=out)

注意,模型構建器類的其余部分沒有顯示。


當 alpha=1.0 時,得到的網絡包含 170 萬個權重。當 alpha=0.5 時,得到的網絡僅有 424,102 個權重。


你可以構建一些寬度參數很小的網絡,但是也有相當多的重復塊。作者決定修剪掉一些,但實際操作后卻發現不能移除太多。即使參數量保持不變,較深的網絡能夠產生更好的結果。作者最終刪除了五個殘差塊中的兩個,并將每層的默認濾波器數量減少至 32 個。得到的微型網絡如下所示:


@classmethod
def build(
        cls,
        image_size,
        alpha=1.0,
        input_tensor=None,
        checkpoint_file=None):
    """Build a Small Transfer Network Model using keras' functional API.
    This architecture removes some blocks of layers and reduces the size
    of convolutions to save on computation.
    Args:
        image_size - the size of the input and output image (H, W)
        alpha - a width parameter to scale the number of channels by
    Returns:
        model: a keras model object
    """
    x = keras.layers.Input(
        shape=(image_size[0], image_size[1], 3), tensor=input_tensor)
    out = cls._convolution(x, int(alpha * 32), 9, strides=1)
    out = cls._convolution(out, int(alpha * 32), 3, strides=2)
    out = cls._convolution(out, int(alpha * 32), 3, strides=2)
    out = cls._residual_block(out, int(alpha * 32))
    out = cls._residual_block(out, int(alpha * 32))
    out = cls._residual_block(out, int(alpha * 32))
    out = cls._upsample(out, int(alpha * 32), 3)
    out = cls._upsample(out, int(alpha * 32), 3)
    out = cls._convolution(out, 3, 9, relu=False, padding='same')
    # Restrict outputs of pixel values to -1 and 1.
    out = keras.layers.Activation('tanh')(out)
    # Deprocess the image into valid image data. Note we'll need to define
    # a custom layer for this in Core ML as well.
    out = layers.DeprocessStylizedImage()(out)
    model = keras.models.Model(inputs=x, outputs=out)

帶有寬度參數的較小風格遷移網絡。


通過反復嘗試,作者發現仍然可以用上述架構實現良好的風格遷移,一直到寬度參數為 0.3,在每一層上留下 9 個濾波器。最終結果是一個只有 11,868 個權重的神經網絡。任何權重低于 10000 的網絡都不能持續訓練,并且會產生糟糕的風格化圖像。


值得一提的是,剪枝技術是在網絡訓練之前應用的。在訓練期間或訓練后反復修剪,你可以在很多任務上實現更高的性能。


量化


最后一段壓縮是在網絡訓練完成后進行的。神經網絡權重通常存儲為 64 位或 32 位浮點數。量化過程將每一個浮點權重映射到具有較低位寬的整數。從 32 位浮點權重變為 8 位整型,使得存儲大小減少了 4 倍。作者利用 Alexis Creuzot 在博客中提出的方法(https://heartbeat.fritz.ai/reducing-coreml2-model-size-by-4x-with-quantization-in-ios12-b1c854651c4),在不怎么影響風格的情況下使浮點數降低到了 8 位量化。


現在所有主要的移動框架都支持量化,如 TensorFlow Mobile、TensorFlow Lite、Core ML 和 Caffe2Go。


最終結果


該微型網絡架構有 11,868 個參數,相比之下,Johnson 最初的模型具有 170 萬個參數,大小為 1.7MB。當轉化為 Core ML 并量化時,最終大小僅為 17KB——為原始大小的 1/400。以下是在梵高的《Starry Night》上的訓練結果。


此微型風格遷移結果的實時視頻可在 Heartbeat App 上查看:

http://bit.ly/heartbeat-ios

微信圖片_20181130192956.gif


作者驚訝地發現,盡管尺寸相差 400 倍,但在 iPhone X 上,這款微型模型的運行速度僅快了 50%。原因可能是計算與這一通用架構相關,也可能是將圖像遷移到 GPU 進行處理時造成的。


如果你對結果表示懷疑,可以自己下載并運行此微型模型。甚至訓練自己的模型!


下載地址:https://github.com/fritzlabs/fritz-style-transfer/blob/master/example/starry_night_640x480_small_a03_q8.mlmodel


總而言之,作者用兩種簡單的技術將風格遷移神經網絡的規模減小了 99.75%。使用簡單的 width multiplier 超參數修剪層,訓練后的權重從 32 位浮點數量化為 8 位整數。未來,作者期待看到將這些方法泛化到其它神經網絡的效果。風格遷移相對簡單,因為「準確率」肉眼可見。對于圖像識別這樣更加可以量化的任務而言,如此極端的修剪可能帶來更明顯的性能下降。


Reddit 討論


這篇帖子下有一些 reddit 網友對該項目提出了質疑:


gwern:


看你的博客,剪枝部分似乎沒有移除任何層,只是更改了層的寬度/濾波器,然后對所有參數進行量化。如果所有層都在(因為你沒有做任何類似于訓練較寬的淺層網絡的工作來模仿原始深度教師網絡),那么它們仍將從后續計算的每一層中引入大量延遲,即使每一層都很小。(由于你可以在手機 GPU 上安裝更多模型,每個模型使用較少的 FLOPS,因此整體吞吐量會變得更好。但是每個模型的迭代仍然需要一段時間,在特定大小之后,每一層基本上是即時的。)


jamesonatfritz 回復:


你說得對,濾波器剪枝部分確實沒有移除層,但是我去掉了兩個殘差塊,從而消除了一些層。整體 FLOPs 的降低情況不如全部權重數量的減少情況,這一點你說得對。不幸的是,Apple 沒法讓你較好地控制模型運行的位置。你無法強制該模型使用 GPU。一些啟發式方法導致較小的模型僅在 CPU 上運行,這是可能的。


gwern:


「去掉了兩個殘差塊,從而消除了一些層?!?/p>


你借此獲得了一些加速,但是使用更扁平的模型或許會實現更多加速。


jamesonatfritz 回復:


確實如此。我試過的最扁平模型只有一個卷積層、一個殘差模塊和一個上采樣模塊,但我發現這些變體無法收斂。


gwern:


這似乎有些過了:只有一個層有些過于難了。我想的是三四個層這樣,在預訓練風格遷移模型的確切像素輸出上進行訓練?;蛟S值得一試。


Ikuyas:


這個方法和直接使用小模型有什么區別嗎?我確定使用 11,868 個參數進行訓練結果會更好。另外,1.7M 參數太大了,每個參數的貢獻估計會很小。但是,真實情況是只有幾百個參數是真正重要的,其他參數只是到處吸收一點微小的噪聲。


從標準回歸的角度來看,這似乎是完美的預期結果。


作者回復:


我應該在文章里寫清楚的,事實上你所說的正是我所做的。剪枝發生在訓練之前。反直覺的一件事是,實際上使用較少的參數從頭開始訓練模型無法確保能得到一樣的結果。盡管一小部分權重比較重要,但你很難提前知道哪些權重是重要的。詳情參見論文:《The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks》。


Ikuyas:


神經網絡中的參數缺乏有意義的解釋,這是第一堂機器學習課程中就學過的。這并不反直覺,而是預料之中。剪枝后的參數甚至并不被認為是吸收噪聲的神經元。對于標準回歸模型來說,噪聲有時似乎像是正態分布的實現。而神經網絡擬合并不假設任何此類事情。因此使用較少的參數,你可以用完全不同的模型擬合數據。剪枝技術并沒有什么用。


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          久久久久久久尹人综合网亚洲| 欧美在线免费一级片| 亚洲影视在线播放| 欧美日韩高清区| 欧美伦理影院| 麻豆久久精品| 久久av红桃一区二区小说| 国产精品一区二区久久久久| 久久国产一区| 一区二区三区在线视频观看| 久久视频一区二区| 亚洲精品久久久久久久久久久| 国产欧美日韩麻豆91| 欧美日韩午夜剧场| 亚洲一区二区三区精品动漫| 一区二区三区波多野结衣在线观看| 欧美一区二区三区免费视频| 国产精品久久波多野结衣| 久久成人精品| 国产精品久久久久一区二区三区| 久久久夜色精品亚洲| 亚洲综合三区| 麻豆久久精品| 亚洲欧美日韩在线高清直播| 国产精品视频网站| 亚洲国产婷婷香蕉久久久久久99| 麻豆av一区二区三区久久| 91久久国产综合久久蜜月精品| 狠狠入ady亚洲精品经典电影| 久久免费国产| 亚洲欧美区自拍先锋| 久久视频在线看| 久久久www成人免费精品| **性色生活片久久毛片| 国产精品wwwwww| 欧美视频国产精品| 国产亚洲精品美女| 久久精品综合一区| 一区二区三区高清不卡| 最新成人av网站| 欧美日韩在线精品| 伊人久久噜噜噜躁狠狠躁| 国产农村妇女精品| 久久久激情视频| 国产精品久久久久毛片软件| 欧美一级专区免费大片| 国产人久久人人人人爽| 亚洲国内精品| 久久午夜精品| 国产一区二区三区久久精品| 欧美大片在线观看一区二区| 另类人畜视频在线| 欧美有码视频| 99亚洲伊人久久精品影院红桃| 亚洲免费成人av电影| 国产精品成人一区二区| 欧美精品久久久久久久久久| 国产喷白浆一区二区三区| 欧美日韩一区在线观看视频| 久久久久久久波多野高潮日日| 日韩视频免费在线观看| 久久精品人人做人人爽| 在线亚洲免费| 亚洲欧美日韩爽爽影院| 欧美专区一区二区三区| 亚洲少妇中出一区| 国产精品久久久久久模特| 久久久久久久国产| 亚洲国产一成人久久精品| 久久精品主播| 91久久精品一区二区三区| 亚洲国产成人不卡| 欧美亚洲三区| 亚洲一级在线观看| 亚洲影视综合| 国产欧美亚洲精品| 欧美日韩一级片在线观看| 欧美国产日产韩国视频| 一区二区三区久久精品| 久久激情五月丁香伊人| 欧美伦理在线观看| 日韩视频一区二区三区在线播放| 亚洲在线成人精品| 国产精品成av人在线视午夜片| 中日韩男男gay无套| 国内精品视频久久| 国产亚洲亚洲| 亚洲裸体视频| 美女福利精品视频| 国产精品久久久久一区二区三区| 亚洲影视综合| 欧美视频精品在线观看| 久久国产主播精品| 每日更新成人在线视频| 久久成人人人人精品欧| 国产美女精品在线| 久久精品人人| 在线观看亚洲一区| 激情偷拍久久| 久久综合九色综合欧美就去吻| 日韩视频―中文字幕| 老司机精品视频网站| 宅男噜噜噜66一区二区66| 红桃视频国产一区| 一区二区日韩| aa级大片欧美三级| 在线亚洲欧美专区二区| 久久久久国产精品一区| 国产免费成人在线视频| 欧美日韩国产91| 亚洲国产成人午夜在线一区| 欧美经典一区二区| 夜夜嗨av一区二区三区网站四季av| 亚洲午夜免费视频| 国内精品伊人久久久久av一坑| 国产一区二区三区在线观看免费视频| 亚洲六月丁香色婷婷综合久久| 久久久无码精品亚洲日韩按摩| 亚洲人成小说网站色在线| 久久久久久久久岛国免费| 久久久久国内| 韩国久久久久| 激情综合激情| 亚洲一区综合| 国产精品日韩欧美一区二区三区| 欧美在线国产精品| 亚洲免费影视第一页| 亚洲第一主播视频| 亚洲最新视频在线| 欧美电影免费观看| 欧美成人综合网站| 亚洲自拍电影| 亚洲国产精品一区制服丝袜| 亚洲免费视频一区二区| 久久综合狠狠综合久久激情| 久久一区激情| 欧美日韩在线播放一区二区| 国产精品一区久久久| 国产精品大片| 亚洲国产视频a| 欧美一区二区三区免费视| 亚洲精品一区二区三区婷婷月| 国内精品久久久久伊人av| 另类人畜视频在线| 国产精品热久久久久夜色精品三区| 亚洲一区二区三区色| 亚洲第一福利在线观看| 亚洲国产精品www| 性高湖久久久久久久久| 在线亚洲伦理| 国产视频欧美视频| 欧美亚洲免费| 在线播放中文字幕一区| 欧美日韩午夜激情| 欧美精品在线免费播放| 亚洲激情在线播放| 含羞草久久爱69一区| 在线成人av网站| 久久婷婷av| 亚洲黄色av一区| 美日韩精品免费观看视频| 一区二区不卡在线视频 午夜欧美不卡'| 亚洲一二三四久久| 免费不卡亚洲欧美| 欧美日韩国产系列| 国产精品久久一卡二卡| 欧美国产亚洲另类动漫| 在线成人www免费观看视频| 久久久精品网| 激情成人中文字幕| 久久尤物视频| 欧美gay视频| 鲁大师影院一区二区三区| 亚洲欧美一级二级三级| 黄色日韩网站视频| 欧美亚州在线观看| 午夜精品久久久久久久蜜桃app| 亚洲人成在线播放| 国产精品xxxav免费视频| 欧美一区二区三区四区夜夜大片| 欧美在线播放高清精品| 欧美日韩一区二区欧美激情| 午夜国产欧美理论在线播放| 欧美亚日韩国产aⅴ精品中极品| 欧美日韩另类视频| 欧美一区二区视频网站| 国产亚洲欧美日韩精品| 国产精品久久久爽爽爽麻豆色哟哟| 久久精彩视频| 国产精品有限公司| 国产欧美另类| 欧美在线播放视频| 欧美日韩亚洲高清| 一区视频在线| 欧美二区在线播放| 久久久久久香蕉网| 亚洲最新合集| 伊人春色精品| 欧美国产综合视频| 欧美成人免费全部观看天天性色| 国模精品一区二区三区| 亚洲激情国产| 国产精品久久一级| 亚洲天堂av电影| 亚洲美女中出| 亚洲国产精品高清久久久| 亚洲乱码视频| 一本色道综合亚洲| 亚洲欧美久久久| 午夜久久tv| 亚洲精品一区二| 日韩视频免费看| 欧美视频在线免费看| 久久国产色av| 欧美1级日本1级| 嫩草影视亚洲| 欧美二区在线播放| 国产精品视频一区二区三区| 欧美二区在线播放| 欧美一区二区三区婷婷月色| 黄色成人在线免费| aaa亚洲精品一二三区| 欧美伦理影院| 国产日韩一区二区| 久久婷婷蜜乳一本欲蜜臀| 欧美高清视频一区二区| 欧美激情一区二区在线| 一区免费观看视频| 欧美日韩天天操| 国产精品久久久久久影视| 久久久久九九视频| 国产精品chinese| 亚洲夜间福利| 一区二区三区免费在线观看| 亚洲日本成人女熟在线观看| 欧美日韩精品福利| 久久av一区二区三区| 国产日韩精品入口| 在线观看免费视频综合| 国产一区二区三区最好精华液| 一区二区三区国产| 久久狠狠亚洲综合| 亚洲欧美日韩视频一区| 亚洲欧洲精品一区二区三区| 久久一区亚洲| 欧美午夜无遮挡| 亚洲精品国产欧美| 欧美视频一区二| 久久精品一区蜜桃臀影院| 欧美成人免费一级人片100| 国产麻豆视频精品| 亚洲精品一区中文| 亚洲每日在线| 久久久精品2019中文字幕神马| 亚洲男人的天堂在线aⅴ视频| 欧美www视频| 欧美成人tv| 一个色综合导航| 欧美午夜在线一二页| 欧美二区乱c少妇| 久久国产加勒比精品无码| 欧美一区高清| 久久理论片午夜琪琪电影网| 91久久久久久久久久久久久| 久久亚洲精选| 欧美 亚欧 日韩视频在线| 欧美激情导航| 一区二区视频欧美| 亚洲高清免费视频| 欧美一区二区三区免费观看| 91久久夜色精品国产九色| 国产精品高潮呻吟| 欧美成人一区二区三区片免费| 一区二区三区四区蜜桃| 国产精品日韩精品欧美精品| 国产精品私拍pans大尺度在线| 久久av一区二区| 日韩亚洲在线观看| 亚洲六月丁香色婷婷综合久久| 午夜久久久久久久久久一区二区| 亚洲电影成人| 亚洲一区二区三区乱码aⅴ| 一本色道久久88亚洲综合88| 国产在线高清精品| 国产午夜精品久久久久久免费视| 国产精品久久精品日日| 香蕉视频成人在线观看| 香蕉成人伊视频在线观看| 亚洲网站在线播放| 欧美女同视频| 欧美一二三视频| 亚洲美女精品成人在线视频| 欧美77777| 亚洲精品美女在线观看| 国产精品私人影院| 欧美日韩国产限制| 免费成人av| 在线观看亚洲精品视频| 国产日韩欧美综合精品| 亚洲毛片av在线| 欧美精品在线观看| 久久精品视频免费| 欧美日韩国产一中文字不卡| 日韩午夜激情av| 影音先锋在线一区| 久久久久国产精品麻豆ai换脸| **性色生活片久久毛片| 亚洲性视频网站| 欧美有码在线观看视频| 制服诱惑一区二区| 欧美日韩视频在线观看一区二区三区| 在线看日韩欧美| 嫩模写真一区二区三区三州| 国产一区在线看| 欧美激情综合在线| 欧美一区二区视频免费观看| 亚洲一区二区三区精品在线观看| 亚洲精品麻豆| 欧美成人久久| 黄色成人在线网站| 欧美精品在线观看91| 欧美激情精品久久久久久大尺度| 狠狠久久五月精品中文字幕| 欧美精品18videos性欧美| 国产视频一区二区在线观看| 久久www成人_看片免费不卡| 欧美精品1区| 一个人看的www久久|