Kontrol wajah untuk lemon dan stroberi Mars: cara saya magang di Rosselkhozbank setelah berpartisipasi dalam kompetisi DS

Saya rasa tidak banyak orang tersisa yang belum mendengar tentang hackathon dan kompetisi Data Science. Saya mendengar tentang mereka enam bulan lalu. Berpartisipasi dalam semua yang saya lihat (dan bahkan memenangkan sesuatu), saya tidak dapat melewati AgroCode 2020, yang diselenggarakan oleh Bank Pertanian Rusia. Saya berhasil masuk ke puncak peserta terbaik di beberapa arah, dan di satu arah saya bahkan mendapat hadiah. Berkat pencapaian ini, saya menjadi spesialis Ilmu Data di Pusat Pengembangan Teknologi Keuangan Bank Pertanian Rusia. Dan bagaimana saya melakukannya - baca di bawah.





Agro-coding utama negara

Untuk memulainya, saya akan mengatakan beberapa patah kata tentang acara itu sendiri. AgroCode 2020 menyatukan banyak orang yang tidak peduli dengan teknologi baru di bidang pertanian. Ini terdiri dari beberapa kegiatan:





  1. Lomba analisis data Agro Data Science Cup dengan 2 tugas:









    • .





  2. Agro Hack 6 :

























    • .





      , , . 10 .





  3. Agro Idea, .





, , . , , , . . DS- . -10, - 2 !





. 17 .





?

: , ID , , ( ) 365 .





Set data untuk masalah indeks vegetasi

F1- sklearn ( average="weighted").





, . : , . .





? ?

, , NDVI β€”





NDVI = \ frac {NIR-RED} {NIR + RED}





, 4 : RGB . , RED β€” , NIR β€” .





Gambar bidang dengan ndvi dihitung
ndvi

?

  • -, 45 , 279 . : - , () , .





  • -, , - ( - ). , .





  • -, . , , . .





. , , . - , , . , .





… , , . , . .





ID, . . - . . : 2 4 .





?

Distribusi tanaman dalam data pelatihan

, . - KFold StratifiedKFold , . . , . , . -. .





, , CatBoost. , , , :





params = {
  'iterations': 2000, 
  'depth': 6, 
  'early_stopping_rounds': 500, 
  'l2_leaf_reg': 5, 
  'bagging_temperature': 1, 
  'random_seed': 17, 
  'class_names': classes, 
  'auto_class_weights': 'Balanced', 
  'eval_metric': 'TotalF1', 
  'loss_function': 'MultiClassOneVsAll', 
  'task_type': 'GPU', 
  'devices': '0:1', 
  'verbose': 2000 
}
      
      



β€œBalanced” β€œMultiClassOneVsAll”. . . , , , random_seed . - . , , . , , .





Prediksi distribusi tanaman dalam data uji

18 . , , . , 18 2 . , - . β€” .





Papan peringkat terakhir dari tugas pertama

: . . , , , .





( ) . , .





Lemon mana yang akan kamu pilih?
?

. β€” 1056 1056 .jpg. . , , . . : https://www.kaggle.com/maciejadamiak/lemons-quality-controldataset





ROC-AUC. :





def score(y_true, y_preds):
  table = y_true.merge(y_preds, left_on='image_id', right_on='image_id')
  m = keras.metrics.AUC(curve='ROC')
  m.update_state(table.iloc[:, 1:10], table.iloc[:, 10:])
  return m.result().numpy() 
      
      



.





csv-. .py , -. , . , .





20 . , . ? .





, , . , . , , , , .





. , .





aug = ImageDataGenerator(
  rotation_range=40,
  width_shift_range=0.1,
  height_shift_range=0.1,
  brightness_range=[0.5, 1],
  shear_range=0.2,
  channel_shift_range=0.2,
  zoom_range=0.2,
  horizontal_flip=True,
  vertical_flip=True,
  fill_mode="nearest"
) 
      
      



?

, . backbone VGG16, AveragePooling, (Dense) Dropout.





model = VGG16(weights=None, include_top=False, input_shape=[image_size, image_size, 3]) 
x = AveragePooling2D(pool_size=(2, 2))(model.output) 
x = Flatten()(x) 
x = Dense(256, activation='relu')(x) 
x = Dropout(0.5)(x) 
output = Dense(9, activation='sigmoid')(x)
      
      



, , .





KFold -. , , .





9 , .





Papan peringkat terakhir untuk tugas kedua

. β€œ ” . , . .





Gambar dari presentasi kami

:





  1. , , .





  2. – .





  3. ( , , , ..).





5 , , , .





3 . .





Set data dengan pembacaan sensor
Set data dengan nilai hasil

: -.





, , , .





, :





  • , 19 30 , 23 25 . .





  • . , .





  • - . , .





  • 7.





, . . , . :





Rezim suhu di rumah kaca

: - , - , - ( ).





-? . , , . , , β€” . :





?

, , , . , , Agro Hack :) ( , ).





, ? - , ! , .





!





, , , , , , .








All Articles