First Commit
Signed-off-by: Giancarlo Panichi <giancarlo.panichi@isti.cnr.it>
This commit is contained in:
commit
49d36d3732
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>simpleimageclassifier</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.python.pydev.PyDevBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.python.pydev.pythonNature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<?eclipse-pydev version="1.0"?><pydev_project>
|
||||||
|
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
|
||||||
|
<path>/${PROJECT_DIR_NAME}</path>
|
||||||
|
</pydev_pathproperty>
|
||||||
|
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
|
||||||
|
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
|
||||||
|
</pydev_project>
|
|
@ -0,0 +1,4 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
encoding//src/simpleimageclassifier/simpleimageclassifier.py=utf-8
|
||||||
|
encoding/<project>=UTF-8
|
||||||
|
encoding/setup.py=utf-8
|
|
@ -0,0 +1,37 @@
|
||||||
|
# Base
|
||||||
|
FROM ubuntu:20.04
|
||||||
|
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get upgrade -y
|
||||||
|
RUN apt-get install -y python3 python3-pip wget
|
||||||
|
|
||||||
|
|
||||||
|
# Istall deps
|
||||||
|
COPY ./requirements.txt /
|
||||||
|
RUN pip3 install -r requirements.txt
|
||||||
|
|
||||||
|
RUN pip3 install torch==1.10.1+cpu torchvision==0.11.2+cpu torchaudio==0.10.1+cpu -f https://download.pytorch.org/whl/cpu/torch_stable.html
|
||||||
|
RUN pip3 install detectron2 -f \
|
||||||
|
https://dl.fbaipublicfiles.com/detectron2/wheels/cpu/torch1.10/index.html
|
||||||
|
|
||||||
|
# Install dist package sortapp
|
||||||
|
COPY ./dist/simpleimageclassifier-1.0.0.tar.gz /
|
||||||
|
|
||||||
|
RUN pip3 install simpleimageclassifier-1.0.0.tar.gz
|
||||||
|
|
||||||
|
COPY canegatto.jpg /
|
||||||
|
#
|
||||||
|
#RUN rm sortapp-1.0.0.tar.gz
|
||||||
|
#RUN rm requirements.txt
|
||||||
|
#RUN rm -r /root/.cache
|
||||||
|
|
||||||
|
### Alternative ###
|
||||||
|
# Create a working directory and Bundle app source
|
||||||
|
# WORKDIR /simpleimageclassifier
|
||||||
|
# COPY src/simpleimageclassifier /simpleimageclassifier
|
||||||
|
|
||||||
|
# Copy all subfolder
|
||||||
|
#ADD . /
|
||||||
|
|
||||||
|
# Autorun
|
||||||
|
# CMD [ "python3", "./simpleimageclassifier.py" ]
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Acknowledgments
|
||||||
|
|
||||||
|
The projects leading to this software have received funding from a series of European Union programmes including:
|
||||||
|
|
||||||
|
- the Sixth Framework Programme for Research and Technological Development
|
||||||
|
- [DILIGENT](https://cordis.europa.eu/project/id/004260) (grant no. 004260).
|
||||||
|
- the Seventh Framework Programme for research, technological development and demonstration
|
||||||
|
- [D4Science](https://cordis.europa.eu/project/id/212488) (grant no. 212488);
|
||||||
|
- [D4Science-II](https://cordis.europa.eu/project/id/239019) (grant no.239019);
|
||||||
|
- [ENVRI](https://cordis.europa.eu/project/id/283465) (grant no. 283465);
|
||||||
|
- [iMarine](https://cordis.europa.eu/project/id/283644) (grant no. 283644);
|
||||||
|
- [EUBrazilOpenBio](https://cordis.europa.eu/project/id/288754) (grant no. 288754).
|
||||||
|
- the H2020 research and innovation programme
|
||||||
|
- [SoBigData](https://cordis.europa.eu/project/id/654024) (grant no. 654024);
|
||||||
|
- [PARTHENOS](https://cordis.europa.eu/project/id/654119) (grant no. 654119);
|
||||||
|
- [EGI-Engage](https://cordis.europa.eu/project/id/654142) (grant no. 654142);
|
||||||
|
- [ENVRI PLUS](https://cordis.europa.eu/project/id/654182) (grant no. 654182);
|
||||||
|
- [BlueBRIDGE](https://cordis.europa.eu/project/id/675680) (grant no. 675680);
|
||||||
|
- [PerformFISH](https://cordis.europa.eu/project/id/727610) (grant no. 727610);
|
||||||
|
- [AGINFRA PLUS](https://cordis.europa.eu/project/id/731001) (grant no. 731001);
|
||||||
|
- [DESIRA](https://cordis.europa.eu/project/id/818194) (grant no. 818194);
|
||||||
|
- [ARIADNEplus](https://cordis.europa.eu/project/id/823914) (grant no. 823914);
|
||||||
|
- [RISIS 2](https://cordis.europa.eu/project/id/824091) (grant no. 824091);
|
||||||
|
- [EOSC-Pillar](https://cordis.europa.eu/project/id/857650) (grant no. 857650);
|
||||||
|
- [Blue Cloud](https://cordis.europa.eu/project/id/862409) (grant no. 862409);
|
||||||
|
- [SoBigData-PlusPlus](https://cordis.europa.eu/project/id/871042) (grant no. 871042);
|
|
@ -0,0 +1,311 @@
|
||||||
|
# European Union Public Licence V. 1.1
|
||||||
|
|
||||||
|
|
||||||
|
EUPL © the European Community 2007
|
||||||
|
|
||||||
|
|
||||||
|
This European Union Public Licence (the “EUPL”) applies to the Work or Software
|
||||||
|
(as defined below) which is provided under the terms of this Licence. Any use of
|
||||||
|
the Work, other than as authorised under this Licence is prohibited (to the
|
||||||
|
extent such use is covered by a right of the copyright holder of the Work).
|
||||||
|
|
||||||
|
The Original Work is provided under the terms of this Licence when the Licensor
|
||||||
|
(as defined below) has placed the following notice immediately following the
|
||||||
|
copyright notice for the Original Work:
|
||||||
|
|
||||||
|
Licensed under the EUPL V.1.1
|
||||||
|
|
||||||
|
or has expressed by any other mean his willingness to license under the EUPL.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 1. Definitions
|
||||||
|
|
||||||
|
In this Licence, the following terms have the following meaning:
|
||||||
|
|
||||||
|
- The Licence: this Licence.
|
||||||
|
|
||||||
|
- The Original Work or the Software: the software distributed and/or
|
||||||
|
communicated by the Licensor under this Licence, available as Source Code and
|
||||||
|
also as Executable Code as the case may be.
|
||||||
|
|
||||||
|
- Derivative Works: the works or software that could be created by the Licensee,
|
||||||
|
based upon the Original Work or modifications thereof. This Licence does not
|
||||||
|
define the extent of modification or dependence on the Original Work required
|
||||||
|
in order to classify a work as a Derivative Work; this extent is determined by
|
||||||
|
copyright law applicable in the country mentioned in Article 15.
|
||||||
|
|
||||||
|
- The Work: the Original Work and/or its Derivative Works.
|
||||||
|
|
||||||
|
- The Source Code: the human-readable form of the Work which is the most
|
||||||
|
convenient for people to study and modify.
|
||||||
|
|
||||||
|
- The Executable Code: any code which has generally been compiled and which is
|
||||||
|
meant to be interpreted by a computer as a program.
|
||||||
|
|
||||||
|
- The Licensor: the natural or legal person that distributes and/or communicates
|
||||||
|
the Work under the Licence.
|
||||||
|
|
||||||
|
- Contributor(s): any natural or legal person who modifies the Work under the
|
||||||
|
Licence, or otherwise contributes to the creation of a Derivative Work.
|
||||||
|
|
||||||
|
- The Licensee or “You”: any natural or legal person who makes any usage of the
|
||||||
|
Software under the terms of the Licence.
|
||||||
|
|
||||||
|
- Distribution and/or Communication: any act of selling, giving, lending,
|
||||||
|
renting, distributing, communicating, transmitting, or otherwise making
|
||||||
|
available, on-line or off-line, copies of the Work or providing access to its
|
||||||
|
essential functionalities at the disposal of any other natural or legal
|
||||||
|
person.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 2. Scope of the rights granted by the Licence
|
||||||
|
|
||||||
|
The Licensor hereby grants You a world-wide, royalty-free, non-exclusive,
|
||||||
|
sub-licensable licence to do the following, for the duration of copyright vested
|
||||||
|
in the Original Work:
|
||||||
|
|
||||||
|
- use the Work in any circumstance and for all usage, reproduce the Work, modify
|
||||||
|
- the Original Work, and make Derivative Works based upon the Work, communicate
|
||||||
|
- to the public, including the right to make available or display the Work or
|
||||||
|
- copies thereof to the public and perform publicly, as the case may be, the
|
||||||
|
- Work, distribute the Work or copies thereof, lend and rent the Work or copies
|
||||||
|
- thereof, sub-license rights in the Work or copies thereof.
|
||||||
|
|
||||||
|
Those rights can be exercised on any media, supports and formats, whether now
|
||||||
|
known or later invented, as far as the applicable law permits so.
|
||||||
|
|
||||||
|
In the countries where moral rights apply, the Licensor waives his right to
|
||||||
|
exercise his moral right to the extent allowed by law in order to make effective
|
||||||
|
the licence of the economic rights here above listed.
|
||||||
|
|
||||||
|
The Licensor grants to the Licensee royalty-free, non exclusive usage rights to
|
||||||
|
any patents held by the Licensor, to the extent necessary to make use of the
|
||||||
|
rights granted on the Work under this Licence.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 3. Communication of the Source Code
|
||||||
|
|
||||||
|
The Licensor may provide the Work either in its Source Code form, or as
|
||||||
|
Executable Code. If the Work is provided as Executable Code, the Licensor
|
||||||
|
provides in addition a machine-readable copy of the Source Code of the Work
|
||||||
|
along with each copy of the Work that the Licensor distributes or indicates, in
|
||||||
|
a notice following the copyright notice attached to the Work, a repository where
|
||||||
|
the Source Code is easily and freely accessible for as long as the Licensor
|
||||||
|
continues to distribute and/or communicate the Work.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 4. Limitations on copyright
|
||||||
|
|
||||||
|
Nothing in this Licence is intended to deprive the Licensee of the benefits from
|
||||||
|
any exception or limitation to the exclusive rights of the rights owners in the
|
||||||
|
Original Work or Software, of the exhaustion of those rights or of other
|
||||||
|
applicable limitations thereto.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 5. Obligations of the Licensee
|
||||||
|
|
||||||
|
The grant of the rights mentioned above is subject to some restrictions and
|
||||||
|
obligations imposed on the Licensee. Those obligations are the following:
|
||||||
|
|
||||||
|
Attribution right: the Licensee shall keep intact all copyright, patent or
|
||||||
|
trademarks notices and all notices that refer to the Licence and to the
|
||||||
|
disclaimer of warranties. The Licensee must include a copy of such notices and a
|
||||||
|
copy of the Licence with every copy of the Work he/she distributes and/or
|
||||||
|
communicates. The Licensee must cause any Derivative Work to carry prominent
|
||||||
|
notices stating that the Work has been modified and the date of modification.
|
||||||
|
|
||||||
|
Copyleft clause: If the Licensee distributes and/or communicates copies of the
|
||||||
|
Original Works or Derivative Works based upon the Original Work, this
|
||||||
|
Distribution and/or Communication will be done under the terms of this Licence
|
||||||
|
or of a later version of this Licence unless the Original Work is expressly
|
||||||
|
distributed only under this version of the Licence. The Licensee (becoming
|
||||||
|
Licensor) cannot offer or impose any additional terms or conditions on the Work
|
||||||
|
or Derivative Work that alter or restrict the terms of the Licence.
|
||||||
|
|
||||||
|
Compatibility clause: If the Licensee Distributes and/or Communicates Derivative
|
||||||
|
Works or copies thereof based upon both the Original Work and another work
|
||||||
|
licensed under a Compatible Licence, this Distribution and/or Communication can
|
||||||
|
be done under the terms of this Compatible Licence. For the sake of this clause,
|
||||||
|
“Compatible Licence” refers to the licences listed in the appendix attached to
|
||||||
|
this Licence. Should the Licensee’s obligations under the Compatible Licence
|
||||||
|
conflict with his/her obligations under this Licence, the obligations of the
|
||||||
|
Compatible Licence shall prevail.
|
||||||
|
|
||||||
|
Provision of Source Code: When distributing and/or communicating copies of the
|
||||||
|
Work, the Licensee will provide a machine-readable copy of the Source Code or
|
||||||
|
indicate a repository where this Source will be easily and freely available for
|
||||||
|
as long as the Licensee continues to distribute and/or communicate the Work.
|
||||||
|
|
||||||
|
Legal Protection: This Licence does not grant permission to use the trade names,
|
||||||
|
trademarks, service marks, or names of the Licensor, except as required for
|
||||||
|
reasonable and customary use in describing the origin of the Work and
|
||||||
|
reproducing the content of the copyright notice.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 6. Chain of Authorship
|
||||||
|
|
||||||
|
The original Licensor warrants that the copyright in the Original Work granted
|
||||||
|
hereunder is owned by him/her or licensed to him/her and that he/she has the
|
||||||
|
power and authority to grant the Licence.
|
||||||
|
|
||||||
|
Each Contributor warrants that the copyright in the modifications he/she brings
|
||||||
|
to the Work are owned by him/her or licensed to him/her and that he/she has the
|
||||||
|
power and authority to grant the Licence.
|
||||||
|
|
||||||
|
Each time You accept the Licence, the original Licensor and subsequent
|
||||||
|
Contributors grant You a licence to their contributions to the Work, under the
|
||||||
|
terms of this Licence.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 7. Disclaimer of Warranty
|
||||||
|
|
||||||
|
The Work is a work in progress, which is continuously improved by numerous
|
||||||
|
contributors. It is not a finished work and may therefore contain defects or
|
||||||
|
“bugs” inherent to this type of software development.
|
||||||
|
|
||||||
|
For the above reason, the Work is provided under the Licence on an “as is” basis
|
||||||
|
and without warranties of any kind concerning the Work, including without
|
||||||
|
limitation merchantability, fitness for a particular purpose, absence of defects
|
||||||
|
or errors, accuracy, non-infringement of intellectual property rights other than
|
||||||
|
copyright as stated in Article 6 of this Licence.
|
||||||
|
|
||||||
|
This disclaimer of warranty is an essential part of the Licence and a condition
|
||||||
|
for the grant of any rights to the Work.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 8. Disclaimer of Liability
|
||||||
|
|
||||||
|
Except in the cases of wilful misconduct or damages directly caused to natural
|
||||||
|
persons, the Licensor will in no event be liable for any direct or indirect,
|
||||||
|
material or moral, damages of any kind, arising out of the Licence or of the use
|
||||||
|
of the Work, including without limitation, damages for loss of goodwill, work
|
||||||
|
stoppage, computer failure or malfunction, loss of data or any commercial
|
||||||
|
damage, even if the Licensor has been advised of the possibility of such
|
||||||
|
damage. However, the Licensor will be liable under statutory product liability
|
||||||
|
laws as far such laws apply to the Work.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 9. Additional agreements
|
||||||
|
|
||||||
|
While distributing the Original Work or Derivative Works, You may choose to
|
||||||
|
conclude an additional agreement to offer, and charge a fee for, acceptance of
|
||||||
|
support, warranty, indemnity, or other liability obligations and/or services
|
||||||
|
consistent with this Licence. However, in accepting such obligations, You may
|
||||||
|
act only on your own behalf and on your sole responsibility, not on behalf of
|
||||||
|
the original Licensor or any other Contributor, and only if You agree to
|
||||||
|
indemnify, defend, and hold each Contributor harmless for any liability incurred
|
||||||
|
by, or claims asserted against such Contributor by the fact You have accepted
|
||||||
|
any such warranty or additional liability.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 10. Acceptance of the Licence
|
||||||
|
|
||||||
|
The provisions of this Licence can be accepted by clicking on an icon “I agree”
|
||||||
|
placed under the bottom of a window displaying the text of this Licence or by
|
||||||
|
affirming consent in any other similar way, in accordance with the rules of
|
||||||
|
applicable law. Clicking on that icon indicates your clear and irrevocable
|
||||||
|
acceptance of this Licence and all of its terms and conditions.
|
||||||
|
|
||||||
|
Similarly, you irrevocably accept this Licence and all of its terms and
|
||||||
|
conditions by exercising any rights granted to You by Article 2 of this Licence,
|
||||||
|
such as the use of the Work, the creation by You of a Derivative Work or the
|
||||||
|
Distribution and/or Communication by You of the Work or copies thereof.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 11. Information to the public
|
||||||
|
|
||||||
|
In case of any Distribution and/or Communication of the Work by means of
|
||||||
|
electronic communication by You (for example, by offering to download the Work
|
||||||
|
from a remote location) the distribution channel or media (for example, a
|
||||||
|
website) must at least provide to the public the information requested by the
|
||||||
|
applicable law regarding the Licensor, the Licence and the way it may be
|
||||||
|
accessible, concluded, stored and reproduced by the Licensee.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 12. Termination of the Licence
|
||||||
|
|
||||||
|
The Licence and the rights granted hereunder will terminate automatically upon
|
||||||
|
any breach by the Licensee of the terms of the Licence.
|
||||||
|
|
||||||
|
Such a termination will not terminate the licences of any person who has
|
||||||
|
received the Work from the Licensee under the Licence, provided such persons
|
||||||
|
remain in full compliance with the Licence.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 13. Miscellaneous
|
||||||
|
|
||||||
|
Without prejudice of Article 9 above, the Licence represents the complete
|
||||||
|
agreement between the Parties as to the Work licensed hereunder.
|
||||||
|
|
||||||
|
If any provision of the Licence is invalid or unenforceable under applicable
|
||||||
|
law, this will not affect the validity or enforceability of the Licence as a
|
||||||
|
whole. Such provision will be construed and/or reformed so as necessary to make
|
||||||
|
it valid and enforceable.
|
||||||
|
|
||||||
|
The European Commission may publish other linguistic versions and/or new
|
||||||
|
versions of this Licence, so far this is required and reasonable, without
|
||||||
|
reducing the scope of the rights granted by the Licence. New versions of the
|
||||||
|
Licence will be published with a unique version number.
|
||||||
|
|
||||||
|
All linguistic versions of this Licence, approved by the European Commission,
|
||||||
|
have identical value. Parties can take advantage of the linguistic version of
|
||||||
|
their choice.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 14. Jurisdiction
|
||||||
|
|
||||||
|
Any litigation resulting from the interpretation of this License, arising
|
||||||
|
between the European Commission, as a Licensor, and any Licensee, will be
|
||||||
|
subject to the jurisdiction of the Court of Justice of the European Communities,
|
||||||
|
as laid down in article 238 of the Treaty establishing the European Community.
|
||||||
|
|
||||||
|
Any litigation arising between Parties, other than the European Commission, and
|
||||||
|
resulting from the interpretation of this License, will be subject to the
|
||||||
|
exclusive jurisdiction of the competent court where the Licensor resides or
|
||||||
|
conducts its primary business.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 15. Applicable Law
|
||||||
|
|
||||||
|
This Licence shall be governed by the law of the European Union country where
|
||||||
|
the Licensor resides or has his registered office.
|
||||||
|
|
||||||
|
This licence shall be governed by the Belgian law if:
|
||||||
|
|
||||||
|
- a litigation arises between the European Commission, as a Licensor, and any
|
||||||
|
- Licensee; the Licensor, other than the European Commission, has no residence
|
||||||
|
- or registered office inside a European Union country.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Appendix
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
“Compatible Licences” according to article 5 EUPL are:
|
||||||
|
|
||||||
|
|
||||||
|
- GNU General Public License (GNU GPL) v. 2
|
||||||
|
|
||||||
|
- Open Software License (OSL) v. 2.1, v. 3.0
|
||||||
|
|
||||||
|
- Common Public License v. 1.0
|
||||||
|
|
||||||
|
- Eclipse Public License v. 1.0
|
||||||
|
|
||||||
|
- Cecill v. 2.0
|
|
@ -0,0 +1,3 @@
|
||||||
|
include README.md
|
||||||
|
include LICENSE.md
|
||||||
|
recursive-include src/simpleimageclassifier/ *
|
|
@ -0,0 +1,96 @@
|
||||||
|
# SimpleImageClassifier
|
||||||
|
|
||||||
|
SimpleImageClassifier is a simple example that allows you to classify a image jpg in input.
|
||||||
|
This example is based on [Detectron2](https://gitub.com/facebookresearch/detectron2 ) that is a Facebook AI Research's.
|
||||||
|
Starting from this example, you can first create an installable package via pip3 and then a docker image in which it is installed the created package.
|
||||||
|
The package declares the simpleimageclassifier command as entrypoint.
|
||||||
|
So once the package is installed you can use this command at command line.
|
||||||
|
Also, you can run it as a module, for example:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ cd src
|
||||||
|
$ python3 -m simpleimageclassifier --config-file simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input ../canegatto.jpg --output canegatto_out.jpg --opts MODEL.DEVICE cpu MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
|
||||||
|
|
||||||
|
```
|
||||||
|
The image created in this way can be executed in a container with the following command using an jpg file placed in it:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run -i -t --rm --name simpleimageclassifier-cont simpleimageclassifier simpleimageclassifier --config-file /usr/local/lib/python3.8/dist-packages/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input <image.jpg> --output <image_out.jpg> --opts MODEL.DEVICE cpu MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
|
||||||
|
```
|
||||||
|
You can also run it directly from the container shell:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ docker run -i -t --rm --name simpleimageclassifier-cont simpleimageclassifier bash
|
||||||
|
|
||||||
|
root@7f371ac6f420:/# simpleimageclassifier --config-file /usr/local/lib/python3.8/dist-packages/detectron2/model_zoo/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input canegatto.jpg --output canegatto_out.jpg --opts MODEL.DEVICE cpu MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
|
||||||
|
|
||||||
|
```
|
||||||
|
Note the model set by --config-file can be take from detectron2 local lib in this case.
|
||||||
|
|
||||||
|
|
||||||
|
To be able to create an image from this application you need to have Docker and Docker-Compose installed on your machine and the relative python packages, see:
|
||||||
|
[Docker](https://docs.docker.com/engine/),
|
||||||
|
[Docker-Compose](https://docs.docker.com/compose/install/) and
|
||||||
|
[Docker Package for Python](https://pypi.org/project/docker/).
|
||||||
|
|
||||||
|
## Useful Commands
|
||||||
|
|
||||||
|
### Create Distribution Package
|
||||||
|
```
|
||||||
|
python3 setup.py sdist --formats=gztar
|
||||||
|
```
|
||||||
|
### Create Docker Image
|
||||||
|
```
|
||||||
|
docker build -t simpleimageclassifier .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Save Docker Image in file
|
||||||
|
```
|
||||||
|
docker save simpleimageclassifier | gzip > simpleimageclassifier.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
### Publish Docker Image on DockerHub
|
||||||
|
Re-tagging an existing local image:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker tag simpleimageclassifier <hub-user>/<repo-name>[:<tag>]
|
||||||
|
```
|
||||||
|
|
||||||
|
Login in DockerHub(use your Docker ID):
|
||||||
|
|
||||||
|
```
|
||||||
|
docker login
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you can push this repository to the registry designated by its name or tag:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker push <hub-user>/<repo-name>:<tag>
|
||||||
|
```
|
||||||
|
|
||||||
|
Then logout for security:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker logout
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Authors
|
||||||
|
|
||||||
|
* **Giancarlo Panichi** ([ORCID](http://orcid.org/0000-0001-8375-6644)) - [ISTI-CNR Infrascience Group](http://nemis.isti.cnr.it/groups/infrascience)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the EUPL V.1.1 License - see the [LICENSE.md](LICENSE.md) file for details.
|
||||||
|
|
||||||
|
|
||||||
|
## About the gCube Framework
|
||||||
|
This software is part of the [gCubeFramework](https://www.gcube-system.org/ "gCubeFramework"): an
|
||||||
|
open-source software toolkit used for building and operating Hybrid Data
|
||||||
|
Infrastructures enabling the dynamic deployment of Virtual Research Environments
|
||||||
|
by favouring the realisation of reuse oriented policies.
|
||||||
|
|
||||||
|
The projects leading to this software have received funding from a series of European Union programmes see [FUNDING.md](FUNDING.md)
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 43 KiB |
Binary file not shown.
|
@ -0,0 +1,9 @@
|
||||||
|
###### Requirements without Version Specifiers ######
|
||||||
|
requests
|
||||||
|
setuptools
|
||||||
|
matplotlib
|
||||||
|
opencv-python
|
||||||
|
opencv-python-headless
|
||||||
|
|
||||||
|
###### Requirements with Version Specifiers ######
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
python3
|
||||||
|
|
||||||
|
Token
|
||||||
|
xxxx-xxxx-xxxx-xxxx-xxxx
|
||||||
|
|
||||||
|
python3 simpleimageclassifier.py --config-file ./configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input canegatto.jpg --output canegatto_out.jpg --opts MODEL.DEVICE cpu MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
|
|
@ -0,0 +1,42 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# @author: Giancarlo Panichi
|
||||||
|
#
|
||||||
|
# Created on 2022/07/20
|
||||||
|
#
|
||||||
|
# find_packages
|
||||||
|
import setuptools
|
||||||
|
|
||||||
|
with open("README.md", "r") as freadme:
|
||||||
|
l_description = freadme.read()
|
||||||
|
|
||||||
|
with open("LICENSE.md", "r") as flicense:
|
||||||
|
license_description = flicense.read()
|
||||||
|
|
||||||
|
|
||||||
|
setuptools.setup(
|
||||||
|
name="simpleimageclassifier",
|
||||||
|
version="1.0.0",
|
||||||
|
author="Giancarlo Panichi",
|
||||||
|
author_email="giancarlo.panichi@isti.cnr.it",
|
||||||
|
description="A simple application to do image classification.",
|
||||||
|
long_description=l_description,
|
||||||
|
long_description_content_type="text/markdown",
|
||||||
|
license=license_description,
|
||||||
|
url="https://code-repo.d4science.org/gCubeSystem/simpleimageclassifier",
|
||||||
|
package_dir={"": "src"},
|
||||||
|
packages=setuptools.find_namespace_packages(where="src"),
|
||||||
|
package_data={"": ["*"]},
|
||||||
|
include_package_data=True,
|
||||||
|
entry_points={
|
||||||
|
"console_scripts": ["simpleimageclassifier=simpleimageclassifier.simpleimageclassifier:simpleimageclassifier"]
|
||||||
|
},
|
||||||
|
classifiers=[
|
||||||
|
"Programming Language :: Python :: 3",
|
||||||
|
"License :: European Union Public Licence :: 1.1",
|
||||||
|
"Operating System :: OS Independent",
|
||||||
|
],
|
||||||
|
platforms=["Linux"],
|
||||||
|
python_requires='>=3.8',
|
||||||
|
)
|
Binary file not shown.
After Width: | Height: | Size: 37 KiB |
|
@ -0,0 +1,414 @@
|
||||||
|
Metadata-Version: 2.1
|
||||||
|
Name: simpleimageclassifier
|
||||||
|
Version: 1.0.0
|
||||||
|
Summary: A simple application to do image classification.
|
||||||
|
Home-page: https://code-repo.d4science.org/gCubeSystem/simpleimageclassifier
|
||||||
|
Author: Giancarlo Panichi
|
||||||
|
Author-email: giancarlo.panichi@isti.cnr.it
|
||||||
|
License: # European Union Public Licence V. 1.1
|
||||||
|
|
||||||
|
|
||||||
|
EUPL © the European Community 2007
|
||||||
|
|
||||||
|
|
||||||
|
This European Union Public Licence (the “EUPL”) applies to the Work or Software
|
||||||
|
(as defined below) which is provided under the terms of this Licence. Any use of
|
||||||
|
the Work, other than as authorised under this Licence is prohibited (to the
|
||||||
|
extent such use is covered by a right of the copyright holder of the Work).
|
||||||
|
|
||||||
|
The Original Work is provided under the terms of this Licence when the Licensor
|
||||||
|
(as defined below) has placed the following notice immediately following the
|
||||||
|
copyright notice for the Original Work:
|
||||||
|
|
||||||
|
Licensed under the EUPL V.1.1
|
||||||
|
|
||||||
|
or has expressed by any other mean his willingness to license under the EUPL.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 1. Definitions
|
||||||
|
|
||||||
|
In this Licence, the following terms have the following meaning:
|
||||||
|
|
||||||
|
- The Licence: this Licence.
|
||||||
|
|
||||||
|
- The Original Work or the Software: the software distributed and/or
|
||||||
|
communicated by the Licensor under this Licence, available as Source Code and
|
||||||
|
also as Executable Code as the case may be.
|
||||||
|
|
||||||
|
- Derivative Works: the works or software that could be created by the Licensee,
|
||||||
|
based upon the Original Work or modifications thereof. This Licence does not
|
||||||
|
define the extent of modification or dependence on the Original Work required
|
||||||
|
in order to classify a work as a Derivative Work; this extent is determined by
|
||||||
|
copyright law applicable in the country mentioned in Article 15.
|
||||||
|
|
||||||
|
- The Work: the Original Work and/or its Derivative Works.
|
||||||
|
|
||||||
|
- The Source Code: the human-readable form of the Work which is the most
|
||||||
|
convenient for people to study and modify.
|
||||||
|
|
||||||
|
- The Executable Code: any code which has generally been compiled and which is
|
||||||
|
meant to be interpreted by a computer as a program.
|
||||||
|
|
||||||
|
- The Licensor: the natural or legal person that distributes and/or communicates
|
||||||
|
the Work under the Licence.
|
||||||
|
|
||||||
|
- Contributor(s): any natural or legal person who modifies the Work under the
|
||||||
|
Licence, or otherwise contributes to the creation of a Derivative Work.
|
||||||
|
|
||||||
|
- The Licensee or “You”: any natural or legal person who makes any usage of the
|
||||||
|
Software under the terms of the Licence.
|
||||||
|
|
||||||
|
- Distribution and/or Communication: any act of selling, giving, lending,
|
||||||
|
renting, distributing, communicating, transmitting, or otherwise making
|
||||||
|
available, on-line or off-line, copies of the Work or providing access to its
|
||||||
|
essential functionalities at the disposal of any other natural or legal
|
||||||
|
person.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 2. Scope of the rights granted by the Licence
|
||||||
|
|
||||||
|
The Licensor hereby grants You a world-wide, royalty-free, non-exclusive,
|
||||||
|
sub-licensable licence to do the following, for the duration of copyright vested
|
||||||
|
in the Original Work:
|
||||||
|
|
||||||
|
- use the Work in any circumstance and for all usage, reproduce the Work, modify
|
||||||
|
- the Original Work, and make Derivative Works based upon the Work, communicate
|
||||||
|
- to the public, including the right to make available or display the Work or
|
||||||
|
- copies thereof to the public and perform publicly, as the case may be, the
|
||||||
|
- Work, distribute the Work or copies thereof, lend and rent the Work or copies
|
||||||
|
- thereof, sub-license rights in the Work or copies thereof.
|
||||||
|
|
||||||
|
Those rights can be exercised on any media, supports and formats, whether now
|
||||||
|
known or later invented, as far as the applicable law permits so.
|
||||||
|
|
||||||
|
In the countries where moral rights apply, the Licensor waives his right to
|
||||||
|
exercise his moral right to the extent allowed by law in order to make effective
|
||||||
|
the licence of the economic rights here above listed.
|
||||||
|
|
||||||
|
The Licensor grants to the Licensee royalty-free, non exclusive usage rights to
|
||||||
|
any patents held by the Licensor, to the extent necessary to make use of the
|
||||||
|
rights granted on the Work under this Licence.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 3. Communication of the Source Code
|
||||||
|
|
||||||
|
The Licensor may provide the Work either in its Source Code form, or as
|
||||||
|
Executable Code. If the Work is provided as Executable Code, the Licensor
|
||||||
|
provides in addition a machine-readable copy of the Source Code of the Work
|
||||||
|
along with each copy of the Work that the Licensor distributes or indicates, in
|
||||||
|
a notice following the copyright notice attached to the Work, a repository where
|
||||||
|
the Source Code is easily and freely accessible for as long as the Licensor
|
||||||
|
continues to distribute and/or communicate the Work.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 4. Limitations on copyright
|
||||||
|
|
||||||
|
Nothing in this Licence is intended to deprive the Licensee of the benefits from
|
||||||
|
any exception or limitation to the exclusive rights of the rights owners in the
|
||||||
|
Original Work or Software, of the exhaustion of those rights or of other
|
||||||
|
applicable limitations thereto.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 5. Obligations of the Licensee
|
||||||
|
|
||||||
|
The grant of the rights mentioned above is subject to some restrictions and
|
||||||
|
obligations imposed on the Licensee. Those obligations are the following:
|
||||||
|
|
||||||
|
Attribution right: the Licensee shall keep intact all copyright, patent or
|
||||||
|
trademarks notices and all notices that refer to the Licence and to the
|
||||||
|
disclaimer of warranties. The Licensee must include a copy of such notices and a
|
||||||
|
copy of the Licence with every copy of the Work he/she distributes and/or
|
||||||
|
communicates. The Licensee must cause any Derivative Work to carry prominent
|
||||||
|
notices stating that the Work has been modified and the date of modification.
|
||||||
|
|
||||||
|
Copyleft clause: If the Licensee distributes and/or communicates copies of the
|
||||||
|
Original Works or Derivative Works based upon the Original Work, this
|
||||||
|
Distribution and/or Communication will be done under the terms of this Licence
|
||||||
|
or of a later version of this Licence unless the Original Work is expressly
|
||||||
|
distributed only under this version of the Licence. The Licensee (becoming
|
||||||
|
Licensor) cannot offer or impose any additional terms or conditions on the Work
|
||||||
|
or Derivative Work that alter or restrict the terms of the Licence.
|
||||||
|
|
||||||
|
Compatibility clause: If the Licensee Distributes and/or Communicates Derivative
|
||||||
|
Works or copies thereof based upon both the Original Work and another work
|
||||||
|
licensed under a Compatible Licence, this Distribution and/or Communication can
|
||||||
|
be done under the terms of this Compatible Licence. For the sake of this clause,
|
||||||
|
“Compatible Licence” refers to the licences listed in the appendix attached to
|
||||||
|
this Licence. Should the Licensee’s obligations under the Compatible Licence
|
||||||
|
conflict with his/her obligations under this Licence, the obligations of the
|
||||||
|
Compatible Licence shall prevail.
|
||||||
|
|
||||||
|
Provision of Source Code: When distributing and/or communicating copies of the
|
||||||
|
Work, the Licensee will provide a machine-readable copy of the Source Code or
|
||||||
|
indicate a repository where this Source will be easily and freely available for
|
||||||
|
as long as the Licensee continues to distribute and/or communicate the Work.
|
||||||
|
|
||||||
|
Legal Protection: This Licence does not grant permission to use the trade names,
|
||||||
|
trademarks, service marks, or names of the Licensor, except as required for
|
||||||
|
reasonable and customary use in describing the origin of the Work and
|
||||||
|
reproducing the content of the copyright notice.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 6. Chain of Authorship
|
||||||
|
|
||||||
|
The original Licensor warrants that the copyright in the Original Work granted
|
||||||
|
hereunder is owned by him/her or licensed to him/her and that he/she has the
|
||||||
|
power and authority to grant the Licence.
|
||||||
|
|
||||||
|
Each Contributor warrants that the copyright in the modifications he/she brings
|
||||||
|
to the Work are owned by him/her or licensed to him/her and that he/she has the
|
||||||
|
power and authority to grant the Licence.
|
||||||
|
|
||||||
|
Each time You accept the Licence, the original Licensor and subsequent
|
||||||
|
Contributors grant You a licence to their contributions to the Work, under the
|
||||||
|
terms of this Licence.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 7. Disclaimer of Warranty
|
||||||
|
|
||||||
|
The Work is a work in progress, which is continuously improved by numerous
|
||||||
|
contributors. It is not a finished work and may therefore contain defects or
|
||||||
|
“bugs” inherent to this type of software development.
|
||||||
|
|
||||||
|
For the above reason, the Work is provided under the Licence on an “as is” basis
|
||||||
|
and without warranties of any kind concerning the Work, including without
|
||||||
|
limitation merchantability, fitness for a particular purpose, absence of defects
|
||||||
|
or errors, accuracy, non-infringement of intellectual property rights other than
|
||||||
|
copyright as stated in Article 6 of this Licence.
|
||||||
|
|
||||||
|
This disclaimer of warranty is an essential part of the Licence and a condition
|
||||||
|
for the grant of any rights to the Work.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 8. Disclaimer of Liability
|
||||||
|
|
||||||
|
Except in the cases of wilful misconduct or damages directly caused to natural
|
||||||
|
persons, the Licensor will in no event be liable for any direct or indirect,
|
||||||
|
material or moral, damages of any kind, arising out of the Licence or of the use
|
||||||
|
of the Work, including without limitation, damages for loss of goodwill, work
|
||||||
|
stoppage, computer failure or malfunction, loss of data or any commercial
|
||||||
|
damage, even if the Licensor has been advised of the possibility of such
|
||||||
|
damage. However, the Licensor will be liable under statutory product liability
|
||||||
|
laws as far such laws apply to the Work.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 9. Additional agreements
|
||||||
|
|
||||||
|
While distributing the Original Work or Derivative Works, You may choose to
|
||||||
|
conclude an additional agreement to offer, and charge a fee for, acceptance of
|
||||||
|
support, warranty, indemnity, or other liability obligations and/or services
|
||||||
|
consistent with this Licence. However, in accepting such obligations, You may
|
||||||
|
act only on your own behalf and on your sole responsibility, not on behalf of
|
||||||
|
the original Licensor or any other Contributor, and only if You agree to
|
||||||
|
indemnify, defend, and hold each Contributor harmless for any liability incurred
|
||||||
|
by, or claims asserted against such Contributor by the fact You have accepted
|
||||||
|
any such warranty or additional liability.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 10. Acceptance of the Licence
|
||||||
|
|
||||||
|
The provisions of this Licence can be accepted by clicking on an icon “I agree”
|
||||||
|
placed under the bottom of a window displaying the text of this Licence or by
|
||||||
|
affirming consent in any other similar way, in accordance with the rules of
|
||||||
|
applicable law. Clicking on that icon indicates your clear and irrevocable
|
||||||
|
acceptance of this Licence and all of its terms and conditions.
|
||||||
|
|
||||||
|
Similarly, you irrevocably accept this Licence and all of its terms and
|
||||||
|
conditions by exercising any rights granted to You by Article 2 of this Licence,
|
||||||
|
such as the use of the Work, the creation by You of a Derivative Work or the
|
||||||
|
Distribution and/or Communication by You of the Work or copies thereof.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 11. Information to the public
|
||||||
|
|
||||||
|
In case of any Distribution and/or Communication of the Work by means of
|
||||||
|
electronic communication by You (for example, by offering to download the Work
|
||||||
|
from a remote location) the distribution channel or media (for example, a
|
||||||
|
website) must at least provide to the public the information requested by the
|
||||||
|
applicable law regarding the Licensor, the Licence and the way it may be
|
||||||
|
accessible, concluded, stored and reproduced by the Licensee.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 12. Termination of the Licence
|
||||||
|
|
||||||
|
The Licence and the rights granted hereunder will terminate automatically upon
|
||||||
|
any breach by the Licensee of the terms of the Licence.
|
||||||
|
|
||||||
|
Such a termination will not terminate the licences of any person who has
|
||||||
|
received the Work from the Licensee under the Licence, provided such persons
|
||||||
|
remain in full compliance with the Licence.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 13. Miscellaneous
|
||||||
|
|
||||||
|
Without prejudice of Article 9 above, the Licence represents the complete
|
||||||
|
agreement between the Parties as to the Work licensed hereunder.
|
||||||
|
|
||||||
|
If any provision of the Licence is invalid or unenforceable under applicable
|
||||||
|
law, this will not affect the validity or enforceability of the Licence as a
|
||||||
|
whole. Such provision will be construed and/or reformed so as necessary to make
|
||||||
|
it valid and enforceable.
|
||||||
|
|
||||||
|
The European Commission may publish other linguistic versions and/or new
|
||||||
|
versions of this Licence, so far this is required and reasonable, without
|
||||||
|
reducing the scope of the rights granted by the Licence. New versions of the
|
||||||
|
Licence will be published with a unique version number.
|
||||||
|
|
||||||
|
All linguistic versions of this Licence, approved by the European Commission,
|
||||||
|
have identical value. Parties can take advantage of the linguistic version of
|
||||||
|
their choice.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 14. Jurisdiction
|
||||||
|
|
||||||
|
Any litigation resulting from the interpretation of this License, arising
|
||||||
|
between the European Commission, as a Licensor, and any Licensee, will be
|
||||||
|
subject to the jurisdiction of the Court of Justice of the European Communities,
|
||||||
|
as laid down in article 238 of the Treaty establishing the European Community.
|
||||||
|
|
||||||
|
Any litigation arising between Parties, other than the European Commission, and
|
||||||
|
resulting from the interpretation of this License, will be subject to the
|
||||||
|
exclusive jurisdiction of the competent court where the Licensor resides or
|
||||||
|
conducts its primary business.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 15. Applicable Law
|
||||||
|
|
||||||
|
This Licence shall be governed by the law of the European Union country where
|
||||||
|
the Licensor resides or has his registered office.
|
||||||
|
|
||||||
|
This licence shall be governed by the Belgian law if:
|
||||||
|
|
||||||
|
- a litigation arises between the European Commission, as a Licensor, and any
|
||||||
|
- Licensee; the Licensor, other than the European Commission, has no residence
|
||||||
|
- or registered office inside a European Union country.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Appendix
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
“Compatible Licences” according to article 5 EUPL are:
|
||||||
|
|
||||||
|
|
||||||
|
- GNU General Public License (GNU GPL) v. 2
|
||||||
|
|
||||||
|
- Open Software License (OSL) v. 2.1, v. 3.0
|
||||||
|
|
||||||
|
- Common Public License v. 1.0
|
||||||
|
|
||||||
|
- Eclipse Public License v. 1.0
|
||||||
|
|
||||||
|
- Cecill v. 2.0
|
||||||
|
|
||||||
|
Platform: Linux
|
||||||
|
Classifier: Programming Language :: Python :: 3
|
||||||
|
Classifier: License :: European Union Public Licence :: 1.1
|
||||||
|
Classifier: Operating System :: OS Independent
|
||||||
|
Requires-Python: >=3.8
|
||||||
|
Description-Content-Type: text/markdown
|
||||||
|
License-File: LICENSE.md
|
||||||
|
|
||||||
|
# SimpleImageClassifier
|
||||||
|
|
||||||
|
SimpleImageClassifier is a simple example that allows you to clissify a image jpg in input.
|
||||||
|
Starting from this example, you can first create an installable package via pip3 and then a docker image in which it is installed the created package.
|
||||||
|
The package declares the simpleimageclassifier command as entrypoint.
|
||||||
|
So once the package is installed you can use this command at command line to run the example:
|
||||||
|
|
||||||
|
```
|
||||||
|
simpleimageclassifier --config-file configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input <image.jpg> --output <image_out.jpg> --opts MODEL.DEVICE cpu MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
The image created in this way can be executed in a container with the following command:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run -i -t --rm --name simpleimageclassifier-cont simpleimageclassifier simpleimageclassifier --config-file configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input <image.jpg> --output <image_out.jpg> --opts MODEL.DEVICE cpu MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
|
||||||
|
```
|
||||||
|
|
||||||
|
To be able to create an image from this application you need to have Docker and Docker-Compose installed on your machine and the relative python packages, see:
|
||||||
|
[Docker](https://docs.docker.com/engine/),
|
||||||
|
[Docker-Compose](https://docs.docker.com/compose/install/) and
|
||||||
|
[Docker Package for Python](https://pypi.org/project/docker/).
|
||||||
|
|
||||||
|
## Useful Commands
|
||||||
|
|
||||||
|
### Create Distribution Package
|
||||||
|
```
|
||||||
|
python3 setup.py sdist --formats=gztar
|
||||||
|
```
|
||||||
|
### Create Docker Image
|
||||||
|
```
|
||||||
|
docker build -t simpleimageclassifier .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Save Docker Image in file
|
||||||
|
```
|
||||||
|
docker save simpleimageclassifier | gzip > simpleimageclassifier.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
### Publish Docker Image on DockerHub
|
||||||
|
Re-tagging an existing local image:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker tag simpleimageclassifier <hub-user>/<repo-name>[:<tag>]
|
||||||
|
```
|
||||||
|
|
||||||
|
Login in DockerHub(use your Docker ID):
|
||||||
|
|
||||||
|
```
|
||||||
|
docker login
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you can push this repository to the registry designated by its name or tag:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker push <hub-user>/<repo-name>:<tag>
|
||||||
|
```
|
||||||
|
|
||||||
|
Then logout for security:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker logout
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Authors
|
||||||
|
|
||||||
|
* **Giancarlo Panichi** ([ORCID](http://orcid.org/0000-0001-8375-6644)) - [ISTI-CNR Infrascience Group](http://nemis.isti.cnr.it/groups/infrascience)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the EUPL V.1.1 License - see the [LICENSE.md](LICENSE.md) file for details.
|
||||||
|
|
||||||
|
|
||||||
|
## About the gCube Framework
|
||||||
|
This software is part of the [gCubeFramework](https://www.gcube-system.org/ "gCubeFramework"): an
|
||||||
|
open-source software toolkit used for building and operating Hybrid Data
|
||||||
|
Infrastructures enabling the dynamic deployment of Virtual Research Environments
|
||||||
|
by favouring the realisation of reuse oriented policies.
|
||||||
|
|
||||||
|
The projects leading to this software have received funding from a series of European Union programmes see [FUNDING.md](FUNDING.md)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,146 @@
|
||||||
|
LICENSE.md
|
||||||
|
MANIFEST.in
|
||||||
|
README.md
|
||||||
|
setup.py
|
||||||
|
src/simpleimageclassifier/__init__.py
|
||||||
|
src/simpleimageclassifier/__main__.py
|
||||||
|
src/simpleimageclassifier/predictor.py
|
||||||
|
src/simpleimageclassifier/simpleimageclassifier.py
|
||||||
|
src/simpleimageclassifier.egg-info/PKG-INFO
|
||||||
|
src/simpleimageclassifier.egg-info/SOURCES.txt
|
||||||
|
src/simpleimageclassifier.egg-info/dependency_links.txt
|
||||||
|
src/simpleimageclassifier.egg-info/entry_points.txt
|
||||||
|
src/simpleimageclassifier.egg-info/top_level.txt
|
||||||
|
src/simpleimageclassifier/configs/Base-RCNN-C4.yaml
|
||||||
|
src/simpleimageclassifier/configs/Base-RCNN-DilatedC5.yaml
|
||||||
|
src/simpleimageclassifier/configs/Base-RCNN-FPN.yaml
|
||||||
|
src/simpleimageclassifier/configs/Base-RetinaNet.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/fast_rcnn_R_50_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_101_C4_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_101_DC5_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_50_C4_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_50_C4_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_50_DC5_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_50_DC5_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_50_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_X_101_32x8d_FPN_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/fcos_R_50_FPN_1x.py
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/retinanet_R_101_FPN_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/retinanet_R_50_FPN_1x.py
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/retinanet_R_50_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/retinanet_R_50_FPN_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/rpn_R_50_C4_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Detection/rpn_R_50_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_101_C4_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_101_DC5_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_101_FPN_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_C4_1x.py
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_C4_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_C4_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_DC5_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_DC5_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.py
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x_giou.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_X_101_32x8d_FPN_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_regnetx_4gf_dds_fpn_1x.py
|
||||||
|
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_regnety_4gf_dds_fpn_1x.py
|
||||||
|
src/simpleimageclassifier/configs/COCO-Keypoints/Base-Keypoint-RCNN-FPN.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Keypoints/keypoint_rcnn_R_101_FPN_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Keypoints/keypoint_rcnn_R_50_FPN_1x.py
|
||||||
|
src/simpleimageclassifier/configs/COCO-Keypoints/keypoint_rcnn_R_50_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Keypoints/keypoint_rcnn_R_50_FPN_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-Keypoints/keypoint_rcnn_X_101_32x8d_FPN_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-PanopticSegmentation/Base-Panoptic-FPN.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-PanopticSegmentation/panoptic_fpn_R_101_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-PanopticSegmentation/panoptic_fpn_R_50_1x.py
|
||||||
|
src/simpleimageclassifier/configs/COCO-PanopticSegmentation/panoptic_fpn_R_50_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/COCO-PanopticSegmentation/panoptic_fpn_R_50_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/Cityscapes/mask_rcnn_R_50_FPN.yaml
|
||||||
|
src/simpleimageclassifier/configs/Detectron1-Comparisons/README.md
|
||||||
|
src/simpleimageclassifier/configs/Detectron1-Comparisons/faster_rcnn_R_50_FPN_noaug_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/Detectron1-Comparisons/keypoint_rcnn_R_50_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/LVISv0.5-InstanceSegmentation/mask_rcnn_R_101_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/LVISv0.5-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/LVISv0.5-InstanceSegmentation/mask_rcnn_X_101_32x8d_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/LVISv1-InstanceSegmentation/mask_rcnn_R_101_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/LVISv1-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/LVISv1-InstanceSegmentation/mask_rcnn_X_101_32x8d_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/cascade_mask_rcnn_R_50_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/cascade_mask_rcnn_R_50_FPN_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/cascade_mask_rcnn_X_152_32x8d_FPN_IN5k_gn_dconv.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/mask_rcnn_R_50_FPN_1x_cls_agnostic.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/mask_rcnn_R_50_FPN_1x_dconv_c3-c5.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/mask_rcnn_R_50_FPN_3x_dconv_c3-c5.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/mask_rcnn_R_50_FPN_3x_gn.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/mask_rcnn_R_50_FPN_3x_syncbn.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/mmdet_mask_rcnn_R_50_FPN_1x.py
|
||||||
|
src/simpleimageclassifier/configs/Misc/panoptic_fpn_R_101_dconv_cascade_gn_3x.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/scratch_mask_rcnn_R_50_FPN_3x_gn.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/scratch_mask_rcnn_R_50_FPN_9x_gn.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/scratch_mask_rcnn_R_50_FPN_9x_syncbn.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/semantic_R_50_FPN_1x.yaml
|
||||||
|
src/simpleimageclassifier/configs/Misc/torchvision_imagenet_R_50.py
|
||||||
|
src/simpleimageclassifier/configs/PascalVOC-Detection/faster_rcnn_R_50_C4.yaml
|
||||||
|
src/simpleimageclassifier/configs/PascalVOC-Detection/faster_rcnn_R_50_FPN.yaml
|
||||||
|
src/simpleimageclassifier/configs/common/README.md
|
||||||
|
src/simpleimageclassifier/configs/common/coco_schedule.py
|
||||||
|
src/simpleimageclassifier/configs/common/optim.py
|
||||||
|
src/simpleimageclassifier/configs/common/train.py
|
||||||
|
src/simpleimageclassifier/configs/common/data/coco.py
|
||||||
|
src/simpleimageclassifier/configs/common/data/coco_keypoint.py
|
||||||
|
src/simpleimageclassifier/configs/common/data/coco_panoptic_separated.py
|
||||||
|
src/simpleimageclassifier/configs/common/data/constants.py
|
||||||
|
src/simpleimageclassifier/configs/common/models/cascade_rcnn.py
|
||||||
|
src/simpleimageclassifier/configs/common/models/fcos.py
|
||||||
|
src/simpleimageclassifier/configs/common/models/keypoint_rcnn_fpn.py
|
||||||
|
src/simpleimageclassifier/configs/common/models/mask_rcnn_c4.py
|
||||||
|
src/simpleimageclassifier/configs/common/models/mask_rcnn_fpn.py
|
||||||
|
src/simpleimageclassifier/configs/common/models/mask_rcnn_vitdet.py
|
||||||
|
src/simpleimageclassifier/configs/common/models/panoptic_fpn.py
|
||||||
|
src/simpleimageclassifier/configs/common/models/retinanet.py
|
||||||
|
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_101_FPN_100ep_LSJ.py
|
||||||
|
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_101_FPN_200ep_LSJ.py
|
||||||
|
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_101_FPN_400ep_LSJ.py
|
||||||
|
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ.py
|
||||||
|
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_50_FPN_200ep_LSJ.py
|
||||||
|
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_50_FPN_400ep_LSJ.py
|
||||||
|
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_50_FPN_50ep_LSJ.py
|
||||||
|
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_regnetx_4gf_dds_FPN_100ep_LSJ.py
|
||||||
|
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_regnetx_4gf_dds_FPN_200ep_LSJ.py
|
||||||
|
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_regnetx_4gf_dds_FPN_400ep_LSJ.py
|
||||||
|
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_regnety_4gf_dds_FPN_100ep_LSJ.py
|
||||||
|
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_regnety_4gf_dds_FPN_200ep_LSJ.py
|
||||||
|
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_regnety_4gf_dds_FPN_400ep_LSJ.py
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/README.md
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/cascade_mask_rcnn_R_50_FPN_inference_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/cascade_mask_rcnn_R_50_FPN_instant_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/fast_rcnn_R_50_FPN_inference_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/fast_rcnn_R_50_FPN_instant_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/keypoint_rcnn_R_50_FPN_inference_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/keypoint_rcnn_R_50_FPN_instant_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/keypoint_rcnn_R_50_FPN_normalized_training_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/keypoint_rcnn_R_50_FPN_training_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_C4_GCV_instant_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_C4_inference_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_C4_instant_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_C4_training_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_DC5_inference_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_FPN_inference_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_FPN_instant_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_FPN_pred_boxes_training_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_FPN_training_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/panoptic_fpn_R_50_inference_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/panoptic_fpn_R_50_instant_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/panoptic_fpn_R_50_training_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/retinanet_R_50_FPN_inference_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/retinanet_R_50_FPN_instant_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/rpn_R_50_FPN_inference_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/rpn_R_50_FPN_instant_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/semantic_R_50_FPN_inference_acc_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/semantic_R_50_FPN_instant_test.yaml
|
||||||
|
src/simpleimageclassifier/configs/quick_schedules/semantic_R_50_FPN_training_acc_test.yaml
|
|
@ -0,0 +1 @@
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
[console_scripts]
|
||||||
|
simpleimageclassifier = simpleimageclassifier.simpleimageclassifier:simpleimageclassifier
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
simpleimageclassifier
|
|
@ -0,0 +1,2 @@
|
||||||
|
print("__init__.py")
|
||||||
|
print(__package__)
|
|
@ -0,0 +1,6 @@
|
||||||
|
print(__name__)
|
||||||
|
print(__package__)
|
||||||
|
from .simpleimageclassifier import simpleimageclassifier
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
simpleimageclassifier()
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,18 @@
|
||||||
|
MODEL:
|
||||||
|
META_ARCHITECTURE: "GeneralizedRCNN"
|
||||||
|
RPN:
|
||||||
|
PRE_NMS_TOPK_TEST: 6000
|
||||||
|
POST_NMS_TOPK_TEST: 1000
|
||||||
|
ROI_HEADS:
|
||||||
|
NAME: "Res5ROIHeads"
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("coco_2017_train",)
|
||||||
|
TEST: ("coco_2017_val",)
|
||||||
|
SOLVER:
|
||||||
|
IMS_PER_BATCH: 16
|
||||||
|
BASE_LR: 0.02
|
||||||
|
STEPS: (60000, 80000)
|
||||||
|
MAX_ITER: 90000
|
||||||
|
INPUT:
|
||||||
|
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||||
|
VERSION: 2
|
|
@ -0,0 +1,31 @@
|
||||||
|
MODEL:
|
||||||
|
META_ARCHITECTURE: "GeneralizedRCNN"
|
||||||
|
RESNETS:
|
||||||
|
OUT_FEATURES: ["res5"]
|
||||||
|
RES5_DILATION: 2
|
||||||
|
RPN:
|
||||||
|
IN_FEATURES: ["res5"]
|
||||||
|
PRE_NMS_TOPK_TEST: 6000
|
||||||
|
POST_NMS_TOPK_TEST: 1000
|
||||||
|
ROI_HEADS:
|
||||||
|
NAME: "StandardROIHeads"
|
||||||
|
IN_FEATURES: ["res5"]
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
NAME: "FastRCNNConvFCHead"
|
||||||
|
NUM_FC: 2
|
||||||
|
POOLER_RESOLUTION: 7
|
||||||
|
ROI_MASK_HEAD:
|
||||||
|
NAME: "MaskRCNNConvUpsampleHead"
|
||||||
|
NUM_CONV: 4
|
||||||
|
POOLER_RESOLUTION: 14
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("coco_2017_train",)
|
||||||
|
TEST: ("coco_2017_val",)
|
||||||
|
SOLVER:
|
||||||
|
IMS_PER_BATCH: 16
|
||||||
|
BASE_LR: 0.02
|
||||||
|
STEPS: (60000, 80000)
|
||||||
|
MAX_ITER: 90000
|
||||||
|
INPUT:
|
||||||
|
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||||
|
VERSION: 2
|
|
@ -0,0 +1,42 @@
|
||||||
|
MODEL:
|
||||||
|
META_ARCHITECTURE: "GeneralizedRCNN"
|
||||||
|
BACKBONE:
|
||||||
|
NAME: "build_resnet_fpn_backbone"
|
||||||
|
RESNETS:
|
||||||
|
OUT_FEATURES: ["res2", "res3", "res4", "res5"]
|
||||||
|
FPN:
|
||||||
|
IN_FEATURES: ["res2", "res3", "res4", "res5"]
|
||||||
|
ANCHOR_GENERATOR:
|
||||||
|
SIZES: [[32], [64], [128], [256], [512]] # One size for each in feature map
|
||||||
|
ASPECT_RATIOS: [[0.5, 1.0, 2.0]] # Three aspect ratios (same for all in feature maps)
|
||||||
|
RPN:
|
||||||
|
IN_FEATURES: ["p2", "p3", "p4", "p5", "p6"]
|
||||||
|
PRE_NMS_TOPK_TRAIN: 2000 # Per FPN level
|
||||||
|
PRE_NMS_TOPK_TEST: 1000 # Per FPN level
|
||||||
|
# Detectron1 uses 2000 proposals per-batch,
|
||||||
|
# (See "modeling/rpn/rpn_outputs.py" for details of this legacy issue)
|
||||||
|
# which is approximately 1000 proposals per-image since the default batch size for FPN is 2.
|
||||||
|
POST_NMS_TOPK_TRAIN: 1000
|
||||||
|
POST_NMS_TOPK_TEST: 1000
|
||||||
|
ROI_HEADS:
|
||||||
|
NAME: "StandardROIHeads"
|
||||||
|
IN_FEATURES: ["p2", "p3", "p4", "p5"]
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
NAME: "FastRCNNConvFCHead"
|
||||||
|
NUM_FC: 2
|
||||||
|
POOLER_RESOLUTION: 7
|
||||||
|
ROI_MASK_HEAD:
|
||||||
|
NAME: "MaskRCNNConvUpsampleHead"
|
||||||
|
NUM_CONV: 4
|
||||||
|
POOLER_RESOLUTION: 14
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("coco_2017_train",)
|
||||||
|
TEST: ("coco_2017_val",)
|
||||||
|
SOLVER:
|
||||||
|
IMS_PER_BATCH: 16
|
||||||
|
BASE_LR: 0.02
|
||||||
|
STEPS: (60000, 80000)
|
||||||
|
MAX_ITER: 90000
|
||||||
|
INPUT:
|
||||||
|
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||||
|
VERSION: 2
|
|
@ -0,0 +1,25 @@
|
||||||
|
MODEL:
|
||||||
|
META_ARCHITECTURE: "RetinaNet"
|
||||||
|
BACKBONE:
|
||||||
|
NAME: "build_retinanet_resnet_fpn_backbone"
|
||||||
|
RESNETS:
|
||||||
|
OUT_FEATURES: ["res3", "res4", "res5"]
|
||||||
|
ANCHOR_GENERATOR:
|
||||||
|
SIZES: !!python/object/apply:eval ["[[x, x * 2**(1.0/3), x * 2**(2.0/3) ] for x in [32, 64, 128, 256, 512 ]]"]
|
||||||
|
FPN:
|
||||||
|
IN_FEATURES: ["res3", "res4", "res5"]
|
||||||
|
RETINANET:
|
||||||
|
IOU_THRESHOLDS: [0.4, 0.5]
|
||||||
|
IOU_LABELS: [0, -1, 1]
|
||||||
|
SMOOTH_L1_LOSS_BETA: 0.0
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("coco_2017_train",)
|
||||||
|
TEST: ("coco_2017_val",)
|
||||||
|
SOLVER:
|
||||||
|
IMS_PER_BATCH: 16
|
||||||
|
BASE_LR: 0.01 # Note that RetinaNet uses a different default learning rate
|
||||||
|
STEPS: (60000, 80000)
|
||||||
|
MAX_ITER: 90000
|
||||||
|
INPUT:
|
||||||
|
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||||
|
VERSION: 2
|
|
@ -0,0 +1,17 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: False
|
||||||
|
LOAD_PROPOSALS: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
PROPOSAL_GENERATOR:
|
||||||
|
NAME: "PrecomputedProposals"
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("coco_2017_train",)
|
||||||
|
PROPOSAL_FILES_TRAIN: ("detectron2://COCO-Detection/rpn_R_50_FPN_1x/137258492/coco_2017_train_box_proposals_21bc3a.pkl", )
|
||||||
|
TEST: ("coco_2017_val",)
|
||||||
|
PROPOSAL_FILES_TEST: ("detectron2://COCO-Detection/rpn_R_50_FPN_1x/137258492/coco_2017_val_box_proposals_ee0dad.pkl", )
|
||||||
|
DATALOADER:
|
||||||
|
# proposals are part of the dataset_dicts, and take a lot of RAM
|
||||||
|
NUM_WORKERS: 2
|
|
@ -0,0 +1,9 @@
|
||||||
|
_BASE_: "../Base-RCNN-C4.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||||
|
MASK_ON: False
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 101
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,9 @@
|
||||||
|
_BASE_: "../Base-RCNN-DilatedC5.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||||
|
MASK_ON: False
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 101
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,9 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||||
|
MASK_ON: False
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 101
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,6 @@
|
||||||
|
_BASE_: "../Base-RCNN-C4.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: False
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
|
@ -0,0 +1,9 @@
|
||||||
|
_BASE_: "../Base-RCNN-C4.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: False
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,6 @@
|
||||||
|
_BASE_: "../Base-RCNN-DilatedC5.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: False
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
|
@ -0,0 +1,9 @@
|
||||||
|
_BASE_: "../Base-RCNN-DilatedC5.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: False
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,6 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: False
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
|
@ -0,0 +1,9 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: False
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,13 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
MASK_ON: False
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/FAIR/X-101-32x8d.pkl"
|
||||||
|
PIXEL_STD: [57.375, 57.120, 58.395]
|
||||||
|
RESNETS:
|
||||||
|
STRIDE_IN_1X1: False # this is a C2 model
|
||||||
|
NUM_GROUPS: 32
|
||||||
|
WIDTH_PER_GROUP: 8
|
||||||
|
DEPTH: 101
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,11 @@
|
||||||
|
from ..common.optim import SGD as optimizer
|
||||||
|
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||||
|
from ..common.data.coco import dataloader
|
||||||
|
from ..common.models.fcos import model
|
||||||
|
from ..common.train import train
|
||||||
|
|
||||||
|
dataloader.train.mapper.use_instance_mask = False
|
||||||
|
optimizer.lr = 0.01
|
||||||
|
|
||||||
|
model.backbone.bottom_up.freeze_at = 2
|
||||||
|
train.init_checkpoint = "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
|
@ -0,0 +1,8 @@
|
||||||
|
_BASE_: "../Base-RetinaNet.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 101
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,11 @@
|
||||||
|
from ..common.optim import SGD as optimizer
|
||||||
|
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||||
|
from ..common.data.coco import dataloader
|
||||||
|
from ..common.models.retinanet import model
|
||||||
|
from ..common.train import train
|
||||||
|
|
||||||
|
dataloader.train.mapper.use_instance_mask = False
|
||||||
|
model.backbone.bottom_up.freeze_at = 2
|
||||||
|
optimizer.lr = 0.01
|
||||||
|
|
||||||
|
train.init_checkpoint = "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
|
@ -0,0 +1,5 @@
|
||||||
|
_BASE_: "../Base-RetinaNet.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
|
@ -0,0 +1,8 @@
|
||||||
|
_BASE_: "../Base-RetinaNet.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,10 @@
|
||||||
|
_BASE_: "../Base-RCNN-C4.yaml"
|
||||||
|
MODEL:
|
||||||
|
META_ARCHITECTURE: "ProposalNetwork"
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: False
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
RPN:
|
||||||
|
PRE_NMS_TOPK_TEST: 12000
|
||||||
|
POST_NMS_TOPK_TEST: 2000
|
|
@ -0,0 +1,9 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
META_ARCHITECTURE: "ProposalNetwork"
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: False
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
RPN:
|
||||||
|
POST_NMS_TOPK_TEST: 2000
|
|
@ -0,0 +1,9 @@
|
||||||
|
_BASE_: "../Base-RCNN-C4.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 101
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,9 @@
|
||||||
|
_BASE_: "../Base-RCNN-DilatedC5.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 101
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,9 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 101
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,8 @@
|
||||||
|
from ..common.train import train
|
||||||
|
from ..common.optim import SGD as optimizer
|
||||||
|
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||||
|
from ..common.data.coco import dataloader
|
||||||
|
from ..common.models.mask_rcnn_c4 import model
|
||||||
|
|
||||||
|
model.backbone.freeze_at = 2
|
||||||
|
train.init_checkpoint = "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
|
@ -0,0 +1,6 @@
|
||||||
|
_BASE_: "../Base-RCNN-C4.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
|
@ -0,0 +1,9 @@
|
||||||
|
_BASE_: "../Base-RCNN-C4.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,6 @@
|
||||||
|
_BASE_: "../Base-RCNN-DilatedC5.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
|
@ -0,0 +1,9 @@
|
||||||
|
_BASE_: "../Base-RCNN-DilatedC5.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,8 @@
|
||||||
|
from ..common.optim import SGD as optimizer
|
||||||
|
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||||
|
from ..common.data.coco import dataloader
|
||||||
|
from ..common.models.mask_rcnn_fpn import model
|
||||||
|
from ..common.train import train
|
||||||
|
|
||||||
|
model.backbone.bottom_up.freeze_at = 2
|
||||||
|
train.init_checkpoint = "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
|
@ -0,0 +1,6 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
|
@ -0,0 +1,12 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
RPN:
|
||||||
|
BBOX_REG_LOSS_TYPE: "giou"
|
||||||
|
BBOX_REG_LOSS_WEIGHT: 2.0
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
BBOX_REG_LOSS_TYPE: "giou"
|
||||||
|
BBOX_REG_LOSS_WEIGHT: 10.0
|
|
@ -0,0 +1,9 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,13 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
MASK_ON: True
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/FAIR/X-101-32x8d.pkl"
|
||||||
|
PIXEL_STD: [57.375, 57.120, 58.395]
|
||||||
|
RESNETS:
|
||||||
|
STRIDE_IN_1X1: False # this is a C2 model
|
||||||
|
NUM_GROUPS: 32
|
||||||
|
WIDTH_PER_GROUP: 8
|
||||||
|
DEPTH: 101
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,34 @@
|
||||||
|
from ..common.optim import SGD as optimizer
|
||||||
|
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||||
|
from ..common.data.coco import dataloader
|
||||||
|
from ..common.models.mask_rcnn_fpn import model
|
||||||
|
from ..common.train import train
|
||||||
|
|
||||||
|
from detectron2.config import LazyCall as L
|
||||||
|
from detectron2.modeling.backbone import RegNet
|
||||||
|
from detectron2.modeling.backbone.regnet import SimpleStem, ResBottleneckBlock
|
||||||
|
|
||||||
|
|
||||||
|
# Replace default ResNet with RegNetX-4GF from the DDS paper. Config source:
|
||||||
|
# https://github.com/facebookresearch/pycls/blob/2c152a6e5d913e898cca4f0a758f41e6b976714d/configs/dds_baselines/regnetx/RegNetX-4.0GF_dds_8gpu.yaml#L4-L9 # noqa
|
||||||
|
model.backbone.bottom_up = L(RegNet)(
|
||||||
|
stem_class=SimpleStem,
|
||||||
|
stem_width=32,
|
||||||
|
block_class=ResBottleneckBlock,
|
||||||
|
depth=23,
|
||||||
|
w_a=38.65,
|
||||||
|
w_0=96,
|
||||||
|
w_m=2.43,
|
||||||
|
group_width=40,
|
||||||
|
freeze_at=2,
|
||||||
|
norm="FrozenBN",
|
||||||
|
out_features=["s1", "s2", "s3", "s4"],
|
||||||
|
)
|
||||||
|
model.pixel_std = [57.375, 57.120, 58.395]
|
||||||
|
|
||||||
|
optimizer.weight_decay = 5e-5
|
||||||
|
train.init_checkpoint = (
|
||||||
|
"https://dl.fbaipublicfiles.com/pycls/dds_baselines/160906383/RegNetX-4.0GF_dds_8gpu.pyth"
|
||||||
|
)
|
||||||
|
# RegNets benefit from enabling cudnn benchmark mode
|
||||||
|
train.cudnn_benchmark = True
|
|
@ -0,0 +1,35 @@
|
||||||
|
from ..common.optim import SGD as optimizer
|
||||||
|
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||||
|
from ..common.data.coco import dataloader
|
||||||
|
from ..common.models.mask_rcnn_fpn import model
|
||||||
|
from ..common.train import train
|
||||||
|
|
||||||
|
from detectron2.config import LazyCall as L
|
||||||
|
from detectron2.modeling.backbone import RegNet
|
||||||
|
from detectron2.modeling.backbone.regnet import SimpleStem, ResBottleneckBlock
|
||||||
|
|
||||||
|
|
||||||
|
# Replace default ResNet with RegNetY-4GF from the DDS paper. Config source:
|
||||||
|
# https://github.com/facebookresearch/pycls/blob/2c152a6e5d913e898cca4f0a758f41e6b976714d/configs/dds_baselines/regnety/RegNetY-4.0GF_dds_8gpu.yaml#L4-L10 # noqa
|
||||||
|
model.backbone.bottom_up = L(RegNet)(
|
||||||
|
stem_class=SimpleStem,
|
||||||
|
stem_width=32,
|
||||||
|
block_class=ResBottleneckBlock,
|
||||||
|
depth=22,
|
||||||
|
w_a=31.41,
|
||||||
|
w_0=96,
|
||||||
|
w_m=2.24,
|
||||||
|
group_width=64,
|
||||||
|
se_ratio=0.25,
|
||||||
|
freeze_at=2,
|
||||||
|
norm="FrozenBN",
|
||||||
|
out_features=["s1", "s2", "s3", "s4"],
|
||||||
|
)
|
||||||
|
model.pixel_std = [57.375, 57.120, 58.395]
|
||||||
|
|
||||||
|
optimizer.weight_decay = 5e-5
|
||||||
|
train.init_checkpoint = (
|
||||||
|
"https://dl.fbaipublicfiles.com/pycls/dds_baselines/160906838/RegNetY-4.0GF_dds_8gpu.pyth"
|
||||||
|
)
|
||||||
|
# RegNets benefit from enabling cudnn benchmark mode
|
||||||
|
train.cudnn_benchmark = True
|
|
@ -0,0 +1,15 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
KEYPOINT_ON: True
|
||||||
|
ROI_HEADS:
|
||||||
|
NUM_CLASSES: 1
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
SMOOTH_L1_BETA: 0.5 # Keypoint AP degrades (though box AP improves) when using plain L1 loss
|
||||||
|
RPN:
|
||||||
|
# Detectron1 uses 2000 proposals per-batch, but this option is per-image in detectron2.
|
||||||
|
# 1000 proposals per-image is found to hurt box AP.
|
||||||
|
# Therefore we increase it to 1500 per-image.
|
||||||
|
POST_NMS_TOPK_TRAIN: 1500
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("keypoints_coco_2017_train",)
|
||||||
|
TEST: ("keypoints_coco_2017_val",)
|
|
@ -0,0 +1,8 @@
|
||||||
|
_BASE_: "Base-Keypoint-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 101
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,8 @@
|
||||||
|
from ..common.optim import SGD as optimizer
|
||||||
|
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||||
|
from ..common.data.coco_keypoint import dataloader
|
||||||
|
from ..common.models.keypoint_rcnn_fpn import model
|
||||||
|
from ..common.train import train
|
||||||
|
|
||||||
|
model.backbone.bottom_up.freeze_at = 2
|
||||||
|
train.init_checkpoint = "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
|
@ -0,0 +1,5 @@
|
||||||
|
_BASE_: "Base-Keypoint-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
|
@ -0,0 +1,8 @@
|
||||||
|
_BASE_: "Base-Keypoint-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,12 @@
|
||||||
|
_BASE_: "Base-Keypoint-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/FAIR/X-101-32x8d.pkl"
|
||||||
|
PIXEL_STD: [57.375, 57.120, 58.395]
|
||||||
|
RESNETS:
|
||||||
|
STRIDE_IN_1X1: False # this is a C2 model
|
||||||
|
NUM_GROUPS: 32
|
||||||
|
WIDTH_PER_GROUP: 8
|
||||||
|
DEPTH: 101
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,11 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
META_ARCHITECTURE: "PanopticFPN"
|
||||||
|
MASK_ON: True
|
||||||
|
SEM_SEG_HEAD:
|
||||||
|
LOSS_WEIGHT: 0.5
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("coco_2017_train_panoptic_separated",)
|
||||||
|
TEST: ("coco_2017_val_panoptic_separated",)
|
||||||
|
DATALOADER:
|
||||||
|
FILTER_EMPTY_ANNOTATIONS: False
|
|
@ -0,0 +1,8 @@
|
||||||
|
_BASE_: "Base-Panoptic-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 101
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,8 @@
|
||||||
|
from ..common.optim import SGD as optimizer
|
||||||
|
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||||
|
from ..common.data.coco_panoptic_separated import dataloader
|
||||||
|
from ..common.models.panoptic_fpn import model
|
||||||
|
from ..common.train import train
|
||||||
|
|
||||||
|
model.backbone.bottom_up.freeze_at = 2
|
||||||
|
train.init_checkpoint = "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
|
@ -0,0 +1,5 @@
|
||||||
|
_BASE_: "Base-Panoptic-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
|
@ -0,0 +1,8 @@
|
||||||
|
_BASE_: "Base-Panoptic-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,27 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
# For better, more stable performance initialize from COCO
|
||||||
|
WEIGHTS: "detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
ROI_HEADS:
|
||||||
|
NUM_CLASSES: 8
|
||||||
|
# This is similar to the setting used in Mask R-CNN paper, Appendix A
|
||||||
|
# But there are some differences, e.g., we did not initialize the output
|
||||||
|
# layer using the corresponding classes from COCO
|
||||||
|
INPUT:
|
||||||
|
MIN_SIZE_TRAIN: (800, 832, 864, 896, 928, 960, 992, 1024)
|
||||||
|
MIN_SIZE_TRAIN_SAMPLING: "choice"
|
||||||
|
MIN_SIZE_TEST: 1024
|
||||||
|
MAX_SIZE_TRAIN: 2048
|
||||||
|
MAX_SIZE_TEST: 2048
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("cityscapes_fine_instance_seg_train",)
|
||||||
|
TEST: ("cityscapes_fine_instance_seg_val",)
|
||||||
|
SOLVER:
|
||||||
|
BASE_LR: 0.01
|
||||||
|
STEPS: (18000,)
|
||||||
|
MAX_ITER: 24000
|
||||||
|
IMS_PER_BATCH: 8
|
||||||
|
TEST:
|
||||||
|
EVAL_PERIOD: 8000
|
|
@ -0,0 +1,84 @@
|
||||||
|
|
||||||
|
Detectron2 model zoo's experimental settings and a few implementation details are different from Detectron.
|
||||||
|
|
||||||
|
The differences in implementation details are shared in
|
||||||
|
[Compatibility with Other Libraries](../../docs/notes/compatibility.md).
|
||||||
|
|
||||||
|
The differences in model zoo's experimental settings include:
|
||||||
|
* Use scale augmentation during training. This improves AP with lower training cost.
|
||||||
|
* Use L1 loss instead of smooth L1 loss for simplicity. This sometimes improves box AP but may
|
||||||
|
affect other AP.
|
||||||
|
* Use `POOLER_SAMPLING_RATIO=0` instead of 2. This does not significantly affect AP.
|
||||||
|
* Use `ROIAlignV2`. This does not significantly affect AP.
|
||||||
|
|
||||||
|
In this directory, we provide a few configs that __do not__ have the above changes.
|
||||||
|
They mimic Detectron's behavior as close as possible,
|
||||||
|
and provide a fair comparison of accuracy and speed against Detectron.
|
||||||
|
|
||||||
|
<!--
|
||||||
|
./gen_html_table.py --config 'Detectron1-Comparisons/*.yaml' --name "Faster R-CNN" "Keypoint R-CNN" "Mask R-CNN" --fields lr_sched train_speed inference_speed mem box_AP mask_AP keypoint_AP --base-dir ../../../configs/Detectron1-Comparisons
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<table><tbody>
|
||||||
|
<!-- START TABLE -->
|
||||||
|
<!-- TABLE HEADER -->
|
||||||
|
<th valign="bottom">Name</th>
|
||||||
|
<th valign="bottom">lr<br/>sched</th>
|
||||||
|
<th valign="bottom">train<br/>time<br/>(s/iter)</th>
|
||||||
|
<th valign="bottom">inference<br/>time<br/>(s/im)</th>
|
||||||
|
<th valign="bottom">train<br/>mem<br/>(GB)</th>
|
||||||
|
<th valign="bottom">box<br/>AP</th>
|
||||||
|
<th valign="bottom">mask<br/>AP</th>
|
||||||
|
<th valign="bottom">kp.<br/>AP</th>
|
||||||
|
<th valign="bottom">model id</th>
|
||||||
|
<th valign="bottom">download</th>
|
||||||
|
<!-- TABLE BODY -->
|
||||||
|
<!-- ROW: faster_rcnn_R_50_FPN_noaug_1x -->
|
||||||
|
<tr><td align="left"><a href="faster_rcnn_R_50_FPN_noaug_1x.yaml">Faster R-CNN</a></td>
|
||||||
|
<td align="center">1x</td>
|
||||||
|
<td align="center">0.219</td>
|
||||||
|
<td align="center">0.038</td>
|
||||||
|
<td align="center">3.1</td>
|
||||||
|
<td align="center">36.9</td>
|
||||||
|
<td align="center"></td>
|
||||||
|
<td align="center"></td>
|
||||||
|
<td align="center">137781054</td>
|
||||||
|
<td align="center"><a href="https://dl.fbaipublicfiles.com/detectron2/Detectron1-Comparisons/faster_rcnn_R_50_FPN_noaug_1x/137781054/model_final_7ab50c.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/detectron2/Detectron1-Comparisons/faster_rcnn_R_50_FPN_noaug_1x/137781054/metrics.json">metrics</a></td>
|
||||||
|
</tr>
|
||||||
|
<!-- ROW: keypoint_rcnn_R_50_FPN_1x -->
|
||||||
|
<tr><td align="left"><a href="keypoint_rcnn_R_50_FPN_1x.yaml">Keypoint R-CNN</a></td>
|
||||||
|
<td align="center">1x</td>
|
||||||
|
<td align="center">0.313</td>
|
||||||
|
<td align="center">0.071</td>
|
||||||
|
<td align="center">5.0</td>
|
||||||
|
<td align="center">53.1</td>
|
||||||
|
<td align="center"></td>
|
||||||
|
<td align="center">64.2</td>
|
||||||
|
<td align="center">137781195</td>
|
||||||
|
<td align="center"><a href="https://dl.fbaipublicfiles.com/detectron2/Detectron1-Comparisons/keypoint_rcnn_R_50_FPN_1x/137781195/model_final_cce136.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/detectron2/Detectron1-Comparisons/keypoint_rcnn_R_50_FPN_1x/137781195/metrics.json">metrics</a></td>
|
||||||
|
</tr>
|
||||||
|
<!-- ROW: mask_rcnn_R_50_FPN_noaug_1x -->
|
||||||
|
<tr><td align="left"><a href="mask_rcnn_R_50_FPN_noaug_1x.yaml">Mask R-CNN</a></td>
|
||||||
|
<td align="center">1x</td>
|
||||||
|
<td align="center">0.273</td>
|
||||||
|
<td align="center">0.043</td>
|
||||||
|
<td align="center">3.4</td>
|
||||||
|
<td align="center">37.8</td>
|
||||||
|
<td align="center">34.9</td>
|
||||||
|
<td align="center"></td>
|
||||||
|
<td align="center">137781281</td>
|
||||||
|
<td align="center"><a href="https://dl.fbaipublicfiles.com/detectron2/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x/137781281/model_final_62ca52.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/detectron2/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x/137781281/metrics.json">metrics</a></td>
|
||||||
|
</tr>
|
||||||
|
</tbody></table>
|
||||||
|
|
||||||
|
## Comparisons:
|
||||||
|
|
||||||
|
* Faster R-CNN: Detectron's AP is 36.7, similar to ours.
|
||||||
|
* Keypoint R-CNN: Detectron's AP is box 53.6, keypoint 64.2. Fixing a Detectron's
|
||||||
|
[bug](https://github.com/facebookresearch/Detectron/issues/459) lead to a drop in box AP, and can be
|
||||||
|
compensated back by some parameter tuning.
|
||||||
|
* Mask R-CNN: Detectron's AP is box 37.7, mask 33.9. We're 1 AP better in mask AP, due to more correct implementation.
|
||||||
|
See [this article](https://ppwwyyxx.com/blog/2021/Where-are-Pixels/) for details.
|
||||||
|
|
||||||
|
For speed comparison, see [benchmarks](https://detectron2.readthedocs.io/notes/benchmarks.html).
|
|
@ -0,0 +1,17 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: False
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
# Detectron1 uses smooth L1 loss with some magic beta values.
|
||||||
|
# The defaults are changed to L1 loss in Detectron2.
|
||||||
|
RPN:
|
||||||
|
SMOOTH_L1_BETA: 0.1111
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
SMOOTH_L1_BETA: 1.0
|
||||||
|
POOLER_SAMPLING_RATIO: 2
|
||||||
|
POOLER_TYPE: "ROIAlign"
|
||||||
|
INPUT:
|
||||||
|
# no scale augmentation
|
||||||
|
MIN_SIZE_TRAIN: (800, )
|
|
@ -0,0 +1,27 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
KEYPOINT_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
ROI_HEADS:
|
||||||
|
NUM_CLASSES: 1
|
||||||
|
ROI_KEYPOINT_HEAD:
|
||||||
|
POOLER_RESOLUTION: 14
|
||||||
|
POOLER_SAMPLING_RATIO: 2
|
||||||
|
POOLER_TYPE: "ROIAlign"
|
||||||
|
# Detectron1 uses smooth L1 loss with some magic beta values.
|
||||||
|
# The defaults are changed to L1 loss in Detectron2.
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
SMOOTH_L1_BETA: 1.0
|
||||||
|
POOLER_SAMPLING_RATIO: 2
|
||||||
|
POOLER_TYPE: "ROIAlign"
|
||||||
|
RPN:
|
||||||
|
SMOOTH_L1_BETA: 0.1111
|
||||||
|
# Detectron1 uses 2000 proposals per-batch, but this option is per-image in detectron2
|
||||||
|
# 1000 proposals per-image is found to hurt box AP.
|
||||||
|
# Therefore we increase it to 1500 per-image.
|
||||||
|
POST_NMS_TOPK_TRAIN: 1500
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("keypoints_coco_2017_train",)
|
||||||
|
TEST: ("keypoints_coco_2017_val",)
|
|
@ -0,0 +1,20 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
# Detectron1 uses smooth L1 loss with some magic beta values.
|
||||||
|
# The defaults are changed to L1 loss in Detectron2.
|
||||||
|
RPN:
|
||||||
|
SMOOTH_L1_BETA: 0.1111
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
SMOOTH_L1_BETA: 1.0
|
||||||
|
POOLER_SAMPLING_RATIO: 2
|
||||||
|
POOLER_TYPE: "ROIAlign"
|
||||||
|
ROI_MASK_HEAD:
|
||||||
|
POOLER_SAMPLING_RATIO: 2
|
||||||
|
POOLER_TYPE: "ROIAlign"
|
||||||
|
INPUT:
|
||||||
|
# no scale augmentation
|
||||||
|
MIN_SIZE_TRAIN: (800, )
|
|
@ -0,0 +1,19 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 101
|
||||||
|
ROI_HEADS:
|
||||||
|
NUM_CLASSES: 1230
|
||||||
|
SCORE_THRESH_TEST: 0.0001
|
||||||
|
INPUT:
|
||||||
|
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("lvis_v0.5_train",)
|
||||||
|
TEST: ("lvis_v0.5_val",)
|
||||||
|
TEST:
|
||||||
|
DETECTIONS_PER_IMAGE: 300 # LVIS allows up to 300
|
||||||
|
DATALOADER:
|
||||||
|
SAMPLER_TRAIN: "RepeatFactorTrainingSampler"
|
||||||
|
REPEAT_THRESHOLD: 0.001
|
|
@ -0,0 +1,19 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
ROI_HEADS:
|
||||||
|
NUM_CLASSES: 1230
|
||||||
|
SCORE_THRESH_TEST: 0.0001
|
||||||
|
INPUT:
|
||||||
|
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("lvis_v0.5_train",)
|
||||||
|
TEST: ("lvis_v0.5_val",)
|
||||||
|
TEST:
|
||||||
|
DETECTIONS_PER_IMAGE: 300 # LVIS allows up to 300
|
||||||
|
DATALOADER:
|
||||||
|
SAMPLER_TRAIN: "RepeatFactorTrainingSampler"
|
||||||
|
REPEAT_THRESHOLD: 0.001
|
|
@ -0,0 +1,23 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/FAIR/X-101-32x8d.pkl"
|
||||||
|
PIXEL_STD: [57.375, 57.120, 58.395]
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
STRIDE_IN_1X1: False # this is a C2 model
|
||||||
|
NUM_GROUPS: 32
|
||||||
|
WIDTH_PER_GROUP: 8
|
||||||
|
DEPTH: 101
|
||||||
|
ROI_HEADS:
|
||||||
|
NUM_CLASSES: 1230
|
||||||
|
SCORE_THRESH_TEST: 0.0001
|
||||||
|
INPUT:
|
||||||
|
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("lvis_v0.5_train",)
|
||||||
|
TEST: ("lvis_v0.5_val",)
|
||||||
|
TEST:
|
||||||
|
DETECTIONS_PER_IMAGE: 300 # LVIS allows up to 300
|
||||||
|
DATALOADER:
|
||||||
|
SAMPLER_TRAIN: "RepeatFactorTrainingSampler"
|
||||||
|
REPEAT_THRESHOLD: 0.001
|
|
@ -0,0 +1,22 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 101
|
||||||
|
ROI_HEADS:
|
||||||
|
NUM_CLASSES: 1203
|
||||||
|
SCORE_THRESH_TEST: 0.0001
|
||||||
|
INPUT:
|
||||||
|
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("lvis_v1_train",)
|
||||||
|
TEST: ("lvis_v1_val",)
|
||||||
|
TEST:
|
||||||
|
DETECTIONS_PER_IMAGE: 300 # LVIS allows up to 300
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (120000, 160000)
|
||||||
|
MAX_ITER: 180000 # 180000 * 16 / 100000 ~ 28.8 epochs
|
||||||
|
DATALOADER:
|
||||||
|
SAMPLER_TRAIN: "RepeatFactorTrainingSampler"
|
||||||
|
REPEAT_THRESHOLD: 0.001
|
|
@ -0,0 +1,22 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
ROI_HEADS:
|
||||||
|
NUM_CLASSES: 1203
|
||||||
|
SCORE_THRESH_TEST: 0.0001
|
||||||
|
INPUT:
|
||||||
|
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("lvis_v1_train",)
|
||||||
|
TEST: ("lvis_v1_val",)
|
||||||
|
TEST:
|
||||||
|
DETECTIONS_PER_IMAGE: 300 # LVIS allows up to 300
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (120000, 160000)
|
||||||
|
MAX_ITER: 180000 # 180000 * 16 / 100000 ~ 28.8 epochs
|
||||||
|
DATALOADER:
|
||||||
|
SAMPLER_TRAIN: "RepeatFactorTrainingSampler"
|
||||||
|
REPEAT_THRESHOLD: 0.001
|
|
@ -0,0 +1,26 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/FAIR/X-101-32x8d.pkl"
|
||||||
|
PIXEL_STD: [57.375, 57.120, 58.395]
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
STRIDE_IN_1X1: False # this is a C2 model
|
||||||
|
NUM_GROUPS: 32
|
||||||
|
WIDTH_PER_GROUP: 8
|
||||||
|
DEPTH: 101
|
||||||
|
ROI_HEADS:
|
||||||
|
NUM_CLASSES: 1203
|
||||||
|
SCORE_THRESH_TEST: 0.0001
|
||||||
|
INPUT:
|
||||||
|
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("lvis_v1_train",)
|
||||||
|
TEST: ("lvis_v1_val",)
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (120000, 160000)
|
||||||
|
MAX_ITER: 180000 # 180000 * 16 / 100000 ~ 28.8 epochs
|
||||||
|
TEST:
|
||||||
|
DETECTIONS_PER_IMAGE: 300 # LVIS allows up to 300
|
||||||
|
DATALOADER:
|
||||||
|
SAMPLER_TRAIN: "RepeatFactorTrainingSampler"
|
||||||
|
REPEAT_THRESHOLD: 0.001
|
|
@ -0,0 +1,12 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
ROI_HEADS:
|
||||||
|
NAME: CascadeROIHeads
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
CLS_AGNOSTIC_BBOX_REG: True
|
||||||
|
RPN:
|
||||||
|
POST_NMS_TOPK_TRAIN: 2000
|
|
@ -0,0 +1,15 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
ROI_HEADS:
|
||||||
|
NAME: CascadeROIHeads
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
CLS_AGNOSTIC_BBOX_REG: True
|
||||||
|
RPN:
|
||||||
|
POST_NMS_TOPK_TRAIN: 2000
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,36 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
MASK_ON: True
|
||||||
|
WEIGHTS: "catalog://ImageNetPretrained/FAIR/X-152-32x8d-IN5k"
|
||||||
|
RESNETS:
|
||||||
|
STRIDE_IN_1X1: False # this is a C2 model
|
||||||
|
NUM_GROUPS: 32
|
||||||
|
WIDTH_PER_GROUP: 8
|
||||||
|
DEPTH: 152
|
||||||
|
DEFORM_ON_PER_STAGE: [False, True, True, True]
|
||||||
|
ROI_HEADS:
|
||||||
|
NAME: "CascadeROIHeads"
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
NAME: "FastRCNNConvFCHead"
|
||||||
|
NUM_CONV: 4
|
||||||
|
NUM_FC: 1
|
||||||
|
NORM: "GN"
|
||||||
|
CLS_AGNOSTIC_BBOX_REG: True
|
||||||
|
ROI_MASK_HEAD:
|
||||||
|
NUM_CONV: 8
|
||||||
|
NORM: "GN"
|
||||||
|
RPN:
|
||||||
|
POST_NMS_TOPK_TRAIN: 2000
|
||||||
|
SOLVER:
|
||||||
|
IMS_PER_BATCH: 128
|
||||||
|
STEPS: (35000, 45000)
|
||||||
|
MAX_ITER: 50000
|
||||||
|
BASE_LR: 0.16
|
||||||
|
INPUT:
|
||||||
|
MIN_SIZE_TRAIN: (640, 864)
|
||||||
|
MIN_SIZE_TRAIN_SAMPLING: "range"
|
||||||
|
MAX_SIZE_TRAIN: 1440
|
||||||
|
CROP:
|
||||||
|
ENABLED: True
|
||||||
|
TEST:
|
||||||
|
EVAL_PERIOD: 2500
|
|
@ -0,0 +1,10 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
CLS_AGNOSTIC_BBOX_REG: True
|
||||||
|
ROI_MASK_HEAD:
|
||||||
|
CLS_AGNOSTIC_MASK: True
|
|
@ -0,0 +1,8 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
DEFORM_ON_PER_STAGE: [False, True, True, True] # on Res3,Res4,Res5
|
||||||
|
DEFORM_MODULATED: False
|
|
@ -0,0 +1,11 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
DEFORM_ON_PER_STAGE: [False, True, True, True] # on Res3,Res4,Res5
|
||||||
|
DEFORM_MODULATED: False
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,21 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "catalog://ImageNetPretrained/FAIR/R-50-GN"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
NORM: "GN"
|
||||||
|
STRIDE_IN_1X1: False
|
||||||
|
FPN:
|
||||||
|
NORM: "GN"
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
NAME: "FastRCNNConvFCHead"
|
||||||
|
NUM_CONV: 4
|
||||||
|
NUM_FC: 1
|
||||||
|
NORM: "GN"
|
||||||
|
ROI_MASK_HEAD:
|
||||||
|
NORM: "GN"
|
||||||
|
SOLVER:
|
||||||
|
# 3x schedule
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
|
@ -0,0 +1,24 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
NORM: "SyncBN"
|
||||||
|
STRIDE_IN_1X1: True
|
||||||
|
FPN:
|
||||||
|
NORM: "SyncBN"
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
NAME: "FastRCNNConvFCHead"
|
||||||
|
NUM_CONV: 4
|
||||||
|
NUM_FC: 1
|
||||||
|
NORM: "SyncBN"
|
||||||
|
ROI_MASK_HEAD:
|
||||||
|
NORM: "SyncBN"
|
||||||
|
SOLVER:
|
||||||
|
# 3x schedule
|
||||||
|
STEPS: (210000, 250000)
|
||||||
|
MAX_ITER: 270000
|
||||||
|
TEST:
|
||||||
|
PRECISE_BN:
|
||||||
|
ENABLED: True
|
|
@ -0,0 +1,152 @@
|
||||||
|
# An example config to train a mmdetection model using detectron2.
|
||||||
|
|
||||||
|
from ..common.data.coco import dataloader
|
||||||
|
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||||
|
from ..common.optim import SGD as optimizer
|
||||||
|
from ..common.train import train
|
||||||
|
from ..common.data.constants import constants
|
||||||
|
|
||||||
|
from detectron2.modeling.mmdet_wrapper import MMDetDetector
|
||||||
|
from detectron2.config import LazyCall as L
|
||||||
|
|
||||||
|
model = L(MMDetDetector)(
|
||||||
|
detector=dict(
|
||||||
|
type="MaskRCNN",
|
||||||
|
pretrained="torchvision://resnet50",
|
||||||
|
backbone=dict(
|
||||||
|
type="ResNet",
|
||||||
|
depth=50,
|
||||||
|
num_stages=4,
|
||||||
|
out_indices=(0, 1, 2, 3),
|
||||||
|
frozen_stages=1,
|
||||||
|
norm_cfg=dict(type="BN", requires_grad=True),
|
||||||
|
norm_eval=True,
|
||||||
|
style="pytorch",
|
||||||
|
),
|
||||||
|
neck=dict(type="FPN", in_channels=[256, 512, 1024, 2048], out_channels=256, num_outs=5),
|
||||||
|
rpn_head=dict(
|
||||||
|
type="RPNHead",
|
||||||
|
in_channels=256,
|
||||||
|
feat_channels=256,
|
||||||
|
anchor_generator=dict(
|
||||||
|
type="AnchorGenerator",
|
||||||
|
scales=[8],
|
||||||
|
ratios=[0.5, 1.0, 2.0],
|
||||||
|
strides=[4, 8, 16, 32, 64],
|
||||||
|
),
|
||||||
|
bbox_coder=dict(
|
||||||
|
type="DeltaXYWHBBoxCoder",
|
||||||
|
target_means=[0.0, 0.0, 0.0, 0.0],
|
||||||
|
target_stds=[1.0, 1.0, 1.0, 1.0],
|
||||||
|
),
|
||||||
|
loss_cls=dict(type="CrossEntropyLoss", use_sigmoid=True, loss_weight=1.0),
|
||||||
|
loss_bbox=dict(type="L1Loss", loss_weight=1.0),
|
||||||
|
),
|
||||||
|
roi_head=dict(
|
||||||
|
type="StandardRoIHead",
|
||||||
|
bbox_roi_extractor=dict(
|
||||||
|
type="SingleRoIExtractor",
|
||||||
|
roi_layer=dict(type="RoIAlign", output_size=7, sampling_ratio=0),
|
||||||
|
out_channels=256,
|
||||||
|
featmap_strides=[4, 8, 16, 32],
|
||||||
|
),
|
||||||
|
bbox_head=dict(
|
||||||
|
type="Shared2FCBBoxHead",
|
||||||
|
in_channels=256,
|
||||||
|
fc_out_channels=1024,
|
||||||
|
roi_feat_size=7,
|
||||||
|
num_classes=80,
|
||||||
|
bbox_coder=dict(
|
||||||
|
type="DeltaXYWHBBoxCoder",
|
||||||
|
target_means=[0.0, 0.0, 0.0, 0.0],
|
||||||
|
target_stds=[0.1, 0.1, 0.2, 0.2],
|
||||||
|
),
|
||||||
|
reg_class_agnostic=False,
|
||||||
|
loss_cls=dict(type="CrossEntropyLoss", use_sigmoid=False, loss_weight=1.0),
|
||||||
|
loss_bbox=dict(type="L1Loss", loss_weight=1.0),
|
||||||
|
),
|
||||||
|
mask_roi_extractor=dict(
|
||||||
|
type="SingleRoIExtractor",
|
||||||
|
roi_layer=dict(type="RoIAlign", output_size=14, sampling_ratio=0),
|
||||||
|
out_channels=256,
|
||||||
|
featmap_strides=[4, 8, 16, 32],
|
||||||
|
),
|
||||||
|
mask_head=dict(
|
||||||
|
type="FCNMaskHead",
|
||||||
|
num_convs=4,
|
||||||
|
in_channels=256,
|
||||||
|
conv_out_channels=256,
|
||||||
|
num_classes=80,
|
||||||
|
loss_mask=dict(type="CrossEntropyLoss", use_mask=True, loss_weight=1.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
# model training and testing settings
|
||||||
|
train_cfg=dict(
|
||||||
|
rpn=dict(
|
||||||
|
assigner=dict(
|
||||||
|
type="MaxIoUAssigner",
|
||||||
|
pos_iou_thr=0.7,
|
||||||
|
neg_iou_thr=0.3,
|
||||||
|
min_pos_iou=0.3,
|
||||||
|
match_low_quality=True,
|
||||||
|
ignore_iof_thr=-1,
|
||||||
|
),
|
||||||
|
sampler=dict(
|
||||||
|
type="RandomSampler",
|
||||||
|
num=256,
|
||||||
|
pos_fraction=0.5,
|
||||||
|
neg_pos_ub=-1,
|
||||||
|
add_gt_as_proposals=False,
|
||||||
|
),
|
||||||
|
allowed_border=-1,
|
||||||
|
pos_weight=-1,
|
||||||
|
debug=False,
|
||||||
|
),
|
||||||
|
rpn_proposal=dict(
|
||||||
|
nms_pre=2000,
|
||||||
|
max_per_img=1000,
|
||||||
|
nms=dict(type="nms", iou_threshold=0.7),
|
||||||
|
min_bbox_size=0,
|
||||||
|
),
|
||||||
|
rcnn=dict(
|
||||||
|
assigner=dict(
|
||||||
|
type="MaxIoUAssigner",
|
||||||
|
pos_iou_thr=0.5,
|
||||||
|
neg_iou_thr=0.5,
|
||||||
|
min_pos_iou=0.5,
|
||||||
|
match_low_quality=True,
|
||||||
|
ignore_iof_thr=-1,
|
||||||
|
),
|
||||||
|
sampler=dict(
|
||||||
|
type="RandomSampler",
|
||||||
|
num=512,
|
||||||
|
pos_fraction=0.25,
|
||||||
|
neg_pos_ub=-1,
|
||||||
|
add_gt_as_proposals=True,
|
||||||
|
),
|
||||||
|
mask_size=28,
|
||||||
|
pos_weight=-1,
|
||||||
|
debug=False,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
test_cfg=dict(
|
||||||
|
rpn=dict(
|
||||||
|
nms_pre=1000,
|
||||||
|
max_per_img=1000,
|
||||||
|
nms=dict(type="nms", iou_threshold=0.7),
|
||||||
|
min_bbox_size=0,
|
||||||
|
),
|
||||||
|
rcnn=dict(
|
||||||
|
score_thr=0.05,
|
||||||
|
nms=dict(type="nms", iou_threshold=0.5),
|
||||||
|
max_per_img=100,
|
||||||
|
mask_thr_binary=0.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
pixel_mean=constants.imagenet_rgb256_mean,
|
||||||
|
pixel_std=constants.imagenet_rgb256_std,
|
||||||
|
)
|
||||||
|
|
||||||
|
dataloader.train.mapper.image_format = "RGB" # torchvision pretrained model
|
||||||
|
train.init_checkpoint = None # pretrained model is loaded inside backbone
|
|
@ -0,0 +1,26 @@
|
||||||
|
# A large PanopticFPN for demo purposes.
|
||||||
|
# Use GN on backbone to support semantic seg.
|
||||||
|
# Use Cascade + Deform Conv to improve localization.
|
||||||
|
_BASE_: "../COCO-PanopticSegmentation/Base-Panoptic-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
WEIGHTS: "catalog://ImageNetPretrained/FAIR/R-101-GN"
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 101
|
||||||
|
NORM: "GN"
|
||||||
|
DEFORM_ON_PER_STAGE: [False, True, True, True]
|
||||||
|
STRIDE_IN_1X1: False
|
||||||
|
FPN:
|
||||||
|
NORM: "GN"
|
||||||
|
ROI_HEADS:
|
||||||
|
NAME: CascadeROIHeads
|
||||||
|
ROI_BOX_HEAD:
|
||||||
|
CLS_AGNOSTIC_BBOX_REG: True
|
||||||
|
ROI_MASK_HEAD:
|
||||||
|
NORM: "GN"
|
||||||
|
RPN:
|
||||||
|
POST_NMS_TOPK_TRAIN: 2000
|
||||||
|
SOLVER:
|
||||||
|
STEPS: (105000, 125000)
|
||||||
|
MAX_ITER: 135000
|
||||||
|
IMS_PER_BATCH: 32
|
||||||
|
BASE_LR: 0.04
|
|
@ -0,0 +1,13 @@
|
||||||
|
_BASE_: "mask_rcnn_R_50_FPN_3x_gn.yaml"
|
||||||
|
MODEL:
|
||||||
|
# Train from random initialization.
|
||||||
|
WEIGHTS: ""
|
||||||
|
# It makes sense to divide by STD when training from scratch
|
||||||
|
# But it seems to make no difference on the results and C2's models didn't do this.
|
||||||
|
# So we keep things consistent with C2.
|
||||||
|
# PIXEL_STD: [57.375, 57.12, 58.395]
|
||||||
|
MASK_ON: True
|
||||||
|
BACKBONE:
|
||||||
|
FREEZE_AT: 0
|
||||||
|
# NOTE: Please refer to Rethinking ImageNet Pre-training https://arxiv.org/abs/1811.08883
|
||||||
|
# to learn what you need for training from scratch.
|
|
@ -0,0 +1,19 @@
|
||||||
|
_BASE_: "mask_rcnn_R_50_FPN_3x_gn.yaml"
|
||||||
|
MODEL:
|
||||||
|
PIXEL_STD: [57.375, 57.12, 58.395]
|
||||||
|
WEIGHTS: ""
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
STRIDE_IN_1X1: False
|
||||||
|
BACKBONE:
|
||||||
|
FREEZE_AT: 0
|
||||||
|
SOLVER:
|
||||||
|
# 9x schedule
|
||||||
|
IMS_PER_BATCH: 64 # 4x the standard
|
||||||
|
STEPS: (187500, 197500) # last 60/4==15k and last 20/4==5k
|
||||||
|
MAX_ITER: 202500 # 90k * 9 / 4
|
||||||
|
BASE_LR: 0.08
|
||||||
|
TEST:
|
||||||
|
EVAL_PERIOD: 2500
|
||||||
|
# NOTE: Please refer to Rethinking ImageNet Pre-training https://arxiv.org/abs/1811.08883
|
||||||
|
# to learn what you need for training from scratch.
|
|
@ -0,0 +1,19 @@
|
||||||
|
_BASE_: "mask_rcnn_R_50_FPN_3x_syncbn.yaml"
|
||||||
|
MODEL:
|
||||||
|
PIXEL_STD: [57.375, 57.12, 58.395]
|
||||||
|
WEIGHTS: ""
|
||||||
|
MASK_ON: True
|
||||||
|
RESNETS:
|
||||||
|
STRIDE_IN_1X1: False
|
||||||
|
BACKBONE:
|
||||||
|
FREEZE_AT: 0
|
||||||
|
SOLVER:
|
||||||
|
# 9x schedule
|
||||||
|
IMS_PER_BATCH: 64 # 4x the standard
|
||||||
|
STEPS: (187500, 197500) # last 60/4==15k and last 20/4==5k
|
||||||
|
MAX_ITER: 202500 # 90k * 9 / 4
|
||||||
|
BASE_LR: 0.08
|
||||||
|
TEST:
|
||||||
|
EVAL_PERIOD: 2500
|
||||||
|
# NOTE: Please refer to Rethinking ImageNet Pre-training https://arxiv.org/abs/1811.08883
|
||||||
|
# to learn what you need for training from scratch.
|
|
@ -0,0 +1,11 @@
|
||||||
|
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||||
|
MODEL:
|
||||||
|
META_ARCHITECTURE: "SemanticSegmentor"
|
||||||
|
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||||
|
RESNETS:
|
||||||
|
DEPTH: 50
|
||||||
|
DATASETS:
|
||||||
|
TRAIN: ("coco_2017_train_panoptic_stuffonly",)
|
||||||
|
TEST: ("coco_2017_val_panoptic_stuffonly",)
|
||||||
|
INPUT:
|
||||||
|
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue