Darkflow: Menambahkan pelatihan dan akurasi validasi ke proses pelatihan

Dibuat pada 30 Mei 2017  ·  37Komentar  ·  Sumber: thtrieu/darkflow

Selama pelatihan:
step1 - rugi 240.92623901367188 - kehilangan rata-rata bergerak 240.92623901367188
langkah 2 - rugi 241.2866668701172 - kerugian rata-rata bergerak 240.96228179931643
langkah 3 - rugi 239.79562377929688 - kerugian rata-rata bergerak 240.84561599731447

Bagaimana cara menambahkan akurasi pelatihan dan akurasi validasi?

step1 - rugi 240.92623901367188 - kehilangan jalan bergerak 240.92623901367188 - kereta 0.221
langkah 2 - rugi 241.2866668701172 - kehilangan jalan bergerak 240.96228179931643 - kereta 0,222
langkah 3 - rugi 239.79562377929688 - kehilangan jalan bergerak 240.84561599731447 - kereta 0,223
Selesai 1 Epoch, validasi 0.210

Komentar yang paling membantu

Iya tidak masalah. Saya akan meng-upload file di sini. Jika Anda memiliki pertanyaan, tanyakan saja.

diff.zip

Semua 37 komentar

Ada 2 metode untuk melakukan itu. Anda dapat membagi kumpulan data dalam rangkaian dan memvalidasi set di dalam kode atau hanya mengirim 2 set data terpisah, satu untuk rangkaian dan satu untuk validasi saat Anda memanggil modul aliran.

Bagaimanapun, untuk melakukan itu Anda harus menambahkan beberapa parameter baru di file default.py, kemudian memodifikasi fungsi _batch, parse dan shuffle dari data.py (folder yolo dan yolov2) dan memodifikasi metode train() di flow.py file (di sini Anda hanya perlu menjalankan batch lain (setiap iterasi atau sekali sejumlah iterasi) menggunakan sesi tensorflow yang sama, tetapi tanpa mengembalikan train_op sehingga Anda tidak mengubah bobot). Anda juga dapat menambahkan tf.summary.FileWriter lain untuk validasi sehingga Anda dapat memvisualisasikan grafik kehilangan validasi menggunakan tensorboard.

Saya pribadi memilih untuk mengirim 2 set data yang berbeda. Itu cukup lurus ke depan. Saya harap saya cukup jelas.

@Costyv95 Bisakah Anda membagikan kode Anda dengan parameter tambahan dan perubahan yang Anda sarankan?

Iya tidak masalah. Saya akan meng-upload file di sini. Jika Anda memiliki pertanyaan, tanyakan saja.

diff.zip

@ Costyv95 Apakah set validasi berkontribusi pada pembaruan gradien dalam implementasi Anda?

Saya mengerti, sampel validasi tidak berkontribusi pada pembaruan gradien.

Ya, validasi hanya untuk pratinjau hasil model di luar set pelatihan.

Hai,
Maaf. Saya tidak memperhatikan surat terakhir. Ya, validasi hanya untuk pratinjau hasil model di luar set pelatihan.

Pada hari Selasa, 4 Juli 2017, 15:16:24 GMT+3, yfliu [email protected] menulis:

Saya mengerti, sampel validasi tidak berkontribusi pada pembaruan gradien.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub, atau matikan utasnya.

@Costyv95 Saya hanya ingin tahu cara menjalankannya setelah memodifikasi kode aslinya? Terima kasih banyak!

@Costyv95 Saya menjalankannya seperti ini ./flow --model cfg/yolo.cfg --train --dataset "/home/thinkjoy/lwl/modify-darkflow-master/data/VOCdevkit/VOC2007/JPEGImages" --annotation " /home/thinkjoy/lwl/modify-darkflow-master/data/VOCdevkit/VOC2007/Annotations" --gpu 1.0
di sini ada kesalahan (modifikasi kodenya sama seperti Anda)
File "/home/thinkjoy/lwl/modify-darkflow-master/darkflow/net/flow.py", baris 82, di kereta
feed_dict[self.learning_rate] = lr
AttributeError: objek 'TFNet' tidak memiliki atribut 'learning_rate'

