generalImageClassification
本項目是通用的圖像分類項目,並以涉黃、涉政、涉恐和普通圖片4分類爲例。圖像違規質檢本質是圖像分類,所以關鍵點在於兩個:
- 圖像分類的數據準備;
- 圖像分類的模型選擇、訓練;
1 數據準備
爲了達到特定類別的分類,準備相應的圖片數據,
- 1 開源的數據集。
- 2 自己寫爬蟲,爬取數據。但是沒時間寫,而且反爬蟲設施的破解很費時間。
- 3 利用特定的網站(爬蟲),幫你取下載數據。
1.1 開源數據集
如果開始一個圖像相關的項目,而這個領域又有公開、開源的數據集,那是最幸福的一件事了。所以有了項目需求之後,第一件事情,可以去github等網站搜尋一下有沒有可以直接使用的數據集。
而對我們的“圖片質檢”項目,涉政圖片、涉恐圖片網上找不到現成的數據集。但是涉黃圖片卻又很多公開數據集,並且圖片質量灰常的“優秀”。下面給出兩個實例:
- nsfw_data_scrapper公開數據集(下面是圖片地址,和一些介紹如何使用的博客):
- nsfw_data_scraper 數據 https://github.com/alex000kim/nsfw_data_scraper
- NSFW Model(使用nsfw_data_scrapper數據訓練resnet) https://github.com/rockyzhengwu/nsfw
- nsfw_data_scraper 博客 https://www.ctolib.com/topics-137790.html
- nsfw_data_scraper 博客 https://blog.csdn.net/yH0VLDe8VG8ep9VGe/article/details/86653609
- nsfw_data_source_urls公開數據集:
- 另外一個數據庫nsfw_data_source_urls: https://github.com/EBazarov/nsfw_data_source_urls
- nsfw_data_source_urls:博客https://www.tinymind.cn/articles/4025
1.2 利用特定網站爬數據
最近發現一個特別好的圖片爬蟲網站:imagecyborg,只需要把你想下載的圖片的網頁地址放進去,他就可以幫你打包下載。使用方法:
- 谷歌圖像搜索相關的關鍵詞。
- 把網址放入 https://imagecyborg.com/ 中幫你下載。
2 分類模型的選擇
圖像分類研究近些年已經非常的成熟,湧現出的大批的優秀模型,並且已經被深度學習框架納入自己的版圖.對於工程界的我們一般只需要微調這些成熟的模型即可。
下面是keras框架內置的模型介紹,本項目考慮準確率和運行速度兩個問題,所以選擇了InceptionV3這個模型,準確率也可以,模型也不太深 參數不算過多。
模型 | 大小 | Top1準確率 | Top5準確率 | 參數數量 | 深度 |
---|---|---|---|---|---|
Xception | 88 MB | 0.790 | 0.945 | 22,910,480 | 126 |
InceptionV3 | 92 MB | 0.779 | 0.937 | 23,851,784 | 159 |
ResNeXt50 | 96 MB | 0.777 | 0.938 | 25,097,128 | - |
DenseNet201 | 80 MB | 0.773 | 0.936 | 20,242,984 | 201 |
DenseNet169 | 57 MB | 0.762 | 0.932 | 14,307,880 | 169 |
ResNet50V2 | 98 MB | 0.760 | 0.930 | 25,613,800 | - |
DenseNet121 | 33 MB | 0.750 | 0.923 | 8,062,504 | 121 |
參考:
- keras微調模型 https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html
- 《Keras:自建數據集圖像分類的模型訓練、保存與恢復》 https://blog.csdn.net/akadiao/article/details/80456742
3 代碼結構及使用方法
3.1 代碼結構
- data:存放數據的文件夾。
- train:存放訓練圖片數據的文件夾。
- validation:存放validation圖片數據的文件夾。
- modelFile:存放訓練好的模型的文件夾。
- log:存放log的文件夾。
- trainMyDataWithKerasModel.py:訓練模型的文件。
- predictWithMyModel.py:使用訓練好的模型進行單次預測。
- reTrainMyDataWithKerasModel.py:對訓練好的模型進行再訓練。
- main.py:使用flask將predictWithMyModel.py作爲接口開放出去。
3.2 使用方法
主要需求的python包:
- tensorflow:1.4.0
- keras:2.3.1
- flask:1.0.2 (非必須)
數據輸入 和 數據lable生成:項目使用了keras的ImageDataGenerator這一個神器,會根據data文件夾下的子文件夾的名字生成lable。
代碼上傳至github:https://github.com/xqtbox/generalImageClassification