1.転移学習
2.再学習用のデータの収集
ラベルには人工知能がラベル付けしたものを使います。人間によってラベリングされたデータは、許容度が大きく、「サングラスをかけた猫」「アニメの猫」も猫としてラベリングされているので、fine tuningは適さないのでやめておきましょう。
wget https://storage.googleapis.com/openimages/2017_07/images_2017_07.tar.gz
tar -zxvf images_2017_07.tar.gz
wget https://storage.googleapis.com/openimages/2017_07/annotations_machine_2017_07.tar.gz
tar -zxvf annotations_machine_2017_07.tar.gz
import csv
import os
import time
from PIL import Image
import urllib
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
all_tgt = ["cat", "dog", "person", "yard"]
for cur_tgt in all_tgt:
print '\nClass : ' + str(cur_tgt) + '\n\n'
f1 = open('/home/ubuntu/labels_'+str(cur_tgt)+'.csv', 'r')
reader1 = csv.reader(f1)
f2 = open('/home/ubuntu/2017_07/train/images.csv', 'r')
reader2 = csv.reader(f2)
confidence = 1.0
if cur_tgt == 'yard':
confidence = 0.9
cnt = 0
for row1 in reader1:
if float(row1[3]) == confidence:
for row2 in reader2:
if row1[0] == row2[0]:
break
print str(cnt)+' : '+row2[2]
#load image
try:
urlimg = urllib.urlopen(row2[2])
img = Image.open(urlimg)
except:
continue # skip if error happened
fname = '/home/ubuntu/downloaded_images/'+str(cur_tgt)+'.'+str(cnt)+'.jpg'
if urlimg.url.find('unavailable') == -1:
if cur_tgt != 'yard':
#resize image
ratio = img.width / 227.0
if img.height < img.width:
ratio = img.height / 227.0
img_resize = img.resize((int(round(img.width/ratio)), int(round(img.height/ratio))))
img_resize.save(fname)
else:
img.save(fname)
cnt = cnt + 1
if 10000 <= cnt:
break
f1.close()
f2.close()
annotations-machine.csvには、各行に画像IDとそれに対応する画像のラベルがあります。の中身はこんな形になっています。Open Images Datasetの中で猫に相当するID(/m/01yrx)の画像IDとラベル名がありますね。
そして900万枚という画像の中から、以下のコマンドで、猫に関する画像だけを
抽出しましょう。
/home/ubuntu/labels_cat.csv
0000de486dc6c49f,machine,/m/01yrx,0.9
00056e547b7c00d6,machine,/m/01yrx,1.0
00067fe83e3e21c8,machine,/m/01yrx,1.0
0008ab3d8674f6ca,machine,/m/01yrx,1.0
000aa552a9d80891,machine,/m/01yrx,1.0
000c01d8269e1554,machine,/m/01yrx,0.7
000c24660cd3fd95,machine,/m/01yrx,0.7
00129ccb99612727,machine,/m/01yrx,1.0
結果、/home/ubuntu/に
labals_cat.csv
labals_dog.csv
labals_person.csv
labals_yard.csv
という今回fine tuningしたい自分のカテゴリ群にあった学習データ収集用の
メタデータファイルが生成されます。