Ini terjadi karena kode yang saya berikan kepada Anda memiliki beberapa modifikasi untuk tingkat pembelajaran adaptif dan ada satu perubahan lagi yang harus Anda lakukan. Anda menemukannya di sini: https://github.com/thtrieu/darkflow/pull/216/commits/124d55d32d17bdee111201fd6fe520db709a4f9c

Dan Anda harus menambahkan --val_dataset dan val_annotation ke argumen karena kehilangan validasi.

@Costyv95 Bisakah kita mengontrol berapa banyak langkah untuk memvalidasi satu kali, saya hanya berpikir satu langkah satu val sedikit membuang waktu untuk pelatihan? Terima kasih!

@ Costyv95 Dan apakah Anda telah mencapai penambahan akurasi saat val?

@dream-will Untuk validasi sekali dalam N langkah, Anda dapat dengan mudah menambahkan argumen(val_steps) di defaults.py dan dalam metode train di flow.py Anda cukup menjalankan kode setelah "#validation time" di dalam pernyataan if seperti ini:

` #waktu validasi

if i % self.FLAGS.val_steps == 0:
    (x_batch, datum) = next(val_batches)
    feed_dict = {
        loss_ph[key]: datum[key] 
            for key in loss_ph }
    feed_dict[self.inp] = x_batch
    feed_dict.update(self.feed)
    feed_dict[self.learning_rate] = lr

    fetches = [loss_op, self.summary_op] 
    fetched = self.sess.run(fetches, feed_dict)
    loss = fetched[0]

    if loss_mva_valid is None: loss_mva_valid = loss
    loss_mva_valid = .9 * loss_mva_valid + .1 * loss

    self.val_writer.add_summary(fetched[1], step_now)

    form = 'VALIDATION step {} - loss {} - moving ave loss {}'
    self.say(form.format(step_now, loss, loss_mva_valid))`

Di defaults.py tambahkan saja baris ini:

self.define('val_steps', '1', 'evaluate validation loss every #val_steps iterations')

Saya tidak begitu mengerti pertanyaan kedua tentang menambahkan akurasi.

@Costyv95 Terima kasih atas jawaban Anda, pertanyaan kedua hanya berarti ketika memvalidasi, kami tidak hanya mendapatkan kehilangan validasi tetapi juga mendapatkan akurasi validasi?

@dream-will Untuk itu Anda harus menerapkan sendiri metode akurasi khusus yang membandingkan bbox GT dan bbox yang diprediksi (untuk mendapatkan bbox yang diprediksi, lihat kode yang digunakan dalam prediksi), tetapi saya tidak melihat alasan untuk itu karena kerugian sudah cukup. Ketahuilah bahwa validasi yang Anda lihat hanya pada batch mini acak dari set validasi, tetapi ini menunjukkan dengan sangat baik kerugian pengujian pada set data validasi yang cukup besar.

@Costyv95 oke, terima kasih

Hai @Costyv95 . Saya mengalami masalah untuk menampilkan nilai kerugian val. Saya memodifikasi semua file dengan mengikuti instruksi dan kode Anda. Ini adalah kesalahan berikut:
File "flow", line 6, in <module> cliHandler(sys.argv) File "/home/alxe/ML/darkflow/darkflow/cli.py", line 26, in cliHandler tfnet = TFNet(FLAGS) File "/home/alxe/ML/darkflow/darkflow/net/build.py", line 64, in __init__ self.framework = create_framework(*args) File "/home/alxe/ML/darkflow/darkflow/net/framework.py", line 59, in create_framework return this(meta, FLAGS) File "/home/alxe/ML/darkflow/darkflow/net/framework.py", line 15, in __init__ self.constructor(meta, FLAGS) File "/home/alxe/ML/darkflow/darkflow/net/yolo/__init__.py", line 20, in constructor misc.labels(meta, FLAGS) #We're not loading from a .pb so we do need to load the labels File "/home/alxe/ML/darkflow/darkflow/net/yolo/misc.py", line 36, in labels with open(file, 'r') as f: TypeError: coercing to Unicode: need string or buffer, NoneType found

Bisakah Anda mencetak nilai variabel file?

