通用圖片分類項目

generalImageClassification


本項目是通用的圖像分類項目,並以涉黃、涉政、涉恐和普通圖片4分類爲例。圖像違規質檢本質是圖像分類,所以關鍵點在於兩個:

  1. 圖像分類的數據準備;
  2. 圖像分類的模型選擇、訓練;

1 數據準備

爲了達到特定類別的分類,準備相應的圖片數據,

  • 1 開源的數據集。
  • 2 自己寫爬蟲,爬取數據。但是沒時間寫,而且反爬蟲設施的破解很費時間。
  • 3 利用特定的網站(爬蟲),幫你取下載數據。

1.1 開源數據集

如果開始一個圖像相關的項目,而這個領域又有公開、開源的數據集,那是最幸福的一件事了。所以有了項目需求之後,第一件事情,可以去github等網站搜尋一下有沒有可以直接使用的數據集。

而對我們的“圖片質檢”項目,涉政圖片、涉恐圖片網上找不到現成的數據集。但是涉黃圖片卻又很多公開數據集,並且圖片質量灰常的“優秀”。下面給出兩個實例:

  1. 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
  2. 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章