開發(fā)一款負體驗的AI產品,我體會到了什么?
我認為這個社會發(fā)展地很快,但對于小孩以及青少年的保護也越來越弱了。因此,我覺得社會有必要也有義務去設立一些規(guī)則使小朋友盡可能少受到不良信息的傷害。我覺得小事先從我做起,我先來開發(fā)一款屏蔽黃圖的瀏覽器擴展產品。
當大家看到這個標題時可能會問:什么是負體驗的產品?
其實很簡單:就是用了這款產品,在某些場景下你可能得到不良的體驗。大家心里可能會有100個問號,那你開發(fā)這款產品出來干嘛?
答案也很簡單,我覺得開發(fā)這款產品是一件非常有必要的事情。
今年我大部分的時間都花在研究人工智能和寫書上,在快要到10月份的時候,我大學畢業(yè)時立下的“一年開發(fā)一個產品”目標還沒開始實現,我覺得不能再這樣拖下去了,于是開始構思今年要做什么。
我認為獨立完成一個項目是一個很好的學習機會,而且我不愿意錯過人工智能這個浪潮,所以我決定今年的產品是跟人工智能有關的。在10月的時候我開始去學習深度學習相關內容,在這里要推薦一本非常不錯的書籍,名叫《Python深度學習》,它是Keras之父的最新之作,深入淺出地介紹了深度學習的相關知識和工程。
從10月份到現在,雖然我的知識還是只有半桶水,但我深深覺得,深度學習比前端開發(fā)和手機開發(fā)有趣多了,如果5年前已有相關知識的話,我現在應該不是一名交互設計師了……
Python深度學習
我究竟要做什么產品?
這個問題困擾了我好幾天。
我希望這款產品開發(fā)成本不是很高而且是有意義的;目前Google已經開源了Tensorflow.JS,它可以讓開發(fā)者在瀏覽器上進行深度學習的運算和開發(fā),基于這三個原因我把目標鎖定在開發(fā)一款瀏覽器擴展上(因為我認為從零開發(fā)一款手機AI應用不太實際,而且沒有人會因為AI兩個字而去使用你的產品)。
目前Tensorflow.JS已經逐漸完善,并且提供了人臉識別、肢體識別等API,但精度不是很高,而且每個用戶的電腦前置攝像頭拍攝效果很差,所以我想象不出這些API對我來說有什么用;在某天和別人聊到鑒黃技術的時候,我靈機一動并確定了這個產品要做什么:我要做一款AI鑒黃瀏覽器擴展,它能屏蔽掉網頁上的黃圖。
現在大家應該知道這為什么是一款負體驗的產品了,因為它很可能會讓某些用戶在瀏覽網頁過程中產生負面體驗:黃圖被屏蔽了。
為什么我要做這款產品?
回想過去,我們以前獲取信息是很不方便的,沒有相關途徑可能都不知道怎么去找張黃圖(我認為這對于一個處于青春期的青少年來說是件非常正常而且能夠理解的事情),我猜這對大部分青年的成長也是有好處的。但是現在的社會太開放了,而且很容易就能找到想找的內容。
先不說各種網絡暴力充斥著這個社會,更重要的是有些不法分子會利用黃色、暴力內容以及青少年的沖動和好奇心理去毒害青少年的思想。
例如:通過一個含有黃圖的小廣告引導用戶去瀏覽黃色、暴力、賭博等非法網站,一些無知的青少年可能因為一時沖動而沾染上不良的嗜好,比如黃賭毒等。而父母親也很難發(fā)現自家小孩發(fā)生的變化(畢竟現在的小朋友每個人都有一臺手機,偷偷看個黃色網站父母是很難發(fā)現的),最后的結局就是覆水難收。
我認為:這個社會是發(fā)展得很快,但對于小孩以及青少年的保護也越來越弱了。
因此,我覺得社會有必要而且有義務去設立一些規(guī)則使小朋友盡可能少受到不良信息的傷害,所以我覺得小事先從我做起,我先來開發(fā)一款屏蔽黃圖的瀏覽器擴展產品。(深度學習+鑒黃+客戶端開發(fā)可以說是天作之合,既然我們不能從源頭鏟除相關的產業(yè),那我們就從離小朋友最近的屏幕進行屏蔽。當AI鑒黃引擎識別到網頁內容有黃色圖片時,瀏覽器可以第一時間將此屏蔽。)
整個項目開發(fā)時間大概花了兩周左右,期間最花時間的是如何提高整個擴展的性能。由于圖片識別需要一定的時間,為了盡可能降低整個圖像識別時間,提升用戶瀏覽網頁的體驗,我在整個項目中考慮了以下方案:
- 為了解決圖片因為跨域而無法識別這個問題,我在前期使用了Canvas重繪img元素這個方案,但重繪每張圖會多帶來500ms,后面優(yōu)化時改用了XHR方式將圖片轉換為Base64格式進行識別,前期準備時間降至10ms。
- 由于各種正常途徑都無法將識別模型放在本地,用戶在清除完緩存的情況下打開瀏覽器都需要從服務器重新獲取模型數據(Inception V3模型約為90M,MobileNet模型約為9M,最后采用了后者),這樣不僅增加了服務器成本,同時用戶的體驗會大大降低。在經歷了多次嘗試后,我通過一些小聰明成功地將本地模型路徑轉換為URL,用戶安裝擴展后可以立即使用,這里使下載模型的時間成本降至為0。
- 由于網頁是單線程的,這意味著網頁加載和圖片識別不能同時進行。在這里我嘗試了Web Worker的方案,它能夠在瀏覽器內多線程運行其他程序。很可惜的是,Tensorflow.JS涉及到DOM操作,導致在Web Worker內Tensorflow無法使用,整個網頁瀏覽體驗無法繼續(xù)提升。
- 每張圖片的識別需要90ms左右,一個包含了上百張圖的大型網站可能要識別很久時間,為了解決這個問題,我會在未來的迭代中考慮將圖片打包成Batch進行識別(由于現在還沒學會……),聽說這個方案能使32張圖片的識別時間降至幾百毫秒。
在深度學習方面我采用遷移學習的方式對MobileNet上層結構進行重寫,當我把項目快做完的時候才發(fā)現鑒黃沒有想象中那么簡單,原來這是一個困擾計算機科學家十幾年的難題Orz!
在這里我總結一下項目里遇到的坑:
- 我在12.17號前上Tumblr爬了數萬張照片,并辛辛苦苦將數千張圖分門別類。但要進行分類?是根據實體還是動作進行分類?項目前期我采用了后者方案,當時我天真的認為動作是抽象的,搞定體位動作識別就應該沒問題了,最后識別出來的效果非常差,有些時候模型會把一只可愛小狗識別成黃圖,為了提高整體的準確率我后續(xù)很苦逼地把圖片按照實體重新進行分類,效果有所提升。
- 由于第一次生成的模型識別效果太差,我反思了一下有可能是照片太花哨的緣故導致機器不能識別重點,所以我又辛辛苦苦地將所有照片的重點內容給裁剪出來,最后識別效果大幅度提升。
- 在項目的最后期間,我找到了雅虎提供的NSFW開源模型(NSFW, Not Safe For Work),它的準確度比我的模型高很多,可惜的是在模型轉換為JavaScript版本時由于API缺失導致模型轉換失敗。
- 項目前期我曾考慮過先把網頁的全部圖片識別完再呈現給用戶,但由于性能問題會嚴重影響到整個的網頁瀏覽體驗,所以我最終還是放棄了該想法,策略改為優(yōu)先顯示圖片,識別到黃圖時將之模糊。
在整個項目做完后,我認為這個項目的最終結果是很不完美的。除了我個人能力有限以外,我認為更多是現有條件不足而導致的,例如Tensorflow不能在Web Worker內運行,導致不能脫離主線程,在多線程內進行識別圖片。
還有就是整個模型的識別效果真的差強人意,我反思了一下為什么效果這么差,我認為有以下幾個原因:
- 人類更多是通過經驗和語義進行思考的(人類可以通過衣著打扮、裸露程度、姿勢動作、場景氛圍、表情等方式判斷這張圖是否包含色情內容),而機器只能根據經驗進行識別(經驗就是指你喂給機器的圖片)。
- 關于色情和情色,這是非常不一樣的。我認為人類在這里的判斷多是主觀判斷,這對于機器來說就更難了。
- 圖片分類可以認為是整個黃圖鑒別框架的設計,稍微把握不慎可能產生巨大的影響。
舉例:
- 全裸不一定是黃圖,如果機器把全裸的嬰兒照片或者世界藝術作品當做色情圖片就會很尷尬了,因此在設計分類時需要找到一些正常的分類來做訓練對抗。
- 如果每個分類都是單獨的器官,會不會對整張圖片的識別帶來影響?這影響是很明顯的,因為色情更多是氛圍,一個器官無法撐起整個色情氛圍,但采用器官分類這個方案能很大程度上提高某些圖片的識別準確度,但對于范圍更廣的色情圖片來說作用不是很大。
- 如果每個分類都是不同的動作,會不會對整張圖片的識別帶來影響?這個影響會更大。因為動作是抽象的,而畫面里的人物特點都不一樣,導致機器看不懂圖里的固定特征究竟是什么,最終得出來的模型效果會非常差。
- 雅虎的NSFW模型會把圖片分成Safe和Not Safe兩個維度,如果按照雅虎的NSFW模式來設計分類的話,在沒有海量圖片的情況下最終的效果是一定最差的。
- 數據量小的情況下應該會降低分類的作用。
雖然產品的最終效果不怎么樣,但我覺得這個項目還是很有意義的,起碼我能學到很多新的知識,如果這個項目能延續(xù)下去幫助到別人就好了。
我真的希望這項功能可以遷移到手機端,成為兒童安全模式的必備功能,因為現在的小孩更多是使用手機去獲取資訊,鑒黃技術在手機端能起到更多的作用。同時,越來越多的手機擁有AI芯片,如果能在手機底層使用圖像識別技術將大大提高整個識別速度,體驗會更佳。
明年我會持續(xù)迭代優(yōu)化整個項目,除了增加數據優(yōu)化模型外,我還會嘗試加入文字內容識別和黃圖鏈接索引,也會考慮增加暴力、毒品、賭博等內容識別,希望能更全面地保障兒童的上網體驗。如果有朋友愿意加入這個開源項目,請隨時聯(lián)系我。
2018年就要過去了,為了打破事業(yè)上的瓶頸我付出了不少的努力,同時收獲也蠻多的,希望明年自己會變得更好。最后衷心地祝福每位讀者圣誕節(jié)快樂,明年又是開心順利的一年:-)
#專欄作家#
無線翡翠臺,微信公眾號:薛志榮,人人都是產品經理專欄作家。全棧開發(fā)者,專注于交互設計和人工智能設計。
本文原創(chuàng)發(fā)布于人人都是產品經理。未經許可,禁止轉載。
題圖來自 Unsplash,基于CC0協(xié)議。
您好,很偶然的看到您的這篇文章。十分高興能看到類似的文章,雖然我不是開發(fā)從業(yè)者,但也算是互聯(lián)網從業(yè)者吧,因為目前在做的就是CPM這一塊的廣告投放,而廣告投放中,圖片,標題等是十分重要的,同樣的兩段標題,換一張圖片可能會帶來突破性的點擊量與轉化,或許您可以從投放人員的角度和思維去考慮產品優(yōu)化,希望能夠幫助到您。
AI的應用場景,我認為想法很好 ??
嘗試即獲得,敢想敢做
想學人工智能,但公司不是這方面業(yè)務的,學了不用就吸收不了,不學呢,又沒有類似的崗位可以競爭。