@ Costyv95 tidak, saya tidak bisa. Inilah yang saya jalankan:
python flow --model cfg/tiny-yolo-voc-1c.cfg --train --dataset train/images --annotation train/annotations --load bin/yolo.weights --gpu 1.0 --epoch 300

Yang saya maksud dengan "variabel file" adalah variabel yang digunakan pada baris 36 di misc.py, karena saya tidak begitu mengerti apa yang salah dengan kode Anda.
Anda tidak memiliki argumen --val_dataset? Bagaimana Anda menerapkan perubahan? Anda membagi dataset di dalam kode atau Anda menambahkan argumen --val_dataset?

@Costyv95 Hai, saya telah menyalin dan menempelkan file Anda di diff.zip lalu saya mencoba melatih dengan perintah

"flow --train --model ./coke/yolo-coke-2c.cfg --annotation ./coke/train/annotations --dataset ./coke/train/images --gpu 1.0 --batch 8 --save 1000 --val_dataset ./coke/validation/images --val_annotation ./coke/validation/annotations

Tapi masih error
`
[ nkhanh@localhost khanh]$ ./run_coke.sh

Mengurai ./coke/yolo-coke-2c.cfg
Memuat Tidak Ada...
Selesai dalam 0,0001392364501953125s
Traceback (panggilan terakhir terakhir):
File "/usr/local/bin/flow", baris 6, di
cliHandler(sys.argv)
File "/usr/local/lib64/python3.6/site-packages/darkflow/cli.py", baris 26, di cliHandler
tfnet = TFNet(BENDERA)
File "/usr/local/lib64/python3.6/site-packages/darkflow/net/build.py", baris 64, di __init__
self.framework = create_framework(*args)
File "/usr/local/lib64/python3.6/site-packages/darkflow/net/framework.py", baris 59, di create_framework
kembalikan ini (meta, BENDERA)
File "/usr/local/lib64/python3.6/site-packages/darkflow/net/framework.py", baris 15, di __init__
self.constructor(meta, BENDERA)
File "/usr/local/lib64/python3.6/site-packages/darkflow/net/yolo/__init__.py", baris 20, di konstruktor
misc.labels(meta, FLAGS) #Kami tidak memuat dari .pb jadi kami perlu memuat label
File "/usr/local/lib64/python3.6/site-packages/darkflow/net/yolo/misc.py", baris 36, dalam label
dengan open(file, 'r') sebagai f:
TypeError: str yang diharapkan, byte, atau objek os.PathLike, bukan NoneType
`

@khanh1412
di misc.py baris29
ubah ke file label khusus Anda.
file = 'labels.txt'

PS Ini solusi sementara.

@Costyv95
bagaimana memahami menghapus '[' dan ']'?

Masuk pelatihan...
Traceback (panggilan terakhir terakhir):
File "aliran", baris 6, di
cliHandler(sys.argv)
File "/Users/sisyphus/darkflow/darkflow/cli.py", baris 33, di cliHandler
print('Masuk Pelatihan...'); tfnet.train()
File "/Users/sisyphus/darkflow/darkflow/net/flow.py", baris 54, di kereta
arg_steps = self.FLAGS.steps[1:-1] # hapus '[' dan ']'
TypeError: objek 'NoneType' tidak dapat disubskripkan

hai @Costyv95

di mana saya harus menambahkan tf.summary.FileWriter untuk validasi untuk memvisualisasikan grafik kehilangan validasi menggunakan tensorboard.

Terima kasih

@Costyv95 Saya mencoba file zip Anda, diff.zip. Tetapi terminal memberi tahu saya bahwa --val_dataset adalah argumen yang tidak valid. Apakah saya perlu mengubah file lain?

@Costyv95 Saya mencoba file zip Anda, diff.zip. Tetapi terminal memberi tahu saya bahwa --val_dataset adalah argumen yang tidak valid. Apakah saya perlu mengubah file lain?

Anda harus mengganti semua file termasuk yolo-data dan yolov2-data. Anda cukup menyalin dan menempelkan masing-masing ke folder terkait dengan mengubah namanya hanya dengan "data" untuk sekadar mengubah file di dalamnya.

