[PYTHON] [Forefront of Object Recognition 2020] Ein Protokoll von der Installation von Pytorch unter Windows 10 bis zur Ausführung von CornerNet-Lite.

Wenn Sie es bemerken, wurde es zum ersten Mal seit über einem Jahr aktualisiert ... (^^ ;;;

In letzter Zeit habe ich Python oder OpenCV nicht berührt, da ich nur Java und professionelle Programmierung verwende. Ich habe also nicht die neuesten Trends in der Objekterkennung und Objekterkennung verfolgt, aber seit letztem Jahr ist CornerNet-Lite ein heißes Thema, und es scheint, dass CornerNet-Squeeze schneller als yolo v3 ist. Daher werde ich eine Umgebung erstellen und mit Max-kun durch Objekterkennung experimentieren. .. Einzelheiten zu Trends finden Sie weiter unten.

https://opencv.org/latest-trends-in-object-detection-from-cornernet-to-centernet-explained-part-ii-cornernet-lite/

Unter ↓ finden Sie einen leicht verständlichen Artikel auf Japanisch über den Mechanismus von CornerNet. https://engineer.dena.jp/2019/07/cv-papers-19-keypoint-object-detection.html Kurz gesagt, CornerNet scheint ein Mechanismus zu sein, der eine Wärmekarte erstellt, die Ecken eines Rechtecks schätzt und Objekte erkennt und erkennt.

Wie unten gezeigt, wäre es besser, wenn es in der Anaconda-Umgebung erstellt würde, aber die pip3-Umgebung wurde bereits erstellt und es besteht Konkurrenz mit Anaconda ([conda und pip: Gefahr des Mischens](http: // onoz000.). hatenablog.com/entry/2018/02/11/142347)) Es ist ärgerlich, also habe ich es ohne Anaconda gebaut, also werde ich ein Protokoll darüber führen.

https://github.com/princeton-vl/CornerNet-Lite

Installieren Sie die Pytorch

Greifen Sie auf die unten stehende URL zu und klicken Sie entsprechend Ihrer Umgebung, um den Befehl anzuzeigen. https://pytorch.org/

QUICK START LOCALLY Dieser Teil!

Meine Umgebung ist Windows und der Paketmanager ist pip, Python 3.7.4, cuda10.1.

C:\>pip3 install torch===1.4.0 torchvision===0.5.0 -f https://download.pytorch.org/whl/torch_stable.html
Looking in links: https://download.pytorch.org/whl/torch_stable.html
Collecting torch===1.4.0
  Downloading https://download.pytorch.org/whl/cu101/torch-1.4.0-cp37-cp37m-win_amd64.whl (796.8MB)
      |████████████████████████████████| 796.8MB 45kB/s
Collecting torchvision===0.5.0
  Using cached https://files.pythonhosted.org/packages/7d/3e/2b5ddf744226159dc90a52f0d044c0de7c5ca4f42d12a350a674ebb6fb2a/torchvision-0.5.0-cp37-cp37m-win_amd64.whl
Requirement already satisfied: six in c:\python\python37\lib\site-packages (from torchvision===0.5.0) (1.12.0)
Requirement already satisfied: pillow>=4.1.1 in c:\python\python37\lib\site-packages (from torchvision===0.5.0) (6.1.0)
Requirement already satisfied: numpy in c:\python\python37\lib\site-packages (from torchvision===0.5.0) (1.17.2)
Installing collected packages: torch, torchvision
  Found existing installation: torch 1.0.1
    Uninstalling torch-1.0.1:
      Successfully uninstalled torch-1.0.1
  Found existing installation: torchvision 0.4.0
    Uninstalling torchvision-0.4.0:
      Successfully uninstalled torchvision-0.4.0
Successfully installed torch-1.4.0 torchvision-0.5.0

C:\>

Wenn Erfolgreich angezeigt wird, sind Sie fertig.

Erhalten der Pytorch-Version von CornerNet-Lite

Holen Sie sich die Pytorch-Version von CornerNet-Lite aus dem Folgenden und führen Sie sie aus.

https://github.com/princeton-vl/CornerNet-Lite.git

C:\>cd github
C:\github>git clone https://github.com/princeton-vl/CornerNet-Lite.git
Cloning into 'CornerNet-Lite'...
remote: Enumerating objects: 75, done.
remote: Total 75 (delta 0), reused 0 (delta 0), pack-reused 75
Unpacking objects: 100% (75/75), done.

Führen Sie make aus, aber nehmen Sie an, dass die mingw-Umgebung erstellt wurde.

C:\github\CornerNet-Lite\core\external>mingw32-make
python setup.py build_ext --inplace
Traceback (most recent call last):
  File "setup.py", line 4, in <module>
    from Cython.Build import cythonize
ModuleNotFoundError: No module named 'Cython'
Makefile:2: recipe for target 'all' failed
mingw32-make: *** [all] Error 1

Es wird kein Modul mit dem Namen "Python" angezeigt. Installieren Sie Cython daher mit pip. Abhängig von der vorgefertigten Umgebung wird möglicherweise kein Modul für andere Module benannt. Beurteilen Sie in diesem Fall die angezeigte Fehlermeldung und installieren Sie das Modul.

Was ist Cython?

Ein Paket zur Beschleunigung von Python. Siehe ↓ https://qiita.com/pashango2/items/45cb85390193d97523ca

C:\>pip3 install cython
Collecting cython
  Downloading https://files.pythonhosted.org/packages/1f/be/b14be5c3ad1ff73096b518be1538282f053ec34faaca60a8753d975d7e93/Cython-0.29.14-cp37-cp37m-win_amd64.whl (1.7MB)
      |████████████████████████████████| 1.7MB 6.4MB/s
Installing collected packages: cython
Successfully installed cython-0.29.14

C:\>

nimm das Herz ...

C:\github\CornerNet-Lite\core\external>mingw32-make
python setup.py build_ext --inplace
Compiling bbox.pyx because it changed.
Compiling nms.pyx because it changed.
[1/2] Cythonizing bbox.pyx
C:\Python\Python37\lib\site-packages\Cython\Compiler\Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: C:\github\CornerNet-Lite\core\external\bbox.pyx
  tree = Parsing.p_module(s, pxd, full_module_name)
[2/2] Cythonizing nms.pyx
C:\Python\Python37\lib\site-packages\Cython\Compiler\Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: C:\github\CornerNet-Lite\core\external\nms.pyx
  tree = Parsing.p_module(s, pxd, full_module_name)
running build_ext
building 'bbox' extension
creating build
creating build\temp.win-amd64-3.7
creating build\temp.win-amd64-3.7\Release
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Python\Python37\lib\site-packages\numpy\core\include -IC:\Python\Python37\include -IC:\Python\Python37\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.14.26428\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\cppwinrt" "-IC:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\shared" -IC:\opencv3.4.0\sources\include\opencv2 -IC:\opencv3.4.0\sources\include -IC:\opencv3.4.0\build\include\opencv2 -IC:\opencv3.4.0\build\include -IC:\opencv\build\include /Tcbbox.c /Fobuild\temp.win-amd64-3.7\Release\bbox.obj -Wno-cpp -Wno-unused-function
 cl: Befehlszeilenfehler D8021: Das numerische Argument '/ Wno-cpp' ist ungültig.
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.14.26428\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2
Makefile:2: recipe for target 'all' failed
mingw32-make: *** [all] Error 1

C:\github\CornerNet-Lite\core\external>

Ich bekomme immer noch einen Fehler. Das numerische Argument '/ Wno-cpp' ist ungültig. Mir wurde gesagt Derzeit in C: \ github \ CornerNet-Lite \ core \ external \ setup.py

extra_compile_args=['-Wno-cpp', '-Wno-unused-function']

Sie brauchen es nicht, weil die Kompilierungsoption ungültig ist, oder? Deshalb

extra_compile_args=[]

Ich habe das Argument verloren und erneut ausgeführt.

C:\github\CornerNet-Lite\core\external>mingw32-make

~~~~
 Unterwegs weggelassen
~~~~
md64.lib
 Erstellen der Bibliothek build \ temp.win-amd64-3.7 \ Release \ nms.cp37-win_amd64.lib und des Objektbaus \ temp.win-amd64-3.7 \ Release \ nms.cp37-win_amd64.exp
 Ich generiere Code.
 Die Codegenerierung ist abgeschlossen.
rm -rf build

Die Generation passt gut dazu.

Modelldatei abrufen

Die Trainingsdaten sind MS COCO. https://github.com/princeton-vl/CornerNet-Lite#training-and-evaluation

Wie in Dokumentation gezeigt, werden die drei erstellten Modelldateien erfasst und abgelegt.

CornerNet-Saccade CornerNet-Saccade model CornerNet_Saccade_500000.pkl(447M) https://drive.google.com/file/d/1MQDyPRI0HgDHxHToudHqQ-2m8TVBciaa/view?usp=sharing Laden Sie es herunter und platzieren Sie es unten.

C:\github\CornerNet-Lite\cache\nnet\CornerNet_Saccade\

CornerNet-Squeeze CornerNet-Squeeze model CornerNet_Squeeze_500000.pkl(122M) https://drive.google.com/file/d/1qM8BBYCLUBcZx_UmLT0qMXNTh-Yshp4X/view?usp=sharing Laden Sie es herunter und platzieren Sie es unten.

C:\github\CornerNet-Lite\cache\nnet\CornerNet_Squeeze\

CornerNet CornerNet model CornerNet_500000.pkl(768M) https://drive.google.com/file/d/1e8At_iZWyXQgLlMwHkB83kN-AN85Uff1/view?usp=sharing Laden Sie es herunter und platzieren Sie es unten.

C:\github\CornerNet-Lite\cache\nnet\CornerNet\

Führen Sie die Demo aus

Führen Sie den folgenden Befehl aus.

C:\github\CornerNet-Lite>python demo.py
Traceback (most recent call last):
  File "demo.py", line 7, in <module>
    detector = CornerNet_Saccade()
  File "C:\github\CornerNet-Lite\core\detectors.py", line 38, in __init__
    from .test.cornernet_saccade import cornernet_saccade_inference
  File "C:\github\CornerNet-Lite\core\test\__init__.py", line 1, in <module>
    from .cornernet import cornernet
  File "C:\github\CornerNet-Lite\core\test\cornernet.py", line 7, in <module>
    from tqdm import tqdm
ModuleNotFoundError: No module named 'tqdm'

C:\github\CornerNet-Lite>

ModuleNotFoundError: Kein Modul mit dem Namen'tqdm ', installieren Sie also tqdm mit pip.

C:\>pip3 install tqdm
Collecting tqdm
  Downloading https://files.pythonhosted.org/packages/72/c9/7fc20feac72e79032a7c8138fd0d395dc6d8812b5b9edf53c3afd0b31017/tqdm-4.41.1-py2.py3-none-any.whl (56kB)
      |████████████████████████████████| 61kB 4.1MB/s
Installing collected packages: tqdm
Successfully installed tqdm-4.41.1

C:\>

Versuchen Sie es erneut.

C:\github\CornerNet-Lite>python demo.py
total parameters: 116969339
loading from C:\github\CornerNet-Lite\core\..\cache\nnet\CornerNet_Saccade\CornerNet_Saccade_500000.pkl
C:\Python\Python37\lib\site-packages\torch\nn\functional.py:2506: UserWarning: Default upsampling behavior when mode=bilinear is changed to align_corners=False since 0.4.0. Please specify align_corners=True if the old behavior is desired. See the documentation of nn.Upsample for details.
  "See the documentation of nn.Upsample for details.".format(mode))

Die folgenden Dateien werden in C erstellt: \ github \ CornerNet-Lite.

demo_out.jpg demo_out.jpg So erkennt Borzoi es richtig als Hund und SUP erkennt auch Surfbretter und Menschen (Öler).

Blick auf das Protokoll

loading from C:\github\CornerNet-Lite\core\..\cache\nnet\CornerNet_Saccade\CornerNet_Saccade_500000.pkl

Es ist geworden. Ich verwende CornerNet-Saccade und es ist nicht CornerNet-Squeeze, über das schneller gesprochen wird als über yolo v3, also werde ich demo.py ändern.

!/usr/bin/env python

import cv2
from core.detectors import CornerNet_Squeeze
from core.vis_utils import draw_bboxes

detector = CornerNet_Squeeze()

 image    = cv2.imread("demo.jpg ")
image    = cv2.imread("max_kun.jpg ")

bboxes = detector(image)
image  = draw_bboxes(image, bboxes)
cv2.imwrite("demo_out_max_kun.jpg ", image)

Dann führen Sie es aus.

C:\github\CornerNet-Lite>python demo2.py
total parameters: 31771852
loading from C:\github\CornerNet-Lite\core\..\cache\nnet\CornerNet_Squeeze\CornerNet_Squeeze_500000.pkl

C:\github\CornerNet-Lite>

Das Ergebnis sieht so aus. demo_out2.jpg Umu. Das Objekt konnte nicht erkannt werden, bevor das Objekt erkannt wurde. Außerdem erkennt er Keira als Vogel. Ist die Genauigkeit nicht gut? ?? ??

AP (durchschnittliche Präzision)

Betrachtet man den AP der COCO-Daten in Dokumentation, Ist es höher als yolo v3? compare-2.png

YOLOv3 33,0% bei 39 ms CornerNet-Squeeze beträgt 34,4% in 30 ms CornerNet-Saccade beträgt 43,2% bei 190 ms

Die Genauigkeit wird immer höher.

f4.png

Das Bild, wenn es von yolo v3 erkannt wird, ist wie folgt. yolov3_max_kun.png

Lesen Sie hier den Artikel zum Ausführen von yolo v3 mit pytorch ↓. https://qiita.com/goodboy_max/items/b75bb9eea52831fcdf15

Kann CornerNet-Squeeze keine Bilder erkennen und anwenden, die sich von den COCO-Daten unterscheiden? Weil das Bild rau war? Oder haben Sie die Kompilierungsoption gewählt? ?? ??

Das Geheimnis vertieft sich nur ...

Referenzinformationen

https://opencv.org/latest-trends-in-object-detection-from-cornernet-to-centernet-explained-part-ii-cornernet-lite/ https://engineer.dena.jp/2019/07/cv-papers-19-keypoint-object-detection.html https://qiita.com/sounansu/items/9a6caf1ac5e78aefaeae https://qiita.com/pashango2/items/45cb85390193d97523ca

Recommended Posts

[Forefront of Object Recognition 2020] Ein Protokoll von der Installation von Pytorch unter Windows 10 bis zur Ausführung von CornerNet-Lite.
Alles vom Erstellen einer Python-Umgebung bis zur Ausführung unter Windows
Ändern Sie den Objektschlüssel in S3 vom normalen Datumsformat in das Hive-Format
Schritte zum Erstellen von PyTorch 1.5 für CUDA 10.2 unter Windows
Hinweise zur Installation von Chainer 1.5 für GPU unter Windows
Ausführung von MINST in TensorFlow 2.0 und Visualisierung in TensorBoard (Version 2019)
Wie man die Anzahl der GPUs aus Python kennt ~ Hinweise zur Verwendung von Multiprocessing mit pytorch ~
Immerhin die Geschichte der Rückkehr von Linux zu Windows
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern