fastdup for Satellite Imagery¶
In this notebook we load satellite data from Mafat Competitionhttps://mafatchallenge.mod.gov.il/, which consists of 16 bit grayscale images with rotated bounding boxes.
The dataset is also available on Kagglehere.
We show how to work with this dataset using fastdup. It takes 140 seconds to process 18,000 bounding boxes and find all similarities.
We use components gallery to highly suspected wrong bounding boxes as well as correct bounding boxes.
importsysif"google.colab"insys.modules:# Running in Google Colab!pipinstall--force-reinstall--no-cache-dirnumpy==1.26.4scipyfastdupelse:# Running outside Colab!pipinstall-Uqfastdup
importfastdupfastdup.__version__
/usr/bin/dpkg
'1.26'
Download mafat traing data, extract the zip file and put the notebook one level below images/ folder
!kaggledatasetsdownload-ddragonzhang/mafat-train-dataset!unzipmafat-train-dataset.zipPrepare annotation for fastdup format¶
Here we read the data as given in the competition, one annotation file per each image. We combine all files into a single flat table
importosfiles=!lslabelTxtfiles=[os.path.join('labelTxt',f)forfinfiles]
defread_annotations(f):withopen(f,'r')asfd:lines=fd.readlines()bounding_boxes=[]forlineinlines:tokens=line.split()x1,y1,x2,y2,x3,y3,x4,y4=map(float,tokens[:8])label=tokens[8]bounding_box={'annot':f,'x1':x1,'y1':y1,'x2':x2,'y2':y2,'x3':x3,'y3':y3,'x4':x4,'y4':y4,'label':label}bounding_boxes.append(bounding_box)returnbounding_boxes
annot=[]forfinfiles:annot.extend(read_annotations(f))
importpandasaspddf=pd.DataFrame(annot)df['filename']=df['annot'].apply(lambdax:x.replace('labelTxt','images').replace('.txt','.tiff'))df.head()
| annot | x1 | y1 | x2 | y2 | x3 | y3 | x4 | y4 | label | filename | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | labelTxt/126_0_0.txt | 1221.94 | 423.54 | 1229.28 | 404.73 | 1236.34 | 407.49 | 1229.00 | 426.30 | large_vehicle | images/126_0_0.tiff |
| 1 | labelTxt/126_0_0.txt | 445.80 | 729.00 | 457.34 | 729.60 | 457.01 | 735.82 | 445.47 | 735.22 | medium_vehicle | images/126_0_0.tiff |
| 2 | labelTxt/126_0_0.txt | 1059.83 | 237.72 | 1079.99 | 225.27 | 1084.31 | 232.27 | 1064.15 | 244.72 | heavy_equipment | images/126_0_0.tiff |
| 3 | labelTxt/126_0_0.txt | 964.83 | 831.37 | 981.88 | 832.92 | 981.26 | 839.71 | 964.21 | 838.16 | medium_vehicle | images/126_0_0.tiff |
| 4 | labelTxt/126_0_0.txt | 985.48 | 867.08 | 1001.37 | 868.52 | 1000.75 | 875.29 | 984.86 | 873.85 | medium_vehicle | images/126_0_0.tiff |
print('total annotations',len(df))
total annotations 117
df.index.name='index'df[['filename','x1','y1','x2','y2','x3','y3','x4','y4','label']].to_csv('mafat.csv',index_label='index')
# This is the required input by fastdup!headmafat.csv
index,filename,x1,y1,x2,y2,x3,y3,x4,y4,label0,images/126_0_0.tiff,1221.94,423.54,1229.28,404.73,1236.34,407.49,1229.0,426.3,large_vehicle1,images/126_0_0.tiff,445.8,729.0,457.34,729.6,457.01,735.82,445.47,735.22,medium_vehicle2,images/126_0_0.tiff,1059.83,237.72,1079.99,225.27,1084.31,232.27,1064.15,244.72,heavy_equipment3,images/126_0_0.tiff,964.83,831.37,981.88,832.92,981.26,839.71,964.21,838.16,medium_vehicle4,images/126_0_0.tiff,985.48,867.08,1001.37,868.52,1000.75,875.29,984.86,873.85,medium_vehicle5,images/126_0_0.tiff,1012.44,839.59,1031.34,841.31,1030.73,848.08,1011.83,846.36,large_vehicle6,images/126_0_0.tiff,7.4,262.78,25.79,261.82,26.21,269.89,7.82,270.85,large_vehicle7,images/126_0_0.tiff,1121.18,877.51,1137.87,879.03,1137.25,885.8,1120.56,884.28,medium_vehicle8,images/126_0_0.tiff,571.05,753.26,585.66,754.02,585.31,760.57,570.7,759.81,medium_vehicle
Run fastdup to crop and build a model for the crops¶
importnumpyasnpimportcv2!rm-froutput
importpandasaspdimportfastdupdf=pd.read_csv('mafat.csv')fd=fastdup.create(input_dir='.',work_dir='output')
fd.run(annotations=df,overwrite=True,bounding_box='rotated',augmentation_additive_margin=15,verbose=False,ccthreshold=0.95)
FastDup Software, (C) copyright 2022 Dr. Amir Alush and Dr. Danny Bickson.2023-07-13 18:58:04 [INFO] Going to loop over dir /tmp/tmplebc1a_5.csv2023-07-13 18:58:04 [INFO] Found total 117 images to run on, 117 train, 0 test, name list 117, counter 117 FastDup Software, (C) copyright 2022 Dr. Amir Alush and Dr. Danny Bickson.utes2023-07-13 18:58:05 [INFO] Going to loop over dir /tmp/crops_input.csv2023-07-13 18:58:05 [INFO] Found total 117 images to run on, 117 train, 0 test, name list 117, counter 117 2023-07-13 18:58:06 [INFO] Found total 117 images to run onstimated: 0 MinutesFinished histogram 0.048Finished bucket sort 0.0562023-07-13 18:58:06 [INFO] 10) Finished write_index() NN model2023-07-13 18:58:06 [INFO] Stored nn model index file output/nnf.index2023-07-13 18:58:06 [INFO] Total time took 1021 ms2023-07-13 18:58:06 [INFO] Found a total of 0 fully identical images (d>0.990), which are 0.00 %2023-07-13 18:58:06 [INFO] Found a total of 2 nearly identical images(d>0.980), which are 0.85 %2023-07-13 18:58:06 [INFO] Found a total of 193 above threshold images (d>0.900), which are 82.48 %2023-07-13 18:58:06 [INFO] Found a total of 11 outlier images (d<0.050), which are 4.70 %2023-07-13 18:58:06 [INFO] Min distance found 0.455 max distance 0.9822023-07-13 18:58:06 [INFO] Running connected components for ccthreshold 0.950000 .0 ########################################################################################Dataset Analysis Summary: Dataset contains 117 images Valid images are 100.00% (117) of the data, invalid are 0.00% (0) of the data Similarity: 18.80% (22) belong to 4 similarity clusters (components). 81.20% (95) images do not belong to any similarity cluster. Largest cluster has 82 (70.09%) images. For a detailed analysis, use `.connected_components()`(similarity threshold used is 0.9, connected component threshold used is 0.95). Outliers: 5.98% (7) of images are possible outliers, and fall in the bottom 5.00% of similarity values. For a detailed list of outliers, use `.outliers()`.
0
Find suspected wrong bounding boxes¶
From - crop image nameTo - similar imageswhere the labels are not matching
fd.vis.component_gallery(load_crops=True,enhance_image=True,keep_aspect_ratio=True,slice='diff',num_images=20,save_artifacts=True)
medium_vehicle
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:00<00:00, 357.88it/s]
Finished OK. Components are stored as image files output/galleries/components_[index].jpgStored components visual view in output/galleries/components.htmlExecution time in seconds 0.1
Components Report
Showing groups of similar images, from different classes
| Info | |
|---|---|
| component | 45 |
| num_images | 2 |
| mean_distance | 0.9688 |
| Label | |
|---|---|
| medium_vehicle | 1 |
| small_vessel | 1 |
| Info | |
|---|---|
| component | 59 |
| num_images | 2 |
| mean_distance | 0.9576 |
| Label | |
|---|---|
| medium_vehicle | 1 |
| medium_vessel | 1 |
| Info | |
|---|---|
| component | 63 |
| num_images | 5 |
| mean_distance | 0.9573 |
| Label | |
|---|---|
| heavy_equipment | 2 |
| medium_vehicle | 2 |
| small_aircraft | 1 |
| Info | |
|---|---|
| component | 64 |
| num_images | 2 |
| mean_distance | 0.9554 |
| Label | |
|---|---|
| heavy_equipment | 1 |
| small_vessel | 1 |
| Info | |
|---|---|
| component | 15 |
| num_images | 10 |
| mean_distance | 0.955 |
| Label | |
|---|---|
| small_vessel | 4 |
| medium_vehicle | 3 |
| medium_vessel | 2 |
| heavy_equipment | 1 |
| Info | |
|---|---|
| component | 13 |
| num_images | 23 |
| mean_distance | 0.95 |
| Label | |
|---|---|
| small_vessel | 10 |
| medium_vehicle | 7 |
| medium_vessel | 4 |
| heavy_equipment | 1 |
| large_aircraft | 1 |
0
Looking at the raw cluster to link back cluster name to to file
df=pd.read_csv('output/galleries/components.csv')
df.head()
| Unnamed: 0 | component_id | files | label | files_ids | distance | len | |
|---|---|---|---|---|---|---|---|
| 0 | 45 | 45 | ['output/crops/images126_0_5120.tiff_704_1078_710_1079_709_1091_703_1091.jpg', 'output/crops/images126_0_5120.tiff_991_1081_1004_1081_1004_1086_991_1086.jpg'] | ['medium_vehicle', 'small_vessel'] | [50, 72] | 0.9688 | 2 |
| 1 | 59 | 59 | ['output/crops/images126_0_5120.tiff_241_1265_259_1265_259_1273_241_1273.jpg', 'output/crops/images126_0_5120.tiff_1166_1005_1181_1005_1181_1009_1166_1010.jpg'] | ['medium_vehicle', 'medium_vessel'] | [88, 90] | 0.9576 | 2 |
| 2 | 63 | 63 | ['output/crops/images126_1280_5120.tiff_996_134_1012_134_1012_141_996_141.jpg', 'output/crops/images126_1280_5120.tiff_192_81_197_80_197_91_193_91.jpg', 'output/crops/images126_1280_5120.tiff_191_101_196_101_196_111_191_111.jpg', 'output/crops/images126_1280_5120.tiff_1012_148_1030_161_1024_170_1006_156.jpg', 'output/crops/images126_1280_5120.tiff_909_1133_909_1107_939_1107_939_1132.jpg'] | ['heavy_equipment', 'medium_vehicle', 'medium_vehicle', 'heavy_equipment', 'small_aircraft'] | [93, 99, 103, 104, 114] | 0.9573 | 5 |
| 3 | 64 | 64 | ['output/crops/images126_0_5120.tiff_1134_1049_1134_1061_1129_1061_1129_1050.jpg', 'output/crops/images126_1280_5120.tiff_267_1221_253_1206_259_1201_273_1215.jpg'] | ['small_vessel', 'heavy_equipment'] | [94, 115] | 0.9554 | 2 |
| 4 | 15 | 15 | ['output/crops/images126_0_0.tiff_964_831_981_832_981_839_964_838.jpg', 'output/crops/images126_0_5120.tiff_987_1097_997_1097_997_1101_986_1101.jpg', 'output/crops/images126_0_5120.tiff_1149_1050_1149_1065_1143_1065_1143_1051.jpg', 'output/crops/images126_0_5120.tiff_1163_998_1174_998_1174_1003_1163_1003.jpg', 'output/crops/images126_0_5120.tiff_1063_1171_1075_1171_1075_1176_1063_1177.jpg', 'output/crops/images126_0_5120.tiff_1124_1050_1125_1064_1120_1064_1119_1051.jpg', 'output/crops/images126_1280_5120.tiff_1049_127_1064_127_1064_134_1049_134.jpg', 'output/crops/images126_0_5120.tiff_1228_1005_1243_1005_1243_1011_1228_1011.jpg', 'output/crops/images126_1280_5120.tiff_931_143_937_143_937_161_931_161.jpg', 'output/crops/images126_1280_5120.tiff_300_170_315_170_315_177_300_177.jpg'] | ['medium_vehicle', 'small_vessel', 'medium_vessel', 'small_vessel', 'small_vessel', 'small_vessel', 'heavy_equipment', 'medium_vessel', 'medium_vehicle', 'medium_vehicle'] | [15, 48, 55, 67, 75, 80, 87, 97, 106, 107] | 0.9550 | 10 |
Looking at good labels
fd.vis.component_gallery(load_crops=True,enhance_image=True,keep_aspect_ratio=True,slice='same',num_images=20,save_artifacts=True)
Traceback (most recent call last): File "/home/dnth/anaconda3/envs/fastdup/lib/python3.10/site-packages/fastdup/__init__.py", line 1376, in create_components_gallery ret = do_create_components_gallery(work_dir, save_path, num_images, lazy_load, get_label_func, group_by, slice, File "/home/dnth/anaconda3/envs/fastdup/lib/python3.10/site-packages/fastdup/galleries.py", line 1399, in do_create_components_gallery ret = visualize_top_components(work_dir, save_dir, num_images, File "/home/dnth/anaconda3/envs/fastdup/lib/python3.10/site-packages/fastdup/galleries.py", line 795, in visualize_top_components top_components = do_find_top_components(work_dir=work_dir, get_label_func=get_label_func, group_by=group_by, File "/home/dnth/anaconda3/envs/fastdup/lib/python3.10/site-packages/fastdup/galleries.py", line 1236, in do_find_top_components assert len(comps), "No components found with more than one image/video"AssertionError: No components found with more than one image/video
Outliers¶
Let's look on outliers on the satellite image level
fd.vis.outliers_gallery()
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:00<00:00, 26144.37it/s]
Stored outliers visual view in output/galleries/outliers.html
Outliers Report
Showing image outliers, one per row
| Info | |
|---|---|
| Distance | 0.46795 |
| Path | /crops/images126_1280_5120tiff_333_977_331_879_448_877_449_975jpg |
| label | large_aircraft |
| Info | |
|---|---|
| Distance | 0.848818 |
| Path | /crops/images126_0_2560tiff_1221_1277_1244_1273_1245_1280_1222_1283jpg |
| label | bus |
| Info | |
|---|---|
| Distance | 0.855832 |
| Path | /crops/images126_0_0tiff_7_262_25_261_26_269_7_270jpg |
| label | large_vehicle |
| Info | |
|---|---|
| Distance | 0.858068 |
| Path | /crops/images126_1280_5120tiff_-2_933_47_930_52_991_1_994jpg |
| label | large_aircraft |
| Info | |
|---|---|
| Distance | 0.859666 |
| Path | /crops/images126_1280_5120tiff_267_1221_253_1206_259_1201_273_1215jpg |
| label | heavy_equipment |
| Info | |
|---|---|
| Distance | 0.863308 |
| Path | /crops/images126_0_0tiff_1059_237_1079_225_1084_232_1064_244jpg |
| label | heavy_equipment |
| Info | |
|---|---|
| Distance | 0.867095 |
| Path | /crops/images126_1280_5120tiff_601_1050_600_1015_642_1015_643_1049jpg |
| label | small_aircraft |
0
Now we look at outliers at the crop level
fd.vis.outliers_gallery(load_crops=True)
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:00<00:00, 17445.11it/s]
Stored outliers visual view in output/galleries/outliers.html
Outliers Report
Showing image outliers, one per row
| Info | |
|---|---|
| Distance | 0.46795 |
| Path | /crops/images126_1280_5120tiff_333_977_331_879_448_877_449_975jpg |
| label | large_aircraft |
| Info | |
|---|---|
| Distance | 0.848818 |
| Path | /crops/images126_0_2560tiff_1221_1277_1244_1273_1245_1280_1222_1283jpg |
| label | bus |
| Info | |
|---|---|
| Distance | 0.855832 |
| Path | /crops/images126_0_0tiff_7_262_25_261_26_269_7_270jpg |
| label | large_vehicle |
| Info | |
|---|---|
| Distance | 0.858068 |
| Path | /crops/images126_1280_5120tiff_-2_933_47_930_52_991_1_994jpg |
| label | large_aircraft |
| Info | |
|---|---|
| Distance | 0.859666 |
| Path | /crops/images126_1280_5120tiff_267_1221_253_1206_259_1201_273_1215jpg |
| label | heavy_equipment |
| Info | |
|---|---|
| Distance | 0.863308 |
| Path | /crops/images126_0_0tiff_1059_237_1079_225_1084_232_1064_244jpg |
| label | heavy_equipment |
| Info | |
|---|---|
| Distance | 0.867095 |
| Path | /crops/images126_1280_5120tiff_601_1050_600_1015_642_1015_643_1049jpg |
| label | small_aircraft |
0
Brightest Image¶
We look for the brightest satellite images
fd.vis.stats_gallery(metric='mean')
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:00<00:00, 6562.32it/s]
Stored mean visual view in output/galleries/mean.html
Bright Image Report
Showing example images, sort by descending order
| Info | |
|---|---|
| mean | 115.5904 |
| filename | output/crops/images126_0_0.tiff_949_234_950_219_956_220_955_234.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 92.5701 |
| filename | output/crops/images126_0_0.tiff_1030_250_1036_246_1041_256_1034_259.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 91.7934 |
| filename | output/crops/images126_1280_5120.tiff_601_1050_600_1015_642_1015_643_1049.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 90.4244 |
| filename | output/crops/images126_1280_5120.tiff_794_1192_794_1157_833_1156_834_1192.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 90.1924 |
| filename | output/crops/images126_0_0.tiff_1059_237_1079_225_1084_232_1064_244.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 89.8846 |
| filename | output/crops/images126_0_0.tiff_1221_423_1229_404_1236_407_1229_426.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 88.5196 |
| filename | output/crops/images126_1280_5120.tiff_1012_148_1030_161_1024_170_1006_156.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 88.3636 |
| filename | output/crops/images126_1280_5120.tiff_996_134_1012_134_1012_141_996_141.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 86.5223 |
| filename | output/crops/images126_1280_5120.tiff_592_900_592_889_611_888_611_900.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 85.2022 |
| filename | output/crops/images126_0_5120.tiff_20_1049_28_1057_24_1060_16_1052.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 84.5831 |
| filename | output/crops/images126_1280_5120.tiff_889_1005_888_982_917_981_917_1005.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 82.7721 |
| filename | output/crops/images126_0_0.tiff_1028_192_1033_185_1039_190_1033_197.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 82.3681 |
| filename | output/crops/images126_0_1280.tiff_330_829_348_832_347_841_329_838.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 79.9242 |
| filename | output/crops/images126_1280_5120.tiff_909_1133_909_1107_939_1107_939_1132.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 78.291 |
| filename | output/crops/images126_1280_5120.tiff_907_1078_906_1055_924_1054_925_1078.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 78.1487 |
| filename | output/crops/images126_1280_5120.tiff_906_1106_906_1080_935_1080_936_1106.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 77.239 |
| filename | output/crops/images126_0_5120.tiff_1059_1066_1059_1079_1055_1079_1055_1066.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 77.0893 |
| filename | output/crops/images126_1280_5120.tiff_1062_124_1080_125_1079_133_1061_132.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 76.4959 |
| filename | output/crops/images126_0_2560.tiff_595_253_615_258_613_266_594_261.jpg |
| label | N/A |
| Info | |
|---|---|
| mean | 76.3903 |
| filename | output/crops/images126_0_1280.tiff_150_799_170_798_171_806_150_807.jpg |
| label | N/A |
0
Blurry Images¶
Now we look for the most blurry images
fd.vis.stats_gallery(metric='blur',load_crops=True)
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:00<00:00, 6341.55it/s]
Stored blur visual view in output/galleries/blur.html
Blurry Image Report
Showing example images, sort by ascending order
| Info | |
|---|---|
| blur | 5.0175 |
| filename | output/crops/images126_1280_5120.tiff_267_1221_253_1206_259_1201_273_1215.jpg |
| label | heavy_equipment |
| Info | |
|---|---|
| blur | 5.6971 |
| filename | output/crops/images126_0_3840.tiff_631_554_638_551_647_568_641_572.jpg |
| label | heavy_equipment |
| Info | |
|---|---|
| blur | 5.7064 |
| filename | output/crops/images126_0_0.tiff_964_831_981_832_981_839_964_838.jpg |
| label | medium_vehicle |
| Info | |
|---|---|
| blur | 7.9295 |
| filename | output/crops/images126_0_0.tiff_1121_877_1137_879_1137_885_1120_884.jpg |
| label | medium_vehicle |
| Info | |
|---|---|
| blur | 8.1925 |
| filename | output/crops/images126_0_2560.tiff_482_267_493_277_488_282_477_271.jpg |
| label | medium_vehicle |
| Info | |
|---|---|
| blur | 8.464 |
| filename | output/crops/images126_0_2560.tiff_621_487_624_477_629_478_626_489.jpg |
| label | heavy_equipment |
| Info | |
|---|---|
| blur | 9.0193 |
| filename | output/crops/images126_0_3840.tiff_864_534_871_538_863_554_856_551.jpg |
| label | heavy_equipment |
| Info | |
|---|---|
| blur | 10.5485 |
| filename | output/crops/images126_0_2560.tiff_556_455_570_454_570_462_557_463.jpg |
| label | heavy_equipment |
| Info | |
|---|---|
| blur | 11.0871 |
| filename | output/crops/images126_0_0.tiff_965_859_985_859_985_866_965_865.jpg |
| label | large_vehicle |
| Info | |
|---|---|
| blur | 11.5538 |
| filename | output/crops/images126_0_0.tiff_985_867_1001_868_1000_875_984_873.jpg |
| label | medium_vehicle |
| Info | |
|---|---|
| blur | 11.8231 |
| filename | output/crops/images126_0_1280.tiff_527_824_557_825_557_836_526_835.jpg |
| label | heavy_equipment |
| Info | |
|---|---|
| blur | 12.157 |
| filename | output/crops/images126_0_5120.tiff_704_1078_710_1079_709_1091_703_1091.jpg |
| label | medium_vehicle |
| Info | |
|---|---|
| blur | 12.5293 |
| filename | output/crops/images126_0_5120.tiff_688_1078_694_1078_694_1092_688_1092.jpg |
| label | medium_vehicle |
| Info | |
|---|---|
| blur | 12.76 |
| filename | output/crops/images126_0_0.tiff_1012_839_1031_841_1030_848_1011_846.jpg |
| label | large_vehicle |
| Info | |
|---|---|
| blur | 13.6241 |
| filename | output/crops/images126_0_2560.tiff_307_267_315_267_314_283_306_282.jpg |
| label | heavy_equipment |
| Info | |
|---|---|
| blur | 14.0418 |
| filename | output/crops/images126_0_1280.tiff_584_919_592_918_593_935_584_935.jpg |
| label | large_vehicle |
| Info | |
|---|---|
| blur | 14.3275 |
| filename | output/crops/images126_0_3840.tiff_226_1209_245_1205_247_1213_228_1217.jpg |
| label | large_vehicle |
| Info | |
|---|---|
| blur | 14.3412 |
| filename | output/crops/images126_0_0.tiff_1044_803_1057_803_1056_810_1044_809.jpg |
| label | medium_vehicle |
| Info | |
|---|---|
| blur | 14.3537 |
| filename | output/crops/images126_0_2560.tiff_574_412_576_394_582_395_580_413.jpg |
| label | large_vehicle |
| Info | |
|---|---|
| blur | 14.4656 |
| filename | output/crops/images126_0_2560.tiff_528_419_546_427_540_439_523_431.jpg |
| label | heavy_equipment |
0
Wrap Up¶
Next, feel free to check out other tutorials -
- ⚡Quickstart: Learn how to install fastdup, load a dataset and analyze it for potential issues such as duplicates/near-duplicates, broken images, outliers, dark/bright/blurry images, and view visually similar image clusters. If you're new, start here!
- 🧹Clean Image Folder: Learn how to analyze and clean a folder of images from potential issues and export a list of problematic files for further action. If you have an unorganized folder of images, this is a good place to start.
- 🖼Analyze Image Classification Dataset: Learn how to load a labeled image classification dataset and analyze for potential issues. If you have labeled ImageNet-style folder structure, have a go!
- 🎁Analyze Object Detection Dataset: Learn how to load bounding box annotations for object detection and analyze for potential issues. If you have a COCO-style labeled object detection dataset, give this example a try.
VL Profiler¶
If you prefer a no-code platform to inspect and visualize your dataset,try our free cloud product VL Profiler - VL Profiler is our first no-code commercial product that lets you visualize and inspect your dataset in your browser.
Sign up now, it's free.
As usual, feedback is welcome!
Questions? Drop by ourSlack channel or open an issue onGitHub.