@khanhhh
tambahkan kode "self.define('labels', 'labels.txt', 'path to labels file')" ke "def setDefaults(self):" di "darkflow\defaults.py", lalu Anda dapat menggunakan " --labels xxx.txt" seperti sebelumnya.

Terima kasih banyak!!!!!!!!

Pada 25 Mei 2019, pukul 03:11, [email protected] menulis:

@KhanhHH https://github.com/KhanhHH
tambahkan kode "self.define('labels', 'labels.txt', 'path to labels file')" ke "def setDefaults(self):" di "darkflow\defaults.py", lalu Anda dapat menggunakan " --labels xxx.txt" seperti sebelumnya.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, melihatnya di GitHub https://github.com/thtrieu/darkflow/issues/264?email_source=notifications&email_token=AEIP7DOZYIFBYZHV22RVIADPXD7ELA5CNFSM4DNH2ANKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODWHLNQQ#issuecomment-495892162 , atau mematikan benang https://github.com/notifications/ unsubscribe-auth/AEIP7DPOGFQ2EYSSZFPZSL3PXD7ELANCNFSM4DNH2ANA .

@Costyv95
Halo, saya ingin tahu cara menyetel jalur "gs://bucket_hand_detection_2" di "darkflow\defaults.py"? python(3.7) saya tidak dapat menemukan jalur ini, itu menimbulkan kesalahan; dan apa yang diwakili oleh "ember"?

@Costyv95
Halo, saya ingin tahu cara menyetel jalur "gs://bucket_hand_detection_2" di "darkflow\defaults.py"? python(3.7) saya tidak dapat menemukan jalur ini, itu menimbulkan kesalahan; dan apa yang diwakili oleh "ember"?

Kesalahan yang sama tetapi pos pemeriksaan disimpan secara normal, jadi saya tidak tahu kesalahan apa ini @ Costyv95

terima kasih @Costyv95!

Hai, @Costyv95 Yolo melatih dan mengeluarkan kehilangan validasi, tetapi setelah 1000 langkah itu menimbulkan kesalahan. File FileNotFoundError: [Errno 2] Tidak ada file atau direktori seperti itu: 'gsutil': 'gsutil'.

Kesalahan:
error

@akmeraki halo saya menemui masalah yang sama, apakah Anda menemukan solusi tentang kesalahan ini?

@zhe0503 @akmeraki Saya harap ini belum terlambat tetapi yang saya lakukan hanyalah mengetik "pip install gsutil" dan itu memecahkan masalah!!

Hai teman-teman.
Apa yang harus saya lakukan Jika saya ingin mendapatkan akurasi dari seluruh model yang terlatih?
Misalnya saya melatih model saya dan saya menghentikan pelatihan di beberapa titik. Sekarang saya memiliki pos pemeriksaan terakhir yang disimpan dan saya ingin menghitung akurasi hingga pos pemeriksaan terakhir.
File dalam folder cpkt diberi nama sebagai,

pos pemeriksaan
yolo-baru-50.data-00000-dari-00001
yolo-baru-50.index
yolo-baru-50.meta
yolo-baru-50.profile

Saya akan sangat menghargai bantuannya.

@Costyv95
Saya mengikuti instruksi baik Anda dengan hati-hati tetapi tampaknya train.py tidak mengenali argumen --val_.... Maukah Anda membantu saya? Errornya seperti di bawah ini:
KESALAHAN - Argumen tidak valid: --val_dataset

Ini terjadi karena kode yang saya berikan kepada Anda memiliki beberapa modifikasi untuk tingkat pembelajaran adaptif dan ada satu perubahan lagi yang harus Anda lakukan. Anda menemukannya di sini: 124d55d

Dan Anda harus menambahkan --val_dataset dan val_annotation ke argumen karena kehilangan validasi.

Ini tidak bekerja untuk saya. Saya mendapatkan kesalahan seperti di bawah ini:
KESALAHAN - Argumen tidak valid: --val_dataset

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

realityzero picture realityzero  ·  3Komentar

hrshovon picture hrshovon  ·  5Komentar

borasy picture borasy  ·  3Komentar

pribadihcr picture pribadihcr  ·  5Komentar

ma3252788 picture ma3252788  ·  3Komentar