8
8
9
9
< meta name ="viewport " content ="width=device-width, initial-scale=1.0 ">
10
10
11
- < title > deepforest.deepforest — DeepForest 0.0.3 documentation</ title >
11
+ < title > deepforest.deepforest — DeepForest 0.1.0 documentation</ title >
12
12
13
13
14
14
59
59
60
60
61
61
< div class ="version ">
62
- 0.0.3
62
+ 0.1.0
63
63
</ div >
64
64
65
65
@@ -166,6 +166,7 @@ <h1>Source code for deepforest.deepforest</h1><div class="highlight"><pre>
166
166
< span class ="sd "> """</ span >
167
167
< span class ="kn "> import</ span > < span class ="nn "> os</ span >
168
168
< span class ="kn "> from</ span > < span class ="nn "> PIL</ span > < span class ="k "> import</ span > < span class ="n "> Image</ span >
169
+ < span class ="kn "> import</ span > < span class ="nn "> tensorflow</ span > < span class ="k "> as</ span > < span class ="nn "> tf</ span >
169
170
< span class ="kn "> import</ span > < span class ="nn "> pandas</ span > < span class ="k "> as</ span > < span class ="nn "> pd</ span >
170
171
< span class ="kn "> import</ span > < span class ="nn "> numpy</ span > < span class ="k "> as</ span > < span class ="nn "> np</ span >
171
172
< span class ="kn "> from</ span > < span class ="nn "> matplotlib</ span > < span class ="k "> import</ span > < span class ="n "> pyplot</ span > < span class ="k "> as</ span > < span class ="n "> plt</ span >
@@ -246,9 +247,12 @@ <h1>Source code for deepforest.deepforest</h1><div class="highlight"><pre>
246
247
< span class ="sd "> model (object): A trained keras model</ span >
247
248
< span class ="sd "> '''</ span >
248
249
< span class ="c1 "> #Download latest model from github release</ span >
249
- < span class ="n "> weights</ span > < span class ="o "> =</ span > < span class ="n "> utilities</ span > < span class ="o "> .</ span > < span class ="n "> use_release</ span > < span class ="p "> ()</ span >
250
+ < span class ="n "> release_tag</ span > < span class ="p "> ,</ span > < span class ="n "> weights</ span > < span class ="o "> =</ span > < span class ="n "> utilities</ span > < span class ="o "> .</ span > < span class ="n "> use_release</ span > < span class ="p "> ()</ span >
251
+
252
+ < span class ="c1 "> #load saved model and tag release</ span >
253
+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> __release_version__</ span > < span class ="o "> =</ span > < span class ="n "> release_tag</ span >
254
+ < span class ="nb "> print</ span > < span class ="p "> (</ span > < span class ="s2 "> "Loading pre-built model: </ span > < span class ="si "> {}</ span > < span class ="s2 "> "</ span > < span class ="o "> .</ span > < span class ="n "> format</ span > < span class ="p "> (</ span > < span class ="n "> release_tag</ span > < span class ="p "> ))</ span >
250
255
251
- < span class ="c1 "> #load saved model</ span >
252
256
< span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> weights</ span > < span class ="o "> =</ span > < span class ="n "> weights</ span >
253
257
< span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> model</ span > < span class ="o "> =</ span > < span class ="n "> utilities</ span > < span class ="o "> .</ span > < span class ="n "> read_model</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> weights</ span > < span class ="p "> ,</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> config</ span > < span class ="p "> )</ span >
254
258
< span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> prediction_model</ span > < span class ="o "> =</ span > < span class ="n "> convert_model</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> model</ span > < span class ="p "> )</ span > </ div >
@@ -299,8 +303,8 @@ <h1>Source code for deepforest.deepforest</h1><div class="highlight"><pre>
299
303
300
304
< span class ="c1 "> #name columns and return box data</ span >
301
305
< span class ="n "> boxes_output</ span > < span class ="o "> =</ span > < span class ="n "> pd</ span > < span class ="o "> .</ span > < span class ="n "> concat</ span > < span class ="p "> (</ span > < span class ="n "> boxes_output</ span > < span class ="p "> )</ span >
302
- < span class ="n "> boxes_output</ span > < span class ="o "> .</ span > < span class ="n "> columns</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="s2 "> "xmin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "xmax"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymax"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "plot_name"</ span > < span class ="p "> ]</ span >
303
- < span class ="n "> boxes_output</ span > < span class ="o "> =</ span > < span class ="n "> boxes_output</ span > < span class ="o "> .</ span > < span class ="n "> reindex</ span > < span class ="p "> (</ span > < span class ="n "> columns</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="s2 "> "plot_name"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "xmin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "xmax"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymax"</ span > < span class ="p "> ])</ span >
306
+ < span class ="n "> boxes_output</ span > < span class ="o "> .</ span > < span class ="n "> columns</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="s2 "> "xmin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "xmax"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymax"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "score" </ span > < span class =" p " > , </ span > < span class =" s2 " > "label" </ span > < span class =" p " > , </ span > < span class =" s2 " > " plot_name"</ span > < span class ="p "> ]</ span >
307
+ < span class ="n "> boxes_output</ span > < span class ="o "> =</ span > < span class ="n "> boxes_output</ span > < span class ="o "> .</ span > < span class ="n "> reindex</ span > < span class ="p "> (</ span > < span class ="n "> columns</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="s2 "> "plot_name"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "xmin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "xmax"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymax"</ span > < span class ="p "> , </ span > < span class =" s2 " > "score" </ span > < span class =" p " > , </ span > < span class =" s2 " > "label" </ span > < span class =" p " > ])</ span >
304
308
305
309
< span class ="k "> return</ span > < span class ="n "> boxes_output</ span > </ div >
306
310
@@ -370,7 +374,7 @@ <h1>Source code for deepforest.deepforest</h1><div class="highlight"><pre>
370
374
< span class ="sd "> return_plot: Whether to return image with annotations overlaid, or just a numpy array of boxes</ span >
371
375
< span class ="sd "> </ span >
372
376
< span class ="sd "> Returns:</ span >
373
- < span class ="sd "> predictions (array): if return_plot, an image. Otherwise a numpy array of predicted bounding boxes</ span >
377
+ < span class ="sd "> predictions (array): if return_plot, an image. Otherwise a numpy array of predicted bounding boxes, with scores and labels </ span >
374
378
< span class ="sd "> """</ span >
375
379
376
380
< span class ="c1 "> #Check for model save</ span >
@@ -397,7 +401,7 @@ <h1>Source code for deepforest.deepforest</h1><div class="highlight"><pre>
397
401
< span class ="sd "> return_plot: Should the image be returned with the predictions drawn?</ span >
398
402
< span class ="sd "> </ span >
399
403
< span class ="sd "> Returns:</ span >
400
- < span class ="sd "> boxes (array): if return_plot, an image. Otherwise a numpy array of predicted bounding boxes</ span >
404
+ < span class ="sd "> boxes (array): if return_plot, an image. Otherwise a numpy array of predicted bounding boxes, scores and labels </ span >
401
405
< span class ="sd "> """</ span >
402
406
403
407
< span class ="c1 "> #Load raster as image</ span >
@@ -421,7 +425,6 @@ <h1>Source code for deepforest.deepforest</h1><div class="highlight"><pre>
421
425
422
426
< span class ="c1 "> #transform coordinates to original system</ span >
423
427
< span class ="n "> xmin</ span > < span class ="p "> ,</ span > < span class ="n "> ymin</ span > < span class ="p "> ,</ span > < span class ="n "> xmax</ span > < span class ="p "> ,</ span > < span class ="n "> ymax</ span > < span class ="o "> =</ span > < span class ="n "> windows</ span > < span class ="p "> [</ span > < span class ="n "> index</ span > < span class ="p "> ]</ span > < span class ="o "> .</ span > < span class ="n "> getRect</ span > < span class ="p "> ()</ span >
424
- < span class ="n "> boxes</ span > < span class ="o "> =</ span > < span class ="n "> pd</ span > < span class ="o "> .</ span > < span class ="n "> DataFrame</ span > < span class ="p "> (</ span > < span class ="n "> boxes</ span > < span class ="p "> ,</ span > < span class ="n "> columns</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="s2 "> "xmin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "xmax"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymax"</ span > < span class ="p "> ])</ span >
425
428
< span class ="n "> boxes</ span > < span class ="o "> .</ span > < span class ="n "> xmin</ span > < span class ="o "> =</ span > < span class ="n "> boxes</ span > < span class ="o "> .</ span > < span class ="n "> xmin</ span > < span class ="o "> +</ span > < span class ="n "> xmin</ span >
426
429
< span class ="n "> boxes</ span > < span class ="o "> .</ span > < span class ="n "> xmax</ span > < span class ="o "> =</ span > < span class ="n "> boxes</ span > < span class ="o "> .</ span > < span class ="n "> xmax</ span > < span class ="o "> +</ span > < span class ="n "> xmin</ span >
427
430
< span class ="n "> boxes</ span > < span class ="o "> .</ span > < span class ="n "> ymin</ span > < span class ="o "> =</ span > < span class ="n "> boxes</ span > < span class ="o "> .</ span > < span class ="n "> ymin</ span > < span class ="o "> +</ span > < span class ="n "> ymin</ span >
@@ -431,16 +434,21 @@ <h1>Source code for deepforest.deepforest</h1><div class="highlight"><pre>
431
434
432
435
< span class ="n "> predicted_boxes</ span > < span class ="o "> =</ span > < span class ="n "> pd</ span > < span class ="o "> .</ span > < span class ="n "> concat</ span > < span class ="p "> (</ span > < span class ="n "> predicted_boxes</ span > < span class ="p "> )</ span >
433
436
434
- < span class ="c1 "> #TODO overlapping box supression</ span >
435
-
437
+ < span class ="c1 "> #Non-max supression for overlapping boxes among window </ span >
438
+ < span class ="k "> with</ span > < span class ="n "> tf</ span > < span class ="o "> .</ span > < span class ="n "> Session</ span > < span class ="p "> ()</ span > < span class ="k "> as</ span > < span class ="n "> sess</ span > < span class ="p "> :</ span >
439
+ < span class ="n "> new_boxes</ span > < span class ="p "> ,</ span > < span class ="n "> new_scores</ span > < span class ="p "> ,</ span > < span class ="n "> new_labels</ span > < span class ="o "> =</ span > < span class ="n "> predict</ span > < span class ="o "> .</ span > < span class ="n "> non_max_suppression</ span > < span class ="p "> (</ span > < span class ="n "> sess</ span > < span class ="p "> ,</ span > < span class ="n "> predicted_boxes</ span > < span class ="p "> [[</ span > < span class ="s2 "> "xmin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "xmax"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymax"</ span > < span class ="p "> ]]</ span > < span class ="o "> .</ span > < span class ="n "> values</ span > < span class ="p "> ,</ span > < span class ="n "> predicted_boxes</ span > < span class ="o "> .</ span > < span class ="n "> score</ span > < span class ="o "> .</ span > < span class ="n "> values</ span > < span class ="p "> ,</ span > < span class ="n "> predicted_boxes</ span > < span class ="o "> .</ span > < span class ="n "> label</ span > < span class ="o "> .</ span > < span class ="n "> values</ span > < span class ="p "> )</ span >
440
+ < span class ="n "> image_detections</ span > < span class ="o "> =</ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> concatenate</ span > < span class ="p "> ([</ span > < span class ="n "> new_boxes</ span > < span class ="p "> ,</ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> expand_dims</ span > < span class ="p "> (</ span > < span class ="n "> new_scores</ span > < span class ="p "> ,</ span > < span class ="n "> axis</ span > < span class ="o "> =</ span > < span class ="mi "> 1</ span > < span class ="p "> ),</ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> expand_dims</ span > < span class ="p "> (</ span > < span class ="n "> new_labels</ span > < span class ="p "> ,</ span > < span class ="n "> axis</ span > < span class ="o "> =</ span > < span class ="mi "> 1</ span > < span class ="p "> )],</ span > < span class ="n "> axis</ span > < span class ="o "> =</ span > < span class ="mi "> 1</ span > < span class ="p "> )</ span >
441
+ < span class ="n "> mosaic_df</ span > < span class ="o "> =</ span > < span class ="n "> pd</ span > < span class ="o "> .</ span > < span class ="n "> DataFrame</ span > < span class ="p "> (</ span > < span class ="n "> image_detections</ span > < span class ="p "> ,</ span > < span class ="n "> columns</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="s2 "> "xmin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymin"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "xmax"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "ymax"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "score"</ span > < span class ="p "> ,</ span > < span class ="s2 "> "label"</ span > < span class ="p "> ])</ span >
442
+ < span class ="n "> mosaic_df</ span > < span class ="o "> .</ span > < span class ="n "> label</ span > < span class ="o "> =</ span > < span class ="n "> mosaic_df</ span > < span class ="o "> .</ span > < span class ="n "> label</ span > < span class ="o "> .</ span > < span class ="n "> str</ span > < span class ="o "> .</ span > < span class ="n "> decode</ span > < span class ="p "> (</ span > < span class ="s2 "> "utf-8"</ span > < span class ="p "> )</ span >
443
+
436
444
< span class ="k "> if</ span > < span class ="n "> return_plot</ span > < span class ="p "> :</ span >
437
445
< span class ="c1 "> #Draw predictions</ span >
438
- < span class ="k "> for</ span > < span class ="n "> box</ span > < span class ="ow "> in</ span > < span class ="n "> predicted_boxes </ span > < span class ="o "> .</ span > < span class ="n "> values</ span > < span class ="p "> :</ span >
446
+ < span class ="k "> for</ span > < span class ="n "> box</ span > < span class ="ow "> in</ span > < span class ="n "> mosaic_df </ span > < span class =" p " > [[ </ span > < span class =" s2 " > "xmin" </ span > < span class =" p " > , </ span > < span class =" s2 " > "ymin" </ span > < span class =" p " > , </ span > < span class =" s2 " > "xmax" </ span > < span class =" p " > , </ span > < span class =" s2 " > "ymax" </ span > < span class =" p " > ]] </ span > < span class ="o "> .</ span > < span class ="n "> values</ span > < span class ="p "> :</ span >
439
447
< span class ="n "> draw_box</ span > < span class ="p "> (</ span > < span class ="n "> numpy_image</ span > < span class ="p "> ,</ span > < span class ="n "> box</ span > < span class ="p "> ,</ span > < span class ="p "> [</ span > < span class ="mi "> 0</ span > < span class ="p "> ,</ span > < span class ="mi "> 0</ span > < span class ="p "> ,</ span > < span class ="mi "> 255</ span > < span class ="p "> ])</ span >
440
448
441
449
< span class ="k "> return</ span > < span class ="n "> numpy_image</ span >
442
450
< span class ="k "> else</ span > < span class ="p "> :</ span >
443
- < span class ="k "> return</ span > < span class ="n "> predicted_boxes </ span > </ div > </ div >
451
+ < span class ="k "> return</ span > < span class ="n "> mosaic_df </ span > </ div > </ div >
444
452
</ pre > </ div >
445
453
446
454
</ div >
0 commit comments