In [1]:
%load_ext autoreload
%autoreload 2
import os
import sklearn.metrics
import pandas as pd
import vislab.datasets
import vislab.results
import vislab._results

In [2]:
label_df = vislab.datasets.pinterest.get_pins_80k_df()
label_df.columns


Out[2]:
Index([u'style_Detailed', u'style_Pastel', u'style_Melancholy', u'style_Noir', u'style_HDR', u'style_Vintage', u'style_Long_Exposure', u'style_Horror', u'style_Sunny', u'style_Bright', u'style_Hazy', u'style_Bokeh', u'style_Serene', u'style_Texture', u'style_Ethereal', u'style_Macro', u'style_Depth_of_Field', u'style_Geometric_Composition', u'style_Minimal', u'style_Romantic', u'image_url', u'page_url', u'caption', u'_split'], dtype='object')

In [3]:
c = vislab.util.get_mongodb_client()['predict']['pinterest_80k_mar23']
if c.find({'features': 'noise'}).count() > 0:
    c.remove({'features': 'noise'})
pd.DataFrame([x for x in c.find()])


Out[3]:
_id data features num_test num_train num_val quadratic results_name score_test score_val task
0 532f9eac9f00136077e996a4 pinterest_80k_style_ALL [caffe_fc6] 16000 48000 16000 None data_pinterest_80k_style_ALL_features_['caffe_... 0.389573 0.413909 clf
1 532fa0049f00136077e9a391 pinterest_80k_style_ALL [caffe_fc7] 16000 48000 16000 None data_pinterest_80k_style_ALL_features_['caffe_... 0.383072 0.409040 clf
2 5330043a9f00136077eaf1b0 pinterest_80k_style_ALL [mc_bit] 16000 48000 16000 None data_pinterest_80k_style_ALL_features_['mc_bit... 0.359817 0.366537 clf

3 rows × 11 columns

Pinterest-learned styles on Pinterest


In [241]:
results_dirname = vislab.util.makedirs(vislab.config['paths']['shared_data'] + '/results_mar23')
df, preds_panel = vislab._results.load_pred_results(
    'pinterest_80k_mar23', results_dirname,
    multiclass=True, force=True)
pred_prefix = 'pred'
print preds_panel.minor_axis
pred_df = preds_panel.minor_xs('caffe_fc6 None vw')
pred_df['image_url'] = label_df['image_url']


Results in collection pinterest_80k_mar23: 3
Index([u'caffe_fc6 None vw', u'caffe_fc7 None vw', u'mc_bit None vw'], dtype='object')

In [242]:
nice_feat_names = {
    'caffe_fc6 None vw': 'Caffe FC6', 'caffe_fc6 False vw': 'Caffe FC6',
    'caffe_fc7 None vw': 'Caffe FC7', 'caffe_fc7 False vw': 'Caffe FC7',
    'mc_bit None vw': 'MC binary',
    'random': 'Random'
}

mc_metrics = vislab.results.multiclass_metrics_feat_comparison(
    preds_panel, label_df, pred_prefix, features=preds_panel.minor_axis.tolist() + ['random'],
    balanced=True, with_plot=False, with_print=False, nice_feat_names=nice_feat_names)
ap_df = mc_metrics['ap_df'].copy()


Looks like the preds frame already has gt info.
Only taking 'test' split predictions.
********************caffe_fc6 None vw********************
Looks like the preds frame already has gt info.
Only taking 'test' split predictions.
********************caffe_fc7 None vw********************
Looks like the preds frame already has gt info.
Only taking 'test' split predictions.
********************mc_bit None vw********************
Looks like the preds frame already has gt info.
Only taking 'test' split predictions.
********************random********************

Flickr-learned styles on Pinterest


In [4]:
results_dirname = vislab.util.makedirs(vislab.config['paths']['shared_data'] + '/results_mar23')
df, flickr_preds_panel = vislab._results.load_pred_results(
    'flickr_on_pinterest_80k_mar23', results_dirname,
    multiclass=True, force=False)
print flickr_preds_panel.minor_axis


Results in collection flickr_on_pinterest_80k_mar23: 1
Index([u'caffe_fc6 False vw'], dtype='object')

In [12]:
flickr_preds_panel.shape


Out[12]:
(47, 79994, 1)

In [5]:
# Get correct labels
dfs = []
for feat in flickr_preds_panel.minor_axis:
    df = flickr_preds_panel.minor_xs(feat)
    for col in label_df.columns:
        df[col] = label_df[col]
    dfs.append(df)
flickr_preds_panel = pd.Panel(
    dict(zip(flickr_preds_panel.minor_axis, dfs))
).swapaxes('minor', 'items')

In [246]:
flickr_on_pinterest_mc_metrics = vislab.results.multiclass_metrics_feat_comparison(
    flickr_preds_panel, label_df, pred_prefix, features=flickr_preds_panel.minor_axis.tolist() + ['random'],
    balanced=True, with_plot=False, with_print=False, nice_feat_names=nice_feat_names)


Looks like the preds frame already has gt info.
Only taking 'test' split predictions.
********************caffe_fc6 False vw********************
Looks like the preds frame already has gt info.
Only taking 'test' split predictions.
********************random********************

In [14]:
flickr_pred_df = flickr_preds_panel.minor_xs('caffe_fc6 False vw')
flickr_pred_df['image_url'] = label_df['image_url']
flickr_pred_df.shape


Out[14]:
(79994, 47)

In [248]:
ap_df['Caffe FC6, Flickr-trained'] = flickr_on_pinterest_mc_metrics['ap_df']['Caffe FC6']
ap_df['Difference'] = ap_df['Caffe FC6'] - ap_df['Caffe FC6, Flickr-trained']
ap_df['Difference %'] = ap_df['Difference'] / ap_df['Caffe FC6']
ap_df['%'] = ap_df['Caffe FC6, Flickr-trained'] / ap_df['Caffe FC6']

In [249]:
diff = ap_df.sort('%')['%']
diff_top = diff[diff >= np.percentile(diff, 75)]
print('Styles that are most transferrable from Flickr to Pinterest (mean Flickr-trained AP: {:.1f}% of Pinterest-trained AP): {}.'.format(
    diff_top.values.mean() * 100,
    ', '.join([_[6:] for _ in sorted(diff_top.index.tolist())]),
))
diff_bottom = diff[diff <= np.percentile(diff, 25)]
print('Styles that are least transferrable from Flickr to Pinterest (mean {:.1f}% of Pinterest-trained AP): {}.'.format(
    diff_bottom.values.mean() * 100,
    ', '.join([_[6:] for _ in sorted(diff_bottom.index.tolist())]),
))


Styles that are most transferrable from Flickr to Pinterest (mean Flickr-trained AP: 75.3% of Pinterest-trained AP): Depth_of_Field, Ethereal, HDR, Long_Exposure, Macro, Pastel.
Styles that are least transferrable from Flickr to Pinterest (mean 35.6% of Pinterest-trained AP): Detailed, Melancholy, Minimal, Noir, Sunny, Vintage.

Query Pinterest data, filter by style predictions


In [8]:
# Drop a couple of annoyingly formatted images
# pred_df = pred_df.drop(['389913280210700272', '288230444872088394', '287034176223604657'])
flickr_pred_df = flickr_pred_df.drop(['389913280210700272', '288230444872088394', '287034176223604657'])

In [9]:
# Get the caption data
# pred_df['caption'] = label_df['caption']
flickr_pred_df['caption'] = label_df['caption']

In [43]:
from IPython.display import HTML
def top_k_images(df, k=10):
    return ' '.join(
        '<div style="display: inline-block;"><img src="{}" width="210px" /><br />{}</div>'.format(row['image_url'], row.name)
        for i, row in df[:k].iterrows())


import subprocess
import shlex
import re
def top_images_for_caption_and_style(df, caption_regexp, style, split=None):
    r = re.compile(caption_regexp)
    ix = df.index[[r.search(_) is not None for _ in df['caption']]]
    df_ = df.loc[ix]
    if split is not None:
        df_ = df_[df_['split'] == split]
    title = '<h4>{}, query: {}, results: {}</h4>'.format(
        style, caption_regexp, df_.shape[0])
    df_ = df_.sort(style, ascending=False)
    
    # download and resize to folder
    d = os.path.expanduser('~/work/aphrodite-writeup/figures/flickr_on_pinterest/')
    dirname = vislab.util.makedirs(d + '{}/{}/'.format(caption_regexp, style))
    w_dirname = vislab.util.makedirs(d + '{}/{}/w/'.format(caption_regexp, style))
    h_dirname = vislab.util.makedirs(d + '{}/{}/h/'.format(caption_regexp, style))
    counter = 0
    for i, row in df_[:5].iterrows():
        cmd = 'wget {} -O {}.jpg'.format(row['image_url'], counter)
        subprocess.call(shlex.split(cmd), cwd=dirname)
        
        cmd = 'find . -name "*.jpg" -depth 1 -exec convert {} -resize x310 -gravity Center -crop 192x310+0+0 -density 300 -units PixelsPerInch h/{} \;'
        subprocess.call(shlex.split(cmd), cwd=dirname)
        
        cmd = 'find . -name "*.jpg" -depth 1 -exec convert {} -resize 500 -gravity Center -crop 500x310+0+0 -density 300 -units PixelsPerInch w/{} \;'
        subprocess.call(shlex.split(cmd), cwd=dirname)
        counter += 1 
    
    return title + top_k_images(df_, k=5)

In [38]:
HTML('<h2>Flickr-learned style on all Pinterest data</h2>' + ' '.join(
    top_images_for_caption_and_style(flickr_pred_df.iloc[:100], '', 'pred_' + style)
    for style in vislab.datasets.flickr.underscored_style_names[:3]
))


Out[38]:

Flickr-learned style on all Pinterest data

pred_style_Detailed, query: , results: 100


7599893094316495

235383517994789178

248964685624575717

471189179735724613

131097039122939704

pred_style_Pastel, query: , results: 100


189784571770330048

210613720048233852

182395853630648901

123286108523339201

411797959647407176

pred_style_Melancholy, query: , results: 100


134545107591902291

575475658605610945

123849058476817974

272186371200283342

144889312985587824

In [260]:
HTML('<h2>Pinterest-learned style on all Pinterest data</h2>' + ' '.join(
    top_images_for_caption_and_style(pred_df, '', 'pred_' + style)
    for style in vislab.datasets.flickr.underscored_style_names
))


Out[260]:

Pinterest-learned style on all Pinterest test data

pred_style_Detailed, query: , results: 15994


44332377552333716

118289927684507077

61361613643215997

18436679697353484

58828338856896493

pred_style_Pastel, query: , results: 15994


12384967698887436

269230883947654878

182888434837368896

134052526381510968

384776361884136407

pred_style_Melancholy, query: , results: 15994


112238215685558739

318559373614362998

66428163223198152

58476495131775419

375628425142753646

pred_style_Noir, query: , results: 15994


266627240413141666

94083079688711494

61924563600105565

457115430899824148

126171227031627145

pred_style_HDR, query: , results: 15994


330029478913569744

193795590187753577

115334440431788472

59532026298381810

467670742525778430

pred_style_Vintage, query: , results: 15994


119345458849270232

209347082649112838

99431104245144181

81135230757645375

189925309257297229

pred_style_Long_Exposure, query: , results: 15994


246431410833500888

525162006519547364

407998047462821557

246431410833459343

246431410833346776

pred_style_Horror, query: , results: 15994


396316835929009210

323555554451011842

172896073166847641

319192692310695394

248190629437456027

pred_style_Sunny, query: , results: 15994


283234264039517057

207517495301932078

93660867220769285

30891947418158041

20266267045411563

pred_style_Bright, query: , results: 15994


6825836909301620

347058715005327978

565201821956072415

275634439666156614

145170787959947849

pred_style_Hazy, query: , results: 15994


275634439666156614

301319031290827560

439734351087286614

376121006351579038

228698487300449801

pred_style_Bokeh, query: , results: 15994


197665871118993456

117445502756964717

103019910197417080

147704062749314124

8022105558818793

pred_style_Serene, query: , results: 15994


212584044884022397

497084877591292891

395261304766904245

48976714670440591

104779128802454476

pred_style_Texture, query: , results: 15994


6966574397632218

44191640066857920

242631498649353941

283515739015050822

16747829839406880

pred_style_Ethereal, query: , results: 15994


112660428152233281

273804852318481947

151574343679359137

327285097892153184

99149629270268023

pred_style_Macro, query: , results: 15994


162551867770430246

165929567493230609

141652350753348829

452822937503374538

525162006518832848

pred_style_Depth_of_Field, query: , results: 15994


473370610804322143

520376931915918495

288723026080589478

504473595729629982

291397038359705720

pred_style_Geometric_Composition, query: , results: 15994


327777679099764262

413346072020670081

327777679099901081

521221356845334256

521221356845223649

pred_style_Minimal, query: , results: 15994


365706432211767520

411657222159775918

23573598022316276

334884922262360262

54535845460914815

pred_style_Romantic, query: , results: 15994


76279787412336204

93449760990903727

118501033917851532

6122149464974464

550987335631503560

In [42]:
HTML('<h2>Flickr-learned style on Pinterest test data that matches caption query: "dress"</h2>' + ' '.join(
    top_images_for_caption_and_style(flickr_pred_df, 'dress', 'pred_' + style)
    for style in vislab.datasets.flickr.underscored_style_names
))


Out[42]:

Flickr-learned style on Pinterest test data that matches caption query: "dress"

pred_style_Detailed, query: dress, results: 665


140878294568114187

21673641927691134

389913280210700272

152278031122044026

63472675972231343

pred_style_Pastel, query: dress, results: 665


91620173642726503

384776361883779071

286400857523619394

112519690662191625

240661173809437349

pred_style_Melancholy, query: dress, results: 665


172473860699353936

65935582014955170

563018674043428

129197083034020269

496662665127464119

pred_style_Noir, query: dress, results: 665


170151692144792484

275915914644480766

98727416805601384

35114072067269655

366269382165864404

pred_style_HDR, query: dress, results: 665


90635011224665627

985231140750351

112167846941920909

375065475187680107

156500155775548360

pred_style_Vintage, query: dress, results: 665


140878294568114206

551902129306875516

392376186256363402

377598749979018763

238268636507742096

pred_style_Long_Exposure, query: dress, results: 665


240801911299839906

479492691546645333

129197083034601014

527906387542044540

189925309257659476

pred_style_Horror, query: dress, results: 665


108086459776683797

120752833733140142

204350901812724877

201817627025392074

112941903126463331

pred_style_Sunny, query: dress, results: 665


238268636506644475

527906387542044540

240801911299839906

565975878142963966

404549978999396077

pred_style_Bright, query: dress, results: 665


406872147554816076

87468417734200905

94857135875866098

238268636506644475

164592561353845349

pred_style_Hazy, query: dress, results: 665


503418064568161571

173247916888113222

143693044330267626

237353842835177263

503699539544251927

pred_style_Bokeh, query: dress, results: 665


214202526000305896

240801911299839906

89790586295154079

112167846943355913

255438610088194235

pred_style_Serene, query: dress, results: 665


238268636506644475

21673641927691134

68539225550657024

274297433524900429

232076187017419445

pred_style_Texture, query: dress, results: 665


370984088026501422

87468417734200905

107945722290601882

12736811419540542

107945722291460439

pred_style_Ethereal, query: dress, results: 665


130393351685569436

237353842835177263

503699539544432435

104427285083352564

119626933826806497

pred_style_Macro, query: dress, results: 665


19281104626545871

526991593867199996

211174954684428

83457399317184847

199565827209440162

pred_style_Depth_of_Field, query: dress, results: 665


112167846943355913

240801911299839906

214202526000305896

248964685620068358

89790586295154079

pred_style_Geometric_Composition, query: dress, results: 665


122793527314018331

96686723221640022

63472675972231343

107945722291460439

107945722290601882

pred_style_Minimal, query: dress, results: 665


25543922858801485

107945722291460439

107945722290601882

263742121902007622

189925309257093528

pred_style_Romantic, query: dress, results: 665


67694800622914292

346003183842564816

154177987217092858

3096293465605524

269090146459398217

In [262]:
HTML('<h2>Pinterest-learned style on Pinterest test data that matches caption query: "dress"</h2>' + ' '.join(
    top_images_for_caption_and_style(pred_df, 'dress', 'pred_' + style)
    for style in vislab.datasets.flickr.underscored_style_names
))


Out[262]:

Pinterest-learned style on Pinterest test data that matches caption query: "dress"

pred_style_Detailed, query: dress, results: 134


252553491576673657

143693044334361119

198510296045377479

106679084897282786

87468417734200905

pred_style_Pastel, query: dress, results: 134


223068987767045050

370772981792323755

95912667033648261

112308584429907157

206110120418611892

pred_style_Melancholy, query: dress, results: 134


327285097891930956

291326669616351523

468726273689381978

201817627025392074

172473860699353936

pred_style_Noir, query: dress, results: 134


187884615675716716

269090146458836831

244179611020063940

119345458849840461

264797653061477478

pred_style_HDR, query: dress, results: 134


240801911299839906

327285097891930956

277393658272753515

201817627025392074

248260998181701146

pred_style_Vintage, query: dress, results: 134


189925309257297229

8022105559919092

167055467398078604

169096160982797159

119345458849096811

pred_style_Long_Exposure, query: dress, results: 134


95420085829340334

370984088026473651

240801911299839906

259801472226638268

236298311672616027

pred_style_Horror, query: dress, results: 134


288793394827053575

291326669616351523

172473860699353936

201817627025392074

94857135873732663

pred_style_Sunny, query: dress, results: 134


215891375860128085

159314905542107297

106679084897282786

159314905540485483

259801472224819396

pred_style_Bright, query: dress, results: 134


201747258279029552

269090146457864174

87468417734200905

94857135875866098

223068987767045050

pred_style_Hazy, query: dress, results: 134


408560997417725985

159314905540786204

236298311672616027

206110120418611892

39476934203240183

pred_style_Bokeh, query: dress, results: 134


240801911299839906

291326669616351523

404549978999396077

103231016432406534

524387950332523979

pred_style_Serene, query: dress, results: 134


458382068295714985

236298311672616027

425308758530599852

269090146457864174

201817627025392074

pred_style_Texture, query: dress, results: 134


107945722290601882

87468417734200905

201817627025894067

40884309091059065

143693044334361119

pred_style_Ethereal, query: dress, results: 134


130393351685569436

503699539544432435

112308584429907157

412290540856952185

206110120418611892

pred_style_Macro, query: dress, results: 134


201817627025894067

259801472226638268

95420085829340334

538813542888322604

370984088026473651

pred_style_Depth_of_Field, query: dress, results: 134


240801911299839906

159314905540786204

94857135873732663

408560997417725985

236298311672616027

pred_style_Geometric_Composition, query: dress, results: 134


87468417734200905

107945722290601882

201817627025894067

129197083034020269

25543922858801485

pred_style_Minimal, query: dress, results: 134


25543922858801485

185984659585521808

235946467947305963

199495458467698551

129197083034020269

pred_style_Romantic, query: dress, results: 134


503699539544432435

538180224191720423

112308584429907157

120330621266962664

39476934207985015

In [44]:
HTML('<h2>Flickr-learned style on Pinterest test data that matches caption query: "flower"</h2>' + ' '.join(
    top_images_for_caption_and_style(flickr_pred_df, 'flower', 'pred_' + style)
    for style in vislab.datasets.flickr.underscored_style_names
))


Out[44]:

Flickr-learned style on Pinterest test data that matches caption query: "flower"

pred_style_Detailed, query: flower, results: 520


66639269458825488

177892254001404904

115052965450540145

140174607122842650

179862578838170396

pred_style_Pastel, query: flower, results: 520


281404676690714878

45739752437728078

143481938102708637

498844096195731770

112801165640079795

pred_style_Melancholy, query: flower, results: 520


112660428151697949

112660428151698119

476114991826613718

375417318908231510

175429347957725818

pred_style_Noir, query: flower, results: 520


8725793001017602

322992604496864580

400820435557306014

175429347957725818

541417186424306820

pred_style_HDR, query: flower, results: 520


532269249682023029

524810162797842387

142215300705645940

245586985902976454

123989795963807172

pred_style_Vintage, query: flower, results: 520


143481938102708637

42432421461661160

91057223689733935

234327986831585631

112801165640079795

pred_style_Long_Exposure, query: flower, results: 520


307370743289927910

186547609537547932

286823069989347693

61502351130768423

450289662713696137

pred_style_Horror, query: flower, results: 520


154740937168813069

541417186424386937

551902129306689981

175429347957725818

112660428151697949

pred_style_Sunny, query: flower, results: 520


176695985353965411

450289662713696137

237072367857675393

550354016933245073

264727284318952891

pred_style_Bright, query: flower, results: 520


179862578838170396

177892254001404904

218495019395608895

570690584003013347

230387337158954889

pred_style_Hazy, query: flower, results: 520


273312271109274122

306033737150791386

188377196884334082

375417318908231510

245586985902976454

pred_style_Bokeh, query: flower, results: 520


341992165424996889

209769295117193389

331507222540567859

468515167455949866

200480620886170397

pred_style_Serene, query: flower, results: 520


175710822934676387

524810162797842387

85498092900281789

6685099420921279

245586985902976454

pred_style_Texture, query: flower, results: 520


210965563768543608

303359724871981801

492159065500119412

327496204124443985

104919866290991726

pred_style_Ethereal, query: flower, results: 520


2885187234363467

136726538661459674

281334307946053340

251357222925217641

327214729146351770

pred_style_Macro, query: flower, results: 520


39899146668951611

165929567493961594

230879918366955115

310396599289108427

364017582353355603

pred_style_Depth_of_Field, query: flower, results: 520


341992165424996889

331507222540567859

193373377724332974

468515167455949866

476114991826613718

pred_style_Geometric_Composition, query: flower, results: 520


302726406173244709

128493395592294787

143693044334542250

302726406172615300

272960427384849127

pred_style_Minimal, query: flower, results: 520


185984659584432984

155655730844044394

193373377724333021

93660867222970140

525162006518833049

pred_style_Romantic, query: flower, results: 520


220676450463301713

158048268144776201

44332377552886218

354869645608118187

143481938102708637

In [264]:
HTML('<h2>Pinterest-learned style on Pinterest test data that matches caption query: "flower"</h2>' + ' '.join(
    top_images_for_caption_and_style(pred_df, 'flower', 'pred_' + style)
    for style in vislab.datasets.flickr.underscored_style_names
))


Out[264]:

Pinterest-learned style on Pinterest test data that matches caption query: "flower"

pred_style_Detailed, query: flower, results: 91


302726406173244663

985231139357742

234327986831585631

521854675542957443

36310340719790005

pred_style_Pastel, query: flower, results: 91


96757091964130019

143481938102708637

45739752437728078

117234396524692955

517914025869003082

pred_style_Melancholy, query: flower, results: 91


528680443728897656

233553930648617129

6614730675551606

551902129306689981

155655730844044394

pred_style_Noir, query: flower, results: 91


525162006518833049

551902129306689981

233553930648617129

86201780340479242

6614730675551606

pred_style_HDR, query: flower, results: 91


532269249682023029

113786328058947342

176695985353965411

12947917650709934

224194887674432033

pred_style_Vintage, query: flower, results: 91


233553930648617129

114278909267395338

143481938102708637

94786767127053955

551902129306689981

pred_style_Long_Exposure, query: flower, results: 91


86201780340479242

155655730844044394

286823069989347693

91690542387897252

307370743289927910

pred_style_Horror, query: flower, results: 91


551902129306689981

302726406173244663

135178426288925629

233553930648617129

85498092900317251

pred_style_Sunny, query: flower, results: 91


412290540858151025

65724475785732823

166914729911435960

114278909267395338

151152131215309041

pred_style_Bright, query: flower, results: 91


5066618303523503

302726406172889511

526850856378847298

420594052670123947

45739752437728078

pred_style_Hazy, query: flower, results: 91


526850856378847298

412290540858151025

282952789062420426

229965124692098038

244179611019439054

pred_style_Bokeh, query: flower, results: 91


512143788845057244

85498092900347612

417779302904305280

85498092900317251

520869513123190224

pred_style_Serene, query: flower, results: 91


232779874462236501

36310340719790005

532269249682023029

152559506100548773

244179611019439054

pred_style_Texture, query: flower, results: 91


318770479846338252

276901077063641539

303359724871981801

151152131215309041

61502351131119424

pred_style_Ethereal, query: flower, results: 91


234327986831585631

517914025869003082

551902129306689981

551902129307332006

117234396524692955

pred_style_Macro, query: flower, results: 91


230879918366955115

179932947586671890

282460207852103696

173036810654991987

233765036881154268

pred_style_Depth_of_Field, query: flower, results: 91


85498092900317251

85498092900347612

65724475785732823

512143788845057244

417779302904305280

pred_style_Geometric_Composition, query: flower, results: 91


303359724871981801

302726406173244663

5066618303523503

276901077063641539

232779874462236501

pred_style_Minimal, query: flower, results: 91


5066618303523503

155655730844044394

93660867222970140

232779874462236501

302726406172889511

pred_style_Romantic, query: flower, results: 91


180847741260465971

244179611019439054

985231139357742

234327986831585631

523684262890004919