$30 off During Our Annual Pro Sale. View Details »

TensorflowでYOLOv3を写経した話

Aipa
January 12, 2019

 TensorflowでYOLOv3を写経した話

Aipa

January 12, 2019
Tweet

More Decks by Aipa

Other Decks in Technology

Transcript

  1. TFUG Okinawa val.2
    ΞΠύʔୂ௕@ླྀٿେֶ

    View Slide

  2. औΓʹདྷͨ

    View Slide

  3. ຊ೔͓࿩͢Δ͜ͱ

    View Slide

  4. ຊ೔͓࿩͔ͨͬͨ͜͠ͱ
    • YOLOͱ͸
    • TensorflowͰ૊ΜͰΈͨ
    • ૊ΜͰΈͨYOLOΛֶशͤͯ͞Έͨ

    View Slide

  5. ຊ೔͓࿩͔ͨͬͨ͢͠Δ͜ͱ
    • YOLOͱ͸
    • TensorflowͰ૊ΜͰΈͨ
    • ૊ΜͰΈͨYOLOΛֶशͤͯ͞Έͨ

    View Slide

  6. ࣗݾ঺հ

    View Slide

  7. ࣗݾ঺հ
    • ΞΠύʔୂ௕
    • ͪΎΒσʔλגࣜձࣾ
    • PyData.OkinawaڞಉΦʔΨφΠβʔ
    • Pythonͱո्ͱΫιΈ͍ͨͳөը͕޷͖Ͱ͢

    View Slide

  8. ๻ͷϨϕϧ
    • ਺ֶΘ͔ΒΜ
    • TensorflowΘ͔ΒΜ
    • σΟʔϓϥʔχϯάઙ͍ཧղ
    • ͭ·Γॳ৺ऀ

    View Slide

  9. (YOLOΛબ୒ͨ͠)
    ܦҢ

    View Slide

  10. ܦҢ
    Ϙεʣը૾ೝࣝͷҊ݅͘ΔΑʂ
    ๻ʣ͓ɺ͕Μ͹Δ͍ͧ
    Ϙεʣ·ͩΘ͔ΒΜ͚ͲObject DetectionͬΆ͍Αʂʂ
    ๻ʣ;͊ʔʔʔ

    View Slide

  11. ษڧͤͶ͹ʢਅإʣ

    View Slide

  12. YOLO(v3)

    View Slide

  13. YOLOͱ͸
    • ϦΞϧλΠϜΦϒδΣΫτݕग़ΞϧΰϦζϜ
    • YOLO(You Look Only Onse)
    • darknetͱ͍͏ϑϨʔϜϫʔΫͰಈ͔ͤΔ
    • σϞ͕͋Δ
    • ʢݕग़͕ʣ଎͍

    View Slide

  14. darknet
    https://pjreddie.com/darknet/

    View Slide

  15. YOLOͱ͸
    • ը૾ೖྗ͢ΔͱӈԼͷΑ͏ͳ݁ՌʹͳΔ
    • ʮ΋ͷʯͷݕग़͢Δ͚ͩ

    Ͱͳ͘ɺΫϥε΋෼ྨ

    ͢Δɻ͠Ύ͍͝

    View Slide

  16. YOLOͱ͸

    View Slide

  17. YOLOͷ࢓૊Έ

    View Slide

  18. YOLOͷ࢓૊Έ
    • ʢ·ʹ͋Θͳ͔ͬͨ͝ΊΜʣ
    • ͕ͬͪ͜Θ͔Γ΍͍͢ͷͰ֬ೝ͍ͯͩ͘͠͞
    • https://github.com/leetenki/YOLOv2/blob/
    master/YOLOv2.md

    View Slide

  19. YOLOͷ࢓૊Έ
    • ʢ·ʹ͋Θͳ͔ͬͨ͝ΊΜʣ
    • ͕ͬͪ͜Θ͔Γ΍͍͢ͷͰ֬ೝ͍ͯͩ͘͠͞
    • https://github.com/leetenki/YOLOv2/blob/
    master/YOLOv2.md

    View Slide

  20. View Slide

  21. ֶͼͷಓΛ੾Γସ͑Δ

    View Slide

  22. पΓͷ໠ऀͷֶͼํ
    1. ࿦จಡΉ
    2. هࣄΛړΔ
    3. ཧղͨ͠ɻΑ࣮͠૷͠Α͏

    View Slide

  23. ΅͘ʢLv.1ʣ
    1. ਆ༷ʢ࣮૷͍ͯ͠ΔਓɾίʔυʣΛݟ͚ͭΔ
    2. ࣸܦ͢Δ
    3. ͬ͘͟Γཧղͨ͠ -> هࣄړΔ

    View Slide

  24. ਆ༷ʢ࣮૷ʣΛ୳͢

    View Slide

  25. ਆ͸͍ͨ

    View Slide

  26. ਆͷهࣄ
    https://itnext.io/implementing-yolo-v3-in-tensorflow-tf-slim-c3c55ff59dbe

    View Slide

  27. ࣸܦ͢Δ

    View Slide

  28. ͦͷલʹ؀ڥͷ࿩
    • Ubuntu 16.04(Docker)
    • Python 3.7(Anaconda)
    • Tensorflow 1.12

    View Slide

  29. Tensorflow Πϯετʔϧ
    $ pip3 install --upgrade tensorflow
    Collecting tensorflow
    Could not find a version that satisfies the requirement
    tensorflow (from versions: )
    No matching distribution found for tensorflow
    ݟ͔ͭΒͳ͍ͱ͸ɾɾɾɾʁ

    View Slide

  30. ఘΊͳ͍ؾ࣋ͪ
    $ pip3 install —upgrade https://storage.googleapis.com/tensorflow/
    mac/cpu/tensorflow-1.10.1-py3-none-any.whl
    https://qiita.com/nahshi/items/fcf4898f7c45f11a5c63

    View Slide

  31. ʗ(^o^)ʘ
    Traceback (most recent call last):
    File "YOLO_small_tf.py", line 3, in
    import tensorflow as tf
    File "/opt/conda/lib/python3.7/site-packages/tensorflow/__init__.py",
    line 22, in
    from tensorflow.python import pywrap_tensorflow # pylint:
    disable=unused-import
    File "/opt/conda/lib/python3.7/site-packages/tensorflow/python/
    __init__.py", line 49, in
    from tensorflow.python import pywrap_tensorflow
    File "/opt/conda/lib/python3.7/site-packages/tensorflow/python/
    pywrap_tensorflow.py", line 58, in
    from tensorflow.python.pywrap_tensorflow_internal import *
    File "/opt/conda/lib/python3.7/site-packages/tensorflow/python/
    pywrap_tensorflow_internal.py", line 114
    def TFE_ContextOptionsSetAsync(arg1, async):
    ^
    SyntaxError: invalid syntax

    View Slide

  32. པΜͩGoogle͞Μ

    View Slide

  33. ఘΊͨ
    • Ubuntu 16.04(Docker)
    • Python 3.7 3.6(Anaconda)
    • Tensorflow 1.12

    View Slide

  34. ʢվΊͯʣ
    ࣸܦ͢Δ

    View Slide

  35. ΍ͬͨ͜ͱ
    • YOLOv3ͷϞσϧͷఆٛ
    • yolov3ͷॏΈΛtensorfowͰಡΈࠐΊΔ༻ɺ
    convert͢Δॲཧ
    • σϞεΫϦϓτ

    View Slide

  36. ࡶͳίϝϯτΛ࢒ͭͭ͠΋
    ࣸܦͰ͖ͨ

    View Slide

  37. ࣮ߦͨ݁͠Ռ

    View Slide

  38. ࣮ߦͨ݁͠Ռ

    View Slide

  39. ʢͱΓ͋͑ͣ͸ʣ
    ͓k

    View Slide

  40. ͜ͷޙɺࣗ෼Ͱֶशͤͨ͞Γɺ
    FineTuningͱ͔֎Εσʔλͷ
    ߟ࡯ͱ͔΍ͬͯΈ͔͚ͨͬͨͲ
    ཧղ͕ؒʹ߹Θͳ͔ͬͨͷͰ
    Tensorflowͷ࣮૷ͷ࿩Λ͠·͢

    View Slide

  41. ࣮૷ͷ࿩

    View Slide

  42. • ௚ײతʹɺKerasΈ͍ͨʹॻ͚Δ
    • tf.contrib.keras͸ɾɾɾʁ
    • tf.contrib͸tensorflowνʔϜ͸αϙʔτ͠
    ͍ͯͳ͍͚Ͳɺςετऴ͍͑ͯͣΕ͸Ϛʔδ
    ͍ͨ͠ΑͶతͳύοέʔδΒ͍͠
    ࣮૷ͷ࿩ tf.contrib.slim

    View Slide

  43. ࣮૷ͷ࿩ tf.contrib.slim
    with slim.arg_scope([slim.max_pool2d], padding=‘SAME’):
    # Layer01
    h_conv1 = slim.conv2d(x_image, 32, [5, 5])
    h_pool1 = slim.max_pool2d(h_conv1, [2, 2])
    # Layer02
    h_conv2 = slim.conv2d(h_pool1, 64, [5, 5])
    h_pool2 = slim.max_pool2d(h_conv2, [2, 2])
    # Layer03
    h_pool2_flat = slim.flatten(h_pool2)
    h_fc1 = slim.fully_connected(h_pool2_flat, 1024)

    View Slide

  44. • with۟ͰϒϩοΫΛ࡞ΓɺϒϩοΫ಺ͷؔ਺
    ͷσϑΥϧτҾ਺Λ·ͱΊͯఆٛͰ͖Δ
    • ͨͩͨͩศར
    ࣮૷ͷ࿩ slim.arg_scope()

    View Slide

  45. ࣮૷ͷ࿩ slim.arg_scope()
    h_conv1 = slim.conv2d(x_image, 32, [5, 5], activation_fn=tf.nn.relu,
    weights_initializer=tf.truncated_normal_initializer(stddev=0.1),
    biases_initializer=tf.constant_initializer(0.1))
    with slim.arg_scope([slim.conv2d], activation_fn=tf.nn.relu,
    weight_initializer=tf.truncated_normal_initializer(stddev=0.1),
    biases_initializer=tf.constant_initializer(0.1):
    h_conv1 = slim.conv2d(x_image, 32, [5, 5])

    View Slide

  46. • ఆֶٛͨ͠शάϥϑΛඳըͯ͘͠ΕͨΓɺॏ
    ΈΛάϥϑԽͨ͠ΓͱԿ͔ͱศརͳ΍ͭ
    Tensorboard

    View Slide

  47. Tensorboard ࢖͏ͨΊͷ࣮૷
    (ఆٛͨ͠άϥϑඳըͷΈ)
    with tf.Session() as sess:
    # tensorboard
    file_writer = tf.summary.FileWriter('./logs/', sess.graph)

    View Slide

  48. Tensorboard

    View Slide

  49. ஫ҙ͍ͨ͜͠ͱ
    with tf.variable_scope(‘darknet-53'):
    route_1, route_2, inputs = darknet53(inputs)
    with tf.variable_scope('yolo-v3'):
    with tf.variable_scope('detect_1'):
    route, inputs = _yolo_block(inputs, 512)
    • ఆ͚ٛͨͩ͠Ͱ͸

    άϥϑ͸ݟͮΒ͍
    • είʔϓΛ

    ༻ҙ͠·͠ΐ͏
    είʔϓແ
    είʔϓ༗

    View Slide

  50. ཧղ͢ΔͨΊʹࢼߦͨ͠࿩

    View Slide

  51. • ίʔυΛཧղ͠Α͏ͱͨ͠ͱ͖ɺೖྗͱग़ྗ
    ΍Βɺม਺ͷத਎Λ֬ೝ͠ͳ͕Β΍Γ·ͤΜ
    ͔ʁ
    • ๻͸΍Γ·͢
    • ͱ͍͏͜ͱͰɺ࠷ڧͷprintσόοάΛࢼͦ͏
    ͱ͠·ͨ͠
    Tensorflowͷσόοά

    View Slide

  52. • ʗ(^o^)ʘ
    • Tensorflow͸άϥϑΛߏ੒ͨ͋͠ͱʹσʔλ
    Λྲྀͯ͠ॲཧ͢ΔͷͰɺఆ͍ٛͯ͠Δͱ͜Ζ
    Λεςοϓͯ͠printͯ͠΋Θ͔Βͳ͍
    ࠷ڧͷprintσόοά
    Tensor("xxx:0", shape=TensorShape([Dimension(1), Dimension(1)]), dtype=float32)

    View Slide

  53. tf.print
    • ೖྗ͞ΕͨTensorͷ݁ՌΛɺ

    stdout΍ΒɺϩάϨϕϧͰग़ྗͯ͘͠ΕΔ
    • ਆ
    • ͪͳΈʹ΍΍͍͚͜͠Ͳɺtf.Print͸Ҿ਺΋ҧ͏͠ඇਪ঑Ͱ͢
    • ͔͠͠ɺSessionฦ͞ͳ͍ͱ͍͚ͳ͍ͷͰɺϞσϧΛఆٛ͢Δͱ͜Ζʹ૊ΈࠐΉ࡞ۀ
    ʹϋϚͬͨ
    • ·ͨɺTensorflowͰఆٛͨ͠ม਺ͷத਎͸ݟΕ͕ͨɺ࣍ݩΛ֬ೝ͢ΔͨΊʹtf.shape
    ͱ͔ڬΉͱ݁Ռ͕ฦͬͯ͜ͳ͘ͳΔɻͳͥ
    • ʢ͕࣌ؒͳ͍ͷͰʣఘΊͨ
    tensor = tf.range(10)
    print_op = tf.print(tensor)

    View Slide

  54. tfdebug
    • Tensorflow༻ͷPythonͷpdbΈ͍ͨͳ΍ͭ
    • https://www.tensorflow.org/guide/debugger
    • λʔϛφϧͰṖͷςΫϊϩδʔUI
    • ࢖͍΍͍͢ʢ࢖͍ͮΒ͍ʣ
    • ݟํ͕Θ͔Βͳ͍ͷͰΠϥΠϥͭͭ͠΋υΩϡϝϯτ

    ಡΈͳ͕Β֬ೝதʢ࿝֐ʣ
    • vimϥΠΫ͡Όͳ͍ͱݏ

    View Slide

  55. ࡶʢͳʣ
    ײʢ૝ʣ

    View Slide

  56. ࡶײ
    • Θ͔ΒΜͱ͜Ζ͕Θ͔ͬͨ
    • ͍͍࿩ͩͧʂʢܾͯ͠ෛ͚੯͠ΈͰ͸ͳ͍ʣ
    • ࿦จಡ΋͏
    • Tensorflow΋਺ֶ΋ɺ΋ͬͱ͕Μ͹Γ·͠ΐ͏

    View Slide

  57. View Slide